1. 개요


 Coreflood는 미국에서 발생한 해킹사건에 쓰인 악성코드로 키보드의 동작을 기록하여 PC 사용자의 웹사이트 로그인이나 ID, 암호, 개인의 금융정보까지 빼낼 수 있는 프로그램이다.

 러시아 해커 그룹에 의해 만들어졌으며 2010년에 출시된 트로이 목마 및 Botnet으로 많은 금융기관과 대학, 그리고 병원과 정부 등도 감염되는 등의 막대한 피해를 입힌 악성코드이다.

 해당 문서에서는 Rekall과 Volatility를 통하여 Coreflood에 감염된 PC의 메모리를 통해 분석을 진행할 것이며 분석 대상 환경은 Windows XP SP2 x86이다.


  

2.분석


 해당 메모리를 Rekall을 통해 이미지를 열고 어떤 프로세스가 동작 중인지를 확인하며 이를 통해 이름이나 생성 및 종료 시간이 수상한 프로세스가 있는지를 확인해볼 것이다. 여기에는 은닉된 프로세스가 있을 수 있으므로 pslist가 아닌 psscan을 사용하였다.

그림 1. Rekall – psscan

 그림 1과 같이 몇 개의 의심되는 프로세스를 표시해보았다. 우선 실행된 시간이 2010-08-15인 프로세스에 초점을 맞추어 위 2개의 프로세스가 해당이 되며 cmd.exe의 경우 Vmware에 의한 것으로 해당 분석과는 상관이 없는 내용이므로 포함하지 않았다.

 현재 어떤 프로세스가 동작 중이었는지에 대해 확인을 했으므로 이제 사용자가 어떠한 프로그램을 실행시킨 것인지 확인을 해야 한다. 이에 대해서는 사용자가 응용프로그램을 실행시켰을 경우 레지스트리에 기록되는 UserAssist에 대하여 아래의 그림을 통해 확인을 해보자.

그림 2. Rekall – userassist

 Userassist엔 2010-08-15 18:10:58에 flashload.exe를 실행했다는 것을 확인할 수가 있으며, 그 다음엔 iexplore.exe가 실행되었다는 것을 확인할 수가 있다. 그림 1과 같이 실행 중인 프로세스에선 해당 이름을 확인할 수가 없으므로 해당 프로그램에 대하여 찾아보자.

 

그림 3. Volatility – MFTparser – logon.scr.pf

 이전에 의심스러웠던 logon.scr이 flashload.exe가 실행된 후 10분 가량 후에 실행되었다는 것을 확인할 수가 있다. 따라서 해당 프로세스가 아직 악의적인 프로세스인지 아닌지에 대하여 단정 짓기는 힘들다. 그렇다면 다른 방법으로 접근해보자..

그림 4. Rekall – messagehooks

 Messagehooks Plugin은 모든 데스크탑을 검색하여 글로벌 후킹을 열거한다. 결과를 보면 IEXPLORE.EXE가 4개의 전역 후킹 결과를 나타내는 것을 보이며 키보드와 마우스 모두 후킹되고 있는 것을 확인할 수가 있다.

 

그림 5 Volatility - ssdt

 SSDT는 System Service Descriptor Table로 커널 모드 함수에 대한 포인터를 포함한다. 그러므로 악성코드는 이러한 SSDT 후킹이 의심되므로 확인을 해주어야 하며 위 결과와 같이 0x805aa8b4는 사실 ntoskrnl.exe에 소유되지만 주소의 명령은 0x806d56c0(hal.dll)으로 나타내는 것을 확인할 수 있다.

  

그림 6. Volatility - callbacks

 SSDT에 이어 Callback을 확인해보면 이전에 보았던 hal.dll이 존재하는 것을 확인할 수가 있다. 해당 dll은 버그 체크를 할 때 Callback되는 것을 확인할 수가 있다.

 

그림 7.Rekall - modscan

 해당 모듈을 찾기 위하여 modscan을 사용하였다. 결과는 위의 그림과 같으며 해당 주소에 MZ시그니처를 확인 후 덤프로 추출해낼 것이다.

그림 8. Volatility – volshell    

 Volshell의 db를 통해 해당 주소의 MZ 시그니처가 있는지 확인을 해본 결과 위의 그림과 같이 올바른 위치에 MZ 가 위치해 있는 것을 확인할 수가 있다. 따라서 아래와 같이 해당 모듈을 추출해 보자.

그림 9. Volatility – moddump

 추출한 hal.dll의 악성코드 여부를 판단하기 위하여 Virustotal을 이용하였다. 결과는 아래와 같으며 55개의 엔진에서 악성코드라 판단되는 것이 0이라는 것을 알 수가 있다. 따라서 추출한 hal.dll을 악성코드라 보기가 힘들다.

그림 10. VirusTotal – Extracted hal.dll

 이에 추가로 확인하기 위하여 같은 운영체제(Windows XP x86)에서의 정상적인 hal.dll과 문자열을 통해 비교해보았다. BinText를 통해 각 문자열을 추출하였으며 추출한 문자열들을 WinMerge를 통하여 비교하였다. 결과는 아래의 그림과 같다.

그림 11. WinMerge – Compare String

 위에 나타난 부분만이 메모리에서 추출한 hal.dll에 추가로 있는 부분이다. 그 외에 원본에는 있지만 추출한 dll에는 존재하지 않는 부분은 메모리에서 추출했다는 점을 감안하여 나타내지 않았다. 추출한 파일에 추가로 붙는 정보가 적으므로 악성코드라 판단하기 힘들다는 것을 알 수 있었다.

 

그림 12. Volatility – malfind

 해당 플러그인은 Code Injection을 검출해주는 기능을 한다. 위의 그림과 같이 의심되는 IEXPLORE.EXE에서도 해당 되는 지점이 나타났지만 값이 0으로 채워져 있는 것을 확인할 수가 있다. 이는 해당 지점을 읽을 수 없으므로 읽을 수 있는 지점이 나올 때까지 이동하며 보아야 한다.

 

그림 13. Volatility – volshell

 해당 주소 0x7ff80000에서부터 100씩 읽으며 읽혀지는 곳이 나올 때까지 확인해보았다. 그 결과 0x7ff81000에서 데이터를 읽을 수 있다는 것을 확인하였다. 이제 이 지점을 디스어셈블하여 출력해보자.

 

그림 14. Volatility – volshell

 해당 지점을 확인해보니 쉘코드가 존재하는 것을 확인할 수가 있다. 페이지의 권한이 실행, 읽기, 쓰기라는 점과 함께 malfind플러그인을 통해 확인할 수가 있다. 이번엔 api후킹의 여부를 확인해보자.

 

그림 15. Volatility – apihooks

 Apihooks 플러그인을 통해 확인을 해본 결과 IEXPLORE.EXE에 여러 개가 검출 되었다. 후킹된 대부분의 함수들 모두 0x7ff81960을 호출하는 부분으로 이어지는 것을 확인할 수가 있었다. 그림 4에서의 주소(0x7ff81b40)와 유사함을 알 수가 있고, 이에 대하여 volshell을 통해 확인해보자.

그림 16. Volatility – volshell

 디스어셈블을 통해 확인한 결과는 위의 그림과 같다. 이러한 dll을 덤프로 추출하고자 할 때 dlldump는 메모리에서의 변화를 포함하고 있으며 dumpfiles는 디스크 상에서의 코드와 일치한다. 그러므로 두 방법을 통해 추출하고 바이너리를 비교해보자.

그림 17. Volatility – dlldump

 Dlldump를 통해 추출하는 방법은 위의 그림과 같다. 추출에 성공하였고 해당 이름이 module.2044.485d1a8.771b0000인 것을 확인할 수가 있다.

그림 18. Volatility – dumpfiles

 Dumpfiles를 통해 추출한 결과는 위의 그림과 같다. 추출한 파일 이름은 file.2044.0x80f04f30으로 나타난다. 이제 이 두 개의 파일을 비교하여보자.

그림 19. Compare Bytes

 위의 두 그림에서와 같이 좌측은 Dlldump, 우측은 Dumpfiles를 통해 추출한 파일이다. 즉 좌측은 메모리에서의 코드 변경이 반영되었고, 우측은 반영되지 않았다는 것이며 그림에서와 같이 디스크 상에서의 파일에는 존재하지 않는 코드가 존재한다. 이외에도 몇 가지 더 있지만 생략하겠다.

 

그림 20. Volatility – envars

 환경변수를 확인해보면 부모 프로세스가 자식 프로세스에게 해당 환경 변수를 상속하는 것이 일반적이다. 붉게 표시한 부분을 보면 부모에게는 없지만 자식(iexplore.exe)에는 존재하는 것을 확인할 수가 있다. 정상적인 프로세스에는 없다는 것을 생각했을 때 해당 환경변수 또한 악성코드에 의해 남은 흔적임을 의심해볼 수 있다.

 


  3.정리


 2장의 분석 과정을 통하여 CoreFlood가 실행된 메모리를 분석해보았다. 대체로 더 상세한 분석을 하기에는 필자의 실력이 아직 미흡하기에 버겁다. 지금까지 분석한 내용을 정리하면 아래와 같다.

        • Flashload.exe가 2010-08-15 18:11:13를 실행
        • IEXPLORE.EXE가 키보드와 마우스의 전역 후킹을 함
        • API후킹과 Code Injection으로 보이는 흔적 발견
        • 전체적으로 악의적인 코드는 0x7FF81000 이후에 분포
        • 환경변수에 흔적이 남는 것으로 예상

 



참고자료

The Art of Memory Forensics (Detecting Malware and Threats in Windows, Linux, and MAC Memory)

Ligh, Michael HaleCase, AndrewLevy, Jamie 외 1명 저  JohnWiley&SonsInc  2014.07.14.

https://en.wikipedia.org/wiki/Coreflood

https://code.google.com/p/volatility/

http://www.rekall-forensic.com/



'Forensic > Analysis' 카테고리의 다른 글

NTFS & Python - $MFT Acquisition  (0) 2016.01.07
노트북 하드 컴퓨터 연결  (2) 2016.01.03
Tigger Memory Analysis  (0) 2015.12.26
Black Energy 메모리 분석  (0) 2015.12.17
모의침해사고 분석 보고서-Yuri's_PC  (7) 2015.11.24