レッスン 4-4
消えた
読み終えたら自分の
この頁の流れ
デジタルフォレンジック (機器に
出典を確かめた日 2026年10月27日
なぜ通るのか
侵入の
調べる
デジタルフォレンジックとは
警察庁は、
会社の
| 段 | すること |
|---|---|
| 収集 | 記録を、 |
| 検査 | 集めた |
| 分析 | 取り出した |
| 報告 | 分かった |
消えやすい物から集める
RFC 3227 は、
| 順 | 物 |
|---|---|
| 1 | CPU の |
| 2 | 経路の |
| 3 | 一時的な |
| 4 | ディスク |
| 5 | 遠くに |
| 6 | 物理の |
| 7 | 控えの媒体 |
同じ
証拠の完全性と、扱いの記録
集めた
もう
時刻はずれている前提で並べる
時系列を
脆いコードと直したコード
ラボの
文字のまま並べるか、協定世界時にそろえるか
Python
def timeline(rows):
return sorted(rows, key=lambda r: r["time"])Python
from datetime import datetime, timedelta, timezone
def to_utc(text, tz_hours, skew_sec=0):
t = datetime.fromisoformat(text)
if t.tzinfo is None:
t = t.replace(tzinfo=timezone(timedelta(hours=tz_hours)))
return t.astimezone(timezone.utc) - timedelta(seconds=skew_sec)
def timeline(rows):
return sorted(rows, key=lambda r: to_utc(
r["time"], r["tz"], r.get("skew", 0)))脆い方は、
写すだけか、写したことを示せるか
Python
import shutil
def collect(src, dst):
shutil.copy(src, dst)Python
import hashlib, json, shutil
from datetime import datetime, timezone
def sha256(path):
with open(path, "rb") as f:
return hashlib.sha256(f.read()).hexdigest()
def collect(src, dst, who, ledger):
before = sha256(src)
shutil.copy2(src, dst)
after = sha256(dst)
if before != after:
raise ValueError("写しが元と違う")
with open(ledger, "a") as f:
f.write(json.dumps({
"ts": datetime.now(timezone.utc).isoformat(),
"who": who, "src": str(src), "sha256": after,
}, ensure_ascii=False) + "\n")
return afterimport hashlib, json, shutil
from datetime import datetime, timezone
def sha256(path):
with open(path, "rb") as f:
return hashlib.sha256(f.read()).hexdigest()
def collect(src, dst, who, ledger):
before = sha256(src)
shutil.copy2(src, dst)
after = sha256(dst)
if before != after:
raise ValueError("写しが元と違う")
with open(ledger, "a") as f:
f.write(json.dumps({
"ts": datetime.now(timezone.utc).isoformat(),
"who": who, "src": str(src), "sha256": after,
}, ensure_ascii=False) + "\n")
return after脆い方では、shutil.copy はshutil.copy2 を
これは
ログでの見え方と検知
自分の
記録
2026-10-27 10:05:00 web /admin へのログイン成功
2026-10-27T01:06:00Z vm 新しい利用者 backup2 を作成
2026-10-27T01:09:00Z vm cron に新しい行を追加これでは、
記録
01:03:00 vm 新しい利用者 backup2 を作成
01:05:00 web /admin へのログイン成功
01:06:00 vm cron に新しい行を追加利用者は、
| 見る物 | なぜ効くか |
|---|---|
| 機械ごとの | ずれを |
| 写しの | 合わなければ、 |
| 記録の | 攻撃者が |
| 調べる | 自分たちの |
直し方と、直ったことの確かめ方
自分の
- 練習用の
VM を 1 台作り、 ログインし、 利用者を 1 人足し、 cron に 1 行足す。 それぞれの 操作の 時刻を 手元の メモに 書いておく - VM の時計を
dateで読み、 手元の 正しい 時刻との 差を 秒で控える - 直した
collectで、VM の 認証の 記録と cron の 設定を 写し、 ハッシュと 扱いの 記録が 残る ことを 確かめる - 写しから
行を 抜き出し、 時間帯と 時計の ずれを 付けて、直した timelineで並べる - 並んだ
順番が、 手元の メモと 同じかを 確かめる。 違えば、 どこで 時刻を 取り 違えたかを 書く - 下の
試験を 足して 通し、 終わったら VM と 作業用の フォルダごと消す
Python
def test_order_across_timezones():
rows = [
{"src": "web", "time": "2026-10-27 10:05:00", "tz": 9},
{"src": "vm", "time": "2026-10-27T01:06:00+00:00",
"tz": 0, "skew": 180},
]
assert [r["src"] for r in timeline(rows)] == ["vm", "web"]
def test_copy_is_verified(tmp_path):
src = tmp_path / "auth.log"
src.write_text("login ok\n")
ledger = tmp_path / "custody.jsonl"
h = collect(src, tmp_path / "copy.log", "analyst-1", ledger)
assert h == sha256(src)
assert len(ledger.read_text().splitlines()) == 1def test_order_across_timezones():
rows = [
{"src": "web", "time": "2026-10-27 10:05:00", "tz": 9},
{"src": "vm", "time": "2026-10-27T01:06:00+00:00",
"tz": 0, "skew": 180},
]
assert [r["src"] for r in timeline(rows)] == ["vm", "web"]
def test_copy_is_verified(tmp_path):
src = tmp_path / "auth.log"
src.write_text("login ok\n")
ledger = tmp_path / "custody.jsonl"
h = collect(src, tmp_path / "copy.log", "analyst-1", ledger)
assert h == sha256(src)
assert len(ledger.read_text().splitlines()) == 11 つ目の
調べの記録を 1 枚にまとめる
報告には、
記録
対象 練習用 VM 1 台、Web サーバーの記録 1 日分
集めた物 認証の記録、cron の設定 (sha256 と扱いの記録あり)
時刻 VM は協定世界時で 180 秒進み、Web は日本時間
分かった 利用者の作成が、管理画面へのログインより 2 分早い
分からず 利用者を作った操作の送り元 (記録が無い)
次の手 VM の外への記録の送り出しを足す関わる事例
記録が
KADOKAWA は、
止める
確認クイズ
1 問目
侵入の
答えだと思う選択肢を押すと、その場で正誤と理由が開きます。
答え イ
RFC 3227 は、
2 問目
Web サーバーの
答えだと思う選択肢を押すと、その場で正誤と理由が開きます。
答え ア
時間帯が
説明課題
次の
- 自分の
VM で 起きた ことを 時系列で 組み立て 直す時、 集める 順番、 写した 物が 元と 同じ ことの 示し方、 時刻の そろえ方
模範解答を見る
メモリや
一次資料
どれも
- デジタル・
フォレンジック (警察庁、 。日本語) 犯罪の 立証の ための 電磁的記録の 解析技術と その 手続きと いう 説明、 消すのも 書き換えるのも 簡単なので 適正な 手続きが 要ること - SP 800-86 Guide to Integrating Forensic Techniques into Incident Response (NIST、
英語、 。2006年8月) 収集、 検査、 分析、 報告の 4 つの 段、 メッセージダイジェストでの 写しの 確かめ、 ファイルの 時刻が 正しくない 理由、 時刻合わせ - RFC 3227 Guidelines for Evidence Collection and Archiving (IETF、
英語、 。2002年2月) 消えやすい 物からの 順番と その 例、 扱いの 記録 (chain of custody) - 証拠保全
ガイドライン 第10版 (デジタル・ 。フォレンジック 研究会、 日本語) 国内で 使われる 証拠保全の 手引き。 研究会の 書籍と 資料の 頁から開ける - 不正アクセスによる
個人情報と 。企業機密の 流出 可能性に ついて (三菱電機、 日本語、 2020年1月20日) 送り出された ファイルを 特定する ための 記録が 消されていたこと - 株式会社
DMM Bitcoinに 。対する 行政処分に ついて (財務省 関東 財務局、 日本語、 2024年9月26日) 証拠保全の ための 記録の 保存期間を 検討していなかったこと - KADOKAWA
グループの 。複数 ウェブサイトに おける 障害の 発生に ついて (KADOKAWA、 日本語、 2024年6月9日) データを 守る ために 関わる サーバーを 急いで 止めたこと - ランサムウェア
攻撃による 。情報漏洩に 関する お知らせ (KADOKAWA、 日本語、 2024年8月5日) 根本原因が 推測にと どまること
次へ
次の
