Memory Analysis[2]




본 포스팅에서는 메모리 분석에 대해서 다룹니다.

(윈도우의 기본 사용법등과 같은 기초 지식은 본 포스팅에서 다루지 않습니다.)






이번 포스팅에서는 Volatility사용 법에 대해서 알아보도록 하겠습니다.


Volatility 도구는 Python기반으로 작성된 오픈소스 도구입니다. 누구나 무료로 다운받아 사용할 수 있습니다.


메모리상에는 많은 정보들이 저장되어 있기 때문에 침해 사고 발생시 메모리 덤프를 확보를 한다면 분석시간을 단축 시킬 수 있습니다.


그렇기 때문에 우리는 이번 본 포스팅에서 Volatility를 이용한 메모리 분석에 대해서 알아 보겠습니다.


1. Imageinfo

Imageinfo는 메모리에 대한 정보를 불러오는 명령어 입니다. 메모리덤프에 대한 메타데이터 정보를 출력해주는 명령으로써, 덤프시각, 덤프된 운영체제 정보등을 출력해줍니다. 해당 커멘드를 통해 나오는 OS정보를 옵션으로 넣어줘야 앞으로 쓸 커멘드가 정상적으로 동작을 하게 됩니다.(일종의 운영체체별 동작 하는 버전이 있든 커멘드도 운영체제의 버전별로 지원되는 커멘드가 상이하기 때문입니다.)


커맨드 사용형태는 아래와 같습니다.


>vol.py -f [메모리파일] imageinfo


[그림 -1 imageinfo 정보]


[그림-1]과 같이 출력되며, Suggested Profile(s)를 통해 해당 운영체제의 버전을 추측 할 수 있습니다.




2. psscan, pslist, pstree

psscan, pslist, pstree는 메모리 덤프 당시의 프로세스상태를 출력 해줍니다. 다만 3가지 커멘의 차이점은 pslist는 은닉 프로세스를 탐지를 못하지만 psscan과 pstree는 은닉 프로세스까지 모두 찾아 출력을 해줍니다.

(imageinfo를 통해 운영체제 버전을 알 수 있고 메모리 덤프 파일의 경우 대부분 서버나 리눅스 계열보다는 사용자 운영체제로 많이 쓰이는 windows7 또는 8,10을 생각 하면 좋습니다. 이유는 서버군의 메모리는 고용량이기 때문에 분석에 걸리는 시간이 오래 걸립니다. 그렇기 때문에 imageinfo를 통해 나온 운영체제에 서버 운영체체가 있더라도 사용자 운영체제를 선택하여 주는게 일반적 입니다. 운영체제버전을 설정하는 옵션은 --profile= 입니다.)


커맨드 사용형태는 아래와 같습니다.


>vol.py -f [메모리파일] --profile=[운영체제] psscan


[그림-2 psscan]


[그림-2]는 psscan의 결과입니다. 프로세스명, PID, 프로세스 시작시간과 종료시간을 알 수 있습니다.




3. netscan

netscan은 네트워크 정보를 출력해주는 커멘드 입니다. 윈도우 또는 리눅스상의 netstat -anob와 같은 옵션의 출력결과를 출력해줍니다.


커맨드 사용형태는 아래와 같습니다.


>vol.py -f [메모리파일] --profile=[운영체제] netscan


[그림-3 netscan]


[그림-3]은 netscan의 결과로 메모리 덤프 당시의 네트워크 상태를 알 수 있습니다.




4. dlllist

dlllist는 특정 프로세스가 참조하는 dll목록을 확인 할 수 있습니다. 이는 dll 인젝션과 같은 악성코드를 분석할때 유용한 커멘드입니다.


커맨드 사용형태는 아래와 같습니다.


>vol.py -f [메모리파일] --profile=[운영체제] dlllist -p [PID}

(PID 번호는 프로세스 상태 출력 커멘드를 통해 확인 가능합니다.)


[그림-4 dlllist]


[그림-4]는 dlllist 커멘드를 통해 PID 1364번의 프로세스가 참조하는 dll리스트를 출력합니다.



5. getsids
getsids는 시스템상 사용자의 SID를 확인하여 권한상승이나 은닉된 사용자 정보를 확인 가능합니다.

커맨드 사용형태는 아래와 같습니다.


>vol.py -f [메모리파일] --profile=[운영체제] getsids


[그림-5 getsids]


[그림-5]는 getsids 커맨드를 사용하여 응용프로그램별 권한을 확인한 결과 입니다. 이처럼 SID를 확인하여 은닉된 사용자 또는 권한상승과 같은 취약점을 확인 할 수 있습니다.




6. malfind

malfind는 악성코드를 시그니처 기반으로 메모리에서 검색을 해줍니다. 그렇기 때문에 보다 빠르게 시스템상에 있는 악성코드를 선별할때 유용한 커맨드라 할 수 있습니다. 다만 시그니처기반으로 출력을 해주기 때문에 정탐과 오탐에 대한 구분은 분석자가 직접 판단을 해주어야 합니다.


커맨드 사용형태는 아래와 같습니다.


>vol.py -f [메모리파일] --profile=[운영체제] malfind


[그림-6 malfind]


[그림-6]은 malfind를 통해 메모리상에서 악성코드를 검색한 출력화면입니다. 어셈블리어와 헥사코드로 출력이 되기 때문에 악성코드 분석을 많이 해본 분석가라면 보다 쉽게 악성코드를 선별 할 수 있을 것입니다.




7. svcscan

svcscan은 메모리덤프 당시의 서비스 상태를 출력해주는 커맨드 입니다. 서비스 목록을 확인 함으로써 악성코드에 의한 악성 서비스를 판별시 유용한 커맨드입니다.


커맨드 사용형태는 아래와 같습니다.


>vol.py -f [메모리파일] --profile=[운영체제] svcscan


[그림-7 svcscan]


[그림-7]은 svcscan 커맨드의 출력 화면입니다. 서비스의 상태와 서비스를 구동 시키는 응용프로그램의 위치까지 한번에 파악 할 수 있습니다.









지금 까지 Volatility에서 지원하는 시스템 정보를 볼 수있는 기본 적인 커맨드와 악성코드를 분석 하는 커맨드에 대해 알아 보았습니다.

다음 포스팅에 이어서 Volatility에서 지원하는 커맨드중 이번 포스팅에서 다루지 않은 유용한 커맨드 옵션에 대해서 한번 살펴 보도록 하겠습니다.





'Digital Forensic > Memmory-Forensic' 카테고리의 다른 글

Memory Analysis[3]  (0) 2018.02.05
Memroy Analysis[1]  (0) 2018.01.08

이 글을 공유하기

댓글