[Linux] 메모리 덤프(Memory Dump)#01
[Linux] 메모리 덤프(Memory Dump)#02
[Memory Dump란?]
메모리 덤프란 시스템의 물리 메모리(휘발성 메모리) 내용을 파일로 저장하는 작업을 말합니다. 이 파일은 실제 메모리 구조와 동일하게 저장되어, 침해사고 분석이나 악성코드 분석, 디지털 포렌식 등 다양한 분야에서 핵심적인 단서를 제공합니다.
이번 글에서는 MagnetForensics에서 개발한 Linux용 메모리 덤프 도구인 DumpIt-Linux에 대해 자세히 알아보겠습니다.
1. 왜 메모리 덤프가 중요한가?
시스템이 침해된 시점의 메모리에는 다음과 같은 중요한 정보가 남아있습니다:
- 실행 중인 악성코드의 흔적
- 네트워크 연결 정보
- 암호화되지 않은 계정 정보
- 각종 민감 데이터
실시간 분석을 하면 메모리 상태가 변할 수 있기 때문에, 최대한 원본 그대로의 메모리 이미지를 확보하는 것이 중요합니다.
2. 리눅스에서의 메모리 덤프 방법
> 과거 방식: /dev/mem, /dev/kmem
- 리눅스는 모든 리소스를 파일로 다루기 때문에, 예전에는 /dev/mem이나 /dev/kmem을 통해 메모리에 접근할 수 있었습니다. 하지만 보안상의 이유로 최신 커널에서는 이 접근이 제한되거나 아예 제거되었습니다.
> 현재 방식: 커널 모듈(LKM) 및 /proc/kcore 활용
- 그래서 등장한 것이 LiME, AVML, DumpIt-Linux 등과 같은 메모리 덤프 도구입니다. 이들은 커널 모듈(LKM, Loadable Kernel Module)이나 /proc/kcore 인터페이스를 활용하여, 시스템의 동작을 방해하지 않으면서 메모리 덤프를 수행할 수 있습니다.
3. DumpIt-Linux란?
- DumpIt-Linux는 MagnetForensics에서 개발한 오픈소스 Linux 메모리 획득 도구입니다. 이 도구는 Rust 언어로 개발되었으며, /proc/kcore를 활용하여 메모리 덤프를 생성합니다.
- Windows용 DumpIt과 동일한 철학을 따라, Microsoft Crash Dump 형식과 완전히 호환되는 Windows 버전과는 달리, DumpIt-Linux는 Linux ELF Core 형식을 사용하여 gdb, crash, drgn과 완전히 호환됩니다.
- DumpIt-Linux 공식 GitHub
https://github.com/MagnetForensics/dumpit-linux
4. DumpIt-Linux의 장점
- 상호 운용성: 생성된 출력 파일은 인기 있는 Linux 디버깅 및 문제 해결 도구들과 호환됩니다 (gdb, crash, drgn)
- 오픈 파일 형식: 새로운 파일 형식에 의존하지 않고, Linux ELF CORE 파일을 생성하여 다양한 도구와의 상호 운용성을 보장합니다
- 압축 지원: 초고속 zstandard 압축 알고리즘을 사용하는 .tar.zst 아카이브 형식을 활용합니다
- Rust 기반: 메모리 안전성을 보장하며, 추가적인 원격 스트리밍 옵션으로 확장 가능합니다
- 사용자 공간 동작: /proc/kcore에 의존하므로 Linux 커널 모듈이 필요하지 않습니다. 단, root 권한은 필요합니다
- 커널 의존성 없음: LiME와 달리 커널 버전별 빌드가 필요하지 않아 대규모 환경에서 유리합니다
5. 설치 및 빌드
- 시스템 요구사항
> DumpIt-Linux를 빌드하기 위해서는 다음이 필요합니다:
- Rust 프로그래밍 언어
- pkg-config
- liblzma-dev
- Ubuntu/Debian 계열 설치
필수 패키지 설치 # apt install build-essential liblzma-dev Rust 설치 # curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh 소스 코드 다운로드 # git clone https://github.com/MagnetForensics/dumpit-linux.git # cd dumpit-linux 빌드 # cargo build --release |
- Amazon Linux/CentOS 계열 설치
필수 패키지 설치 # yum install xz-devel Rust 설치 # curl https://sh.rustup.rs -sSf | sh -s -- -y # source "$HOME/.cargo/env" 빌드 # git clone https://github.com/MagnetForensics/dumpit-linux.git # cd dumpit-linux # cargo build --release |
빌드가 완료되면 target/release 디렉토리에 실행 파일이 생성됩니다.
6. 사용방법
- 기본 사용법
기본 압축 아카이브 생성 (권장) # ./dumpitforlinux 특정 경로에 저장 # ./dumpitforlinux /path/to/memory_dump.tar.zst Raw 형식으로 저장 # ./dumpitforlinux -r /tmp/memory_dump.raw 표준 출력으로 내보내기 # ./dumpitforlinux -0 > memory_dump.raw |
- 명령어 옵션
DumpIt (For Linux - x64 & ARM64) 0.1.0 사용법: dumpitforlinux [OPTIONS] [Output Path] 옵션: -0, --to-stdout 파일 대신 stdout으로 출력 -r, --raw 압축 아카이브 대신 단일 코어 덤프 파일 생성 -v, --verbose 파싱 중 추가 출력 표시 -p, --pipe 명명된 파이프에 출력 작성 -h, --help 도움말 정보 출력 -V, --version 버전 정보 출력 |
- 압축 해제
> 생성된 압축 파일을 해제하려면 다음 명령어를 사용합니다:
# tar -I zstd -xvf filename.tar.zst |
7. Memory Dump 분석 전 준비사항
- Memory Dump 분석 전 복사본을 생성하여 분석작업을 진행하도록 합니다. 이때 빠지지않고 해야되는 중요한 것은 해시값을 계산하는 것입니다:
해시값 계산 # md5sum memory_dump.raw # sha1sum memory_dump.raw # sha256sum memory_dump.raw |
- 이렇게 얻은 Memory Dump 파일은 Volatility 등의 분석툴을 사용하여 분석할 수 있습니다.
8. 분석 도구와의 호환성
- DumpIt-Linux로 생성한 메모리 덤프는 다음 도구들과 호환됩니다:
- crash 도구 사용
crash 설치 # apt install crash # apt-get install linux-image-`uname -r`-dbgsym crash로 덤프 분석 # crash /usr/lib/debug/boot/vmlinux-`uname -r`</path to dump> |
- drgn 도구 사용
drgn 설치 및 사용 # pip3 install drgn # drgn -c </path to dump> Google Container OS의 경우 심볼 파일과 함께 # drgn -c dump.core -s vmlinux-version |
- gdb 사용
> ELF Core 형식으로 생성되므로 표준 gdb로도 분석이 가능합니다.
9. DumpIt-Linux vs 다른 도구 비교
- DumpIt-Linux vs LiME
항목 | DumpIt-Linux | LiME |
설치/배포 | 단일 실행 파일, 배포 간편 | 커널 모듈 빌드 필요, 배포 번거로움 |
커널 의존성 | 없음 | 커널 버전별 빌드 필요 |
지원 환경 | x86_64, aarch64 등 다양한 배포판 | 리눅스/안드로이드, 다양한 커널 |
권한 | root 필요 | root 필요 |
한계 | /proc/kcore 접근 제한 시 미동작 가능 | 모듈 로딩 제한 시 미동작 가능 |
- DumpIt-Linux vs AVML
> DumpIt-Linux와 AVML은 모두 /proc/kcore를 사용하는 유사한 접근 방식을 취합니다. 둘 다 커널 모듈이 필요하지 않으며 대규모 환경에 적합합니다.
10. 주의사항 및 제한사항
- 제한사항
- /proc/kcore에 대한 접근이 제한된 환경에서는 동작하지 않을 수 있습니다
- 커널 lockdown이 활성화된 환경에서는 추가 고려사항이 필요할 수 있습니다
- Root 권한이 반드시 필요합니다
- 보안 고려사항
- 메모리 덤프 파일은 시스템 RAM 크기와 동일한 용량을 차지하므로 충분한 저장 공간이 필요합니다
- 메모리 덤프는 민감한 정보를 포함할 수 있으므로 안전한 위치에 저장해야 합니다
- 원격 시스템에서 덤프를 수행할 때는 네트워크를 통한 전송 시 보안을 고려해야 합니다
11. 결론
DumpIt-Linux는 전통적인 LiME의 복잡한 커널 모듈 빌드 과정을 제거하고, 간편한 단일 실행 파일로 Linux 메모리 획득을 가능하게 하는 현대적인 도구입니다. Rust 언어로 개발되어 메모리 안전성을 보장하며, ELF Core 형식을 사용하여 기존 Linux 디버깅 도구들과의 완벽한 호환성을 제공합니다.
특히 대규모 환경에서 다양한 커널 버전을 지원해야 하는 상황에서 DumpIt-Linux의 커널 의존성 없는 설계는 매우 유용합니다. 침해사고 대응이나 포렌식 조사에서 신속하고 안정적인 메모리 수집이 필요한 경우 DumpIt-Linux는 훌륭한 선택이 될 것입니다.
'DFIR > Memory Dump' 카테고리의 다른 글
[Linux] 메모리 덤프(Memory Dump)#02: AVML(Acquire Volatile Memory for Linux) (0) | 2025.05.21 |
---|---|
[Windows] 메모리 덤프#03 (0) | 2023.09.16 |
[Windows] 메모리 덤프#02 (0) | 2023.09.14 |
[Windows] 메모리 덤프#01 (1) | 2023.09.14 |
[Windows] 메모리 덤프 형식(Memory Dump Format) (0) | 2023.09.10 |