4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

メモリフォレンジック解析入門:OSのメモリ構造から理解する

4
Last updated at Posted at 2026-04-19

はじめに

サーバーへの不正アクセスが疑われるとき、
何を最初に確認しますか?

ログ、ディスク……それだけでは足りないことがあります。

👉 攻撃者の痕跡はメモリにしか残っていないことがある

この記事では:

  • フォレンジックとは何か
  • なぜメモリを解析するのか
  • OSはメモリをどう管理しているのか(CS基礎)
  • どうやってメモリダンプを取得・解析するのか

を解説します。


フォレンジックとは

「フォレンジック(forensics)」はラテン語の forensis(「法廷の」)が語源です。

👉 法的証拠として使えるよう、デジタルデータを収集・保全・解析する技術


デジタルフォレンジックの分野

分野 対象 主な用途
メモリフォレンジック RAM(揮発性メモリ) マルウェア検出、暗号鍵抽出
ディスクフォレンジック HDD/SSD 削除ファイル復元、ログ解析
ネットワークフォレンジック パケットキャプチャ 通信記録の解析・追跡
モバイルフォレンジック スマートフォン 通話履歴、アプリデータ抽出
クラウドフォレンジック クラウドサービスのログ 不正アクセスの追跡

メモリフォレンジックが重要な理由

ディスクフォレンジック → 「何が保存されていたか」がわかる
メモリフォレンジック  → 「何が動いていたか」がわかる

👉 ディスクに痕跡を残さない攻撃に対して有効


そもそもメモリとは


物理メモリと仮想メモリ

物理メモリ(RAM)
 └── 実際にマシンに刺さっているチップ

仮想メモリ
 └── OSが各プロセスに「見せる」アドレス空間

👉 各プロセスは自分だけのアドレス空間を持っていると思っている


プロセスのメモリ空間

高アドレス
┌─────────────┐
│  スタック    │ ← 関数の戻り先、ローカル変数
├─────────────┤
│     ↓       │
│   (空き)   │
│     ↑       │
├─────────────┤
│  ヒープ     │ ← malloc/new で動的確保
├─────────────┤
│  データ領域  │ ← グローバル変数、定数
├─────────────┤
│  テキスト領域│ ← プログラムの命令(コード)
└─────────────┘
低アドレス

ページング

OSはメモリを「ページ」という単位(通常4KB)で管理します。

仮想アドレス → ページテーブル → 物理アドレス

👉 ページテーブルはOS(カーネル)が持つ


RAM に載りきらないページは:

  • Linuxなら swap パーティション
  • Windowsなら pagefile.sys

に書き出されます。


なぜメモリにしか残らない情報があるのか


① 暗号鍵・パスワード

HTTPS通信の処理中
 → TLSの秘密鍵がメモリ上に平文で展開される
 → 通信が終わっても直ぐには消えない

👉 ディスクには書かれない


② ファイルレスマルウェア

通常のマルウェア
 → .exe をディスクに書いて実行

ファイルレスマルウェア
 → PowerShell など正規プロセスのメモリ上で動作
 → ディスクに何も残さない

👉 アンチウイルスにも検知されにくい


③ 実行中のプロセス・ネットワーク接続

ps / netstat の出力もメモリ上の情報
 → ログには残らない
 → 再起動したら消える

メモリダンプとは

👉 実行中の物理メモリ全体をファイルとして保存したもの

電源を切ったら消えてしまう情報を、解析できる形で保存する。


Linuxの場合:LiME

LiME(Linux Memory Extractor)はカーネルモジュールとして動作します。

# LiMEをビルドして読み込む
sudo insmod lime.ko "path=/tmp/memory.lime format=lime"

👉 /tmp/memory.lime にメモリダンプが生成される


Windowsの場合

方法 説明
WinPmem オープンソースのツール
タスクマネージャ プロセス単位のミニダンプ
hiberfil.sys ハイバネーション時に自動生成
pagefile.sys スワップ領域(一部のメモリ情報が残る)

VMの場合

VMware → .vmem ファイル(スナップショット時)
VirtualBox → .sav ファイル

👉 スナップショットがそのままメモリダンプになる


解析ツール:Volatility 3

Volatility はメモリダンプ解析の定番ツールです。


インストール

git clone https://github.com/volatilityfoundation/volatility3.git
cd volatility3
pip3 install -r requirements.txt

基本的な使い方

python3 vol.py -f memory.lime [プラグイン名]

主要な解析手順


① プロセス一覧:pslist vs psscan

# pslistはOSのリストをたどる
python3 vol.py -f memory.lime linux.pslist

# psscanはメモリを直接スキャン
python3 vol.py -f memory.lime windows.psscan

👉 psscan の方が隠しプロセスも見つかる


違い:

コマンド 仕組み 特徴
pslist OSのプロセスリストをたどる 速い・改ざんに弱い
psscan メモリ全体をスキャン 遅い・rootkit も検出できる

② ネットワーク接続

# Windowsの場合
python3 vol.py -f memory.dmp windows.netstat
出力例:
PID    Proto   LocalAddr:Port   ForeignAddr:Port   State
1234   TCP     192.168.1.10:80  10.0.0.1:54321     ESTABLISHED

👉 不審な外部接続がないか確認


③ 不審プロセス検出:malfind

python3 vol.py -f memory.dmp windows.malfind

👉 実行可能なメモリ領域に書き込まれたコードを検出


検出の仕組み:

通常のプロセス
 → コードはテキスト領域(読み取り専用)にある

インジェクションされたコード
 → ヒープやスタックに実行権限付きで書かれる

④ 文字列の抽出

python3 vol.py -f memory.dmp windows.strings --string-file strings.txt

または:

strings memory.dmp | grep -i "password\|token\|secret"

👉 平文で保存されているパスワードや鍵を見つけられる


よくある誤解


❌ ディスクを見れば十分

👉 違う

  • ファイルレスマルウェアはディスクに何も残さない
  • ネットワーク接続状態はディスクに記録されない
  • 実行時のメモリ内容はログに残らない

❌ メモリはすぐ消える

👉 完全には消えない

hiberfil.sys → スリープ時のメモリが丸ごと保存される
pagefile.sys → スワップされたページが残る
コールドブート攻撃 → 電源切断直後でもDRAMは数秒〜数分保持する

まとめ

  • メモリはプロセスごとに仮想アドレス空間を持つ
  • メモリにしか残らない情報がある(鍵、マルウェア、接続状態)
  • LiME / WinPmem でメモリダンプを取得できる
  • Volatility 3 で解析できる
  • psscan で隠しプロセス、malfind でインジェクション検出

おわりに

今回のポイントはこれです:

「ディスクを消しても、メモリは残る」

インシデント対応でも CTF でも、
メモリを見る視点を持つと解像度が一段上がります。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?