LiME
소개
LiME은 Joe Sylve가 만든 툴이며 리눅스뿐만 아니라 안드로이드와 같은 리눅스 기반 디바이스의 메모리를 덤프 할 수 있다. 안드로이드의 메모리를 처음으로 Full Dump를 한 도구이며 TCP를 통해서도 메모리를 덤프할 수 있다. 메모리를 획득하는 과정에서 Kernel과 User간의 상호작용을 최소화하여 획득 도구에 의한 메모리의 훼손을 최소화 시켰다. LiME은 다음의 웹페이지(https://code.google.com/p/lime-forensics/downloads/list) 에서 다운로드 할 수 있다.
사용법
LiME을 다운받은 후 압축을 푼 디렉터리의 아래의 src폴더에서 make를 하여 커널 모듈을 만든다. [그림 1]은 make를 한 결과화면이다.
make 결과 lime-2.6.32-38-generic.ko라는 파일명의 커널 모듈이 생성된 것을 확인할 수 있다. 이 커널 모듈을 이용하여 메모리 이미지를 획득할 수 있다. root 권한이 필요하므로 “sudo insmod lime-2.6.32-38-generic.ko path=/tmp/memory.lime format=lime” 명령어를 입력하여 /tmp 위치에 이미징을 할 수 있다. "File exists"에러가 발생하면 “rmmod lime”을 입력하여 모듈을 언로드 후 다시 실행하면 동작한다. [표 1]은 LiME의 이미징 명령어 형식이다.
명령어 | 비고 |
insmod [모듈이름] path=[파일명] format=lime | root 권한으로 실행 |
파일명 부분에 파일명이 아닌 "tcp:7777"을 입력하여 7777번 포트로 이미지를 원격지로 인터넷을 통해 전송할 수 있다. 원격지에서는 “nc localhost 7777 > ram.lime”으로 이미지를 전송을 대기 한다. 그 후 메모리 이미징을 하는 컴퓨터에서 "insmod lime-2.6.32-38-generic.ko path=tcp:8891 format=lime"을 입력하여 8891번 포트를 이용하여 이미지를 보내도록 한다. 그 후 “nc localhost 8891 | nc [원격지 ip 혹은 도메인] 7777”을 입력하여 원격지 서버의 7777번 포트로 이미지를 전송한다. [그림 2]는 LiME의 파일로 이미징을 한 결과이다.
물리 메모리의 이미징 후 “rmmod lime”을 입력하여 LiME 모듈을 언로드하면 메모리 획득 과정이 종료된다. [표 2]는 LiME의 옵션에 관한 표이다.
옵션 | 설명 | 비고 | |
path | 파일경로와 파일이름 혹은 tcp:<port> | 필수 옵션 | |
format | raw | RAW 포맷 이미지 | 필수 옵션 |
padded | 예약영역을 ‘0’으로 패딩 | ||
lime | LiME 포맷 이미지 | ||
dio | 1 | 다이렉트 I/O를 통하여 이미징 | Default 값 |
0 | 다이렉트 I/O 비활성 |
path와 format은 필수 옵션이다. path를 이용하여 물리 메모리 이미지를 파일로 저장할 수 있으며 또한 인터넷을 통하여 원격지 서버로 전송할 수 있다. format은 메모리 이미지의 포맷을 결정하는 옵션이다. dio는 물리 메모리에 바로 접근하여 이미징하는 것이 디폴트 값으로 설정되어 있으며 1은 활성, 0은 비활성이다.
도구기능
LiME은 별도로 파일을 크기를 확인하지 않고 바로 메모리 이미징을 할 수 있고 Fmem과 달리 옵션이 존재한다. 이미징을 진행할 때 최소한의 메모리를 사용하는 것이 LiME의 장점이다. 모든 옵션이 정상 작동한다.
제한사항
커널 모듈명과 명령어가 길다는 단점 외에는 별다른 제한사항이 존재하지 않는다. 2013년 3월 이후 업데이트가 존재하지 않기 때문에 최신 커널에서 사용할 경우 주의가 필요하다.
수사 활용 방안
현장에서 메모리 이미지를 획득할 때 LiME은 최소한의 메모리를 사용하도록 설계하여 메모리 이미지를 타 제품에 비해 적게 훼손한다는 점을 활용하여 이미징을 할 수 있다. 또한 dd를 이용한 메모리 덤프가 아니기 때문에 2.6 버전 이상의 리눅스 커널에서 작동이 가능하다.