1. 엔디언(Endianness)이란?

- 컴퓨터의 메모리와 같은 1차원 공간에 여러 개의 연속된 대상을 배열하는 방법.

- 바이트를 배열하는 방법을 바이트 순서(Byte-Order)라 한다.

- 3가지 방식의 엔디언이 존재함.

Big-Endian - 큰 단위의 바이트가 앞에 나오는 방법
Little-Endian - 작은 단위의 바이트가 앞에 나오는 방법
Middle-Endian - 두 경우에 속하지 않거나 둘 다 지원하는 경우

- 또한 endian을 이해하기 위해서는 LSB와 MSB에 대한 이해도 필요하다.

MSB - Most Significanct Bit (가장 큰 비트 자릿수)
LSB - Least Significanct Bit (가장 작은 비트 자릿수) 

- 0x1234578의 값을 메모리에 각각 Big-endian과 Little-endian으로 저장하는 경우에 대해 확인해보고자 한다.

[캡쳐 1] 0x12345678

2. Big-endian

- 먼저 Big-endian은 우리가 숫자를 쓰는 방법과 같이 큰 단위의 바이트가 앞에 나오는 방법이다.

- 즉, 낮은 주소에 데이터의 높은 바이트(MSB)부터 저장하는 방식

[캡쳐 2] Big-endian

3. Little-endian

- 낮은 주소에 데이터의 낮은 바이트(LSB)부터 저장하는 방식.

[캡쳐 3] Little-endian

4. Big-endian VS Little-endian

- 두 방식은 단지 데이터를 저장할 때의 방식 차이뿐이며, 어느 방식이 더욱 좋다고 단정 할 수 없다.

- 각 방식의 특징을 정리하면 다음과 같으며, 느림, 빠름, 어려움, 쉬움은 상대적인 값이다.

  Big-endian Little-endian
대표 회사 IBM Intel
형 변환 느림 빠름
숫자 비교 빠름 느림
디버깅 빠름 느림
캐리 값 처리 어려움 쉬움
네트워크 바이트오더 X O

5. 네트워크 바이트오더

- 두 호스트간 통신을 할 때 A PC는 Little-endian, B PC는 Big-endian을 사용할 경우 통신이 되지않는 문제가 발생.

- 이러한 문제를 해결하기 위해 네트워크를 통해 데이터를 전달할 때는 통일된 방식을 이용해 전송하기로 약속 했으며, 이것이 "네트워크 바이트오더"임.

- 네트워크 바이트오더에 의해 Big-endian 방식을 사용하도록 규정되어, Little-endian을 사용할 경우 Big-endian으로 변환해야 한다.

6. 내 PC의 Endian 확인하기

[캡쳐 4] http://www.tcpschool.com/c/c_refer_endian

- 실행결과

[캡쳐 5] Little-endian 방식의 저장

 

- 참고

 

[Byte Order 바이트 오더] 빅엔디안(Big Endian)과 리틀엔디안(little endian) - 1편

안녕하세요~~!! 오늘도 시작되는 말랑이몰랑이 블로그 포스팅입니다~ ㅎㅎ 오늘은 네트워크나 통신쪽을 공부한다면 알고 있어야 할 Byte Order 의 빅엔디안과 리틀엔디안에 대한 개념을 완전하게

jhnyang.tistory.com

개요 - 공격자는 웹하드를 이용해 게임이나 게임 크랙 등 불법 프로그램과 함께 악성코드 유포
- 주로 RAT 악성코드를 유표(njRAT, UdpRAT, DDoS IRC Bot 등)
특징 - 최근 웹하드에 게임 설치 파일로 위장해 업로드 된 압축 파일을 통해 XMRig 모네로 코인 마이너를 유포하는 사례가 확인
* 코인 마이너 : 사용자 PC에 설치되어 시스템 리소스를 이용해 가상화폐를 채굴하는 악성코드
- 다운로드한 파일을 압축해제 시 게임 아이콘으로 위장한 raksasi.exe 프로그램이 실행
- 해당 파일은 XMRig 모네로 코인 마이너를 설치하는 악성코드
- 실제 게임 설치파일은 다른 폴더에 존재
- 컴퓨터가 재부팅할 때마다 동일 경로(‘c:\Xcrcure\’ 경로)에 존재하는 config.json 파일을 읽으며 마이닝을 수행

<동작>
- 간단한 구조로 ‘c:\Xcrcure\’ 경로에 다음 파일을 설치
  모네로 채굴 악성코드(xmrig.exe), XMRig 설정 파일(config.json), XMRig 런쳐 악성코드(MsDtsServer.exe)
- 시작 폴더에 XMRig 런쳐 악성코드를 실행하는 바로가기를 ‘NewStartUp.lnk’라는 이름을 생성해 재부팅한 후 모네로 채굴 마이너를 동작시킴.
- Resource 폴더에 존재하는 원본 게임 프로그램을 실행해 정상적으로 게임이 동작하는 것처럼 인식시킴.

대응 - 웹하드, P2P 사이트 등에서 다운한 실행 파일은 각별히 주의
- 유틸리티 및 게임 등의 프로그램은 반드시 공식 홈페이지에서 다운로드를 권장

 

- 보안뉴스

 

[긴급] 웹하드에서 게임설치 파일 위장한 모네로 코인 마이너 악성코드 유포중

국내 사용자를 타깃으로 웹하드를 통해 모네로 코인 마이너 악성코드를 유포하는 정황이 포착됐다. 웹하드 이용시 이용자들의 각별한 주의가 필요하다. 공격자는 일반적으로 웹하드를 이용해

www.boannews.com

 

- 브라우저 즐겨찾기 동기화 기능은 모든 브라우저의 기본 기능

- 공격자들은 해당 기능을 이용해 데이터를 유출하고 있으며, 브러글링(bruggling)이라는 이름을 붙임

  bruggling = browser + smuggle + bookmarks

- 브러글마크(Brugglemark)라는 이름의 파워셸 스크립트를 개념 증명용으로 개발해 함께 공개됨.

  참고 : https://github.com/davidprefer/Brugglemark

 

개요 - 브러글링 기법을 사용하려면 공격자가 이미 피해 시스템에 접근한 상태여야 함
- 즉, 최초 침투에 성공한 후 미리 훔쳐두거나 크래킹한 크리덴셜을 통해 로그인 및 즐겨찾기에 접근
- 대부분의 호스트 기반 혹은 네트워크 기반 탐지 시스템 우회가능
  => 즐겨찾기 기능을 이용하므로 대부분의 탐지 시스템에는 정상적인 브라우저 동기화 트래픽으로 보이기 때문
방법 - 먼저 공격자는 내부에 민감한 정보가 어디에 저장되어 있는지 확인
- 민감한 정보를 찾아낸 공격자는 base64 알고리즘 등으로 변경 후 적당한 길이로 분할 및 즐겨찾기 이름으로 등록
- 즐겨찾기 정보를 다른 장비에서 동기화시켜 민감한 정보를 탈취함
증명 - 한 기업의 연구원이 이를 실험해 보았으며 아래 내용 및 해당 공격이 가능하다는 것을 증명
- 대부분의 브라우저들이 상당히 많은 종류의 문자와 숫자로 한 개의 즐겨찾기 생성가능_즐겨찾기 이름 지정에 있어 한계가 거의 없다고 할 만한 수준 (책 한권을 브러글링 기법으로 빼돌리는데 성공함)
- 한번에 동기화가 가능한 즐겨찾기의 갯수는 약 20만개

 

- 보안뉴스

 

브라우저 즐겨찾기 동기화, 사이버 공격에 악용될 수 있다

브라우저 즐겨찾기 목록을 동기화 하는 건 현존하는 거의 모든 인터넷 브라우저의 기본 기능이다. 이 기능 덕분에 인터넷 사용자들이 다양한 장비에서 편리하게 인터넷 서핑을 할 수 있게 된다.

www.boannews.com

 

[캡쳐 1] PE 파일 구조

1. PE Header

- PE view를 활용해 메모장.exe(PE 파일) 구조 확인

- Visual Studio에서 #include <winnt.h>를 입력->winnt.h에 마우스 우클릭->문서로이동을 통해 구조체를 확인할 수 있다.

1.1) DOS Header

- DOS 파일에 대한 호환성을 고려하여 만들어 졌으며, 총 64Byte 크기를 가짐.

[캡쳐 2] DOS Header

- 구조체 : IMAGE_DOS_HEADER

typedef struct _IMAGE_DOS_HEADER {      // DOS .EXE header
    WORD   e_magic;                     // Magic number
    WORD   e_cblp;                      // Bytes on last page of file
    WORD   e_cp;                        // Pages in file
    WORD   e_crlc;                      // Relocations
    WORD   e_cparhdr;                   // Size of header in paragraphs
    WORD   e_minalloc;                  // Minimum extra paragraphs needed
    WORD   e_maxalloc;                  // Maximum extra paragraphs needed
    WORD   e_ss;                        // Initial (relative) SS value
    WORD   e_sp;                        // Initial SP value
    WORD   e_csum;                      // Checksum
    WORD   e_ip;                        // Initial IP value
    WORD   e_cs;                        // Initial (relative) CS value
    WORD   e_lfarlc;                    // File address of relocation table
    WORD   e_ovno;                      // Overlay number
    WORD   e_res[4];                    // Reserved words
    WORD   e_oemid;                     // OEM identifier (for e_oeminfo)
    WORD   e_oeminfo;                   // OEM information; e_oemid specific
    WORD   e_res2[10];                  // Reserved words
    LONG   e_lfanew;                    // File address of new exe header
  } IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;

e_magic : DOS signature(매직넘버)로 PE파일을 나타내는 첫 2바이트, MZ(5A4D로 고정 값)

                      각 파일은 고유의 signature(매직넘버)를 가짐.

[캡쳐 3] e_magic 값 5A4D(=MZ)

② e_lfanew : IMAGE_NT_HEADER의 시작 Offset 값을 가짐.

- e_flanew에 설정된 주소를 확인하면 PE로 시작하는 것을 확인할 수 있으며, 한번 더 시작점을 알려준다.

[캡쳐 4] e_lfanew 값

1.2) DOS Stub

- 구조체 형태가 아니며, DOS 환경에서 돌아갈 명령어가 16Bit 형태로, 가변 크기를 가짐.

- 일종의 옵션으로 없어도 파일 실행에 문제 없음.

- 32Bit 윈도우 플랫폼에서 실행되도록 만들어진 PE파일이 16Bit DOS 환경에서 실행되려 하는것을 방지하기위해 만들어짐.

[캡쳐 5] DOS Stub

1.3) NT Header

- 파일 실행에 필요한 정보가 저장됨.

- DOS Header의 e_flanew 값이 NT Header를 가리킴

- 구조체에는 총 3개의 멤버로 구성

- 구조체 : IMAGE_NT_HEADERS

typedef struct _IMAGE_NT_HEADERS64 {
    DWORD Signature;
    IMAGE_FILE_HEADER FileHeader;
    IMAGE_OPTIONAL_HEADER64 OptionalHeader;
} IMAGE_NT_HEADERS64, *PIMAGE_NT_HEADERS64;

1.3.1) Signature

- NT header구조체의 시작을 판별하실 수 있으며, ASCII 값으로 PE(0x00004550)를 나타낸다.

[캡쳐 6]&nbsp;Signature

1.3.2) FileHeader

- 파일의 개략적인 속성을 나타낸다.

- 구조체 : IMAGE_FILE_HEADER

typedef struct _IMAGE_FILE_HEADER {
    WORD    Machine;
    WORD    NumberOfSections;
    DWORD   TimeDateStamp;
    DWORD   PointerToSymbolTable;
    DWORD   NumberOfSymbols;
    WORD    SizeOfOptionalHeader;
    WORD    Characteristics;
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;

Machine : 이 파일이 어떤 CPU에서 동작할 수 있는지, 즉 실행될 수 있는 CPU의 타입을 나타냄

                       IA-32 호환 4C01, IA-64 호환 0020, AMD64 호환 시 6486

NumberOfSections : 파일에 존재하는 색션의 개수(파일에 따라 다름)를 나타내며, 0보다 커야함

                                        정의된 색션 개수 > 실제 색션 개수 : 에러 / 정의된 색션 개수 < 실제 색션 개수 : 정상 실행

③ TimeDateStamp : 해당 파일이 만들어진 시각, 즉 이 파일이 빌드된 날짜가 기록됨. 변조가능(신뢰할 수 있는 값 아님)

④ PointerToSymbolTable : COFF 파일의 심볼 테이블의 오프셋을 나타냄. 없는 경우가 대부분임

⑤ NumberOfSymbols : COFF 심벌 테이블 내에서의 심벌의 수를 나타냄. 없는 경우가 대부분임

SizeOfOptionalHeader : IMAGE_NT_HEADER 구조체 내 IMAGE_OPTIONAL_HEADER 구조체의 크기에 대한 정보

Characteristics : 파일의 속성을 나타내는 값으로, 실행 파일인지 DLL 파일인지 등의 정보들이 OR 연산을 통해 설정

                                  아래 사진을 보아 메모장은 executable 형식이며, 32bit 라는 것을 알 수 있다.

[캡쳐 7] IMAGE_FILE_HEADER 값

1.3.3) OptionalHeader

- 파일 실행에 필요한 주요 정보들을 저장한다.

- 구조체 : IMAGE_OPTIONAL_HEADER

typedef struct _IMAGE_OPTIONAL_HEADER {
    //
    // Standard fields.
    //

    WORD    Magic;
    BYTE    MajorLinkerVersion;
    BYTE    MinorLinkerVersion;
    DWORD   SizeOfCode;
    DWORD   SizeOfInitializedData;
    DWORD   SizeOfUninitializedData;
    DWORD   AddressOfEntryPoint;
    DWORD   BaseOfCode;
    DWORD   BaseOfData;

    //
    // NT additional fields.
    //

    DWORD   ImageBase;
    DWORD   SectionAlignment;
    DWORD   FileAlignment;
    WORD    MajorOperatingSystemVersion;
    WORD    MinorOperatingSystemVersion;
    WORD    MajorImageVersion;
    WORD    MinorImageVersion;
    WORD    MajorSubsystemVersion;
    WORD    MinorSubsystemVersion;
    DWORD   Win32VersionValue;
    DWORD   SizeOfImage;
    DWORD   SizeOfHeaders;
    DWORD   CheckSum;
    WORD    Subsystem;
    WORD    DllCharacteristics;
    DWORD   SizeOfStackReserve;
    DWORD   SizeOfStackCommit;
    DWORD   SizeOfHeapReserve;
    DWORD   SizeOfHeapCommit;
    DWORD   LoaderFlags;
    DWORD   NumberOfRvaAndSizes;
    IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;

 Magic : 실행하는 PE파일의 구조체가 32bit(0B01)인지, 64bit(0B02)인지 알려주는 부분

SizeOfCode : 코드영역(.text)의 크기

AddressOfEntryPoint : 프로그램의 실제 시작주소로, ImageBase 값에 이 값을 더해 시작 지점을 설정

ImageBase : PE 파일이 메모리에 로드되는 시작 주소. EXE의 경우 00400000, DLL의 경우 00000001

SectionAlignment : 메모리에서 섹션의 최소 단위, 각 섹션은 반드시 이값의 배수

FileAlignment : 파일에서 섹션의 최소 단위, 각 섹션은 반드시 이값의 배수

SizeOfImage : 메모리에 로딩될 때 가상 메모리에서 PE Image가 차지하는 크기, 즉 PE 파일의 전체 크기

SizeOfHeaders : 모든 PE Header의 크기

Subsystem : 동작환경을 정의. sys 파일 1, GUI 파일 2, CLI 파일 3의 값을 가짐

NumberOfRvaAndSizes : Data Directory의 구조체 멤버 개수

DataDirectory : IMAGE_DATA_DIRECTORY구조체의 배열로써 디렉토리별로 각각의 정보를 담음

- Export Directory : DLL등의 파일에서 외부에 함수를 공개하기 위한 정보들을 가짐
- Import Directory : 프로그램 실행을 위해 Import하는 DLL 이름과 사용할 함수 정보가 담긴 INT주소와 IAT주소 같은 정보가 담김
- TLS Directory : 스레드 지역 저장소 초기화 섹션에 대한 포인터
- IAT Directory : IAT의 시작번지를 가리킴

[캡쳐 8] IMAGE_OPTIONAL_HEADER 값

1.4) Section Header

- Section의 속성을 정의한 헤더

- Section 유형

Code .text 프로그램 실행 코드를 담고 있는 섹션
Data .data 일고 쓰기가 가능한 테이터 섹션으로 초기화된 전역변수와 정적 변수 등이 위치
.rdata 읽기 전용 데이터 섹션으로 상수형 변수, 문자열 상수 등이 위치
.bss 초기화되지 않은 전역변수로, 초기화 시 .data 영역으로 이동
Import API .idata Import 할 DLL과 API에 대한 정보를 담고 있는 섹션으로 IAT 정보가 저장
.diata Delay-Loading Import DLL 정보 (프로그램 실행 후 DLL 사용시에만 연결하며, 릴리즈 모드 시 다른 섹션에 병합)
Expoit API .edata Export할 API 정보를 담고 있는 섹션 (주로 DLL에서 사용되며 .text 또는 .rdata에 병합)으로 EAT 정보가 저장
Resource .rsrc 리소스 관련 데이터를 담고 있는 섹션 (아이콘, 커서 등)
재배치 정보 .reloc 기본 재배치 정보를 담고 있는 섹션 (주로 DLL에서 사용)
TLS .tls 스레드 지역 저장소
Debugging .debug$p 미리 컴파일된 헤더 사용시에만 존재

 

참고 : 

 

[악성코드분석] PE (portable Executable) 기초 개념잡기

PE포맷 이란? 윈도우 운영체제에서 사용되는 실행파일, DLL Object코드, FON 폰트파일 등을 위한 파일형식입니다. OE파일은 윈도우 로더가 실행가능한 코드를 관리하는데 필요한 정보를 캡슐화한 데

rednooby.tistory.com

 

윈도우 실행파일 구조(PE파일)

1. 윈도우 실행파일(PE파일) 개요 1.1 PE파일이란? PE(Portable Executable)파일은 윈도우 실행파일이라고 부르며 윈도우OS에서 사용되는 실행파일형식을 의미하며 UNIX의 COFF(Common Object File Format)을 기반..

rninche01.tistory.com

 

악성코드 분석- 기초 정적 분석, PE 파일

윈도우에서 가장 많이 악성코드로 제작되어 배포되는 PE 파일에 대해 알아보겠습니다. PE(Portable Excutable)파일 - win32 기본 파일형식 - exe, scr, sys, dll ... PE파일의 실행과정은 다음과 같습니다. 1. PE..

hxxyxxn-1238.tistory.com

 

PE 파일 포맷의 이해

※ 주의사항 아래 공격 코드는 연구 목적으로 작성된 것이며, 허가 받지 않은 공간에서는 테스트를 절대 금지합니다. 악의 적인 목적으로 이용할 시 발생할 수 있는 법적 책임은 자신한테 있습

unabated.tistory.com

 

[Analysis] PE(Portable Executable) 파일 포맷 공부

드디어 PE(Portable Executable) 파일 포맷 포스팅을 하고자한다. 내용이 길것으로 예상되나 중요한 파트이므로 천천히 짚고 넘어가자. 1. PE 포맷? PE 포맷이란 Portable Executable 약자로 윈도우 운영체제에

saynot.tistory.com

 

PE(Portable Executable) 구조

Win32의 기본적인 파일 형식 PE(Portable Executable) 구조 오늘은 PE(Portable Executable)에 대해서 알아보도록 하겠습니다. PE라는 말을 들어보신 적이 있나요? 아마 이 글을 보고 계시는 분들 중에 리버싱 경

unabated.tistory.com

 

PE 구조 이해하기 - IMAGE_FILE_HEADER 구조

windows 시스템 실행파일의 구조와 원리 책 내용을 요약 및 정리 하는 포스팅이에요. PE파일의 PE 시그니처 다음에 이어지는 IMAGE_FILE_HEADER에 대한 내용을 알아볼 거에요. IMAGE_FILE_HEADER 구조체IMAGE_FIL

777bareman777.github.io

 

[프로그래밍 일반] PE 파일 분석 - 헤더분석

원문 : kkamagui의 프로그래밍 작업실 http://kkamagui.springnote.com/pages/401262 개요  윈도우 시스템 프로그래밍한다는 사람치고 PE 파일에 대해서 모르는 사람은 아마 거의 없을 것이다. 윈도우 실행 파일

clansim.tistory.com

 

PE파일 구조

PE파일 분석 도구 :  실행파일(Executable File)이란 명령(Operation Codes)에 따라 지시된 작업을 수행하도록 하는 파일을 말한다. 이 파일은 실행 코드, 전역 데이터, Import/Export 함수정보, 리소스 데이터

moaimoai.tistory.com

'악성코드 > 기본' 카테고리의 다른 글

PE 파일 #1 개요 및 구조  (0) 2022.08.02
Malware #1  (0) 2022.07.11

1. PE(Portable Executable) 파일 개요

1.1) PE(Portable Executable) 파일 이란?

[캡쳐 1] https://ko.wikipedia.org/wiki/PE_%ED%8F%AC%EB%A7%B7

- PE(Portable Executable) 파일이란 윈도우 실행파일이며, 윈도우에서 사용되는 실행 가능한 파일 형식이다.

- 유닉스 실행파일 형식인 COFF(CommonObject File Format)을 기반으로 만들어졌다.

- 하나의 실행파일을 다양한 운영체제에서 실행할 수 있다는 의미로 "이식 가능한 실행파일"로 이름이 붙었다.

- 윈도우 환경에 따라 32bit 환경에서는 PE32, 64bit 환경에서는 PE32+ 또는 PE+로 불린다.

- 실행되기 위한 모든 정보와 어느 메모리주소에 파일이 로딩되는지 알 수 있다.

1.2) PE 파일 종류

- 실행 계열 : EXE, SCR
- 드라이버 계열 : SYS, VXD
- 라이브러리 계열 : DLL, OCX, CPL, DRV
- 오브젝트 파일 계열 : OBJ

2. PE 파일 구조

[캡쳐 2] PE 파일 구조

- PE Header에 각 정보들이 구조체 형식으로 저장되어 있다.

- 파일에서는 Offset, Memory에서는 VA(Virtual Address)로 위치를 표현한다.

  Offset : 파일의 첫 바이트부터 거리

  VA(Virtual Address, 절대주소) : 프로세스 가상 메모리의 절대주소

  RVA(Relative Virtual Address, 상대주소) : 기준 위치(ImageBase)부터의 상대주소

  VA = RVA + ImageBase

- RVA(상대주소)를 사용하는 이유는 PE Header에 많은 정보는 RVA 형태로 되어있으며, PE 파일(주로 DLL)이 메모리에 로딩될 때 해당 위치에 다른 PE 파일이 로딩되어 있을 수 있어, Relocation 과정을 통해 빈 공간에 로딩되어야 한다.

만약 VA(절대주소)로 되어있다면 정상적인 액세스가 이루어지지 않지만, RVA(가상주소)로 되어있다면 Relocation이 발생하여도 ImageBase에 대한 상대주소는 변하지 않기에 정상적인 액세스가 가능하다.

2-1) NULL Padding

- 헤더의 끝과 각 섹션 값 사이에 NULL 값이 존재한다.

- 파일 또는 메모리에서 섹션의 시작위치는 각각 최소 기본단위의 배수에 해당하는 위치여야하므로 Null로 채우는 것이다.

 

참고 : 

 

[악성코드분석] PE (portable Executable) 기초 개념잡기

PE포맷 이란? 윈도우 운영체제에서 사용되는 실행파일, DLL Object코드, FON 폰트파일 등을 위한 파일형식입니다. OE파일은 윈도우 로더가 실행가능한 코드를 관리하는데 필요한 정보를 캡슐화한 데

rednooby.tistory.com

'악성코드 > 기본' 카테고리의 다른 글

PE 파일 #2 헤더  (0) 2022.08.02
Malware #1  (0) 2022.07.11

- 해당 페이지는 message를 클릭하면 test가 출력된다.

[캡쳐 1] test

- URL 확인 시 message 파라미터의 값을 출력하는 형식이며, 이를 통해 GET 메소드를 이용한 방식이란 것을 알 수 있다.

[캡쳐 2] GET 방식 데이터 전송

- message 파라미터의 값을 다른 값으로 변경하여 실행할 경우, 변경된 값이 출력되는 것을 확인할 수 있다.

[캡쳐 3] ggonmer

- PHP에는 eval()이나 exec() 함수를 사용한 경우 세미콜론(;)을 사용해 다른 함수를 실행할 수 있는 취약점이 있다.

exec() 외부프로그램을 실행시켜주는 함수로 쉘 명령어들을 사용할 수 있게 해준다.
eval() 문자열을 PHP 코드로 실행해 준다.
system() 문자열 형태의 명령어를 인자값으로 입력받아 실행시켜 준다.
shell_exec() 문자열 형태의 명령어를 인자값으로 입력받아 실행시켜 준다.

- 해당 페이지에 php 취약점이 존재하는지 유무를 판별하기 위해 세미콜론(;)을 사용해 system()함수를 실행시켜 본다.

[캡쳐 4] system('ls -al')

- 실행 결과 ls -al 명령어의 결과로 파일 목록과 내용을 확인할 수 있다.

[캡쳐 5] cat /etc/passwd

- 사용자 계정 정보를 담고있는 파일인 /etc/passwd의 내용 역시 볼 수 있다.

[캡쳐 6] cat /etc/shadow

- /etc/shadow 파일의 내용은 출력되지 않는 것으로 보아 현재 웹 권한만 가지고 있고, 상위 권한의 사용자만 접근 가능한 파일의 경우 출력되지 않는 것을 알 수 있다. 

- nc 명령을 이용해 공격자의 PC로 연결도 가능하다..

-n 옵션 호스트 네임과 포트를 숫자로 출력
-l 옵션 Listen 모드로 Port 오픈
-v 옵션 더 많은 정보를 볼 수 있음
-p 옵션 포트를 지정

① 먼저 공격자가 NC 명령을 이용해 리스닝 포트를 오픈 후 대기한다.

-e 옵션 연결 생성 뒤 실행 프로그램 지정

② Bee-Box에서 해당 명령을 실행한다.

③ Bee-Box에서 Kali로 연결이 생성 및 공격자의 shell을 획득.

1. PHPUnit이란?

- PHP 프로그래밍 언어를 위한 유닛 테스트 프레임워크
- SUnit과 함께 기원한 유닛 테스트 프레임워크를 위한 XUnit 아키텍처의 인스턴스이며 JUnit과 함께 대중화
- PHPUnit은 Sebastian Bergmann이 개발하였으며 개발 자체는 깃허브에서 호스팅되고 있음

 

2. CVE-2017-9841

[캡쳐 1] https://nvd.nist.gov/vuln/detail/CVE-2017-9841 번역

- 해당 취약점은 /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php에 대한 적절한 인증과정이 없어 발생되는 취약점

 

3. 취약점 분석

- 4.8.28 이전의 버전 및 5.6.3 이전의 5.x PHPUnit에 공격이 가능하다.
- eval-stdin.php에 해당 코드에 의해 취약점이 발생한 것으로 판단된다. php://input 함수를 이용해 원시 데이터를 읽은 후 eval 함수로 해당 명령을 실행하기 때문이다.

[캡쳐 2] 취약점 유발 코드
[캡처 3] 취약점 테스트

- 공격자들은 [캡쳐 3]의 php 코드를 통하여 먼저 취약점이 존재하는지 테스트 후 [캡쳐 4] 방식 등으로 공격을 진행.

[캡쳐 4] RawData

4. 대응방안

1. 최신 버전의 패치를 적용.

[캡쳐 5] 취약점이 패치된 버전의 소스코드

2. 보안 장비에 해당 패턴을 등록하여 탐지 및 차단
( ex) /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php 경로로 요청을 탐지 및 차단 할 수 있도록 룰 설정)
3. .htaccess 파일을 /vendor 폴더에 위치 시킨 후 관련 설정을 등록.
* .htacccess 파일이란 "hypertext access"의 약자로 디렉토리에 대한 접근 허용 여부 등 설정 옵션을 제공한다.

<참고>

 

bWAPP PHP Code Injection

- 해당 페이지는 message를 클릭하면 test가 출력된다. - URL 확인 시 message 파라미터의 값을 출력하는 형식이며, 이를 통해 GET 메소드를 이용한 방식이란 것을 알 수 있다. - message 파라미터의 값을 다

ggonmerr.tistory.com

1. IPS (Intrusion Prevention System) 이란?

- 침입 방지 시스템 (IDS + 차단 기능)

- 외부망에서 내부망으로 유입되는 악성패킷에 대하여 탐지 및 방어를 능동적으로 수행하며, 실시간으로 탐지/방어하는 솔루션

2. 동작방식

[캡쳐 1] https://wonin.tistory.com/356

① 트래픽 유입

② 무결성 검사 필터 (1차)

③ 유해 트래픽 검사 필터 (2차)

④ ②, ③에 의해 필터링 된 트래픽에 대해 "정책"과 비교

⑤ 정상 트래픽은 통과 시키며, 정책과 일치하는 트래픽이 있을 경우 차단 및 로깅

3. 종류

데이터 수집 방식 네트워크 - 네트워크 기반 IPS (NIPS)
- 네트워크 구간에 설치
호스트  - 호스트 기반 IPS (HIPS)
- 호스트(서버)에 직접 설치
탐지 방식 오용탐지 - 패턴 기반 탐지
이상탐지 - 정상 프로파일의 범위를 벗어날 경우 탐지

4. 구성 방식

- 대부분 In-Line 방식으로 방화벽 뒤에 설치하나 협의와 회의를 통해 내부 환경에 맞는 위치에 설치

5. 방화벽, IDS, IPS 비교

구분 FireWall IDS IPS
목적 접근 통제 및 인가 침입 여부 감지 침입 이전의 방지
패킷 차단  O X O
패킷 내용 분석 X O O
오용 탐지 X O O
오용 차단 X X O
이상 탐지 X O O
이상 차단 X X O
장점 엄격한 접근 통제
인가된 트래픽 허용
실시간 탐지
사후분석 대응기술
실시간 즉각 대응
세션 기반 탐지 가능
단점 내부자 공격 취약
네트워크 병목현상
션형 패턴에 대한 탐지 어려움 오탐 발생 가능
장비 고가

 

'보안 장비 > 기본' 카테고리의 다른 글

DRM과 DLP  (0) 2022.11.21
이중화구성  (0) 2022.08.19
IDS #1  (0) 2022.07.27
방화벽 #1  (0) 2022.07.08

+ Recent posts