セキュリティ
BareMetal RAM Dumper – Cold Boot Attack実験用のベアメタルx86ツール
BareMetal RAM Dumper – Bare-metal x86 tool for Cold Boot Attack experiments (github.com)
要約
BareMetal RAM Dumperは、ディスクまたはUSBから起動し、システムのRAMを直接起動メディアにダンプするシンプルなx86ベアメタルツールです。BIOS割り込みを利用して起動とディスク操作を行い、1MB以上のメモリにアクセスするためにアンリアルモードに切り替わります。このツールは、RAMを凍結して素早く再起動し、データが失われる前にメモリ内容をダンプすることで、暗号化キーなどの機密情報を抽出するコールドブートアタックの実験用に開発されました。
全文翻訳
BareMetal RAM Dumper
ディスク/USBから起動し、システムのRAMを直接起動メディアにダンプするように設計されたシンプルなx86ベアメタルツールです。BIOS割り込みを利用して起動とディスク操作を行い、1MB以上のメモリにアクセスするためにアンリアルモードに切り替わります。
背景: Cold Boot Attack ❄️
このツールは元々、Cold Boot Attackの実験のために開発され、成功裏にテストされました。ラップトップのRAMを(-60°Cまで)凍結し、このツールを含むUSBドライブから素早く再起動することで、データが減衰する前に凍結されたメモリの内容をディスクにダンプすることが可能になり、暗号化キーなどの機密情報の抽出を可能にします。
特徴
* カスタムブートローダー: BIOS(Legacy CSM)から直接起動します。OSは不要です。
* アンリアルモード: 32ビット物理メモリのアドレスにアクセスして読み取るために、一時的にアンリアルモードに切り替わります。
* メモリマップ解析: BIOS INT 0x15 E820を使用して、有効なRAM領域を検出し、予約済みメモリやメモリマップドI/Oのダンプを回避します。
* 直接ディスク書き込み: BIOS INT 0x13 AH=0x43(Extended Write)を使用して、LBA 64から開始してメモリの内容を直接ブートドライブに書き込みます。
仕組み
stage1.asm は512バイトのブートセクタです。セグメントレジスタを初期化し、スタックを設定し、Extended Read(INT 0x13 AH=0x42)を使用してstage2をLBA 1からメモリの0x8000にロードします。その後、stage2にジャンプします。
stage2.asm はメインのロジックを実行します。
* BIOSにEDD(Enhanced Disk Drive)サポートを問い合わせます。
* INT 0x15 E820を使用してメモリマップを取得します。
* 最大RAMサイズを計算します。
* RAMを32KBチャンクでループします。
* 各チャンクについて、アンリアルモードに切り替えて、高位メモリから低位メモリバッファ(0x90000)にデータをコピーします。
* 32KBチャンクをLBA 64から開始してディスクに書き込みます(Extended Writeを使用)。
* 画面に進捗率を表示します。
警告 ⚠️
このツールは、セクタ64から直接、ブートドライブに生のデータを書き込みます!重要なデータが含まれるUSBドライブにこれを書き込むと、RAMダンプはLBA 64以降にあるものを上書きします。この目的のためには、専用の空のUSBフラッシュドライブを使用してください。
ビルド
このプロジェクトをコンパイルするにはNASMが必要です。
Windowsでは、提供されているビルドスクリプトを実行してください: build.bat
Linuxでは、以下を実行できます:
nasm -f bin stage1.asm -o stage1.bin
nasm -f bin stage2.asm -o stage2.bin
cat stage1.bin stage2.bin > boot.bin
使用方法
プロジェクトをビルドしてboot.binを生成します。boot.binをUSBドライブに書き込みます(Linux/macOSではdd、WindowsではRufus / Win32DiskImagerなどを使用)。注意: USBドライブにシステムRAMを保持するのに十分なスペースがあることを確認してください。
例(Linux):
sudo dd if=boot.bin of=/dev/sdX bs=512
ターゲットPCをUSBドライブから起動します(Legacy BIOS / CSMブートが有効になっていることを確認してください)。ダンプが完了するまで待ちます(100%と表示されます)。