본문으로 바로가기



1. Introduction


이번에 소개할 Cuckoo Sandbox의 기능은 볼라티리티(Volatility)이다. 볼라티리티는 파이썬으로 제작된 메모리 분석 프레임워크로 다양한 기능을 구현한 플러그인이 있으며, 사용자가 필요한 기능이 있으면 해당 기능에 대한 플러그인을 제작하여 사용할 수 있다. 볼라티리티에 관한 문서는 많으며, 이 주제에 대한 책도 많은 소개가 되어 있다. 국내에서는 포렌식 관점에서 작성된 도서들에서 이 도구에 대해 다루고 있다.


Cuckoo Sandbox와 볼라티리티는 둘다 파이썬으로 제작되어서 쉽게 접합하여 사용한 것으로 파악된다. 볼라티리티의 기능을 구현시킨것은 Cuckoo 버전 1.0 부터이며, Cuckoo가 볼라티리티에 대한 언급은 0.4.1 버전부터 (문서 참조) 시작했다. 해당 문서에서 보면 "Cuckoo에서 볼라티리티의 사용을 단기적인 관점으로 보고 있지 않다." 라고 말하고 있다. 0.4.1 버전이 2012년 8월에 릴리즈 되었으니 1년 5개월 만에 정식 구현된 것이다. Cuckoo가 메모리 분석을 접합시키려고 한 이유는 루트킷 악성코드를 분석하기 위함으로 판단된다.



2. Installation


svn checkout http://volatility.googlecode.com/svn/trunk/ volatility 

cd volatility

python setup.py build

sudo python setup.py install

cd ..

svn checkout http://distorm.googlecode.com/svn/trunk/ distorm

cd distorm

python setup.py build

sudo python setup.py install

cd ..


앞서 포스팅한 Cuckoo 설치하는 과정에서 이미 설치한 과정이다. 추가적으로 distorm 패키지 설치과정은 볼라티리티에서 사용하는 apihooks 플러그인이 사용하기 위해 추가하는 패키지이다. distorm은 이진 스트림을 디스어셈블하는 라이브러리이다.


3. Configuration


볼라티리티를 설정하는 부분은 다음과 같이 총 세군데이다. 설정하는 위치는 cuckoo/conf 디렉터리에 있다.


3.1. cuckoo.conf


cuckoo.conf 의 설정은 메모리 덤프를 사용하는 부분이다. 메모리 덤프 후 분석한다.


# Enable creation of memory dump of the analysis machine before shutting

# down. Even if turned off, this functionality can also be enabled at

# submission. Currently available for: VirtualBox and libvirt modules (KVM).

memory_dump = on


3.2. processing.conf


메모리 분석 기능을 활성화 하기 위해 사용 한다.


[memory]

enabled = yes


3.3. memory.conf


볼라티리티 사용을 해본적이 없기 때문에 각 플러그인에 대한 간단한 번역을 진행했다. 추가적으로 다양한 분석 결과를 보기 위해 모든 기능을 활성화 했으며, 기본적으로 활성화 된 것과 활성화 시킨것을 다르게 표현하기 위해 글씨체를 붉은색으로 변경했다.


# Volatility configuration

 

# Basic settings

[basic]

# Profile to avoid wasting time identifying it

# 프로필 확인하는 시간을 낭비하지 않도록 미리 설정

guest_profile = WinXPSP2x86

# Delete memory dump after volatility processing.

# 볼라티리티 분석 후 메모리 덤프 삭제

delete_memdump = no

 

# List of available modules

# 사용 가능한 모듈 목록

# enabled: enable this module

# enabled는 모듈 활성화하는데 사용

# filter: use filters to remove benign system data from the logs

# filter는 시스템 데이터가 발생하는 로그를 필터링하는데 사용

# Filters are defined in the mask section at below

# 필터는 아래 마스크(mask)에서 정의되어 있다.

 

# Scans for hidden/injected code and dlls

# 숨겨지거나 삽입된 코드와 dll들을 스캔하는 모듈

# http://code.google.com/p/volatility/wiki/CommandReferenceMal23#malfind

[malfind]

enabled = yes

filter = on

 

# Lists hooked api in user mode and kernel space

# 유저 모드와 커널 모드에서 hook api 리스트를 보여주는 모듈

# Expect it to be very slow when enabled

# 이 기능을 사용하면 결과를 받기까지 매우 느려진다.

# http://code.google.com/p/volatility/wiki/CommandReferenceMal23#apihooks

[apihooks]

enabled = yes

filter = on

 

# Lists official processes. Does not detect hidden processes

# 알려진 프로세스를 나열하고 숨겨진 프로세스는 탐지하지 않는 모듈

# http://code.google.com/p/volatility/wiki/CommandReference23#pslist

[pslist]

enabled = yes

filter = off

 

# Lists hidden processes. Uses several tricks to identify them

# 숨겨진 프로세스 리스트를 보여주는 모듈

# http://code.google.com/p/volatility/wiki/CommandReferenceMal23#psxview

[psxview]

enabled = yes

filter = off

 

# Show callbacks

# callback들을 보여주는 모듈

# http://code.google.com/p/volatility/wiki/CommandReferenceMal23#callbacks

[callbacks]

enabled = yes

filter = off

 

# Show idt

# idt를 보여주는 모듈

# http://code.google.com/p/volatility/wiki/CommandReferenceMal23#idt

[idt]

enabled = yes

filter = off

 

# Show timers

# 시간을 보여주는 모듈

# http://code.google.com/p/volatility/wiki/CommandReferenceMal23#timers

[timers]

enabled = yes

filter = off

 

# Show messagehooks

# messagehook들을 보여주는 모듈

# Expect it to be very slow when enabled

# 이 기능을 사용할 때 매우 느려진다.

# http://code.google.com/p/volatility/wiki/CommandReferenceGui23#messagehooks

[messagehooks]

enabled = yes

filter = off

 

# Show sids

# sid를 보여주는 모듈

# http://code.google.com/p/volatility/wiki/CommandReference23#getsids

[getsids]

enabled = yes

filter = off

 

# Show privileges

# 권한들을 보여주는 모듈

# http://code.google.com/p/volatility/wiki/CommandReference23#privs

[privs]

enabled = yes

filter = off

 

# Display processes' loaded DLLs- Does not display hidden DLLs

# 프로세스들이 로드하는 dll들을 보여주는 모듈 숨겨진 dll들은 보여주지 않음

# http://code.google.com/p/volatility/wiki/CommandReference23#dlllist

[dlllist]

enabled = yes

filter = on

 

# List open handles of processes

# 프로세스의 열린 핸들을 보여주는 모듈

# http://code.google.com/p/volatility/wiki/CommandReference23#handles

[handles]

enabled = yes

filter = on

 

# Displays processes' loaded DLLs - Even hidden one (unlinked from PEB linked list)

# 프로세스가 로드하는 숨겨진 dll들을을 보여주는 모듈

# http://code.google.com/p/volatility/wiki/CommandReferenceMal23#ldrmodules

[ldrmodules]

enabled = yes

filter = on

 

# Scan for Mutexes (whole system)

# 뮤텍스 정보들을 스캔하는 모듈

# http://code.google.com/p/volatility/wiki/CommandReference23#mutantscan

[mutantscan]

enabled = yes

filter = on

 

# List devices and drivers

# 드라이버와 디바이스 리스트를 보여주는 모듈

# http://code.google.com/p/volatility/wiki/CommandReferenceMal23#devicetree

[devicetree]

enabled = yes

filter = on

 

# Scan for services

# 서비스들을 스캔하는 모듈

# http://code.google.com/p/volatility/wiki/CommandReferenceMal23#svcscan

[svcscan]

enabled = yes

filter = on

 

# Scan for kernel drivers (includes hidden, unloaded)

# 커널 드라이버들(숨겨지거나 로드하지 않은)을 스캔하는 모듈

# http://code.google.com/p/volatility/wiki/CommandReference23#modscan

[modscan]

enabled = yes

filter = on

 

# Masks. Data that should not be logged

# 마스크. 로그인하지 않은 데이터

# Just get this information from your plain VM Snapshot (without running malware)

# 이 정보는 VM 스냅샷으로부터 가져올 수 있다.

# This will filter out unwanted information in the logs

# 로그에 불필요한 정보를 걸러내기 위해 사용

[mask]

enabled = yes

pid_generic =


4. Reporting


메모리 분석이 활성화 되면 각종 레포트에서 메모리 분석 부분을 볼 수 있다. Django 웹 인터페이스로 확인해보면 Memory Analysis 카테고리가 활성화 된 것을 볼 수 있다. 메모리 분석파트의 하위 카테고리의 모습은 플러그인에 따라 달라지는 것 같지만, 분석한 악성코드의 종류가 한 가지이기 때문에 자세한 테스트는 하지 못했다.



첫 번째로 볼 수 있었던 부분은 Process List이다. 필터를 적용하지 않았기 때문에 샌드 박스에서 실행되는 모든 프로세스의 정보를 보여주고 있다.



두 번째로 볼 수 있는 하위 카테고리는 Services 정보이다. 이 정보 또한 필터를 사용하지 않았기 때문에 샌드 박스의 모든 정보를 보여주고 있다.



세 번째로 볼 수 있는 하위 카테고리는 Kernel Modules이다. 이 부분은 드라이버와 커널 라이브러리의 정보들을 보여준다고 한다.



마지막으로 볼 수 있는 정보는 Code Injection 카테고리이다. 



5. ETC.


볼라티리티로 분석을 진행할 때 모든 플러그인을 활성화 하여 사용한 경우 분석 시간이 2시간을 넘겼었다. 또한 마제스티님의 이야기를 들어보니 메모리 덤프 하는 절차가 문제가 있어 포렌식 관점에서는 사용하기 애매모호 하다고 하였다. Cuckoo 개발진이 원하는대로 루트킷 관련 악성코드를 위한 모듈인가 궁금하지만, 서비스로 활용하기에 매우 많은 시간이 소모되니 불필요한 플러그인들은 비활성화 하여 사용하는 것이 좋을 것 같다.

저작자 표시 비영리 동일 조건 변경 허락
신고

댓글을 달아 주세요

  1. kangg 신고">2014.09.18 10:54 신고

    선생님 이 글 작성 당시 혹은 지금 쓰시는 cuckoo sandbox의 yara 버전을 알고 싶습니다.

    • BlogIcon hakawati 신고">2014.09.18 20:35 신고

      안녕하세요^^
      이글 작성 당시 때 yara는 2.2? 버전이 나왔었고, cuckoo는 1.7 버전을 사용하기 때문에 1.7 버전을 쓰고 있었습니다. 현재는 cuckoo를 위한 기능을 포함한 것으로 알려진 yara 3.0 이 나온 것으로 알고 있습니다.

티스토리 툴바