この記事を読むのに必要な時間:およそ 2 分
2017年12月は,なかなか豪快なTLS脆弱性が公開されました。その名もReturn Of Bleichenbacher's Oracle Threat(略称:ROBOT)と呼びます。
19年前に,暗号研究者のDaniel Bleichenbacher氏により考案された攻撃を防ぐための手法は,TLS 1.2のRFCにも反映されているのですが,この手法を適切に実装していないために,Bleichenbacher攻撃の成立を許してしまいます。
ROBOT攻撃とは何なのか?~「RSA暗号による鍵交換実装」の脆弱性を突く
ROBOT攻撃は,本質的には鍵交換時の処理の不具合により,適応型選択暗号文攻撃に対して脆弱になってしまっているTLSサーバを攻略することにほかなりません。
そしてこの脆弱性は,RSA暗号による鍵交換を行う際に利用可能とされています。
この攻撃は,理論と実装の両面から情報が公開されています(図1)。
図1 The ROBOT Attack

- The ROBOT Attack
- https://robotattack.org/
ROBOT攻撃が成立すると何が起こるか?
ROBOT攻撃が成立すると,第三者がROBOT攻撃に対して脆弱なTLSサーバの通信記録(当然暗号化されている)を入手した場合,この通信記録を解読して,通信の内容を把握することを可能とします。
取得された通信記録が,純粋に暗号化されたデータだけであれば,暗号アルゴリズムにAESのような強固なアルゴリズムを採用していれば,解読は困難となるでしょう。しかし,鍵交換フェーズを含む全体の通信記録が残っていて,しかもその鍵交換フェーズが脆弱である場合,交換される鍵を復元することも可能になってきます。
交換される鍵を復元できれば,暗号アルゴリズム,鍵,暗号データがそろっているので,暗号データの解読は容易です(図2)。
図2 TLSの通信フェーズ超概要とROBOT攻撃で危険にさらされるフェーズ

ROBOT攻撃を許す脆弱性はどこに入り込んでいるのか
「鍵交換時の処理の不具合」と書きましたが,PKCS #1 1.5のパディングエラー発生時に,SSL/TLSサーバから得られるエラーメッセージが,適応型選択暗号文攻撃を可能とします。この類の攻撃への対策として,「RFC5246 The Transport Layer Security (TLS) Protocol Version 1.2」の「7.4.7.1. RSA-Encrypted Premaster Secret Message」では,PKCS#1のパディングが不正な場合の対処方法を記載していますが,この対処方法の実装がなされていない,もしくは不十分な場合に,ROBOT攻撃に対して脆弱なTLSサーバとなります。
ROBOT攻撃に対して脆弱なサーバの識別方法~鍵交換をRSAで実施してるかを調べる
面倒なことを書きましたが,ROBOT攻撃に対して脆弱なサーバであるかどうかを確認する方法は「RSA暗号を用いて鍵交換をしているか」「PKCS#1のパディングエラー発生時の処理が適切か」を調べることで確認可能です。
ROBOT攻撃に対し脆弱なサーバの識別は,設定を調べる以外にも,TLSサーバに対して不正なリクエストを送り,レスポンスを見ることでも実現できます。本脆弱性の発見者は,発見のためのツール(Pythonで書かれています)をGithub上で公開しています。
TLSサーバの設定上,鍵交換アルゴリズムを規定しない場合,RSAが使われる可能性があります。mozilla wikiでは,TLSサーバの設定を,安全な設定,ほどほど安全な設定,過去の互換性のために使われる設定の三種類紹介しています。「過去の互換性のために使われる設定」は,RSAによる鍵交換も3DESによる暗号アルゴリズムもあり,見た目にも不安です。実際"It should be used as a last resort only."とまで書かれるくらいに脆弱な設定だと考えてください。
- Security/Server Side TLS(mozilla wiki)
- https://wiki.mozilla.org/Security/Server_Side_TLS
ROBOT攻撃でできないこと~たとえばTLSサーバ証明書の秘密鍵復元
SSL/TLSサーバの脆弱性で著名なものの1つに,Heartbleedがありました。
Heartbleedは,サーバ上の(本来参照できない)メモリの内容を,ランダムに最大64kB入手可能な脆弱性であり,この攻撃を複数繰り返すことで,SSL/TLSサーバのメモリ上に展開されている,サーバ証明書の秘密鍵情報を入手できる可能性があったことを示しています。
しかし,ROBOT攻撃は,あくまで通信データに対する攻撃であり,サーバ上の資源に対する攻撃ではありません。このため,サーバ証明書の秘密鍵はROBOT攻撃では入手できないことになります。
ROBOT攻撃に対して脆弱なTLSサーバ実装の一覧と対処方法
脆弱なTLSサーバ実装は,以下のURLにあるとおりです(もちろん,増える可能性もありますが)。これらの実装に対しては,パッチなどの修正が提供されている場合にはその適用を,そうでない場合には,鍵交換時にRSAを使わないようにすることで,脆弱性の影響を緩和することが可能です。
- The ROBOT Attack
- https://robotattack.org/#patches
- JVNVU#92438713 複数の TLS 実装において Bleichenbacher 攻撃対策が不十分である問題(ベンダ情報を参照のこと)
- https://jvn.jp/vu/JVNVU92438713/
ROBOT攻撃の緩和策
ROBOT攻撃は,RSAを用いた鍵交換の実装不備を突いた攻撃であることがわかっています。このため,鍵交換にRSAを用いないように明示的に設定することで,攻撃の影響をうけなくすることが可能です。ただし,自身の環境でこのような設定を施して,本当に大丈夫かどうかは環境に依存します(とはいえ,相当古いブラウザでもない限りは,RSAしか使えないということはないと考えます)。