セキュアコーディング SSL Stripの攻撃と対策

ウェブサイトのアドレスバーに🔒の鍵マークを見たことがあるでしょう。これは「安全なサイト」を示しています。しかし、HTTPSが有効だからといって必ずしも安全とは限りません。もしサイトの設定が不十分であれば、攻撃者は簡単に接続をHTTPに「ダウングレード」し、あなたの情報を盗み見ることが可能です。

この攻撃手法はSSL Stripと呼ばれ、10年以上前から存在するものの、今なお多くのシステムに脅威を与えています。

🕵️ SSL Stripはどう動くのか?

まず、HTTPSとは何かを理解しましょう。HTTPS(Hypertext Transfer Protocol Secure)は、HTTPの安全版であり、SSL/TLS証明書を用いてブラウザとサーバー間の通信を暗号化します。これにより、通信内容が盗聴や改ざんされるリスクが大幅に減少します。

しかし、多くのユーザーは「https://」を省略してドメイン名だけを入力します。例えば「example.com」と入力すると、ブラウザは最初に暗号化されていないHTTPで接続を試みます。
この「最初の接続」が攻撃者の絶好の隙となります。

攻撃者はWiFiなどのネットワークを掌握し、あなたとウェブサイトの間に入り込む(MITM攻撃:Man-in-the-Middle)。ユーザーがHTTPで接続しようとすると:

  • ブラウザの自動的なHTTPSリダイレクトを妨害し、
  • 攻撃者は本物のサーバーへは安全なHTTPSで接続しつつ、
  • ユーザーにはHTTPのまま偽のページを返します。

結果、ユーザーは安全なサイトを見ていると錯覚しますが、通信は暗号化されておらず、入力したIDやパスワードが盗まれてしまいます。

🧠 なぜ今もSSL Stripが通用するのか?

「今どきHTTPSは当たり前なのに?」と思うかもしれません。しかし、以下の理由でSSL Stripは依然として強力です:

  • ユーザーは「https://」をわざわざ入力しない習慣がある。
  • ブラウザは初期接続でHTTPを使う仕様が多い。
  • 多くのウェブサイトがHSTS(HTTP Strict Transport Security)を有効化していない。
  • HTTPからHTTPSへのリダイレクトが攻撃者に妨害される可能性がある。
  • HTTPSページ内にHTTPで読み込まれるコンテンツ(Mixed Content)が存在し、脆弱性が残る。

🛡️ SSL Stripを防ぐには?
SSL証明書を入れるだけでは不十分です。以下3点を確実に実施しましょう。

1. HTTPからHTTPSへ強制リダイレクトを設定する
サーバーでHTTPアクセスをすべてHTTPSに恒久的(301リダイレクト)に転送します。
例:Nginx

server {
    listen 80;
    return 301 https://$host$request_uri;
}

例:Apache

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

2. HSTSを有効にする
HSTSヘッダーはブラウザに「今後このサイトは必ずHTTPSで接続しろ」と命令します。これにより、ユーザーがHTTPを指定しなくても強制的にHTTPS接続になります。
例:

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

  • max-age=31536000(1年間有効)
  • includeSubDomains(サブドメインにも適用)
  • preload(ブラウザのHSTSプリロードリストに登録)

3. Mixed Contentを完全に排除する

HTTPSページ内にHTTPのスクリプト、画像、CSSが混在すると攻撃リスクが残ります。すべてHTTPSで読み込むよう修正してください。
誤:

<script src="https://example.com/app.js"></script>

正:

<script src="https://example.com/app.js"></script>

🧪 SSL Stripを学ぶには?

セキュリティ技術者や学生は、実験環境でSSL Stripの動作を学ぶのが非常に有効です。以下ツールがおすすめです:

  • sslstrip(オリジナルツール)
  • Bettercap(強力なMITMフレームワーク)
  • mitmproxy(使いやすいCLIツール)

Kali LinuxやWiresharkと組み合わせて通信解析を行うと、攻撃の全貌が理解できます。

※必ず自己の実験環境内でのみ実施し、他者への攻撃は禁止です。

🧩 まとめ

対策目的
HTTP → HTTPSリダイレクト(301)ブラウザにHTTPS接続を強制
HSTSブラウザのHTTPアクセスを根本から排除
HSTS preload初回アクセスから安全を保証
Mixed Content排除HTTPSページ内の非暗号化コンテンツを排除

✅ 最後に
SSL Stripは、「HTTPSをただ導入しただけ」では防げません。正しく設定し、運用しなければユーザーの大切な情報は簡単に盗まれます。

  • 301リダイレクトを必ず設定する。
  • HSTS(できればプリロードも)を必ず有効にする。
  • サイト全体のコンテンツをHTTPSに統一する。

攻撃者の視点を理解し、堅牢な防御体制を築きましょう。

📚 参考資料