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 버전 이상의 리눅스 커널에서 작동이 가능하다.