Dev Study
← セキュリティとAIの仕組み
レッスン 4 / 13·約 9 分·第4期 セキュリティとAIの仕組み

なぜ盗み見できるのか — 平文と経路上の第三者

リクエストがアプリケーションに届くまで
  1. ブラウザURL入力今ここ
  2. DNS名前→IP
  3. ルータ経路選択今ここ
  4. ロードバランサ振り分け
  5. Nginx受け口
  6. アプリ処理
  7. DB保存

第16週でスイッチが「宛先を知らなければ受信したポート以外の全ポートへ複製する」ことを、第25週で名前解決が何往復もすることを見ました。今回はその経路の上に第三者が居た場合に何が読めるのかを扱います。

まず結論

盗聴が成立するのは、攻撃者が特別な力を持つからではありません。**経路上に居られる**ことと、**流れているものが平文である**こと。この2つが揃うだけで成立します。

RFC 3552 は「攻撃者が通信路をほぼ完全に支配しうる」を前提として置いています。つまり「経路は信頼できる」という仮定を置かないところから設計が始まります。

? 読む前に予測

RFC 3552 (BCP 72) がインターネットの脅威モデルとして置いている前提は、次のどれに最も近いでしょうか。

当てることが目的ではありません。外した予測ほど記憶に残るので、直感で選んでください。

抽象原理

前提が「経路は信頼しない」から始まる

セキュリティの文書を読むとき、最初に確かめるべきは攻撃者に何ができると仮定しているかです。RFC 3552 はそれを一節使って定義しています。

"A THREAT MODEL describes the capabilities that an attacker is assumed to be able to deploy against a resource."

そして肝心の仮定がこれです。

"By contrast, we assume that the attacker has nearly complete control of the communications channel over which the end-systems communicate."

端点については “we assume that the end-systems engaging in a protocol exchange have not themselves been compromised”——侵害されていないと仮定します。端点は信頼し、経路は信頼しない。 この非対称が設計の出発点です。

盗聴が成立する理由は、ここからほぼ自動的に出てきます。経路を信頼しないとは、経路上の誰かが読んでいるかもしれないということです。そこに平文を流せば、読まれます。特別な技術は要りません。

✓ ここまでの確認

RFC 3552 §3.2 は、スイッチングハブについてどう述べていますか。

具体実物

スイッチは何を変え、何を変えないのか

第16週で、スイッチが宛先MACを表で引き、載っていなければ受信したポート以外の全ポートへ複製する(フラッディング)ことを見ました。裏を返せば、載っていれば当該ポートにしか流しません。RFC 3552 §3.2 はこの性質に明示的に触れています。

RFC 3552 §3.2 が「読める」としている位置表
位置 RFCの記述
同じLAN上(Ethernet等) any machine on the wire can read all traffic
スイッチ環境 substantially more difficult(難しくなる)
経路上のホストを支配 is able to mount a passive attack
無線 especially vulnerable to passive attacks

2行目と3行目を並べたのは、ここが読み違えられる場所だからです。スイッチが下げるのは難易度であって、3行目——経路上のホストを押さえられた場合——には効きません。

"Similarly, an attacker who has control of a host in the communications path between two victim machines is able to mount a passive attack on their communications."

スイッチは「同じ部屋に居るだけでは読めない」を作りますが、経路そのものに居る相手には何もしません。第16週の言い方をすれば、スイッチは配達先を絞る装置であって、配達物に封をする装置ではありません。

✓ ここまでの確認

RFC 3552 の言う受動攻撃(PASSIVE ATTACK)と能動攻撃(ACTIVE ATTACK)を分ける基準は何ですか。

⇄ 2つを見比べる
具体例 A

スイッチが配達先を絞る(第16週)

スイッチは宛先MACを表で引き、該当するポートにだけフレームを流します。これによって、同じLANに繋いだだけの機器には他人宛の通信が流れてこなくなります。ただし流れているフレームの中身は何も変わっておらず、経路上の機器からは読めます。

スイッチが変えるもの / 変えないもの表
変える: どのポートへ流すか(届く範囲)
変えない: フレームの中身(平文のまま)
具体例 B

名前解決が宛先を教える(第25週)

第25週で見たとおり、名前解決は委任を辿って「この名前はこのアドレスだ」という答えを持ち帰ります。これも宛先を決める仕組みであって、その後に流れる通信の中身を守る仕組みではありません。得られた答えをどう信頼するかは、別に用意しなければならない関心事です。

名前解決が決めるもの / 決めないもの表
決める: どのアドレスへ繋ぐか(宛先)
決めない: その通信を誰が読めるか

スイッチの転送と、名前による宛先の決定。この2つに共通する「守れないもの」は何でしょうか。

どちらも「どこへ送るか」を決めています。では「送っている間、誰に見えるか」は誰が決めているでしょうか。

この章のまとめ

  • RFC 3552 §3 の脅威モデルは、端点は侵害されていないと仮定し、通信路は攻撃者がほぼ完全に支配しうると仮定する。
  • 受動攻撃は読むだけ。書き込みを要するものが能動攻撃(§3.1)。読むだけなので痕跡が残りにくい。
  • スイッチについてRFCは “substantially more difficult” と書く。難易度を上げるが、不可能にはしない。 経路上のホストを支配された場合には効かない。
  • 無線は “especially vulnerable to passive attacks”。経路上に居るための条件が緩いため。
  • 宛先を絞ることと、中身を隠すことは別の関心事。 秘匿は独立した仕組みで与える必要がある。

自分の現場で確かめる

読んだだけでは身につきません。手元の環境で実際に見てみてください。

環境:

理解度チェック

読んだ直後は「分かった」と感じやすいものです。実際に解いて確かめてください。

問題 1 / 3正解: 0

「社内ネットワークはスイッチで構成されているので、内部の通信を平文で流しても盗聴されない」——この説明の評価はどれですか。

用語集(4語)
受動攻撃 (passive attack)
攻撃者がネットワークからパケットを読むだけで、書き込みを行わない攻撃(RFC 3552 §3.1)。通信は正常に流れ続けるため、被害側に痕跡が残りにくい。
能動攻撃 (active attack)
攻撃者がネットワークへ書き込むことを要する攻撃(RFC 3552 §3.1)。“Any attack which requires the attacker to write to the network” と定義される。
インターネット脅威モデル (RFC 3552 §3)
攻撃者に何ができると仮定するかを定めたもの。RFC 3552 は、端点は侵害されていないと仮定する一方、通信路については攻撃者がほぼ完全に支配しうると仮定する。
平文 (cleartext)
暗号化されずに流れているデータ。RFC 3552 §3.2.1 は、SSLが広く使えるにもかかわらず多くのクレジットカード取引が平文でインターネットを流れている、と当時の例を挙げている。