ゆめさくセキュリティ

レッスン 1-6

名前解決と信頼の境目

名前解決を握られると、通信の行き先を握られます。

送り元の住所が社内なら通す、という守りは、社内の網の内と外に境目があることを前提にしています。遠隔接続、クラウド、私物の端末で、この境目は消えました。名前解決が守る物と守らない物、要求ごとに相手を確かめる作り、記録での見え方と、直ったことを試験で確かめる方法までを扱います。

  • 目安60 分
  • 出典を確かめた日2026年10月24日
  • 修了の条件「社内だから安全」が成り立たない理由を、境目が消えたことから説明できる

なぜ通るのか

社内向けに、給与の一覧を返す API (プログラムから呼ぶ窓口) を作ったとします。外からは届かない網に置き、送り元の IP アドレス (網の上の住所) が社内の物なら答える作りにしました。社内の人しか呼べないので、ログインは要らないと考えました。

この作りは、「社内の住所から来た要求は、社内の人が出した物だ」という前提に立っています。

境目が消えた

VPN (社外から社内の網へつなぐ仕組み) でつないだ端末には、社内の住所が付きます。委託先の保守の機械も、同じように社内の網に入ります。どれかが乗っ取られれば、そこからの要求は社内の住所から来ます。

NIST SP 800-207 は、ゼロトラストを、遠隔で働く人、私物の端末、会社の網の外にあるクラウドの資源という変化への答えとしています。そのうえで、物理的な場所や網の上の場所だけを理由に、端末やアカウントを信じないことを前提に置きます。

前提崩れる理由
社内の住所なら社内の人遠隔接続や委託先の機械も社内の住所を持つ
外からは届かない入口が 1 つ破られれば、中は届く
中の機械は正しい乗っ取られた機械も中にある

名前解決が守る物と守らない物

DNS (名前から住所を引く仕組み) の答えで、通信の行き先が決まります。答えを偽られれば、正しい名前につないだつもりで別の住所へ行きます。

RFC 4033 によると、DNSSEC (DNS の答えに署名を付ける仕組み) は、答えがどこから来たかと、書き換えられていないことを確かめられるようにします。一方で、わざと秘密を守る作りにはしていません。問い合わせの中身を隠すには、RFC 8484 の DoH (DNS の問い合わせを HTTPS で送る決まり) のような別の仕組みを使います。

同じ名前の答えは、時間とともに変わることもあります。名前で確かめたあと、使う時に引き直すと、確かめた時と違う住所につながることがあります。住所や名前だけを信じる守りは、どれもこの種の弱さを持ちます。

要求ごとに確かめる

NIST SP 800-207 は、網の上の場所に関わらずすべての通信を守ること、資源への出入りは 1 回のつながりごとに相手を評価して与えることを、基本の考え方に挙げています。社内の網の中からの要求にも、外からと同じ求めを当てる、ということです。

脆いコードと直したコード

ラボの中の小さな関数で比べます。Python に付いている http.server、ipaddress、hmac だけで動き、待ち受けは 127.0.0.1 です。どちらの要求も同じ 127.0.0.1 から届くので、「社内から来た」を手元で再現できます。

住所で信じるか、要求ごとに確かめるか

脆いコード送り元が社内の住所なら通す
def allowed(req):ip = ipaddress.ip_address(req.client_address[0])return ip.is_private
直したコード呼び出し元の鍵を毎回確かめる
TOKENS = {"billing": os.environ.get("BILLING_TOKEN", "")} def allowed(req):got = req.headers.get("Authorization", "")for name, t in TOKENS.items():if t and hmac.compare_digest(got, "Bearer " + t):return namereturn None

同じ 127.0.0.1 から、鍵を持たないプログラムで呼ぶと、脆い方は給与の一覧を返し、直した方は 401 (認証が要る) で止めます。直した方は、どの呼び出し元が来たかを名前で返すので、記録にも残せます。鍵は、呼ぶ側のサービスごとに分け、環境から渡し、コードには書きません。本番では、TLS のレッスンで見た証明書を両側で確かめる形 (相互 TLS) や、期限の短い鍵を使う形もあります。

ログでの見え方と検知

脆い方の記録には、送り元の住所しか残りません。

記録脆いときの記録
GET /payroll 200 src=127.0.0.1GET /payroll 200 src=127.0.0.1

どちらの要求も同じに見え、どれが正しい呼び出しかを後から区別できません。直した方では、呼び出し元の名前が残ります。

記録直したときの記録
GET /payroll 200 caller=billingGET /payroll 401 caller=-

守る側は次を見張ります。

見る物なぜ効くか
呼び出し元が分からない要求鍵を持たない誰かが中にいる印
ふだん呼ばない組み合わせ乗っ取られた機械からの横の動き
遠隔接続の入口の記録中に入った経路を後から追える

遠隔接続の入口の記録は、入口の機器の中にしか無いことがあります。消える前に、別の場所へ写して残します。

直し方と、直ったことの確かめ方

自分の PC の中だけで行います。待ち受けは 127.0.0.1 に固定し、外のサービスや他人の機械には向けません。

  1. 作業用のフォルダで、脆い allowed を使う小さな API を 127.0.0.1 で動かす
  2. 鍵を持たないプログラムから呼び、給与の一覧が返ることを確かめる
  3. 直したコードに置き換え、鍵を環境から渡して動かし直す
  4. 鍵なしと違う鍵では 401、正しい鍵でだけ 200 が返ることを確かめる
  5. 下の試験を足し、住所で信じるコードに戻すと試験が落ちることも確かめる
  6. 終わったら、API を止め、作業用のフォルダごと消す
Python直ったことを固める試験
def test_no_token_from_inside(url):assert call(url) == 401 def test_wrong_token(url):assert call(url, "x") == 401 def test_right_token(url, token):assert call(url, token) == 200

試験は「同じ社内の住所から来ても、鍵が無ければ止まる」ことを固定します。あとで誰かが住所で信じる書き方に戻しても、ここで止まります。

あわせて、遠隔接続の入口を棚卸しします。使っていない入口とアカウントを消し、残す入口には多要素認証と接続元の制限を付け、機器の脆弱性を直します。

関わる事例

どれも、遠隔接続の入口から社内の網に入られた事例です。

事例入口
Colonial Pipeline (2021年)使われていないはずの古い VPN のプロファイル
大阪急性期・総合医療センター (2022年)給食の委託先の遠隔保守の機器から、病院のサーバーへ
名古屋港 (2023年)保守用の VPN からとみるのが適切とされた
イセトー (2024年)VPN からの不正アクセス
アサヒグループ (2025年)拠点のネットワーク機器を経由

名古屋港の統一ターミナルシステムでは、保守用の VPN に接続元の制限が無く、ID とパスワードが合えばインターネット上の誰からでもつなげました。大阪急性期・総合医療センターでは、中に入ったあと、全員に管理者の権限があり、Windows のパスワードがサーバーと端末ですべて共通でした。入口を通ったあとの中が、信じる前提で作られていたことになります。

アサヒグループは、2026年2月の再発防止策で、遠隔接続の VPN の装置を全面的にやめると示しました。Colonial Pipeline の件は、CISA と FBI の共同の勧告が、パイプライン会社の IT の網に DarkSide のランサムウェアが使われたと書いています。

確認クイズ

1 問目

社内向けの API で、送り元の住所が社内の範囲なら通す作りになっています。いちばんの問題はどれですか。

  • ア 社内の範囲の書き方が長い
  • イ 社内の住所を持つ機械が乗っ取られると、そのまま通る
  • ウ 外からの要求が遅くなる
答えと理由を見る

答え イ

遠隔接続でつないだ端末や委託先の機械も、社内の住所を持ちます。どれか 1 台が乗っ取られれば、その要求は社内から来たように見えます。住所ではなく、呼び出し元を要求ごとに確かめます。

2 問目

DNSSEC で守れる物はどれですか。

  • ア 問い合わせた名前を、途中の人に見られないこと
  • イ 答えが書き換えられていないこと
  • ウ つないだ先のサーバーが乗っ取られていないこと
答えと理由を見る

答え イ

RFC 4033 によると、DNSSEC が足すのは、答えの出どころと書き換えられていないことの確かめです。秘密を守る作りにはしていません。つないだ先のサーバーの中の状態は、名前解決では分かりません。

説明課題

次のことを、自分の言葉で 3 行にまとめてください。書けたら、このレッスンは修了です。

  • 「社内だから安全」が成り立たない理由を、境目が消えたことから
模範解答を見る

「社内だから安全」は、社内の網の住所を持つのは社内の人だけ、という境目を前提にしている。遠隔接続、委託先の機械、クラウドで、外の物も社内の住所を持つようになり、この境目は消えた。だから住所ではなく、要求ごとに呼び出し元を確かめる。

一次資料

どれも 2026年10月24日に開いて、題と中身を確かめました。

次へ

次のレッスンは「SQL インジェクション」です。ここからはトラック 2 で、値のはずの入力が、データベースへの命令として読まれる穴を扱います。

次のレッスン 2-1 SQL インジェクション

このレッスンにつながる物