LuckyOceanのブログ

新米技術士の成長ブログ

PoodleとDROWNの脅威

はじめに
プードル(Poodle)と言えば、日本で最も人気のある犬種で2008年時点で8.6万頭でそのうちの98.5%は小型のトイプードルだ。泳ぎが得意で賢い。人気のトイプードルは18世紀後半のルイ16世の時代に作出されたという。しかし、ここで伝えたいのは別のPoodleだ。また、DROWNというと、??と言う方も多いだろう。空を飛ぶドローンはDRONEでスペルが違う。後半で説明する。
f:id:hiroshi-kizaki:20190105103517p:plain
 出典:Wiki

IoTはどこまで普及するのだろう
下の図は、シスコによるIoTの将来予想だ。世界の人口は2008年に67億人、2015年に73億人、2020年には78億人に増大すると予想されている。それに対してインターネットに接続されるデバイス(=IoT)の数は2008年には人口と同程度だが、2020年には500億個に達する見込みだ。一人一台の時代から一人で5-6台のIoTデバイスを使いこなす時代だ。例えば、現在自分が身につけているものだけでも、業務用のスマホと個人用のスマホとPCとスマートウオッチとワイヤレスヘッドセットなので5個もある。2020年になったら、スマートグラスとか使っているのだろうか。
f:id:hiroshi-kizaki:20190105103636p:plain
 出典:Securing the Internet of Things: A Proposed Framework - Cisco

バイス脆弱性(Vulnerability)
しかし、全世界に500億個のIoTデバイスが普及するような時代の課題は何だろう。そのうちの一つはやはりセキュリティだ。悪意のある第三者による乗っ取りや侵入は勘弁してほしい。いじめの世界では、いじめっ子といじめられっ子がいる。いじめられやすい子がいるというと問題はそこではない。いじめる人が悪いと言う。それはその通りだ。しかし、いじめっ子は、誰をいじめるかを慎重に見極める。例えば、何かをされてもやり返さない子供。何かをされても親とか先生に言わない子供。みんながいじめている子供。そんな図式はセキュリティの社会でも全く同じだ。悪意のある第三者は、自ら攻撃せず、踏み台を使って、ターゲットを決めて、計画的に一斉に攻撃する。踏み台になった人は、自らが加害者になっていると知らない被害者だ。そして、攻撃されやすいことを脆弱性と呼ぶ。トレンドマイクロの調査では最も脆弱性が高いのがSSL Poodleで2番目がSSLv2 Drownだった。
f:id:hiroshi-kizaki:20190105104530p:plain
 出典:Identifying Top Vulnerabilities in Networks: Old Vulnerabilities, IoT Botnets, Wireless Connection Exploits - TrendLabs Security Intelligence Blog

Poodle問題
Poodleとは、SSL3.0(Secure Sockets Layer Version3.0)と呼ぶ古い暗号化方式を解読する手法だ。2014年9月15日にGoogleの研究者によって発見され、発表された。平均して256回のリクエストで暗号文の1バイトの解読が可能となる。Poodleは、犬種のことではなくて、「Padding Oracle On Downgraded Legacy Encryption」の略だ。SSL3.0は15年も前に開発されたもので、現在はそれをさらに改善したTLS1.2などが使われている。しかし、問題はダウングレードという機能だ。つまり、暗号化はWebサーバー側とクライアント側の双方が対応している最も上位の方式を採用する。通常はTLS1.2で行われるが、クライアント側がTLS1.1しか対応していないと、仕方がないなあということでTLS1.1で暗号化する。同様にクライアント側がTLS1.0にしか対応していないとTLS1.0で通信する。そして、それでもダメなときにはさらにSSL3.0にダウングレードして通信を行う。そして、悪意ある攻撃者(Sniffer)は脆弱性を持つSSL3.0の通信を検知すると、そこで攻撃をしかけるものだ。これへの対策はSSL3.0を無効にして、Web側でSSL3.0にダウングレードしないようにすることだ。
f:id:hiroshi-kizaki:20190105105331p:plain
 出典:SSL 3.0 の脆弱性「POODLE 」とは? | トレンドマイクロ セキュリティブログ

DROWN問題
「DROWN」とは、おぼれ死にする、溺死するもしくは、おぼれ死にさせる、溺死させるという動詞だ。日本語の世界ではここまでしかない。しかし、Wikiで調べると、英語版や仏版等では詳しく記載されている。DROWN攻撃とは、クロスプロトコルセキュリティのバグだという。つまり、サーバー側が最新のTLSをサポートしていても、クライアント側が安全でない古いSSLv2に対応する点を突いている。2016年3月時点で、すべてのHTTPSサイトの33%がこの脆弱性の影響を受けていた。そして、DROWNの問題が発表され、対策を開始すると1ヶ月で脆弱なサイトは28%に減少したという。
f:id:hiroshi-kizaki:20190105110627p:plain
 出典:The SSL DROWN Attack

DROWNの仕組み
DROWNとは、「Decrypting RSA with Obsolete and Weakened eNcryption」の略だ。
DROWNでは、古い暗号プロトコルSSLv2を解読する。安全と言われているHTTPSサーバーのうち約17%はSSLv2での接続を許容している。さらに、公開鍵をシェアしている場合には、33%までそのリスクが高まる。そもそもの原因は、アメリカ国家安全保障局(NSA)が通信を解読しやすいように米国の輸入法で定めたことだ。つまり、128ビットのマスターキーのうち最初の40ビットだけが秘密だった。この法律は20年前に緩和されているが、国家の安全保障と国民のセキュリティのトレードオフの問題とも言える。DROWN問題は、最新のTLS1.3で解決されていると言われているが、政策立案者が国会の安全保障を優先すれば、将来新しい脆弱性として発見される可能性もないとは言えない。
f:id:hiroshi-kizaki:20190105120330p:plain
 出典:DROWN Attack

TLS1.3
TLS1.3はTLSの最新バージョンだ。TLS2にするような議論もあったが、TLS1.3(RFC8446)として2018年8月に定義された。セキュリティの改善に加えてパフォーマンスも改善された。例えば通信を開始する際のフルハンドシェイクも簡素化し、TLS1.2と比べてメッセージの往復回数が2回から一回になった。また、Googleは、Google Chromeのデフォルトバージョンとして2017年にTLS1.3を設定したが、Blue Coat Webプロキシとの互換性問題から現在では、TLS 1.3をデフォルトから削除している。2017年5月にリリースされたバージョン3.11.1では、wolfSSLはTLS 1.3を使用可能だ。
f:id:hiroshi-kizaki:20190105121711p:plain
 出典:組み込み技術者向けTLS1.3基礎解説(後編):IoTでTLS1.3を活用すべき3つの理由 (3/3) - MONOist(モノイスト)

TLS1.3のサポート状況
最初にTLS1.3をサポートしたのは、下の表のwolfsslとOpenSSLだ。特にwolfsslは2017年5月にリリースされたバージョン3.11.1でTLS 1.3が利用可能となった。また、2018年9月には、OpenSSL1.1.1 がリリースされ、TLS1.3に対応した。このこのバージョンは 長期サポート(LTS)なので5年間のサポートが保証されているのは素晴らしい。
f:id:hiroshi-kizaki:20190105122605p:plain
 出典:wolfSSL - TLS1.3 - wolfSSL

まとめ
セキュリティ問題の流れは早く、これに追いつくのはなかなか大変だ。国内でもPoodle問題や身代金を要求するランサムウェアの脅威はよく報道されるが、DROWN問題は初耳だった。アメリカ国家安全保障局(NSA)が絡む問題だと慎重になるのだろうか。それでも、Wikiを始め、英語の文献では明確に開示されている。英語の文献を読むのは大変だけど、最近はGoogle翻訳がかなり良いレベルまで訳してくれるので本当に助かる。これからも安全・安心をテーマに皆様の役に立つ、もしくは面白いと感じてもらえるようなトピックにチャレンジしたいと思います。

最後まで読んでいただきありがとうございました。