일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- REVERSEENGINEERING
- Dreamhack
- malware
- pwn
- Pwnable
- ctf
- CAT-Security
- wargame
- Reversing
- pawnable
- SystemHacking
- Today
- Total
tw0n3
한글(.hwp) 악성코드 분석 보고서 본문
이번에는 간단하게 hwp 파일 내에 심어져있는 악성코드를 간단하게 분석해 보려고 한다.
0. 서론
우선 이 hwp파일을 열게되면 비정상적으로 늦게 열린다.
이 hwp파일 내에는 esp가 삽입되어 있고, 해당 스크립트가 악성코드를 실행하게 되는데 이 과정을 거치면서 늦게 열리는 것이다.
이는 프로세스 모니터(그림 2)를 통해 직접적으로 확인 할 수 있다.
1. 행위 분석
1-1. EPS 파일 찾기
우선 한글 파일 내부에 있는 악성코드를 확인하기 위해 과거에는 hwpscan2라는 프로그램을 사용하였다.
하지만 분석 당시 이미 hwpscan2는 유료화 되어 사용이 불가능했기 때문에 조금 불편하지만 돌아가는 방법으로 해보려고 한다.
시작하기에 앞서 hwp파일은 여러개의 stream과 Storage가 압축된 형태로 저장되어있다.
또한 그림과 같은 컨텐츠 들을 zlib형태로 압축하여 bindata에 저장한다.
때문에 .hwp파일을 .zip파일로 변경 후 압축을 해제하면 아래 그림과 같이 나타난다.
언급했듯 BinData에는 한글 파일 내부의 그림파일들이 저장되어있는데, 위에 보이는 BIN0003.eps가 해당 문서의 악성 스크립트이다.
1-2. EPS 추출
EPS파일은 zlib 방식으로 압축되어있다. 이 또한 hwpscan2를 이용하면 한번에 decompress할 수 있지만,
사용이 불가능 하므로 python을 이용하였다.
그림 6을 보면 ESP 스크립트가 추출된 것을 확인 할 수 있다.
위 코드를 간략하게 보자면 ar로 되어있는 부분이 Encoding된 데이터이고, 해당 부분을 100으로 xor하는 것을 알 수 있다.
ghostscript를 사용하여 해당 파일을 복호화하면 다른 ESP Script가 존재하는 것을 확인할 수 있다.
해당 script를 보면 중간부분에 '90909090' 즉 NOP Sled로 시작되는 Shellcode가 존재하는 것을 확인할 수 있다.
이 코드를 exe파일로 변환해 직접적인 분석을 시작해보자.
2. Shellcode 분석
2-1. EXE로 변환
해당 쉘 코드를 exe 파일로 변환하기 위해서 remnux의 shellcode2exe.py를 이용해도 되지만, 이번에는 웹 변환기를 이용했다.
URL : http://sandsprite.com/sc2exe/shellcode_2_exe.php
http://sandsprite.com/sc2exe/shellcode_2_exe.php
A video trainer is now available showing how to use this tool Note: I highly recommend starting analysis with Bytes Only option and scdbg tool DetectType option will auto-detect HTML,JS,Perl,Bash,MZ,SWF,Java & Low Entropy Beta Support for ActionScript form
sandsprite.com
exe파일로 변환 후 x32dbg를 이용해 동적분석을 진행해 보았다.
2-2. EXE 분석
위 부분을 보면 아까 코드와 동일하게 NOP Sled가 존재하는 것을 확인할 수 있고,
선택된 영역에서 xor과정을 통해 다시 코드를 복호화 하는 것을 알 수 있다.
해당 부분을 거쳐 정상적으로 복호화 된 코드로 넘어간 후 좀 더 분석을 진행해보자.
우선 해당 악성코드는 iexplore.exe를 자식 프로세스로 생성하기 때문에 CreateProcessA 함수를 실행할 것이라는 점을 유추 할 수 있다.
해당 부분에 BP를 걸고 진행을 해보게되면 아래와 같이 iexplore.exe가 실행된 후 BP로 인해 중지된 것을 확인할 수 있다.
이제 악성코드는 실행된 프로세스에 Code Injection하려고 할 것이다.
2-3. Code Injection 분석
위 어셈 코드를 보면 0x40107E를 실행 후 해당 결과를 변수에 반복적으로 넣어주는 모습을 확인 할 수 있다.
위 세 곳을 전부 확인해보면 각각 VirtualAllocEx, WriteProcessMemory, CreateRemoteThread를 실행하는 것을 확인할 수 있다.
이것을 보아 CreateProcessA로 생성된후 정지된 iexplore.exe에 WriteProcessMemory로 특정 코드를 Injection해준 후,
CreateRemoteThread로 해당 프로세스를 실질적으로 실행하는 것이라는 점을 유추할 수 있다.
WriteProcessMemory에 BP를 건 후 진행을 해보면 스택에 위와 같이 값이 Push되어있다.
해당 그림을 보면 0x94는 Handle value, 0x190000은 Injection 대상 메모리 주소,
마지막으로 0x4014D3은 작성할 값의 메모리 주소를 나타낸다.
Handle을 통해 첫번째 인자 0x94에는 악성코드가 실행한 자식프로세스를 가르키고 있는것을 확인 할 수 있었고,
두번째 인자는 해당 프로세스의 빈 공간을 가르키고 있는것과, 해당 영역은 쓰기 및 실행 권한을 가지고 있다는 점을 확인 할 수 있다.
마지막으로 세번째 인자에는 0x190000에 쓰여질 shellcode가 작성되어 있는것을 확인 할 수 있었다.
WriteProcessMemory 함수가 실행된 후 해당 영역에 코드가 삽입된 것을 확인 할 수 있다.
이 코드가 CreateRemoteThread 함수를 통해 실행이 될 것이다.
3. 최종 Shellcode 분석
최종적으로 나온 shellcode를 아까와 동일한 방법으로 exe파일로 변환 후, 분석을 해보자.
해당 파일을 cuckoo sandox를 이용해 분석을 해보았다.
cuckoo로 분석해본 결과 InternetOpenUrlA라는 함수를 호출하는 것을 확인할 수 있었다.
하지만 해당 URL은 현재 존재하지 않는 URL로 더이상 분석을 진행할 수 없었다.
이번 분석은 좀 추상적으로 진행되었지만, 추후에 복호화 과정 등을 좀 더 상세히 분석하고,
분석보고서를 통해 해당 URL이 어떤 동작을 했는지까지 공부하여 추가할 예정이다.
4. 참고자료
URL : https://www.notion.so/2-hwp-cbc93af950d745c48dc15d9b355ac6f4