#109 Linux Memory Dump
揮発性メモリは、ナマモノゆえ扱いが難しく、調査には専門的な技術が必要です。プロセスの情報や処理の内容など、重要な情報が手に入る可能性もあるので見過ごせません。
メモリの調査をするには、まず、メモリのダンプを作成しなければいけません。それでは、やってみましょう!
Linuxのメモリダンプ
環境
手元のPCでやってみました。Ubuntuです。
$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.3 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.3 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
lmg
lmg (Linux Memory Grabber)は、Linuxのメモリダンプ用のツールを統合して、お手軽にダンプできるスクリプトです。いろいろとセットアップが必要です。
1. USBをセットアップ
メモリ調査の際は、対象のPCにできるだけ影響を与えないように追加のツールをインストールすることは避けます。USB内に必要なツールを準備していきます。
管理者権限でUSBをマウントします。
sudo su
mkdir -p /mnt/usb
mount /dev/sdc1 /mnt/usb
2. lmgを用意
lmgの実行ファイルをコピーします。
git clone https://github.com/halpomeranz/lmg.git
cp ./lmg/lmg /mnt/usb
cp ./lmg/lime-Makefile.patch /mnt/usb
cp static-dwarfdump.tgz /mnt/usb
3. avmlをビルド
avmlをクローンします。avmlはMicrosoftが開発するメモリのダンプツールです。
git clone https://github.com/microsoft/avml.git
Rustで作られているので、Rustのビルド環境が必要です。用意してください。以下の手順でビルドします。
cd avml
cargo build --release
mkdir /mnt/usb/avml
cp target/release/avml /mnt/usb/avml/avml-$(uname -m)
cp target/release/avml-convert /mnt/usb/avml/avml-convert-$(uname -m)
4.LiMEの用意
LiMEもavml同様のメモリダンプツールです。こちらもクローンしてきます。パッチをあてる必要があります。
cd /mnt/usb
git clone https://github.com/504ensicsLabs/LiME.git
cd LiME/src
patch < /mnt/usb/lime-Makefile.patch
5. dwarfdumpの展開
lmgに同梱されているdwarfdumpを展開します。
cd /mnt/usb
tar zxf static-dwarfdump.tgz
6.Volatilityの用意
最後に調査用のフレームワークのVolatirityをクローンします。
git clone https://github.com/volatilityfoundation/volatility.git
さあ、準備が整いました。
7. 実行
以下のコマンドでLinuxのメモリダンプが始まります。
./lmg -y
途中でエラーが出てしまいましたが、ダンプは作成されたみたいです。あとは煮るなり焼くなりですね。
まとめ
メモリフォレンジックの一端に触れてみました。メモリダンプは、OSやカーネルのバージョンによっても方法が違います。かなり奥が深いので、一度ハマったら大変です… メモリの内容の調査のほうも近々やってみます!
EOF