예전부터 눈여겨오던 프로젝트가 있었다. 바로 Google 의 Rekall 프레임워크이다. 시간이 없어서 계속 포스팅을 나중으로 미루다가, 내일 모레 정보보호학회 논문 발표를 앞두고 너무나 발표준비하기가 싫어서(?) ㅋㅋ 딴짓을 하고 있다.


모두들 알다시피 메모리 포렌식 분야의 사실상의 표준(de facto standard)는 Volatility 이다. 원래는 Rekall도 볼라틸리티 오픈소스의 튜닝 버전으로 시작되었다. 구글은 침해사고 대응을 위한 라이브 포렌식 도구인 GRR(Google Rapid Response)를 개발하고 있었는데(지난 포스팅 참고 : 구글 GRR을 이용한 라이브 포렌식), 여기에 연동할 메모리 포렌식 프레임워크가 필요했다. 아마도 볼라틸리티를 직접 적용하기에는 한계가 있었던 듯 하다. 그래서 볼라틸리티의 core 부분을 개조하던 scudette라는 이름의 git branch를 따로 빼서, 별도로 개발을 시작하였다. 2년정도의 시간이 지난 후부터 volatility와는 거의 독립적인 프로젝트가 되어버렸고, 이름을 Rekall로 명명하였다. 현재는 볼라틸리티에 없는 기능까지 추가적으로 구현이 많이 되어 있다. Rekall팀은 메모리 포렌식 분석에 있어서 최고가 되리라 자부하는 마음으로 개발을 계속 진행중이라고 한다.

Rekall을 한번 설치해보자. 기준이 되는 환경은 Ubuntu 16.04이고, python2 가 필요하며 virtualenv로 별도 환경을 구축할 것이다.


먼저 파이썬 및 몇몇 라이브러리를 필수적으로 설치한다.

yara와 virtualenv도 설치하자.

virtualenv는 anaconda 와 거의 같은 기능이다. rekall팀은 이와 같은 독립 파이썬 환경을 권장한다.

아래와 같이 명령어를 입력하여 /tmp/Rekall 이라는 환경을 만들자.

source activate가 성공하면 (Rekall) 이라는 이름으로 쉘이 진행될 것이다.


이제 rekall github로부터 코드를 clone하자.

설치는 아래와 같다. (순서대로 입력. 만약 오류가 나서 중단된다면 그 부분을 반드시 해결하고 다음으로 넘어갈 것)

설치가 정상적으로 되었다면 아래의 명령어로 테스트해보자.

메모리 분석을 수행할 RAM 덤프 파일을 한번 사용해보자. rekall-forensic의 document에 따르면, 현재 Windows 운영체제의 경우 XP Service Pack 2부터 Windows 10, Linux Kernels 2.6.24 ~ 4.20, macOS 10.6-10.11 까지 지원된다고 한다. 


볼라틸리티는 덤프의 운영체제를 식별한 후 프로파일을 지정해주는 것이 매우 귀찮은 작업이었다. Rekall의 최대 장점은 프로파일을 자동으로 감지(Autodetected)하는 기능이 있다는 것이다. 그래서 Windows 이미지 같은 경우에는 아예 프로파일을 신경쓸 필요가 없다. 단, 리눅스 시스템은 일반적이지 않은 distro가 워낙 많고, 커널도 다양하기 때문에 다소 어렵다(이는 볼라틸리티에서도 마찬가지다). 이런 경우에는 본인이 직접 프로파일을 만들고, --profile 으로 argument를 전달해줘야만 한다. 그외의 경우에는 자동으로 진행되므로 유저가 별도로 지정해줄 필요는 없다.


테스트를 위해 윈도우 메모리 덤프 하나를 간단히 분석해보겠다.

2010년에 The Honeynet Project의 Forensic Challenge 문제로 출제되었던 Banking Troubles 를 다운로드 하자.

다운로드 받은 파일의 해시값을 확인해보자. 결과가 아래와 같다면 무결성에 문제가 없는 것이다.

tgz 파일의 압축을 해제하자. tar -zxvf 로 가능하며, 512MB짜리 Bob.vmem 메모리가 나온다.


이제 본격적으로 Rekall 프레임워크의 플러그인을 활용해보자.

가장 기본적인 프로세스 목록은 pslist 이다. 아래와 같이 실행한다. (별도로 운영체제 프로파일을 고민할 필요가 없다!)

결과가 아주 잘 나온다. 아래는 pstree 플러그인의 결과이다.


사용할 수 있는 플러그인은 Rekall 도큐먼트를 읽어보면 자세히 알 수 있으며 필자도 조금 더 연구가 필요할 듯하다. 사실 여기까지는 volatility와 크게 차별성을 아직 못찾을 수 있는데, rekall은 interactive shell로 사용하는 것에 더욱 최적화가 되어있어서 자동화하는 것에 유용하다고 한다. 예를들면 

이렇게만 입력하면 자동으로 Bob.vmem 파일에 대한 대화식 쉘이 작동한다. 여기에 connections 라는 명령어 형식으로 타이핑을 하면 즉각적으로 결과를 보여주는 형식이다. (아마 파이썬으로 wrapping 되어 있는 느낌)

아래는 대화식 쉘에서 imageinfo를 사용한 화면이다. Windows xp service pack2 를 사용하고 있음을 알 수 있다.


기타 활용할 수 있는 다른 플러그인은 Rekall 공식문서를 참고하기 바란다.


(깨알광고) 본 포스팅에서 예제로 사용한 The Honeynet Project의 Forensic Challenge - Banking Troubles 문제를 Volatility 및 VolUtility 로 풀이한 내용을 알고싶다면, 필자의 저서 "VolUtility 리뷰와 첼린지 문제 풀이 사례(비팬북스)"를 참고하기 바란다. ㅎㅎ


참고 :

Rekall Tutorial - http://www.rekall-forensic.com/docs/Manual/tutorial.html

Rekall Blog - We can remember it for you wholesale.


CPUU님의 창작활동을 응원하고 싶으세요?