TLS通信の傍受と復号

技術の仕組み | 通信の暗号化

← 技術の仕組み

TLSは、利用者の端末とサーバの両端だけで中身を読めるように暗号化する仕組みです。だから途中の装置は中身を見られません。ところが実務では、間に立つ装置が通信を一度ほどいて中身を見ることがあります。これがTLSの傍受(復号)で、正規の可視化(社内プロキシ)中間者攻撃(MITM)も、まったく同じ仕組みで起きます。違いは目的と、端末にどの証明書を信頼させたかだけです。

先に押さえる

TLSは接続のはじめに、サーバがサーバ証明書を提示します。端末は「その証明書が自分の信頼する認証局(CA)に署名されているか」を確かめて、正しければ鍵を交換し、以後の通信を暗号化します。信頼の起点は端末が持つCAの一覧――ここが傍受のすべての鍵になります。

正規のTLSは「端から端まで1本」

1端末とサーバが直接、暗号トンネルを張る
利用者の端末
サーバ証明書を検証 → 鍵交換
本来のサーバ正しい証明書の持ち主

暗号鍵は端末とサーバの2者だけが持ちます。途中の装置は暗号文を運ぶだけで、中身は読めません。これがTLSの前提です。

動きで見る

検査プロキシがTLSを2本に割って中身を復号・検査し、問題なければ再暗号化して転送する流れが追えます。(図は横スクロールできます)

傍受は「トンネルを2本に割る」

2間の装置が両側と別々に暗号化しなおす
利用者の端末
装置の証明書を提示される
=ここで一度ほどける
間に立つ装置プロキシ / 攻撃者ここで平文が見える
装置が本来のサーバへ張り直す
本来のサーバ

間の装置は、端末に対してはサーバのふりをして自分の証明書を出し、サーバに対しては利用者のふりをして接続します。トンネルが端末↔装置装置↔サーバ2本に割れるので、装置の内側では中身が平文で見えます。社内プロキシによる可視化も、攻撃者のMITMも、この形は同じです。

成否を分けるのは「証明書を信頼させられるか」

見抜きどころ

端末は接続のたびに証明書を検証します。だから間の装置が出す証明書を端末が信頼していなければ、警告が出て止まる。傍受が成立するのは装置のCAを端末に信頼させたときだけです。正規の可視化は、会社が管理端末に自社のCAをあらかじめ配布して成立させます。攻撃は、偽CAを何らかの手で端末に入れる/証明書警告を利用者に無視させる、といった信頼の差し込みが要る――ここが攻防の分かれ目です。

つまずきやすい

「暗号化されているから安全」ではありません。TLSが守るのは途中で読まれないこと。守れないのはそもそも誰と鍵を交換したかです。信頼する証明書の管理が甘い端末は、暗号化されていても中身を覗かれ得ます。要は暗号の強さではなく証明書の検証が急所。

攻撃側の傍受を無力化する方向

だから対策は「もっと強く暗号化する」ではなく、差し込まれた偽の証明書を受け入れない方向になります。

証明書を厳密に検証する

  • 発行元(CA)・宛先ドメイン・有効期限を確認
  • 警告を利用者任せにしない(自動で拒否)

証明書ピンニング

  • アプリが特定の正しい証明書だけを受け付ける
  • 偽CAを信頼させても、ピンに一致しなければ拒否

※スマホアプリの診断では、まず端末に検査用CAを入れて傍受し中身を見る。ピンニングされたアプリはこれを拒むので、傍受できるか否か自体が「守りの強さ」の指標になる。

つながる仕組み

その前← DNSとHTTPは別々の通信

この仕組みを使う設問