PR

中間者攻撃(Man-in-the-Middle Attack)の仕組みと対策

この記事は学習用です。ChatGPT と GitHub Copilot を使っています。

1. 中間者攻撃とは

中間者攻撃(Man-in-the-Middle Attack、以下 MITM 攻撃)は、通信の途中に攻撃者が介入し、送受信されるデータを盗聴・改ざん・なりすましを行う攻撃手法である。
「利用者とサーバーの間に“第三者”が割り込む」という構造からこの名称が付けられている。

典型的な例

  • 公衆 Wi‑Fi に接続した利用者の通信を盗聴する
  • 偽の DNS 応答を返して別サイトに誘導する
  • HTTPS 証明書を偽装して暗号通信を解読する

MITM 攻撃は「通信経路を制御できる環境」が前提条件であり、ネットワーク層・アプリケーション層の双方で発生しうる。

2. 攻撃の流れと技術的仕組み

MITM 攻撃の典型的な流れを図に示す。

sequenceDiagram participant A as クライアント participant M as 攻撃者 participant B as サーバー A->>M: リクエスト送信 M->>B: 代理でリクエスト送信 B->>M: 応答データ M->>A: 改ざんまたは盗聴された応答

攻撃の主な技術手法

攻撃手法概要攻撃対象層
ARP スプーフィング偽の ARP 応答を送信して通信経路を乗っ取るデータリンク層
DNS ポイズニング偽の DNS 応答を返して偽サイトに誘導するアプリケーション層
SSLストリッピング(HTTPS ストリッピング)HTTPS へのリダイレクトを妨害し、HTTP にダウングレードさせるアプリケーション層
セッションハイジャックCookie やトークンを奪取して認証を乗っ取るアプリケーション層

3. 暗号化と MITM の関係

HTTPS(Hypertext Transfer Protocol Secure)は、TLS(Transport Layer Security)によって通信内容を暗号化する。
しかし、TLS を使用していても次のような状況では MITM が成立する。

  1. 偽の証明書を信頼してしまう場合
  • 攻撃者が独自のルート証明書を端末にインストールする。
  • SSL インスペクション機器を悪用する。
  1. 中間プロキシによる解析・改ざん
  • 組織内プロキシや VPN ゲートウェイで通信内容を解析可能な構成である場合。
  1. 古い TLS バージョン・暗号スイートの利用
  • TLS 1.0/1.1 は現在非推奨であり、既知の脆弱性があるため攻撃に弱い。

4. 実際の MITM 攻撃例

4.1 公衆 Wi‑Fi 経由の盗聴

攻撃者はオープン Wi‑Fi を設置し、接続した利用者の通信を中継する。
DNS や HTTP リクエストを傍受し、ログイン情報を収集する。

4.2 SSLストリッピング(HTTPS ストリッピング)

利用者が http://example.com にアクセスした際、攻撃者が https://example.com へのリダイレクトを削除し、暗号化通信に移行させない。
この状態でパスワードを入力すると、HTTP 平文で送信される。

4.3 HSTS ストリッピング

攻撃者が初回アクセス時の HSTS ヘッダーを除去・改ざんしたり、HSTS プリロードが未対応のドメインを狙って HTTPS 強制を無効化する。
対策として、HSTS(includeSubDomains; preload)とプリロードリスト登録を組み合わせる。


5. 防御策:MITM 攻撃を防ぐ技術と運用

防御は「通信経路の安全化」と「信頼性の検証」の 2 点が中心となる。

技術的対策

対策項目内容有効範囲
HTTPS の常時化全ページで TLS 通信を使用アプリケーション層
HSTS(HTTP Strict Transport Security)HTTP から HTTPS へのダウングレードと HSTS ストリッピングの抑止(preload 推奨)ブラウザー層
DNSSECDNS 応答に署名を付与し改ざんを検知ネットワーク層
VPN 利用通信全体を暗号トンネル化ネットワーク層
証明書ピンニング特定の公開鍵のみを信頼アプリケーション/モバイル層

運用的対策

  • 公衆 Wi‑Fi では VPN 接続を義務化
  • 不審な証明書警告を無視しない教育
  • サーバー証明書の自動更新(Let's Encrypt など)

6. 開発者視点での防御実装

Web アプリケーションやモバイルアプリ開発者は、以下の設定を明示的に行う必要がある。

HTTPS 強制(例:Nginx)

server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

証明書ピンニング(例:モバイルアプリ)

アプリ側に公開鍵ハッシュを埋め込み、サーバー証明書と一致しない場合に通信を拒否する。

Cookie 設定

Set-Cookie: sessionid=abc123; Secure; HttpOnly; SameSite=Strict

これにより、セッション情報を平文で送信しない。


7. よくある誤解と注意点

誤解実際
HTTPS なら完全に安全証明書偽装・古い暗号スイートには脆弱性がある
VPN を使えば万全信頼できない VPN や VPN サーバーは危険な場合がある
社内 LAN なら安心ARP スプーフィングは LAN 内部でも起きうる

開発・運用・利用のすべての層で防御を多層的に行うことが重要である。


8. まとめ

中間者攻撃は、通信経路を悪用してデータを盗聴・改ざんする代表的なサイバー攻撃である。
現代の Web 通信では TLS が標準となったが、運用設定や利用者教育を怠ると防御効果は限定的となる。
「暗号化」だけでなく、「正しい認証と検証」を組み合わせることが MITM 対策の本質である。


A. 参考サイト

  • https://developer.mozilla.org/ja/docs/Web/Security/Types_of_attacks#中間者攻撃
  • https://www.ipa.go.jp/archive/security/vuln/programming/web/chapter3/3-3.html

B. 関連書籍

コメント