在 Linux 中我們可以透過一些工具將記憶體中的資料傾倒(dump)出來,這對於取證分析(forensics analysis)或是分析自己的系統是很有用的。
通常在以下幾種狀況會用到這種記憶體分析的工具:
- 想知道在記憶體中到底儲存了哪些程式與資料。
- 搜尋屬於某個行程 ID(pid)的記憶體空間。
- 在記憶體中搜尋一些機密性資料,如帳號與密碼。
- 作為一些工具的附加功能,例如 gdb 除錯程式等。
- 搜尋、取代或轉存執行中程式的記憶體資料與核心檔案(core files)。
- 使用各種駭客級的動作,以最短的時間解決問題。
以下是各種用於分析記憶體資料的工具。
LiME(Linux Memory Extractor)
LiME(前身是 DMD)是一個可被 Linux 載入的核心模組(Loadable Kernel Module,簡稱 LKM),它可以用來取得 Linux(或以 Linux 為基礎的系統,如 Android)記憶體中的資料,從記憶體取得的資料除了儲存在硬碟之外,也可以透過網路直接傳輸。
LiME 的最大特色就是他是第一個可以取得 Android 系統上所有記憶體資料的工具,並且它也簡化了抓取資料時在 user 與 kernel space 的程序,這樣的話,以 LiME 所取得的記憶體資料會比其他工具所取得的資料更可靠。
Draugr
Draugr 是一個可以讓你使用 Python 靠著 /dev/(k)mem
或記憶體傾印(memory dump)來分析記憶體的工具,其提供許多方式可以讓你取得各種系統的資訊,例如 processes(包含過種資訊與 sections)、kernel symbols 與反組譯(Disassembly)或傾印記憶體等等。
Volatilitux
Volatilitux 是專門用於 Linux 記憶體取證分析的工具組,以下是其支援的 CPU 硬體架構:
- ARM
- x86
- x86 with PAE enabled
這個工具組提供以下這些指令:
pslist
:輸出所有 processes 的列表。memmap
:輸出一個 process 的記憶體配置圖(memory map)。memdmp
:傾印一個 process 的記憶體資料。filelist
:輸出一個 process 所有開啓的檔案列表。filedmp
:傾印一個開啓的檔案內容。
Memfetch
Memfetch 是一個用於傾印執行中 process 記憶體資料的小工具,除了立即傾印記憶體資料之外,也可以設定在程式出問題時才傾印資料。這個工具對於一些沒有什麼搜尋功能的除錯程式(debuggers)與追蹤程式( tracers)而言,是一個不錯的替代方案,而且它也提供許多指令可以很方便的取得記憶體的快照(screenshots)。
以下是安裝 Memfetch 的方式,FreeBSD 可使用 pkg_add
:
pkg_add -r -v memdupm
其他的 UNIX 或 Linux 則要從原始碼編譯安裝:
wget http://lcamtuf.coredump.cx/soft/memfetch.tgz tar xvf memfetch.tgz cd memfetch && make
Red Hat 的 Crash 工具組
Red Hat 的 Crash 工具組是以 SVR4 UNIX 的 crash
指令為基礎,經過大幅度的改版,再加入 gdb 除錯器的整合功能後的一個分析工具,其結合了傳統上 crash
的 kernel 相關功能與 gdb 的程式碼除錯功能,可用於分析以下的情況:
- 運行中的 Linux 系統。
- 由 Kdump、makedumpfile、Netdump、Diskdump、Red Hat Diskdump、LKCD(Linux Kernel Crash Dumps)或 Mcore patch(Mission Critical Linux)所產生壓縮或未壓縮的 Linux kernel core dumps。
- 由 Kdump 所產生的 Xen host Linux kernel core dumps 或 Xen hypervisor core dumps。
- 由原始 xendump 或 ELF-format xendump 所產生的 Xen guest Linux kernel core dumps。
- 由 virsh dump 所產生的 KVM guest Linux kernel core dumps。
- 由 IBM standalone core dump 所產生的 s390 或 s390x Linux kernel core dumps。
- Sourceforge 的專案。
若在 Red Hat 或 CentOS 要安裝 Red Hat Crash,可使用 yum
指令:
yum install crash
若在 Novell、SUSE 或 OpenSUSE 中,則可使用 zypper
指令:
zypper install yast2-kdump
Memgrep
Memgrep 是一個很簡單的小工具,可以對執行中的行程或是 core 檔案進行搜尋、取代或傾印的動作。
在 FreeBSD 中可以用 pkg_add
指令安裝:
pkg_add -r -v memgrep
Memdump
Memdump 這個工具可以將系統的記憶體中的資料跳過空白的部分,傾印至標準輸出(standard output),在預設的情況下,它會傾印實體記憶體中的資料(/dev/mem)。
在 Debian 或 Ubuntu Linux 中可以使用 apt-get
來安裝:
sudo apt-get install memdump
FreeBSD 則使用 pkg_add
指令安裝:
pkg_add -r -v memdupm
其詳細的使用說明可以參考線上手冊:
man memdupm
foriana
foriana 是另一個可以從記憶體傾印檔案中擷取行程(processes)或模組(modules)等資訊的工具。
參考資料:nixCraft