본문 바로가기

[Forensic]/메모리분석

volatility를 이용한 blackenergy2 샘플 분석

요즘 악성코드 분석을 하면서 흥미로운 분야를 발견했습니다.

바로 포렌식에서 메모리분석 기법인데요 툴자체가 굉장하네요 정말 후덜덜 합니다. 그만큼 강력하단 얘기죠 ㅎㅎ

대략 이툴의 기능들을 소개하자면 현재  프로세스 생성소멸 정보, 레지스트리정보, 후킹탐지기능, 네트워크 연결정보, MFT정보, 실행파일 덤프기능, 그리고 디버거와같은 디버거기능 등의 강력한 플러그인들이 존재합니다.

이 도구는 명령어 기능이 잘되있기 때문에 명령어를 사용하는데 있어서 외우거나 어려움을 느낄필요가 전혀~ 없습니다.

volatility -h 하면 이 도구의 사용법에대해 친절히 알려줍니다. 또는 volatility -f [메모리덤프경로] [사용할 명령어] -h 할 경우 사용하는 명령어에대한 Help기능을 제공합니다.

그렇기 떄문에 전혀 문제가 되지않지요 ..하지만 사용방법은 이렇다고 해도 이 명령어가 뭐에대한 명령어인가 무엇을 나에게 보여주는것인가에 대한 설명은 아쉽게도 부족합니다.

예로 vadinfo 는 프로세스별로 갖고있는 vad영역의 정보를 나에게 보여주는것입니다. 그리고 mftparser는 메모리덤프에서 mft를 추출해서 그 내용을 보여줍니다.

이렇게 봤을때 이해가시나요? 이해가시는 분들은 vad와 mft가 무엇인지 이미 알고계신분들입니다. 이렇기 때문에 운영체제에대해 공부를 안할 수 가 없네요 ㅋㅋ(반성하고 날잡고 파야할듯해요.ㅠ)

뭐 어쨌든 샘플하나구해서 분석을 한번 해보겠습니다.ㅎㅎ

유투브에서 분석하시는분들 보면 분석을 굉장히 빠르고 정확하며 현란?하게 사용하시는데 저는 그렇지 못하다는점 ㅋㅋ 아직 간만 봤다는점~! 이해하고 봐주시기 바랄게요~

 

 

 

 

pslist 명령어로 현재 실행중인 프로세스를 확인합니다.

의심되는 프로세스가 4개네요 근데 딱봐도 의심되는게 1e0...으로 시작하는 프로세스네요. 이게 학습용 샘플이라 그렇지 실제에서는 악성코드를 저런식에 이름으로 만들어 배포할 바보는 없겠죠 ㅎㅎ

그렇기 떄문에 저 한개의 프로세스만 확인해야할것이 아니라 저 4개의 프로세스들에대해 다 조사를 해봐야 됩니다.(의심가는건 전부다 -0-)

일단 4개의 프로세스가 2010년 8월 15일 19시 21분대에 시작해서 대략 2초정도 후에 종료되네요.

정상적인 프로그램이라면 보통은 저렇게 짧게 죽지 않겠죠 이런류는 실행하자마자 자기 볼일 다보고 사라지거나 하는 악성코드로 볼수있습니다.

아닌경우도 있지만요.. 그렇기 떄문에 확인을 해봐야겠지요.

1e0...시작하는 녀석의 부모프로세스 id는 1724로 explorer.exe이네요.

explorer.exe는 윈도우의 쉘을 관장하는 녀석이라고 알고있습니다. 쉘을 통해서 명령을 내리듯이 윈도우에서 마우스를 클릭하든 명령어를 입력하든 발생되는 이벤트를 처리해줍니다.

근데 이런녀석이 이상한 자식프로세스로 1e0...의 알수없는 이름을 가진녀석을 낳았다는것은 백빵 악성코드라고 의심할 수 있습니다.

 

 

 

psscan은 이전에 종료되었던 프로세스들까지 모두 보여줍니다. 확인결과 pslist와 psscan에서 차이가 별로없네요

역시 의심되는 ie0f...녀석은 존재하구요

 

 

 

 

다음으로 userassist를 확인해봅니다.

시스템에서 실행되었던 응용 프로그램의 목록과 실행횟수 등의 정보를 레지스트리에 저장하는데요

경로는 다음과 같습니다.

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist

분석해보면 실행횟수는 1번이고 실행경로는 c:\Documents and Settings/Administrator\Desktop 이네요. 바탕화면에서 실행한것으로 확인이 가능합니다.

 

 

 

 

mftparser을 이용하여 메모리 덤프에서 mft여역을 추출하는 과정입니다.

MFT는 다음과 같습니다.

NTFS 시스템 파일로 NTFS로 포맷 된 볼륨에 볼륨에 각 파일 및 폴더에 대 한 정보(파일크기, 작성일자,사용권한,데이터내용 등)를 포함하며 NTFS볼륨에서 첫번째 영역입니다.

라고하네요.

확인해보니 바탕화면에서 실행했고 이후에 프리패치 파일에 기록하는것을 확인 할 수 있습니다.

 

 

psxview로 은닉되었는지 확인합니다.

여기서 pslist에는 있고 psscan에는 없을경우와 이와반대인경우에 각각 의심 할 수 있는 경우가 있었는데 생각이...ㅠ DKOM탐지 관련해서 였던거같은데..흠..;

찾아서 다시정리해야겠어요..;;

 

 

 

thrscan으로 프로세스에서 생성된 스레드의 시간과 종료시간을 파악할 수 있습니다.

확인결과 svchost.exe, explorer.exe system.exe등의 프로세스에서 악성코드가 실행됬던 시간에 스레드가 생성되고 바로죽는 현상이 발생됬었네요.

 

 

 

callbacks 명령으로 프로세스 및 스레드를 감시할 수 있습니다.

pssetcreatethreadnotifyroutine는 스레드의 생성을 통지하는 함수입니다.

확인결과 GenerickernelCallback,pssetcreatethreadnotifyroutine에보면 0004A2A 값으로 수상한 이름이 있습니다. 

 

 

thread 명령어에 -F옵션으로 HookedSSDT 가들어있는 섹션만 뽑도록 했습니다.

그 결과 00004A2A 수상한값의 이름이 SSDT테이블을 후킹한것으로 확인되네요..

간단하게 SSDT 테이블의 특정 함수를 00004A2A로 바꿔치기한것입니다.

 

 

 

 vadinfo로 프로세스에 존재하는 vad영역 확인합니다.

여기서 중욯나건 tag가 vads이고 Protection이 PAGE_EXECUTE_READWRITE경우인경우 의심하고 확인해 봐야합니다.

 

 

 

malfind 명령어로 검색한 결과 위의 vad영역에서 의심되는 부분을 찾아냈네요

헛 ~!!  MZ 실행파일입니다...

 

 

volshell로 확인결과 확실하네요 이젠 빼도박도 못합니다.

이부분을 추출해야겠지요? svchost vad영역에 MZ 실행파일이 발견되었습니다.

DLL형태로 올라가있을수 있기떄문에 DLL형태로 덤프를 떠보도록 하겠습니다.

 

 

 

 

덤프가 제대로 생성이 됬네요.

여기서 dlldump사용시 프로세스명과 이미지베이스를 줘야 정확히 가저옵니다.

 

 

peview로 확인결과 사용하는 함수에 DownloadFile이 있네요 뭘 다운받나 봅니다.

이것으로 초간단 volitility를 활용한 악성코드 메모리 분석후기였습니다.