1. 악성코드란 ?
악성코드는 악의 적인 행위를 하는 실행파일 또는 바이너리 파일을 의미합니다. 해커에 의해 사용되는 악성코드는 주로 데이터 수집 및 유출, 암호화, 삭제 등 다양한 비윤리적인 행위를 합니다.
악성코드는 행위 및 목적을 기반으로 트로이목마(Trojans), 원격제어(RAT's), 드롭퍼(Dropper), 랜섬웨어(Ransomware)로 분류할 수 있습니다.
.Trojans : 사람의 심리를 악용하여 정상 프로그램으로 위장해 배포되며 감염된 PC의 데이터 유출 및 파괴, 스파이 활동을 합니다.
.RAT's : 공격자가 원격에서 접근할 수 있도록 허용하고 여러 시스템 명령어를 실행합니다. 키로거와 같은 모듈을 사용해 민감정보 등을 탈취할 수 있습니다.
.Dropper : 백신의 탐지를 우회하거나 분석을 어렵게 하기 위해 특정 목적을 가진 악성코드를 추가적으로 외부로부터 다운로드하거나 생성합니다.
.Ransomware : 시스템 내의 파일을 암호화하고 이를 인질로 삼아 금전적인 보상을 요구합니다.
2. 악성코드 분석
악성코드 분석의 목적은 악성코드의 샘플이나 바이너리로부터 정보를 수집해 시스템을 감염 시키는 방식 및 기능을 이해하고 차후 유사한 공격들로부터 감염을 예방하고 방어하기 위한 방법을 알아내는 것입니다.
주로 수집해야 하는 목표는 다음과 같습니다.
1) 악성코드의 종류 및 기능 정의
- Keylogger, RAT, Ransomware, etc..
2) 악성코드에 감염된 원인과 공격의 대상
- 인터넷 서핑, 피싱 등
- 타겟형, 무작위 다수
3) 공격자와 통신하는 방식
- C&C IP/URL
- Tor
- Backdoor / ReversShell
4) 악성코드 감염 시 발생하는 특징 및 지시자
- 레지스트리 키, 파일명, 탐지를 위한 시그니처 등
악성코드 분석 방법은 크게 정적 분석, 동적 분석, 코드 분석(리버싱), 행위 분석 4가지로 나눌 수 있습니다.
1) 정적 분석(Static Analysis) : 악성코드를 실행하지 않고 메타데이터를 이용해 정보를 수집합니다.
- 문자열(Strings), 패킹 여부, PE 헤더 등
2) 동적 분석(Dinamic Analysis) : 악성코드를 실행하여 기능 및 동작을 분석합니다.
- 디버거
3) 코드 분석(Code Analysis) : 리버싱(Rever Engineering)을 통해 소스 코드, 어셈블리 코드를 분석합니다. 동적과 정적 분석 모두 포함됩니다.
4) 행위 분석(Behavioural analysis) : 악성코드를 실행하여 행위 및 감염 디바이스를 모니터링 합니다.
- 프로세스, 레지스트리, 네트워크 트래픽 등
3. 악성코드 정적 분석
3.1) 파일 타입(시그니처) 분석
파일 타입 확인을 통해 악성코드의 감염 목표 OS와 아키텍처(x86, x64)를 확인할 수 있습니다. 또한 악성코드 배포자가 사용자를 속이기 위해 확장자나 아이콘을 변경하는 경우가 있기 때문에 파일 시그니처를 통해 정확한 파일 타입을 확인하는 것이 중요합니다.
예를 들어 윈도우의 실행 파일은 PE(Portable Executable) 타입으로 exe, dll 등의 확장자를 가진 파일을 의미하며 PE 파일의 특징은 다음과 같습니다.
- PE 파일의 시그니처는 4D 5A의 16진수 값을 가지며 문자열로는 MZ로 표현되고 파일의 첫번 째 2바이트에 존재
- PE 프로그램은 "This program cannot be run in DOS Mode" 문자열을 가짐
- PE 헤더는 16진수 50 45로 시작함
※ 공격자는 패킹을 통해 시그니처 기반 탐지를 우회할 수 있습니다.
파일 시그니처를 확인하기 위한 도구는 HxD, Exeinfo PE, Pestudio, CFF explorer 등이 있습니다.
3.2) 문자열 확인하기
악성코드로부터 의미있는 문자열이나 단어를 추출 할 수 있으며 악성코드의 기능을 유추할 수 있는 정보를 제공합니다. 문자열은 ASCII와 Unicode 포맷으로 되어있고 파일 이름, URL, IP, Registry Key, Windows API 함수 등을 확인할 수 있습니다. 하지만 공격자는 악성코드 분석에 혼란을 주기 위해 의미 없는 문자열을 삽입해 놓기도 합니다.
문자열을 확인하기 위한 도구는 Sysinernals의 Strings, Pestudio, peid, bintext 등이 있습니다.
3.3) 해쉬값 확인하기
해쉬 값은 파일이 갖고 있는 고유한 값이기 때문에 악성코드의 공유, 확인, 분류, 변조 여부 등 다양한 방식으로 사용 됩니다. 주로 사용되는 해싱 알고리즘은 MD5, SHA-1, SHA-256이 있습니다.
또한 바이러스 토탈이나 하이브리드 아날리시스 같은 악성코드 분석 데이터를 제공해주는 사이트에서 특정 악성코드가 이전에 분석되었는지 혹은 백신의 탐지 여부 등을 검색할 때 사용 되기도 합니다.
3.4) PE 헤더 분석하기
※ 아래 Hex 값 이미지와 PEView 이미지는 다른 파일로, 실제 할당된 값이 다릅니다. 필드 값과 의미만 참고 바랍니다.
악성코드의 PE 헤더 분석을 통해 특정 OS에서 실행되기 위해 필요한 모든 정보를 확인할 수 있습니다. 예를 들어 악성코드가 실행되면서 로드 하는 윈도우 API 라이브러리 및 DLL 파일, 파일의 컴파일된 시간, 실행 되는 OS 아키텍처 등이 있으며, PE 헤더 분석을 통해 해당 프로그램의 기능을 유추 할 수 있습니다.
PE 헤더는 아래와 같이 구성되어 있습니다.
1) MZ Header/DOS Header
총 0x40 만큼의 크기로 이루어져 있으며 PE 구조체의 처음 시작 위치 offset에 0x4D 0x5A의 매직 값을 확인할 수 있습니다. 아스키 값으로는 MZ라고 표현됩니다. 0x3C 위치에서 갖는 값을 e_lfanew라고 하고, 리틀 엔디안으로 0x00000080으로 읽습니다. 해당 값은 PE File 헤더가 시작되는 위치를 가리킵니다.
2) DOS Stub
DOS Stub은 호환성을 위해 존재하지만 없어도 프로그램의 실행에는 문제가 없습니다. 대부분의 PE 파일의 경우 "This program cannot be run in DOS mode" 라는 문자열을 갖게 됩니다.
3) PE File Header
MZ Header에서 확인했던 e_lfanew가 가리키는 위치부터 시작하며 아래 예제 이미지에서는 0x80 오프셋에 위치하게 됩니다. PE라는 문자열로 시작하며 16진수 로는 0x50 0x40 0x00 0x00의 값으로 표현됩니다(Signature). PE File Header와 Optional Header를 합하면 0xF8의 크기를 갖습니다.
PE File Header는 PE가 갖고 있는 섹션(Section)의 개수와 옵셔널 헤더(Optional Header)의 크기를 담고 있는데, PE File Header를 기준으로 섹션의 개수(Number of Sections)는 오프셋 0x7에 위치하고 옵셔널 헤더의 크기(Size of Optional Header)는 0x14 위치에 존재합니다. 위 이미지의 경우 섹션의 개수는 0x04로 4개이고, 옵셔널 헤더의 크기는 0x00E0으로 224의 크기를 갖습니다.
4) Optional Header
옵셔널 헤더는 파일 헤더가 끝나는 바로 뒷 부분에 위치하며, 이 크기는 PE File Header에서 확인한 0xE0 값을 갖습니다. 해당 파일의 시작 offset 2바이트를 통해 실행되는 윈도우의 아키텍처(Magic)를 확인할 수 있으며 32bit의 경우 0x01 0x0B의 값을 갖고 64비트의 경우 0x02 0x0B의 값을 갖습니다.
또한 Optional Header의 시작 위치를 기준으로 0x3C 위치에 PE 헤더의 전체 크기에 대한 정보(Size of Headers)를 갖고 있습니다. 위 이미지 기준으로는 0x04 0x00으로 400h, 즉 1024의 크기를 갖고 있습니다.
5) Section Header
Section은 1개 이상 존재하며, .text(code), .data, .rdata, .idata, .edata, .rsrc 등의 값을 갖습니다. 각 섹션 헤더의 크기는 0x28을 갖고 섹션 헤더는 섹션 개수 * 0x28의 크기를 갖습니다.
섹션 헤더 뒤에는 각 섹션들이 붙어 있는데 PE 바디라고 부르며, 각 세션의 크기를 모두 구하려면 각 섹션 헤더의 처음으로부터 0x10만큼 이동한 곳의 값을 확인해야 합니다.(Size of Raw Data)
Optional Header에서 구한 PE 헤더의 전체 크기(위의 경우 400h) 이후 .text 섹션이 시작되며 C800의 크기를 갖습니다.
각 세션이 갖고 있는 데이터는 다음과 같습니다.
보통 .rdata 혹은 .idata 섹션 내에 IAT(IMPORT Address Table)이 존재하며, 해당 테이블을 통해 호출하는 API 함수를 확인할 수 있습니다.
출처 : https://www.youtube.com/channel/UC0ZTPkdxlAKf-V33tqXwi3Q
HackerSploit - YouTube
www.youtube.com
'정보보안 > Malware' 카테고리의 다른 글
[Security] 유용한 사이트 모음 (0) | 2021.12.20 |
---|---|
[Malware] Flare VM을 이용한 악성코드 분석환경 구축 (0) | 2021.07.11 |
[Reversing] 컴포넌트 객체 모델(COM) (0) | 2021.06.02 |
[Reversing] 윈도우 커널 모드와 사용자 모드 (0) | 2021.06.01 |
[Reversing] 윈도우 리버싱(프로세스, 스레드, 뮤턴트, 서비스) 개요 (0) | 2021.05.21 |