volafunx - Volafox for FreeBSD

사실 예전 논문의 주제로 잡았던  Mac OS X 는 개인 데스크톱에서 많이 사용되지만, 서버시장을 바라보았을 땐 그 수요가 높지 않습니다. 이에 기업에서 사용하는 서버 시장에 이 기술을 적용해볼 수 있지 않을까해서 생각을 해보니  FreeBSD에 적용하면 그 사용 빈도가 더 높지 않을까란 생각이 들었습니다.

이러한 생각으로 volafox 의 물리 메모리 분석 기술을  OSX 의 컴포넌트 중 하나로 사용되는  BSD 에 적용하였습니다. 아무래도  Mac OS X의 데이터 추출도 대부분  BSD 컴포넌트에서 데이터를 추출하다보니 좀더 빠르게 구현할 수 있었습니다.

이름은 우선  volafunx 로 정하였는데요, 이는 차 후 통합되는 과정에서 변경될 수 있습니다.
 volafox 를 기반으로 작성하였지만, 물리 메모리 분석에 중요한 프로세스 덤프가 먼저 추가가 되어 있기 때문에, 현재까지는  volafox 보다 사용하기는 더 좋다고 생각합니다. :)

 volafunx 를 구동하면 다음과 같은 화면을 확인하실 수 있습니다.

n0fates-iMac:volafunx n0fate$ python volafunx.py 

Memory analyzer for FreeBSD - n0fate
Contact: rapfer@gmail.com
usage: python volafunx.py -i MEMORY_IMAGE -s KERNEL_IMAGE -[fusion_builder_container hundred_percent="yes" overflow="visible"][fusion_builder_row][fusion_builder_column type="1_1" background_position="left top" background_color="" border_size="" border_color="" border_style="solid" spacing="yes" background_image="" background_repeat="no-repeat" padding="" margin_top="0px" margin_bottom="0px" class="" id="" animation_type="" animation_speed="0.3" animation_direction="left" hide_on_mobile="no" center_content="no" min_height="none"][o INFORMATION][-m module id][-x pid]


-= CAUTION =-
This program need to physical memory image, kernel image
It support to Intel x86 architecture


Option:
-o Gathering information using symbol information:
-m Dump module using module id
-x Dump process using pid


INFORMATION:
proc_info process list
syscall_info system call list (hooking detection)
lkm_info Loadable Kernel Module list

도구 다운로드: Volafox Code Google Site

volafunx는 중요 기술만 구현하였기 때문에 운영체제 버전 정보와 같은 부가적인 정보를 제공하지는 않습니다. 정말 악성코드 및 루트킷을 탐지하여 덤프하는데 중점을 둔 도구라 할 수 있습니다.(사실은 시간이 없었습니다 :-/ )

도구의 활용성을 보여드리기 위해 시스템에  vi 에디터를 열고 키를 작성한 후 해당 프로세스 영역만을 덤프하여 분석하는 것을 테스트 해보겠습니다. 우선 프로세스 목록을 확인하여  vi  프로세스를 확인하였습니다.

n0fates-iMac:volafunx n0fate$ python volafunx.py -i FreeBSD.vmem -s kernel -o proc_info
[+] Memory Image: FreeBSD.vmem
[+] Kernel Image: kernel
[+] Information: proc_info


-= process list =-
list_entry_next pid ppid process name username
c1946000 0 0 kernel
c1945aa0 1 0 initl root
c19452a8 2 0 g_event
c1945000 3 0 g_upl
c19b1550 4 0 g_down
c19b1000 5 0 xpt_thrd
c1946d48 6 0 fdc0l
c1946aa0 7 0 sctp_iterator
c1946550 8 0 pagedaemon
c19462a8 9 0 vmdaemon
c1945d48 10 0 audit
c19457f8 11 0 idlel
c1945550 12 0 intrl
c19b12a8 13 0 yarrow
c19467f8 14 0 usbel
c1c10d48 15 0 pagezero
c1c10aa0 16 0 bufdaemon
c1c107f8 17 0 syncer
c1c10550 18 0 vnlru
c1c102a8 19 0 softdepflush
c1c6daa0 20 0 flowcleaner
c1c6d7f8 448 11 devdl root
c19b1d48 563 11 syslogd root
c1c6e2a8 786 11 sshdl root
c19b1aa0 793 11 sendmailer root
c1c6d550 797 11 sendmailer root
c1c6d000 803 11 cronl root
c1c10000 854 11 getty root
c1c6d2a8 855 11 getty root
c1ea5550 856 11 getty root
c1ea52a8 857 11 getty root
c1ea5000 858 11 getty root
c1ea4d48 859 11 getty root
c1eeb2a8 860 11 getty root
c19b17f8 15214 11 login root
c1ea4000 15229 15214 bash root
c0d99b58 47686 15229 vih root
n0fates-iMac:volafunx n0fate$ 

빨간 줄로 그어진 것이  vi 의 프로세스입니다. 해당 프로세스 영역만을 메모리에서 덤프하겠습니다.

n0fates-iMac:volafunx n0fate$ python volafunx.py -i FreeBSD.vmem -s kernel -x 47686
[+] Memory Image: FreeBSD.vmem
[+] Kernel Image: kernel
[+] Dump PID: 47686
[+] Dump Process ID: 47686
 [-] process name: vih
 [-] vmspace: c194a740
 [-] start: 1000
 [-] end: bfc00000
 [-] VAD CR3: c634f000
 [-] PHYS CR3: 3cc5000
[+] END VAD DUMP LIST
[+] VAD DUMP START
 [-] [DUMP] Image Name: vih-8048000-8092000
 [-] [DUMP] Image Name: vih-8092000-8100000
 [-] [DUMP] Image Name: vih-28092000-280c2000
 [-] [
DUMP] Image Name: vih-280c2000-280c4000

 [-] [DUMP] Image Name: vih-280c4000-280d7000
 [-] [DUMP] Image Name: vih-280d7000-28114000
 [-] [DUMP] Image Name: vih-2
8114000-28117000

 [-] [DUMP] Image Name: vih-28117000-28213000
 [-] [DUMP] Image Name: vih-28213000-28219000
 [-] [DUMP] Image Name: vih-28219000-2822f000
 [-] [DUMP] Image Name: vih-28300000-28400000
 [-] [DUMP] Image Name: vih-bfbe0000-bfc00000
[+] VAD DUMP COMPLETE
n0fates-iMac:volafunx n0fate$ ls -al

drwxrwxrwx  29 n0fate  staff       986 12 22 15:29 .
drwx------+ 10 n0fate  staff       340 12 22 14:08 ..
-rw-r--r--@  1 n0fate  staff      6148 12 22 15:29 .DS_Store
-rwxrwxrwx@  1 n0fate  staff  67108864 12 22 14:42 FreeBSD.vmem
-rwxrwxrwx   1 n0fate  staff      2109 11  1 21:14 addrspace.py
-rwxr-xr-x   1 n0fate  staff      2524 12 22 14:13 addrspace.pyc
-rwxrwxrwx   1 n0fate  staff      5112 12 22 15:02 elf_an.py
-rwxr-xr-x   1 n0fate  staff      4311 12 22 15:18 elf_an.pyc
-rwxrwxrwx   1 n0fate  staff  11492703 11  1 20:53 kernel
-rwxrwxrwx   1 n0fate  staff  11984864 12 21 16:26 lkm_kernel_dump
-rwxrwxrwx   1 n0fate  staff       540 11  1 20:53 setup.py
-rwxrwxrwx   1 n0fate  staff   2069036 11  2 19:12 symbol.txt
-rwxrwxrwx   1 n0fate  staff     16542 11  2 15:29 syscall.txt
-rw-r--r--   1 n0fate  staff    122880 12 22 15:29 vih-28092000-280c2000
-rw-r--r--   1 n0fate  staff      8192 12 22 15:29 vih-280c2000-280c4000
-rw-r--r--   1 n0fate  staff     57344 12 22 15:29 vih-280c4000-280d7000
-rw-r--r--   1 n0fate  staff    229376 12 22 15:29 vih-280d7000-28114000
-rw-r--r--   1 n0fate  staff     12288 12 22 15:29 vih-28114000-28117000
-rw-r--r--   1 n0fate  staff    610304 12 22 15:29 vih-28117000-28213000
-rw-r--r--   1 n0fate  staff     24576 12 22 15:29 vih-28213000-28219000
-rw-r--r--   1 n0fate  staff     45056 12 22 15:29 vih-28219000-2822f000
-rw-r--r--   1 n0fate  staff    204800 12 22 15:29 vih-28300000-28400000
-rw-r--r--   1 n0fate  staff    253952 12 22 15:29 vih-8048000-8092000
-rw-r--r--   1 n0fate  staff      8192 12 22 15:29 vih-8092000-8100000
-rw-r--r--   1 n0fate  staff     32768 12 22 15:29 vih-bfbe0000-bfc00000
-rw-r--r--   1 n0fate  staff     10602 12 22 15:05 volafunx-0.1.zip
-rwxrwxrwx   1 n0fate  staff     16793 12 22 15:04 volafunx.py
-rwxrwxrwx   1 n0fate  staff     13846 11  1 21:14 x86.py
-rwxr-xr-x   1 n0fate  staff     12837 12 22 14:13 x86.pyc
n0fates-iMac:volafunx n0fate$ 

덤프된 내용을 strings 로 확인해보겠습니다.
n0fates-iMac:volafunx n0fate$ strings vih-* | grep "secret key"
secret key: welcome to BSD world ;)
secret key: welcome to BSD world ;)
secret key: welcome to BSD world ;) 
n0fates-iMac:volafunx n0fate$ 
올바르게 키가 나오는 것을 확인할 수 있습니다. 이러한 프로세스 덤프는  vi의 에디팅 흔적 뿐만 아니라, 사용자가 실행했던 명령어를  bash 를 덤프하여 확인하는 등 다양한 증거를 수집할 수 있습니다. :)
추가적으로 현재 오픈한 파일에 대한 목록 추출 및 해당 데이터 덤프를 구현할 예정인데 얼마나 걸릴지 모르겠네요. 현재 두 도구를 혼자서 하고 있다보니 시간이 좀 걸립니다.
다들 유용하게 사용해주셨으면 감사하겠습니다. 혹시나 좋은 코멘트가 있으시다면 지체없이 글 남겨주시기 바랍니다.

n0fate's Forensic Space :)

[/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]