ダウングレード攻撃
暗号化通信を確立するときの交渉に割り込み、古いバージョンのプロトコルや弱い暗号スイートを使うように仕向けて、解読しやすい暗号化通信を行わせる攻撃。
イマシルちゃんの解説
秘密のお話をするとき、2人は最初に「どの暗号を使う?」って相談するよね。
ふつうは、2人とも使える中で、いちばん強い暗号を選ぶんだ。
でも、悪い人がこっそり相談に割り込んで、「古い暗号しか使えないよ」ってウソを伝えたら?
2人は、仕方なく弱い暗号でお話しすることになって、悪い人に読まれやすくなっちゃうんだよ。
より深い解説
定義
ダウングレード攻撃は、通信の当事者が、本来は安全なバージョンや方式を使えるにもかかわらず、中間者が交渉の内容を改ざんしたり、交渉を妨害して失敗させたりすることで、安全性の低い方式を選ばせる攻撃である。SSL/TLSのほか、無線LANやメールのSTARTTLSなど、暗号の方式を交渉で決めるプロトコルが狙われる。
暗号スイート
TLSで使う暗号の組合せを、暗号スイートという。ハンドシェイクで、クライアントが使える一覧を示し、サーバが1つを選ぶ。
| 要素 | 例 |
|---|---|
| 鍵交換 | ECDHE、RSA |
| 認証(署名) | RSA、ECDSA |
| 共通鍵暗号と利用モード | AES-128-GCM、ChaCha20-Poly1305、(古いもの:RC4、3DES) |
| ハッシュ関数 | SHA-256、SHA-384 |
主な手口と事例
| 手口 | 内容 |
|---|---|
| 暗号スイートの書換え | クライアントの一覧から強い暗号を取り除き、弱い暗号(輸出用の短い鍵など)だけを残す |
| バージョンのロールバック | 交渉をわざと失敗させ、クライアントが古いバージョンで接続し直す動作(フォールバック)を悪用する。POODLE攻撃は、SSL 3.0 に戻させて、その弱点を突いた |
| STARTTLSの除去 | メールの通信で、サーバの「STARTTLSが使える」という応答を消し、暗号化せずに通信させる |
対策
- サーバとクライアントで、古いバージョン(SSL 3.0、TLS 1.0、TLS 1.1)と弱い暗号スイートを無効にする
- TLS 1.3を使う。ハンドシェイクの内容全体に署名し、改ざんを検出できる。また、ダウングレードを検出する仕組みもある
- HTTPSでは、HSTSで、ブラウザに常にHTTPSで接続させる
似た攻撃との区別
| 攻撃 | 内容 |
|---|---|
| ダウングレード攻撃 | 交渉に介入して、弱い方式を使わせる |
| 総当たり攻撃 | 暗号化された通信を記録し、鍵の候補を総当たりで試して解読する |
| SSLストリッピング | HTTPSへの移動を妨げ、利用者にHTTPのまま通信させる |