-->

iexplore.exe에 코드인젝션을 수행하는 한글 악성코드 분석

 

악성코드 정보

MD5  f2e936ff1977d123809d167a2a51cdeb
특징  EPS/코드인젝션/드로퍼
다운로드  https://app.any.run/tasks/b4381901-3a3b-4055-8304-f0870a8d3c7c/

 

 

악성코드 상세분석

먼저, SSView로 한글 구조를 살펴봤는데, BinData 스토리지 안에 BIN0003.eps가 있다. 한글 eps코드가 어떻게 악용되어 악성코드가 동작하게 되는지는 나중에 자세하게 공부해서 포스팅해보려 한다.

 

 

eps, zlib 압축 해제

한글의 eps 코드는 zlib로 압축된 상태이므로 압축을 먼저 풀어주어야 한다. 원래는 HwpScan이라는 툴을 사용하면 decompress를 해주는 기능이 있었는데 해당 툴이 유료화가 되었다...ㅠㅠ



관련 포스팅
2021.08.10 - [malware] - 한글 eps, zlib decompress 파이썬 코드



어쨌든, 그래서 파이썬 zlib 모듈을 사용해 아래와 같이 zlib 압축을 풀어주었다.

 

import zlib 

indata = open("BIN0003.eps.stream", "rb").read() 
outdata = zlib.decompress(indata,-15) 

f = open("eps_decom",'wb') 
f.write(outdata) 
f.close()

 

eps, xor 디코딩

압축이 해제된 eps 코드를 확인해보면, [ /ar <~~~~> def ~~~ for(~~~) ] 대충 이런 형태이다. ar은 변수 이름이고, def는 함수 정의, for은 반복문인 것 같다(?) 한글을 처음보는 건 아니라서 대략 ar 변수에 선언되어있는 데이터가 xor로 인코딩되어 있는 상태라는 것은 알고, ar을 뭐랑 xor 해야하지, get 100이면 키 100 짜리를 어디서 가져온다는거지 했는데 그냥 키가 100(0x64)이었다.

 



ar 변수에 들어가 있는 인코딩된 데이터와 키 0x64와 xor 디코딩을 해주는 방법은 2가지가 있다. print문을 추가시킨 다음 직접 실행시키는 방법이 있고 그냥 스크립트를 짜는 방법이다. 일단, 한번 짜놓으면 편할 것 같아서 후자를 선택했다. 첫번째 방법은 나중에 추가하겠다.

 

 

관련포스팅
2021.08.11 - [프로그래밍/파이썬] - [파이썬] 바이트 문자열을 바이트배열(byte array)로 변경

 

data = open("C:\\Users\\leefo\\Desktop\\en_data.txt","rt").read() 
key = 0x64 

arr_data = ' '.join([data[x:x+2] for x in range(0,len(data),2)]) 
b_arr = bytearray.fromhex(arr_data) 

re = '' 
for x in b_arr: 
	tmp = x^key 
	re += chr(tmp) 

f = open("C:\\Users\\leefo\\Desktop\\de_data.txt","w") 
f.write(re) 
f.close()



복호화를 수행해주면, 다시 아래와 같은 코드를 얻는다. label77 변수에 label77에 뭐가 또 잔-뜩 있다ㅎㅎ

 

 

쉘코드 분석

이 데이터는 xor 인코딩된 데이터가 아니라 쉘코드이다. 처음 시작이 nop(9090909090...)인 것으로 유추해볼 수 있다.(압축된 eps -> (압축해제) -> 압축해제된 eps의 ar 변수에 xor 인코딩된 데이터 -> (디코딩) -> label77에 쉘코드)

쉘코드를 분석하는 방법에도 여러가지가 있다. 일단 이 포스팅에서는 쉘코드를 exe 형태로 변경해주는 Shellcode 2 EXE라는 사이트를 사용해보기로 한다.



쉘코드를 실행해보면, 아래와 같이 한번 더 xor 복호화가 실행된다. 아래 jmp 부분에 bp를 걸고 실행시키면 아랫부분에 코드가 풀리면서 복호화된 코드를 확인할 수 있다.

 

 

 

쭉쭉 생각없이 실행시키다 보면.. 아래와 같이 iexplore.exe 문자열을 확인할 수 있는데 해당 프로세스를 실행시킬 확률이 매우 크므로 CreateProcess API에 bp를 걸어준다.

 

 

 

아래와 같이 CreateProcessA API에 bp가 걸렸고 인자값으로 iexplore.exe가 넘어왔다.

 

 

 

iexplore.exe가 자식프로세스로 생성되었다. 회색은 현재 프로세스의 상태가 일시정지라는 뜻이다. 일시정지된 상태라는 것만으로 쉘코드가 iexplore.exe에 코드를 쓰거나 dll을 인젝션할 것이라는 예상을 할 수 있지만, 쉘코드가 엄청 크지는 않기 때문에 일단 f8로 쭉이어서 실행을 해본다.

 

 

 

그러다보면 아래와 같이 코드인젝션을 수행하기 위한 VirtualAllocEx, WriteProcessMemory 등 여러 전형적 함수들을 확인할 수 있다.

 

 

 

각 함수들에 bp를 건 후에 WriteProcessMemory API 인자값을 보면, 0x4014F3은 쓸 코드가 있는 주소이고 0x60000는 코드를 쓸 주소이다.

 



Process Hacker를 통해 iexplore.exe의 0x60000 오프셋을 확인해보면, 현재 메모리가 할당되어 있고 API 실행 후 4014F3에서 확인했던 E8 00 00 00 으로 시작하는 코드가 iexplore.exe의 0x60000에 써진것(코드인젝션)을 확인할 수 있다.

 

 

인젝션된 코드 분석

해당 코드를 다시 분석해보면, 동적분석 중 C2C서버로 의심해볼만한 url이 발견된다. 해당 서버가 닫혀있어 더이상의 동적분석은 불가능하지만, 해당 서버로부터 down.php를 다운받아 추가적인 악성행위를 수행할 것으로 예상할 수 있다.

 

 

 

특징 및 결론 정리

1. eps에 악성코드가 숨겨져 있고, xor로 복호화되어 있음
2. xor 복호화 키값은 0x64로 복호화된 eps 코드에서 다시 쉘코드가 존재
3. 쉘코드는 iexplorer.exe에 코드인젝션을 수행함
4. 해당 코드는 악성 서버(itoassn.mireene.co.kr)에서 down.php를 다운받음

참고자료
[1] https://m.blog.naver.com/kgg1959/222037263345
[2] https://app.any.run/tasks/b4381901-3a3b-4055-8304-f0870a8d3c7c/
[3] https://www.notion.so/2-hwp-cbc93af950d745c48dc15d9b355ac6f4

 

댓글

Designed by JB FACTORY