Shikata Ga Nai

Private? There is no such things.

第23回:ネットワーク通信を盗み見されないか?SSL診断入門

Hello there, ('ω')ノ

🔐 通信の暗号化=SSL/TLSって何?

スマホアプリがインターネットに接続する際、多くはHTTPS(SSL/TLS)という暗号化通信を使います。

これにより、以下のような攻撃を防ぐことができます:

  • 通信内容の盗聴(スニッフィング)
  • 通信内容の改ざん
  • 偽サイトへの誘導(なりすまし)

ただし、「HTTPSを使っている=安全」ではありません。設定ミスや検証漏れがあると、中間者攻撃(MITM)の餌食になる可能性があります。


👀 SSL診断で何をチェックする?

チェックポイント 内容
通信がHTTPSになっているか HTTP通信は平文(暗号化なし)で危険
サーバー証明書を検証しているか 偽のサーバーと通信してしまわないか
証明書ピンニングが行われているか 攻撃者が用意した偽CAをブロックできるか
TLSのバージョン・暗号スイート 古いバージョンや脆弱な暗号方式を使っていないか

🧪 通信内容を確認する方法(動的解析)

実際にアプリが送受信しているデータを盗聴(キャプチャ)して、暗号化されているかどうかをチェックします。

✅ 使用ツール例:

  • Burp Suite(バープスイート)
  • Charles Proxy
  • mitmproxy

これらは「プロキシサーバー」としてスマホとインターネットの間に入り、通信内容を横取りして解析できます。


🔧 診断環境の構築手順(Burp Suite例)

① PCにBurp Suiteをインストール

https://portswigger.net/burp

② スマホとPCを同一Wi-Fiに接続

③ スマホのプロキシ設定を変更

設定 → Wi-Fi → 詳細設定 → プロキシ手動 → PCのIPアドレス + ポート番号(通常は8080)

④ Burpの証明書をインストール(テスト用端末限定)

  1. http://burp にアクセス
  2. cacert.der をダウンロード
  3. 端末に証明書をインストール(設定 → セキュリティ → 証明書をインストール)

※ Android 7以降はユーザー証明書がシステムに適用されないため、アプリ側が明示的にユーザー証明書を許可していない限りMITM不可です。


🔍 実際に盗聴してみよう

スマホで対象アプリを操作して、Burp上に通信が表示されるかを確認します。

  • 表示されたら → SSL検証なし、盗聴可能=危険!
  • 表示されない → アプリが証明書検証やピンニングで保護されている可能性大

🛠 診断ツールでも確認できる

MobSFのレポートにも、以下のようなSSL関連の項目が含まれます:

  • usesCleartextTraffic=true → HTTP許可されているか
  • TrustManager に独自実装があるか → 検証をスキップしていないか
  • HostnameVerifier が常にtrueを返す設定かどうか

🔥 危険なコード例

TrustManager[] trustAllCerts = new TrustManager[] {
  new X509TrustManager() {
    public void checkClientTrusted(...) {}
    public void checkServerTrusted(...) {}
    public X509Certificate[] getAcceptedIssuers() { return null; }
  }
};

HostnameVerifier hv = (hostname, session) -> true;

→ これらはSSL証明書の検証を完全にスキップしている典型例。 誰とでも通信できてしまう、という恐ろしい状態です。


🔐 より安全な対策:証明書ピンニング

ピンニングとは、特定の証明書または公開鍵しか信頼しないようにする設定です。

方法:

  • ネットワークセキュリティ構成(XML)でピン留め
  • okhttp などのライブラリで certificatePinner を設定

メリット:

  • 攻撃者が偽のCAを使っても通信できなくなる
  • 公共Wi-Fiなどの中間者攻撃を完全に防止できる

✅ まとめ

  • HTTPSを使っていても、SSL設定が甘いと盗聴される危険性あり
  • Burp Suiteなどを使って実際に通信をキャプチャして確認しよう
  • MobSFや静的解析で、証明書検証をスキップしていないか確認するのも有効
  • 万全を期すなら、証明書ピンニングの実装が理想!

Best regards, (^^ゞ