Volatility 는 메모리 포렌식 도구이다.
윈도우는 그냥 뚝딱 뚝딱 만들면 되는데 리눅스는 분석하는 방법이 적어서 직접 올린다.
https://github.com/volatilityfoundation/volatility3
GitHub - volatilityfoundation/volatility3: Volatility 3.0 development
Volatility 3.0 development. Contribute to volatilityfoundation/volatility3 development by creating an account on GitHub.
github.com
여기서 설치 할 수 있다.
git clone https://github.com/volatilityfoundation/volatility3.git
깃 클론 떠주고
pip3 install -r requirement.txt
필수 패키지 설치해준다.
python3 setup.py build
python3 setup.py install
시키는 대로 깔아준다.
python3 vol.py -h
실행 되는지 확인한다.
메모리 분석을 할 때는 크게 2가지가 중요한데, 첫 번째는 메모리를 덤프한 운영 체제에 맞는 symbol이 필요하다. 그리고 두 번째는 당연히 제대로 뜬 메모리 덤프 파일이 필요하다. 여기선 LiME을 써서 떴다.
이 심볼은 윈도우 같은 경우 어차피 커널 버전이 몇 개 없기 때문에 기본적으로 제공하지만 리눅스의 경우 커널 빌드 버전에 따라 심볼을 따로 준비해 줘야 한다. 그런데 vol3에서 기본으로 제공하는 리눅스 심볼은 전부 구버전이라.. 직접 찾아서 넣어야 한다.
일단 메모리 덤프 뜨는 방법 부터
https://github.com/504ensicsLabs/LiME
GitHub - 504ensicsLabs/LiME: LiME (formerly DMD) is a Loadable Kernel Module (LKM), which allows the acquisition of volatile mem
LiME (formerly DMD) is a Loadable Kernel Module (LKM), which allows the acquisition of volatile memory from Linux and Linux-based devices, such as those powered by Android. The tool supports acquir...
github.com
이걸 리눅스에서 깔아서 뜨면 된다.
gcc도 설치되어 있어야 한다.
없으면 apt install로 깔아주면 된다.
git clone https://github.com/504ensicsLabs/LiME.git
cd LiME
cd src
make
sudo insmod lime-5.4.0-150-generic.ko "path=memdump.lime format=lime"
막줄에 sudo insmod lime-5.4.0-150-generic.ko "path=memdump.lime format=lime" 부분에서
lime-5.4.0-150-generic.ko 같은 경우에는 src/ 밑에 ls 쳐보면 자신의 커널 버전에 맞게 생성되어 있는 걸 볼 수 있고, 그 뒤에 memdump.lime은 생성할 메모리 덤프 파일이다. readme 보면 저걸 nc 써서 원격으로 뺄 수도 있다는데 귀찮으니 그냥 vmware에서 드래그앤드롭으로 옮기거나 scp로 옮겨주자.
+) 혹시 메모리 덤프를 다시 뜰려고 할 때 insmod: ERROR: could not insert module lime-5.4.0-150-generic.ko: File exists 이런 에러가 뜨면 sudo rmmod lime 를 쳐주면 된다.

4기가 짜리 (메모리가 4기가라서) 메모리 덤프가 완성되었다.
이제 저 버전에 맞는 심볼을 넣어주면 된다.
https://github.com/Abyss-W4tcher/volatility3-symbols
GitHub - Abyss-W4tcher/volatility3-symbols: Collection of Volatility3 symbols, generated against Linux and macOS kernels.
Collection of Volatility3 symbols, generated against Linux and macOS kernels. - Abyss-W4tcher/volatility3-symbols
github.com
직접 만들어도 되긴하는데, 귀찮으니 누가 만들어서 올려놓은 심볼을 찾아보자.

아까 보니까 5.4.0-150 이라고 되어 있었으니 그대로 찾아가면 된다.
저 2개의 파일을 다운받아서 volatility3/symbols/linux 폴더 밑에 넣어주면 된다.

+) 만약 저 깃허브에 원하는 심볼이 없을 땐 어떻게 하느냐?

vol.py -f <메모리파일> banner를 하면 메모리 파일에 대한 심볼 정보를 볼 수 있다. 그리고 우분투는 저 심볼 패키지를 저장소에 보관하고 있어서 다운 받은다음에 풀면 된다.
맥에서 우분투 Volatility 심볼 수동 생성 절차
1단계: .ddeb 디버그 심볼 파일 수동 다운로드
Ubuntu 패키지 저장소 웹사이트에서 필요한 파일을 직접 다운로드한다.
- Ubuntu Packages 사이트 접속: 웹 브라우저에서 아래 형식의 URL로 접속한다.
- 파일 검색 및 다운로드: 웹 페이지에서 필요한 파일명(예: linux-image-unsigned-6.8.0-63-generic-dbgsym_6.8.0-63.66_amd64.ddeb)을 찾아 다운로드한다. 터미널에서 curl 명령어를 사용할 수도 있다.
curl -O http://ddebs.ubuntu.com/pool/main/l/linux/linux-image-unsigned-6.8.0-63-generic-dbgsym_6.8.0-63.66_amd64.ddeb
2단계: .ddeb 파일 압축 해제
.ddeb 파일은 ar 아카이브 형식이므로, 터미널에서 ar과 tar 명령어로 압축을 해제한다.
- ar로 아카이브 풀기: ar 명령어로 .ddeb 파일에서 data.tar.xz 파일을 추출한다.
mkdir dbgsym_files && cd dbgsym_files ar -x ../linux-image-unsigned-*.ddeb - tar로 데이터 추출: data.tar.xz 파일의 압축을 풀어 최종 디버그 심볼 파일을 얻는다.압축 해제 후 usr/lib/debug/boot/ 경로에서 원본 디버그 심볼 파일(예: vmlinux-6.8.0-63-generic)을 확인할 수 있다.
-
Bash
tar -xf data.tar.xz
3단계: dwarf2json으로 심볼 파일 생성 및 적용
추출된 디버그 심볼 파일을 이용하여 Volatility가 사용하는 JSON 형식의 심볼 파일을 생성한다.
dwarf2json 실행: 아래 명령어로 심볼 파일을 변환한다.
./dwarf2json linux --elf ./dbgsym_files/usr/lib/debug/boot/vmlinux-* > ubuntu-kernel.json
- 압축 및 이동: 생성된 JSON 파일을 압축하고 Volatility의 심볼 디렉터리로 옮긴다.
gzip ubuntu-kernel.json mv ubuntu-kernel.json.gz /path/to/volatility3/volatility3/symbols/linux/
위 절차를 통해 macOS에서 생성한 심볼 파일을 Volatility 분석에 사용할 수 있다.

기본적인 linux.bash 플러그인을 통해 저 당시 어떤 명령어를 쳤는지 확인 할 수 있다.
'digital forensics' 카테고리의 다른 글
| [우암던전] john the ripper 사용법 (0) | 2024.09.20 |
|---|---|
| [시스템 보안 실습] - MITRE ATT&CK 개요 (2) | 2024.09.05 |
| FAT32 VS exFAT (0) | 2024.06.12 |
| 해시값 구하기 사이트 (0) | 2024.04.17 |
| 한참 늦은 비오비12기 후기 (0) | 2024.04.15 |