Fmem

Digital Forensic Wikipedia
둘러보기로 가기 검색하러 가기

소개

Fmem은 niekt0이 개발한 메모리 획득 도구이다. 처음에는 도구의 이름이 Fmem이 아니라 fdump 였으나 기존에 있던 도구와 이름이 중복되어 Fmem으로 바꾸게 되었다. 웹페이지(http://hysteria.sk/~niekt0/fmem/) 에서 다운받을 수 있는 프리웨어이며 x86, x64 두 시스템의 환경에서 모두 정상 작동한다. Ubuntu 12.04이전의 환경에서 실행 가능하며 12.04 상위 버전에서는 "Bad Address"라는 에러 메시지가 출력되면서 작동이 되지 않는다. 리눅스 커널 모듈로 로드시 /dev/fmem 장치 파일을 생성한다.

사용법

Fmem을 다운받은 후 압축을 푼 디렉터리에서 make를 하여 커널 모듈을 만든다. [그림 1]은 make를 완료한 결과 화면이며 [그림 2]는 make 후 생성된 커널 모듈인 fmem.ko를 보여준다.



[그림 1] Fmem make 결과화면



[그림 2] fmem.ko 생성결과



커널 모듈을 make 명령어로 생성한 뒤 root 권한으로 커널 모듈을 로드한다. sudo ./run.sh를 타이핑하여 모듈을 로드할 수 있다. "File exists"에러가 발생하면 “rmmod fmem”을 하여 모듈을 언로드 후 다시 실행하면 동작한다. [그림 3]은 run.sh를 실행결과화면이다.



[그림 3] Fmem run.sh 실행결과 화면



fmem.ko 모듈을 로드하면 /dev 위치에서 fmem이라는 파일을 확인할 수있다. 기존의 /dev/mem의 물리 메모리의 경우 이미징 시 크기에 제한이 있었지만 /dev/fmem을 통하여 크기제한 없이 물리 메모리 전체를 이미징할 수 있다. 메모리를 이미징하기 위해서 우선 메모리의 전체 크기를 파악해야 한다. free -m 명령어로 물리 메모리의 크기를 메가바이트 단위로 알 수 있다. [그림 4]는 free 명령어로 물리 메모리의 크기를 확인한 결과화면으로 2002 MB 인 것을 확인할 수 있다.



[그림 4] 물리 메모리의 크기 확인



메모리 크기 확인 후 "sudo dd if=/dev/fmem of=/tmp/test.raw bs=1MB count=2002"를 입력하여 /tmp 위치에 메모리를 이미징 할 수 있다. [표 1]은 메모리 이미징 시 쓰이는 명령어 형식에 대한 표이다. [그림 5]는 Fmem의 이미징 결과이다.



[표 1] Fmem 이미징 명령어 형식
명령어 비고
dd if=/dev/fmem of=[파일이름]
bs=[한 번에 처리할 크기] count=[메모리 크기]
root 권한으로 실행



[그림 5] Fmem 이미징 결과



이미징이 완료된 후 “rmmod fmem”을 타이핑하여 로드되어 있던 fmem 모듈을 언로드하면 Fmem을 통한 메모리 획득 과정이 완료된다. [그림 6]은 Fmem 모듈을 언로드한 결과화면이다.



[그림 6] Fmem 모듈 언로드 결과화면



도구기능

리눅스 환경에서 기존의 물리 메모리인 /dev/mem을 이미징할 시에 크기 제한이 걸려 있으므로 별도의 커널 모듈을 로드하여 /dev/fmem을 만든 후 /dev/fmem을 크기제한 없이 이미징하는 기능이 있다. 별도의 옵션은 없다.

제한사항

2.6 버전 이상의 최신 리눅스 커널들은 dd를 이용한 메모리 덤프가 불가능하므로 메모리 획득 시 시스템에 따른 제약이 있다. 2011년 이후로 업데이트가 존재하지 않아 2011년 이후의 시스템에서 메모리 획득이 불가능할 수도 있다. 메모리 크기를 필수적으로 확인하고 이미징해야 하므로 번거롭다. root 권한이 필요하므로 관리자의 비밀번호를 알아야만 한다.

수사 활용 방안

현장에서 Fmem을 사용 시 dd를 이용한 메모리 덤프에 대한 제약 때문에 메모리 이미지를 획득하는 대에 한계가 있다. 오래된 시스템에서 메모리 이미지를 획득할 때의 속도가 타 도구보다 빠르므로 Fmem을 시스템의 환경을 알고 있을 때 이를 활용할 수 있다.