파일 명 | 구조 | Hash (SHA1) |
한미우호협회 | .hwp | f2e936ff1977d123809d167a2a51cdeb |
*IOC : 침해사고 대응 현황 및 침해 지표
분석할 HWP 문서는 도널드 트럼프 미국 대통령과 김정은 북한 국무위원장이 2019년 2월 27- 28일 베트남 하노이에서 가졌던 2차 북미 정상회담 결과에 대한 특별 좌담회 문서파일이다.
실행 된 문서를 살펴보면 여느 한글 파일과 다름이 없다는 것을 알 수 있다.
어떤 프로세스가 동작 되는지 확인하기 위해 Process Explorer 도구를 사용해 확인한 결과, [그림 2]와 같은 프로세스를 확인할 수 있었다. [그림 2] 좌측 프로세스가 먼저 나타나고 이후에 우측 프로세스가 나타난다.
여기서 3~5초 정도가 지나니 [그림 3]처럼 동작하던 프로세스가 종료되었다.
*일반적인 한글 파일의 프로세스를 확인해보았더니 그림 [3]과 같은 프로세스가 표현되었다.
동작되는 프로세스는 위 표와 같다.
이를 바탕으로 동작된 프로세스를 분석해보자면, gbb.exe와 gswin32c.exe 프로세스 하위에 iexplore.exe가 공통적으로 실행되는 것을 보아 악성행위가 iexplore.exe 프로세스에서 이루어진다는 추측을 할 수 있다.
프로세스를 확인했으니, 한글 문서에 어떤 악성 파일이 포함 되어있는지 확인하기 위해 SSView 도구(MS OLE 기반의 파일 정적 분석)를 사용했다.
SSView에서 파일을 열어보았더니, 위에서 언급한 한글 문서에 악용되는 3가지의 Storage가 있는 것을 확인했다. 그 중 BinData Storage에 취약한 .eps 파일이 있는 것을 확인할 수 있었고, 다른 파일들도 확인해보았지만 단서는 BIN0003.eps 하나인 듯하다.
BIN0003.eps 파일을 추출하기 전에, 해당 파일을 zlib 압축된 상태로 설정해준다. 만약 BIN0003.eps를 zlib 설정을 해주지 않으면 정확한 데이터 값이 나오지 않아, 실습에 어려움이 생긴다.
[그림 6]에 Decoded text를 보면 text가 깨진 것처럼 보이는데 이유는 앞서 언급했던 BinData 안에 데이터들이 zlib로 압축 되어있기 때문이다. 압축이 되어있는 것은 파일 시그니처로도 확인이 가능하다. 그렇다면 이 압축된 것을 풀면 데이터들을 확인할 수 있을 것 같다.
*Zlib 헤더 시그니처 : 78 ~ 뒤에 2자리(01)는 압축률
압축 해제를 위해 Python으로 간단히 코드를 작성해주었다.
import zlib
flist = ["BIN0003.eps.stream"]
for item in flist: #item이 flist에 있을 경우
with open(item, "rb") #원본 파일
unzlibed = zlib.decompress(buf, -15) #버퍼 크기 조정
with open(item+".unzlib", "wb") as f: #압축 해제 한 파일
f.write(unzlibed)
압축 해제가 잘 진행되고 결과 파일이 저장되었다.
Decode text가 Eps 소스코드이다. 이를 복사해 메모장에서 자세히 살펴보자
코드의 형태는 /ar – def – for 이렇게 3가지로 나누어 볼 수 있고 /ar 은 변수명, def는 함수 정 의, for 은 반복문을 의미한다. 이 전체 코드는 xor 연산을 통해 인코딩 된 쉘 코드가 복호화 되 고 실행되는 구조를 지니고 있다. 이 때, /ar < ~ > 안에 있는 내용이 쉘 코드이다.
복호화 된 코드를 알아 내기 위해서는 마지막 부분에 있는 exec를 print로 바꾸고, GhostScript (인터프리터)를 사용해 수정한 코드를 실행해야 한다. exec를 print로 바꾸지 않고 그대로 진행 하면 실행파일의 내용이 쉘 코드로 출력되지 않고 그저 실행만 되기 때문에, 쉘 코드 분석을 제대로 진행할 수 없다.
이렇게 GhostScript를 사용해 수정한 BIN0003.eps.stream.unzlib를 실행해주었더니 [그림 10] 보다 더욱 긴 데이터 값이 출력되었다.
쉘 코드는 9090…으로 시작하는데 [그림 11]에 /label177 <9090… 을 보면 쉘 코드가 정상적으로 작동된 것을 알 수 있다. 하지만 이렇게 cmd 창에서 분석하기에는 어려움이 있기에 x32dbg 도구를 사용해 분석을 진행하고자 한다.
출력된 쉘 코드를 exe파일로 변환하기 위해, Shellcode 2 EXE 사이트를 이용했다.
x32dbg 도구를 사용해 쉘 코드를 실행시켜주었더니 위에서 언급한 9090…이 동작되는 것을 볼 수 있다.
이 쉘 코드는 백신 탐지를 회피하기 위해 암호화되어 있기 때문에 실행하려면 이를 복호화 해야 한다. 이를 위해 실행 중에 여러 단계를 걸쳐 복호화를 진행한다. 따라서 해당 쉘 코드는 XOR 연산을 반복하여 복호화 하고 있는 걸 알 수 있다. 주황색 화살표 영역이 반복되는 구간이다. [그림 14] 왼쪽 사진과 오른쪽 사진에 반복문(주황색 화살표 영역) 밑을 보면 복호화 된 코드가 생기고 있다.
F4를 눌러 반복문을 빠져나와 jmp문을 진입하면 복호화 된 쉘 코드가 동작한다. 동작되는 쉘 코드를 전부 분석하기에는 시간적 한계가 있기 때문에, [그림 2]에서 확인한 하위 프로세스로 동작하는 iexplore.exe가 어떤 구조를 가지는지에 대해 핵심만 분석하려고 한다.
먼저, CreateProcerssA를 찾아 break point로 설정하여 실행이 해당 부분에서 멈추게 한다.
실행이 CreateProcessA에서 멈춘 화면이다. 오른쪽 아래 Stack 창 부분을 보면 iexplore.exe가 하위 프로세스로 동작하기 위해 Internet Explorer 폴더 경로를 인자 값으로 가져온 것을 알 수 있다.
이 때, Process Explorer로 동작되는 프로세스를 확인해보았더니 iexplore.exe가 회색으로 표시되며, 일시 정지되어 있는 것을 알 수 있다. 일시 정지 상태에서 코드 인젝션을 진행하기 위함인 것을 유추할 수 있다.
코드 인젝션은 WriteProcessMemory → CreateRemoteThread 순서로 진행된다. WriteProcess Memory 함수는 iexplorer.exe가 실행할 악성코드를 삽입하고, CreateRemoteThread함수는 삽입한 악성코드를 실행한다.
[그림 19]에서 Run to user code 버튼을 눌러 실행하면 위와 같이 실행된다. 여기서 한 줄 한 줄 코드를 실행하다 보면 call shellcode.4010FD와 call ebx를 찾을 수 있는데 이는 WriteProcess Memory, CreateRemoteThread 함수를 찾기 위한 중요한 단서이다. call shellcode.4010FD 이 코드를 선택하고 Step into 버튼을 눌러 진입하면 호출된 함수를 찾을 수 있다.
call shellcode.40109E가 반복되고 있고 호출한 값을 배열에 저장하고 있는 것을 알 수 있다.
이는 API Resolving 형태이다.
* API Resolving : API를 가져와 어떠한 값에 저장하는 것
WriteProcess Memory, CreateRemoteThread 함수가 정상적으로 호출되고 있다.
오른쪽 아래 Stack 창 2, 3, 4번째 인자를 확인하면 어떤 프로세스의 메모리 주소에 어떤 데이터를 쓰려고 하는지 알 수 있다. 순서대로 각각 프로세스 핸들, 데이터를 사용할 메모리 주소(iexplorer.exe의 메모리 주소), 사용할 데이터(악성코드)를 의미한다.
데이터를 사용할 메모리 주소와 하위 프로세스로 실행되는 iexplore.exe 주소가 동일한 것을 확인할 수 있다.
아직 WriteProcessMemory를 실행하지 않아서 iexplore.exe 메모리 데이터가 00 00 00 … 으로 비어 있다.
WriteProcessMemory를 실행했더니 Stack창 4번째 인자에 해당하는 악성코드가 인젝션 되었다. 만약 여기서 인젝션 하는 코드를 다른 내용의 코드로 수정한다면, 더욱 다양한 공격을 진행할 수 있다.
[그림 25]에서 작성된 데이터 값을 실행하기 위해 CreateRemoteThread를 먼저 break point로 설정해주고 적용하기 위해 Run to user code 버튼을 눌러준다. 그렇다면 일시정지 되었던 iexplore.exe가 실행된 상태로 변할 것이다.
[그림 18]에서 확인했던 프로세스와 달리 iexplore.exe가 실행되고 있다. 인젝션 된 악성코드는 외부 사이트를 연결해 또 다른 악성코드를 다운받는 형태이다.
인젝션 된 악성코드까지 분석을 진행하려 했으나 외부 사이트의 서버가 다운되어 더 이상의 악성코드 분석이 불가능 했다.
궁금한 점은 댓글로 남겨주세요 :D
'Security > Malware' 카테고리의 다른 글
[문서형 악성코드] .pdf 파일 분석 (0) | 2022.11.28 |
---|---|
[문서형 악성코드] 악성 .doc 파일 분석 (0) | 2022.11.28 |