レッスン 1-5
認証の仕組み
パスワード、
パスワードは
なぜ通るのか
小さな
どれも
パスワードの保存
保存した
SHA-256 のような
OWASP が
| 方式 | 最低限の設定 |
|---|---|
| Argon2id | 記憶 19 MiB、 |
| scrypt | 手間 2^17、 |
| bcrypt | 手間 10 以上。 |
セッション
ログインに
OWASP の
多要素認証とパスキー
リスト型攻撃は、
ただし NIST SP 800-63B は、
パスキー (WebAuthn と
- 鍵は
登録した サイトの 名前 (RP ID) ごとに 作られ、 ほかの 名前では 使えない - RP ID は、
開いている ページの ドメインか、 その 上位の ドメインに 限られる - ブラウザは、
署名する 中身に 開いている ページの 住所 (origin) を入れる - サーバーは
origin と RP ID の 要約が 自分の 物かを 確かめる
偽の
脆いコードと直したコード
ラボの
速いハッシュか、ソルトと手間を足すか
def store(pw):return hashlib.sha256(pw.encode()).hexdigest()def store(pw):salt = os.urandom(16)h = hashlib.scrypt(pw.encode(), salt=salt,n=2**17, r=8, p=1,maxmem=2**28)return salt + h2 人がhmac.compare_digest で
origin を見るか、見ないか
パスキーの
def verify(cdata, auth, chal):c = json.loads(cdata)return (c["type"] == "webauthn.get"and c["challenge"] == chal)def verify(cdata, auth, chal):c = json.loads(cdata)rp = hashlib.sha256(RP_ID.encode()).digest()return (c["type"] == "webauthn.get"and c["challenge"] == chaland c["origin"] == ORIGINand auth[:32] == rp)ORIGIN は https://shop.example、RP_ID は
ログでの見え方と検知
リスト型攻撃は、
login_failed user=u1021 src=lab-alogin_failed user=u2307 src=lab-alogin_failed user=u0815 src=lab-alogin_ok user=u3342 src=lab-a1 人ずつ
| 見る物 | な |
|---|---|
| 送り元ごとの、 | リスト型攻撃は |
| 失敗が | 当たった |
| origin が | 偽の |
| 多要素認証の | 例外は |
直し方と、直ったことの確かめ方
自分の
- 作業用の
フォルダで、 利用者の 表を 持つ 小さな ログインの 仕組みを 動かす (待ち受けは 127.0.0.1) - 脆い
storeで2 人に 同じ パスワードを 登録し、 表の 値が 同じに なる ことを 確かめる - 直した
コードに 置き換え、 値が 違う こと、 正しい パスワードでだけ通る ことを 確かめる - ログインに
通ったら、 セッションの 番号を 作り直すようにする - 下の
試験を 足し、 直す前の コードに 戻すと 試験が 落ちる ことも 確かめる - 終わったら、
作業用の フォルダごと消す
def test_same_pw_differs():assert store("haru") != store("haru") def test_other_origin_rejected():cd, ad = make("https://shop-example.test","shop-example.test")assert not verify(cd, ad, "abc")試験は
すでに
関わる事例
アスクルでは、
Colonial Pipeline では、
Change Healthcare では、
KADOKAWA では、
4 件とも、
- 2025年10月19日、小売・EC・物流 アスクル ランサムウェア被害 入口 例外的に
多要素認証を 適用していなかった 業務委託先向けの 管理者アカウントの IDと パスワードが 漏れ、 不正に 使われた - 2025年9月29日、製造 (飲料・食品) アサヒグループ ランサムウェア被害 入口 障害の
約10日前に、 外部の 攻撃者が グループ内の 拠点に ある ネットワーク機器を 経由して 侵入した - 2024年6月9日、出版・メディア・Webサービス KADOKAWAグループ ランサムウェア被害 入口 フィッシングなどで
従業員の アカウント情報が 盗まれた ことが 根本原因と 推測されている (経路と 方法は不明) - 2024年2月22日、医療 (診療報酬の請求と支払いの処理) Change Healthcare の
ランサムウェア被害 入口 2024年2月12日、盗まれた 認証情報で Citrix の 遠隔接続ポータルに 入られた。 親会社 CEO は、 その ポータルに 多要素認証が なかったと 議会で 証言した - 2021年5月8日、エネルギー (燃料パイプライン) Colonial Pipeline の
ランサムウェア被害 入口使われていないはずの 古い VPN の プロファイルが 悪用された。 その VPN は 多要素認証が 無く パスワードだけで 通った ことを、 CEO が 上院の 公聴会で認めた
確認クイズ
1 問目
ログインに、
- ア コードは
本物の サイトでしか 表示されないので 守られる - イ 偽の
画面が、 打ち込まれた パスワードと コードを 本物へ 中継できる - ウ コードは
暗号化されているので 中継できない
答えと理由を見る
答え イ
打ち込む型の
2 問目
パスワードの
- ア SHA-256 に、
全員に 共通の 文字列を足す - イ Argon2id に、
人ごとに 違うソルトを足す - ウ 復号できる
暗号で 保存する
答えと理由を見る
答え イ
速い
説明課題
次の
- パスキーが
フィッシングに 強い 理由を、 ドメインとの 結び 付きから
模範解答を見る
パスキーの
一次資料
どれも
- NIST Special Publication 800-63B (NIST、英語)。
パスワードは ソルトと 手間を 足して ハッシュに する こと、 打ち込む型は フィッシングに 強いと みなさない こと、 確かめる 側の 名前への 結び付き - Web Authentication An API for accessing Public Key Credentials Level 3 (W3C、英語)。
鍵が RP ごとに 作られる こと、 RP ID の 決まり、 origin と RP ID の 要約を 確かめる手順 - Password Storage Cheat Sheet (OWASP、英語)。
速い ハッシュが 向かない こと、 Argon2id と scrypt と bcrypt の設定 - Session Management Cheat Sheet (OWASP、英語)。
番号の 予測できなさと、 権限が 変わった ときの 作り直し - Credential Stuffing Prevention Cheat Sheet (OWASP、英語)。
多要素認証が リスト型攻撃への 最も 強い 守りであること - ランサムウェア攻撃の
影響調査結果 。アスクルのおよび 安全性 強化に 向けた 取り組みの ご報告 第13報 (アスクル、 日本語、 2025年12月12日) サイバーセキュリティのページ から開ける 報告。 業務委託先の 管理者アカウントに 例外的に 多要素認証が 無かった こと、 検知の 5 日後の 10月24日に 管理アカウントへ 多要素認証を 適用したこと - S. Hrg. 117-429 Threats to Critical Infrastructure, Examining the Colonial Pipeline Cyberattack (米上院 国土安全保障・
政府問題委 。員会、 英語、 2021年6月8日の 公聴会の記録) 古い VPN の プロファイルの 悪用 (CEO の 書面の 証言)、 その VPN が 1 つの 要素の 認証だけだった こと (質疑での CEO の答え) - Testimony of Andrew Witty, Chief Executive Officer, UnitedHealth Group (米下院 エネルギー・
商業委員会、 。委員会の英語、 2024年5月1日) 公聴会のページ に載る 証言書。 2024年2月12日に 盗まれた 認証情報で 遠隔接続の ポータルに 入られた こと、 その ポータルに 多要素認証が 無かったこと - ランサムウェア攻撃に
よる 。情報漏洩に 関する お知らせ (KADOKAWA、 日本語、 2024年8月5日) フィッシングなどで 従業員の アカウント情報が 盗まれた ことが 根本原因と 推測され、 経路と 方法は 不明であること
次へ
次の