Disclaimer
이 글은 기술적인 악성코드 분석만을 다루고 있습니다. OSINT, 악성코드를 배포하는 사람의 신상, 사이버수사대로의 신고는 진행하지 않습니다. 이 악성코드 분석은 30분이 채 안되는 짧은 시간동안 이뤄졌기 때문에 분석이 정확하지 않을 수 있습니다.
저는 리버싱을 제대로 공부한 적도, 배운적도 없기 때문에 분석이 정확하지 않을 수 있습니다. (역공학 엔지니어가 아닌 모의침투테스터 입니다)
요약
- 네이버 카페 Virus Zero에 악성코드 파일을 알리는 글이 올라옴
- 악성코드는 모든 드라이브 (A~Z) 안의 파일들을 지우는 배치 스크립트(
.bat
)을 리소스로 포함한 PE 파일 - 악성코드 실행시 리소스안의 배치 스크립트를 온-디스크
<user>\Appdata\Local\Temp\<XYZA>.tmp\rdvirus.bat
위치에 저장한 뒤 실행 - 배치 스크립트가 모든 드라이브안의 파일 삭제
bat2EXE
등의 컨버터 툴을 이용해 배치 스크립트를 PE 파일로 컨버트한 악성코드
이름 | Minecraft Pirate VER.exe |
---|---|
md5sum | 8e356f4ae5501f655bf553eec8895d1f |
sha256sum | 4630c5e1e8acc5a196080be13eae2be6a623320f4db6b259bf3b85a071279fcf |
다운로드 주소 | MinecraftPriate[.]Kro.Kr |
서버 아이피 | 139[.]99.89.153 |
CDN 주소 | https[:]//blog.kakaocdn.net/dn/zaOjZ/btq6jjUy18t/0pQxJIw4nkVZ4Im9 I9KZO0/Minecraft%20pirate%20VER.exe?attach=1&knm=tfile.exe |
악성코드 배포 경로
네이버 카페 Virus Total에 악성코드를 발견했다는 글이 올라왔다.
해당 바이러스가 발견됐다는 링크를 따라가보면 카카오 CDN을 이용해 악성코드가 배포되고 있다.
<meta http-equiv="refresh" content="0;url=https[[:]]//blog.kakaocdn.net/dn/zaOjZ/btq6jjUy18t/0pQxJIw4nkVZ4Im9I9KZO0/Minecraft%20pirate%20VER.exe?attach=1&knm=tfile.exe" />
페이로드 자체는 간단한 HTML의 meta태그와 content attribute를 사용해 CDN 링크를 실행한다. 해당 CDN링크에도 나와있듯, 악성코드의 파일 이름은 다음과 같다: Minecraft pirate VER.exe
악성코드 기본 정보
다운 받은 악성코드의 기본 정보를 살펴본다. PEStudio를 사용해 알아본다.
32비트 콘솔 PE 파일에, 벌써 바이러스 토탈의 정보가 많은 것을 볼 수 있다. 시그니쳐로 볼 때 PureBasic 4.X 컴파일러가 사용된 것을 알 수 있다.
또 다른 기본정보를 얻기 위해 strings 를 사용해보면 재밌는 결과가 나온다.
일단 PE 파일안에 배치스크립트가 어떤 형식으로던지 들어가 있는 것 같다. 그 외에도 strings 의 결과를 계속 확인하면 b2e
관련된 함수들이 나온다.
해당 함수들 중 아무거나 구글링을 해보면 바로 Bat2EXE
컨버터와 관련된 웹사이트가 나온다. (https://documentation.help/BAT2EXE/en.html). 악성코드 작성자는 해당 컨버터를 이용해 배치 스크립트를 PE 파일로 컨버팅을 한 것을 알 수 있다.
악성코드 분석
해당 배치 스크립트는 어렵지 않게 찾을 수 있다. PE 파일의 리소스 파일들을 열어보면 배치 스크립트를 발견할 수 있다.
배치스크립트는 rd /s /q <드라이브>
를 계속해서 반복해가며 모든 드라이브 안의 파일들을 재귀적으로 (/s), "조용히" (/q) 지우는 배치스크립트다.
x64dbg 로 디버깅을 시작한다. 먼저 메모리 맵핑으로 가 .code
와 .text
를 확인해 악성코드의 EntryPoint를 찾는다.
또한 String Reference 등을 통해 아까 발견했던 배치스크립트가 리소스 섹션쪽에 저장되어 있는 것을 볼 수 있다.
계속해서 진행하다보면 0x00401395
에서 rdvirus.bat
이라는 문자열을 가져온 뒤 함수를 실행하고 있다. 따라서 위에서 발견한 리소스 섹션 안의 배치 스크립트가 rdvirus.bat
이라는 파일 이름으로 온-디스크에 저장되는 것을 확인할 수 있다.
그렇다면 이 배치스크립트는 어디에 저장되는 것일까? 계속해서 또 진행하다보면 그 답이 보인다.
b2edecompile
을 통해 c:\\Users\\test\\Appdata\\Local\\Temp\\1845.tmp
디렉토리를 생성하고 있다. 당연히 이 디렉토리는 임시 디렉토리로, 4글자 문자열 + .tmp
의 이름을 가진다. 이 디렉토리 안에 rdvirus.bat
파일을 생성하고, 마지막으로 리소스에서 가져온 배치스크립트 내용을 rdvirus.bat
파일에다가 쓰고 있다.
실제로 위 0x00401A16~0x00401A9E
를 지나 디렉토리를 확인해보면 다음과 같이 rdvirus.bat
파일이 온-디스크에 쓰인 것을 볼 수 있다.
이제 배치스크립트도 쓰여졌겠다, 실행할 일만 남았다. 0x00401CAE
주소로 가 해당 함수를 실행하면 다음과 같은 페이로드와 함께 배치스크립트가 실행된다.
cmd.exe /C ~\1845.tmp\rdvirus.bat C:\users\test\Downloads\Minecraft pirate VER.exe
위 0x00401CAE
와 그 주변 함수들도 리버싱을 하고 싶었지만, 컨버터등의 툴의 특성상 리버싱에 시간이 오래걸릴 수 있고, 내가 모든 함수들을 다 리버싱할만한 실력이 안되기 때문에 이만 줄인다.
실제로 샌드박스 안에서 악성코드를 실행하면 모든 파일이 지워지는 것을 확인할 수 있다.
악성코드 유포 방지
피해자의 파일 시스템 드라이브에 있는 파일들을 재귀적으로 삭제하는 것은 명백한 악성코드이며, 이 악성코드는 특정 도메인에서 유포되고 있었다. 악성코드 유포는 정보통신망법을 위반하는 행위이기 때문에 만약 경찰이 신고를 받는다면 배포자 또한 추적해야할 것이다. 해당 악성코드가 배포되고 있는 도메인의 Domain Registrar 회사는 (https://kro.kr 내도메인.한국) 다. 해당 Registrar에 악성코드를 유포하고 있던 도메인 (MinecraftPriate[.]Kro.Kr)을 누가, 언제 구입했는지 문의하는 것이 효율적일 것 같다. 그 외에는 카카오 CDN에 해당 악성코드를 올리고 배포했던 사람이 누구인지 해당 회사에 문의하는 것도 한 방법일 것 같다.
마치며
조악하고 매우 기초적인 악성코드와 기초적인 악성코드 분석이였지만, 나름 재밌었다. 시간을 더 투자하면 좋았겠지만 다른 일로 인해 시간이 부족해 이만 줄인다.
Happy Hacking!