[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는 훌륭한 선택이 될 것입니다.

[Linux] 메모리 덤프(Memory Dump)#01

[Linux] 메모리 덤프(Memory Dump)#03

 

[Memory Dump 란?]
메모리 덤프란 시스템의 물리 메모리(휘발성 메모리) 내용을 파일로 저장하는 작업을 말합니다. 이 파일은 실제 메모리 구조와 동일하게 저장되어, 침해사고 분석이나 악성코드 분석, 디지털 포렌식 등 다양한 분야에서 핵심적인 단서를 제공합니다.
 

이번 글에서는 리눅스 환경에서 메모리 덤프를 안전하게 획득하는 방법으로 AVML(Acquire Volatile Memory for Linux)에 대해 자세히 알아보겠습니다.


1. 왜 메모리 덤프가 중요한가?
시스템이 침해된 시점의 메모리에는 다음과 같은 중요한 정보가 남아있습니다.
 - 실행 중인 악성코드의 흔적
 - 네트워크 연결 정보
 - 암호화되지 않은 계정 정보
 - 각종 민감 데이터
실시간 분석을 하면 메모리 상태가 변할 수 있기 때문에, 최대한 원본 그대로의 메모리 이미지를 확보하는 것이 중요합니다.
 

2. 리눅스에서의 메모리 덤프 방법
과거 방식: /dev/mem, /dev/kmem
 - 리눅스는 모든 리소스를 파일로 다루기 때문에, 예전에는 /dev/mem이나 /dev/kmem을 통해 메모리에 접근할 수 있었습니다. 하지만 보안상의 이유로 최신 커널에서는 이 접근이 제한되거나 아예 제거되었습니다.

현재 방식: 커널 모듈(LKM) 활용
 - 그래서 등장한 것이 fmem, LiME, AVML 등과 같은 커널 모듈 기반 메모리 덤프 도구입니다. 이들은 커널 모듈(LKM, Loadable Kernel Module)로 동작하여, 시스템의 동작을 방해하지 않으면서 메모리 덤프를 수행할 수 있습니다.

 

3. AVML(Acquire Volatile Memory for Linux)란?
LiME와 유사한 메모리 덤프 도구로, Microsoft에서 개발한 오픈소스 휘발성 메모리 획득 도구입니다. 번거로운 커널 모듈 빌드 과정 없이, 단일 실행 파일만으로 다양한 환경에서 메모리 덤프를 안전하게 획득할 수 있습니다. LiME보다 더 다양한 배포판 지원, 실행파일 제공, 최신 커널 호환성 등에서 장점이 있습니다.
AVML 공식 GitHub

 

4. AVML의 장점
 - 커널 버전 무관: LiME와 달리, 커널 모듈을 빌드하거나 커널 버전에 맞출 필요가 없습니다. 단일 바이너리로 바로 실행할 수 있습니다.
 - 간편한 배포: 실행 파일 하나만 복사하면 되기 때문에, 수십~수백 대의 서버에서도 빠르게 배포 및 사용이 가능합니다.
 - 루트 권한만 있으면 OK: root 권한으로 실행하면, /proc/kcore 등 시스템 인터페이스를 활용해 메모리를 추출합니다.
 - 대규모 환경에 적합: 커스텀 커널이 많은 대규모 환경에서도 별도 준비 없이 바로 사용할 수 있습니다.

 

[사용방법]

AVML을 다운로드 합니다.

# mkdir avml; cd avml
# wget https://github.com/microsoft/avml/releases/latest/download/avml
# chmod +x avml
# ./avml /tmp/mem.raw
# ls -alh /tmp/mem.raw
-rw------- 1 root root 4.0G May 21 21:24 /tmp/mem.raw

 

Memory Dump 분석 전 복사본을 생성하여 분석작업을 진행하도록 합니다. 이때 빠지지않고 해야되는 중요한 것은 해시값을 계산하는 것입니다. md5sum 이나 shasum 을 사용해서 해시값을 계산하면 됩니다.

# md5sum mem.img
db5fd6e1dabb055f8bc77fd67d95b588 mem.raw

# sha1sum mem.img
0a67af1d5fdc59bf42f4ae93d97580135786fe3c mem.raw

# sha256sum mem.raw
63e5814134a140691b452ac6e353bab73458263709da4cebd2fd6484d33b8954 mem.img

 

이렇게 얻은 Memory Dump 파일은 Volatility 등의 분석툴을 사용하여 분석할 수 있습니다.

 

[AVML vs LiME 간단 비교]

항목 AVML LiME
설치/배포 단일 실행 파일, 배포 간편 커널 모듈 빌드 필요, 배포 번거로움
커널 의존성 없음 커널 버전별 빌드 필요
지원 환경 x86_64, aarch64 등 다양한 배포판 리눅스/안드로이드, 다양한 커널
권한 root 필요 root 필요
한계 /proc/kcore 접근 제한 시 미동작 가능 모듈 로딩 제한 시 미동작 가능

◎ RAW memory dump

자세한 내용은 [Windows] 메모리 덤프 형식(Memory Dump Format) 글에서 확인해주세요.

 

• Windd

• DumpIt

• Magnet Ram Capture

• Winpmem

• Belkasoft Live RAM Capturer

• FTK Imager

 

[Windd]

Unix 용 dd의 윈도우 버전이라고 보면 되겠습니다. win32dd(win64dd)는 MoonSols 사의 무료 메모리 덤프 툴입니다. 윈도우 XP, Vista 그리고 Win7 x86, x86_64를 지원합니다. 윈도우 10 22H2는 지원하지 않습니다(BSOD 발생).

 

[DumpIt]

win32dd와 win64dd의 기능을 하나로 통합한 MoonSols 사의 무료 메모리 덤프 툴입니다. MoonSols 사의 dumpit은 역시나 윈도우 10 22H2는 지원하지 않습니다(BSOD 발생)만, Comae 사(Magnet Forensics 사에 인수됨)의 dumpit은 윈도우 10 22H2를 지원합니다. 더블클릭하면 메모리덤프 진행여부를 묻고 진행 시 Dumpit이 실행된 폴더에 크래시 덤프 파일을 저장합니다.

제작사 홈페이지에서 다운받을 수 있습니다.

  > MoonSols Dumpit

  > Magnet(Comae) Dumpit

 

[Magnet Ram Capture]

Magnet Forensics 사가 Comae 사를 인수하기 전에 배포한 툴입니다. Comae 사를 인수한 이후 Magnet Forensics 사의 홈페이지에서 Magnet Ram Capture 내용 대신 Dumpit 내용을 보여주고 있습니다.

 

※ MoonSols 사의 홈페이지도 접속이 안되고, MoonSols 사의 Windd와 Dumpit은 왜 업데이트가 안되는건지 궁금해서 만든이(Mathieu Suiche)를 검색해봤습니다.  Mathieu Suiche(1988년 9월 22일 출생)는 프랑스의 해커 이자 기업가로 MoonSols 사의 창립자이자 VMWare 사에 의해 인수되기 전 CloudVolumes 사의 공동 창립자입니다. 이후 Comae 사를 설립하였으며, 회사는 Magnet Forensics 사에 인수되었습니다. 현재는 Magnet Forensics 사의 Incident Response R&D 이사로 재직하고 있습니다.

 

[Winpmem]

Google의 Rekall 프로젝트(오픈소스 메모리분석 프레임워크)에 속해 있다가 현재는 독립한 무료 메모리 덤프 툴입니다. 마지막 릴리즈가 2020년 10월인데 윈도우 10 22H2를 지원합니다. CMD창을 관리자모드로 실행하고 아래 명령어를 입력하면 메모리 덤프를 진행합니다.

 > winpmem_mini_x64_rc2 memdump.raw

Github에서 다운받을 수 있습니다.

 

 

[Belkasoft Live RAM Capturer]

Belkasoft 사의 메모리덤프 툴입니다. 더블클릭으로 메모리 덤프가 가능합니다. 윈도우 10 22H2를 지원합니다.

제작사 홈페이지에서 다운받을 수 있습니다.

 

 

[FTK Imager]

Exterro 사의 메모리덤프 툴입니다. FTK Imager를 설치하고 일반적으로 "C:\Program Files\AccessData\FTK Imager" 폴더를 USB에 복사하면 독립실행이 가능합니다. 메모리덤프를 진행하기 원하는 시스템에 USB를 연결하고 FTK Imager.exe를 더블클릭하면 GUI에서 File - Capture Memory메뉴를 통해 메모리 덤프가 가능합니다. 윈도우 10 22H2를 지원합니다.

제작사 홈페이지에서 다운받을 수 있습니다.

+ Recent posts