on
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
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$
[/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]