[상세보고서] APT : 악성 한글 파일을 통해 확산되는 악성코드
- 보안 정보/악성코드 분석보고서
- 2016. 1. 19. 11:44
malwares.com 악성코드 분석팀 분석 자료
< 부제 : 진단명을 알면 악성코드가 보인다. >
1. 개요
2. 악성코드 파일 정보
파일명 : 1.hwp_
파일크기 : 205,290 Bytes
특징 : 한글 파일 악성코드, BodyText
SHA-256 : AC772E949CBD46FA276A2A7ED28B431DDCC3CCADF7793C6D93264F97C946BB1A
취약한 버전 : 한글 2005 (세부버전 : 6.5.0.825)
malwares.com 정보 : https://goo.gl/ka2cSA
< Figure 1. 안티바이러스 진단 정보 (malwares.com) >
Figure 1을 보면 안티 바이러스에서는 대부분 BodyText 나 ParaText로 진단하고 있다. 일반적으로 안티 바이러스 진단명 중 HEUR(휴리스틱) , Gen (제너릭) 이나 Agent로 명명되지 않는 다수의 악성코드 진단명은 고유 진단명으로 악성코드의 특징을 반영한다. 그럼 안티 바이러스에서는 위의 악성 한글 파일을 왜 "BodyText" 나 "ParaText" 로 명명했을까?
3. CFBF 파일 포맷
< Figure 2. 한글 파일 내부 구조 >
한글 파일은 기본적으로 CFBF 파일 포맷으로 작성되어 있으며 이 포맷을 따르는 파일간에 데이터(그림, 표등)를 연결하기 위해 OLE 연결 규약을 따른다. CFBF 파일 포맷은 디렉토리/파일 형태를 띄기 때문에 뷰어를 통해 확인하면 위의 그림과 같은 모습을 갖는다. 하지만 CFBF 파일 포맷에서 디렉토리/파일에 대응하는 별도의 명칭을 사용한다.
- 디렉토리 = 스토리지 (Storage)
- 파일 = 스트림 (Stream)
기본적으로 스토리지는 일반적인 디렉토리처럼 그 자체는 별도의 데이터를 갖지 않는다. 따라서 스토리지가 포함하고 있는 스트림에 데이터가 저장되어 있다. 따라서 분석 대상은 데이터를 갖는 스트림이 된다.
Compound File Binary Format (CFBF) : "Compound File" 또는 "Compound Document"로 불리우는 Compound
File Binary Format은 다수의 파일을 저장하기 위한 파일 포맷
- Wikipedia : Compound File Binary Format
- Microsoft Open Specifications Support Team Blog : Exploring the Compound File Binary Format
Object Linking and Embedding (OLE) : 문서와 기타 객체간의 연결, 삽입등을 도와주는 연결 규약
- Wikipedia : Object Linking and Embedding
4. HWP 파일 분석
(1) HWP 파일 전체 구조
< Figure 3. 한글 파일 상세문서 >
한컴에서 제공하고 있는 한글 파일 상세 문서를 보면 Figure 3과 같이 한글 파일 포맷을 정의하고 있다. 이 중 안티 바이러스에서 진단명으로 사용했던 "BodyText"도 확인할 수 있다. 즉, 안티 바이러스에서 한글 파일 포맷내부에서 BodyText 부분을 진단해 악성으로 판단했던 것이다. 따라서 한글 파일 포맷 중 BodyText를 분석 대상으로 삼는다.
그리고 한글 파일 포맷은 기본적으로 CFBF 파일 포맷 중 RootEntry 에서 데이터를 얻으며 포맷의 특성에 따라 레코드 구조 여부, 압축 여부를 결정한다.
* 레코드 구조
< Figure 4. 레코드 구조 >
- 한글 파일 포맷 중 문서 정보 (DocInfo), 본문 (BodyText, Section), 문서 이력 관리 (DocHistory, VersionLog) 는 레코
드 구조로 되어 있다. 레코드 구조는 레코드 헤더와 데이터로 구성되어 있으며 레코드 헤더는 데이터의 크기에 따라
2가지 타입으로 나눌 수 있다.
기본적으로 타입 1의 형태를 띄지만 만약 헤더 다음의 데이터가 4095Bytes 이상인 경우 레코드 헤더 다음 4Bytes를
데이터의 크기로 인식하는 구조이다. 이는 헤더의 Size가 12Bits로 정의되어 있고 12Bits로 표현할 수 있는 데이터 크기
보다 실제 데이터가 더 클 경우 헤더 다음 4Bytes에 별도로 크기를 정의했기 때문이다.
* 압축 / 암호화
- 한글 파일은 압축 및 암호화 기능을 제공하며 이는 한글 에디터에서 설정할 수 있다.
설정된 값은 문서 정보 (DocInfo), 본문(BodyText, Section), 바이너리 데이터 (BinData, BinaryData), 문서 이력 관리
(DocHistory, VersionLog) 등에 적용된다.
< Figure 5. 한글 에디터의 설정 위치 >
< Figure 6. 파일 인식 정보 내 압축/암호화 정보 >
한글 에디터의 설정정보는 한글 파일 구조 중 파일 인식 정보(FileHeader)에 압축/암호화 여부가 저장되어 있다. 따라서
파일 인식정보 내에 저장된 압축/암호화 정보를 바탕으로 설정된 경우 모두 해제해야 스토리지/스트림의 구조를 파악할
수 있다. 압축의 경우 해제시 옵션(-15)을 부여해 zlib로 해제가 가능하지만 암호화의 경우 별도의 암호를 알고 있어야
가능하다.
한컴 : Hwp 파일 상세 문서 보기 [다운로드]
(2) 본문(BodyText/Section) 구조
< Figure 7. 본문 구조 >
한글 문서의 본문은 스토리지인 BodyText와 스트림 Section[숫자]로 구성되어 있으며 문단, 표, 그리기, 텍스트 등의 정보를 저장하고 있다. 또한 압축/암호화가 적용가능한 영역이며 레코드로 구성되어 있다. 따라서 파일 인식 정보 내 압축 여부와 암호 설정 여부를 확인해야 한다. 샘플 파일의 경우 압축은 설정되어 있고 암호는 설정되지 않았다.
따라서 zlib로 압축을 해제한 후 레코드 구조에 맞춰 분석하면 본문 구조를 확인할 수 있다.
< Figure 8. BodyText/Section0 >
BodyText/Section0을 확인해 보면 Figure 8과 같다. 압축 해제된 데이터를 레코드에 따라 분석해 데이터를 추출하고 추출된 데이터에 대해 악성여부를 판단하면 된다. Figure 8의 Section0은 특별히 악성으로 의심되는 부분은 확인되지 않았다.
< Figuire 9. BodyText/Section1 구조 분석>
Figure 9처럼 BodyText/Section0과 다르게 Section1은 16777250 Bytes의 문단 텍스트를 갖고 있다. 물론 큰 데이터가 존재할 수 있는 구조이지만 의심해 볼만 한다. 또한 문단 텍스트는 안티 바이러스에서 사용한 진단명 키워드이기도 하다.
* TagID 67 = 0x43 = HWPTAG_BEGIN + 51 = HWPTAG_PARA_TEXT
따라서 해당 데이터 영역을 확인해 보면 0xEB1EEB1E 나 0x63636363 등의 값이 반복되는 등 ShellCode로 의심스러운 부분이 보인다. 이 부분을 추출해 디스어셈블러로 확인하면 다음과 같은 코드를 확인할 수 있다.
5. 바이너리 분석
< Figure 10. 디스어셈블러로 확인한 일부 코드 >
FIgure 10과 같이 디스어셈블러로 확인해 본 결과 WinExec( )를 호출하는 등의 의미있는 코드가 확인되었다. 이를 통해 본 악성 한글 파일은 한글 파일의 문단 텍스트(HWPTAG_PARA_TEXT)를 읽어들이는 과정에서 한글 에디터가 갖는 취약점을 이용해 위와 같은 코드를 실행하는 형태의 악성 파일로 최종 확인되었으며 이러한 이유로 안티 바이러스에서는 진단명에 BodyText 나 ParaText를 넣은 것이다.
6. 악성코드 실행
< Figure 11. 악성코드 실행에 따른 네트워크 동작 >
취약점에 의해 ShellCode가 동작하면 Figure 11과 같이 외부 서버로 연결을 시도한다. 해당 악성코드는 과거에 발생했던 샘플임에 따라 현재 외부 서버와의 정상적인 통신은 이루어져지 않지만 ShellCode의 동작은 정상적으로 이루어지고 있다.
* 서버 IP : 182.16.9.132
▶ 보고서 원본 PDF 다운로드: https://goo.gl/vq2MwU
* 본 보고서 및 관련 컨텐츠는 저작권의 보호를 받습니다. 재배포, 영리목적의 활용 관련 법률에 의거 처벌 받을 수 있습니다.
'보안 정보 > 악성코드 분석보고서' 카테고리의 다른 글
[상세보고서] 우크라이나 정전사태 관련 악성코드 (update. 2016.03.25) (4) | 2016.02.16 |
---|---|
[상세보고서] 게임 모니터링 프로그램 악성코드 (0) | 2016.01.27 |
[상세보고서] Offline Ransomware (0) | 2015.12.23 |
[상세보고서] W32.Fareit (0) | 2015.11.18 |
[상세보고서] HDRoot v1.0 (0) | 2015.11.16 |
이 글을 공유하기