読者です 読者をやめる 読者になる 読者になる

もろず blog

もろちゃんがITに関しての様々なトピックを解説します


OpenSSL CCS Injection について



f:id:chanmoro999:20140610105150j:plain

OpenSSL での脆弱性がまたニュースになっているようです。

今回検出されたCCS Injection は、
株式会社レピダムの菊池さんという方が検出しました。

4月に大問題になったHeartBleedを受けて、
独自に検証を進めたところ今回の脆弱性が検出できたそうです。


"またOpenSSLか!"みたいな記事を多く見ますし そういう空気になるのは分かりますが、
品質向上へのポジティブな取り組みの過程で検出されたものなので
悪いことではないんじゃないかと思っています。


今回検出されたCCS Injection は4月に大問題となった HeartBleed とは全く違う問題です。

どんな危険性があるのか、この記事を通して何となく感じとって頂ければと思います。

※ちなみに、たまたま前回も OpenSSL の記事でしたが、決して OpenSSL を叩きたいわけではないので・・・。



今回は、

1.TLS ハンドシェイクの概要
2.CCS Injection の概要
3.MITM 攻撃ってなんだ
4.どの程度の影響があるのか
5.まとめ

という点をまとめてみます。


1. TLS ハンドシェイクの概要

SSL通信を開始する時にハンドシェイクというやりとりを行い、
通信を暗号化するための以下の情報を交換します。

  1. 通信で利用する暗号方式
  2. 証明書
  3. クライアントランダム
  4. サーバーランダム
  5. プレマスターシークレット
  6. マスターシークレット(共通鍵)

この中のマスターシークレットが、
SSL通信の最も重要な共通鍵となります。


その他の クライアントランダム、サーバーランダム、プレマスターシークレットはこの時に生成する予測不可能な乱数で、
これらをもとにマスターシークレットの計算を行っています。

これにより、第三者からのマスターシークレットの特定を困難にし、
SSL通信の安全性が担保されています。



そして、ハンドシェイクで暗号情報が決定されたら、
「それじゃあ、今から暗号に切り替えますよ?」
という合図となる ChangeCipherSpec パケットを送ります。

ChangeCipherSpec を送ったらすぐに、
ハンドシェイクの完了を示す Finished パケットを送ってハンドシェイクが終了します。
Finished パケットはハンドシェイクで取り決められた情報で暗号化されて送信される1回目のメッセージです。


ここで重要なのは、
ハンドシェイクがちゃんと最後まで進んでいなければ ChangeCipherSpec は送信してはいけないし、
受付けてはいけないということです。

「こういう暗号で通信しようね」というのが双方で合意できていなければ、
一方的に暗号で話されても何を言っているか分からない状態になっちゃいますよね?


文章だけだと分かりにくいので簡単にシーケンスをかいてみました。
ちょっと字がちいさいかも。

f:id:chanmoro999:20140611015945p:plain

記事の先頭に戻る

2. CCS Injection の概要

OpenSSL にはハンドシェイクの処理にバグがあり、
ハンドシェイクのやりとりが完了する前に ChangeCipherSpec が送られてきた場合にエラーとならず、おかしな状態で動作してしまうことが分かりました。

ServerKeyExchange、ClientKeyExchangeのフェーズが終わる前に ChangeCipherSpec を受け取ると、
マスターシークレットが未計算のまま強制的に暗号化通信が開始されてしまいます。

これが今回検出された CCS Injection です。


マスターシークレットはシードや初期ベクトルなど、暗号化のための超重要な値として利用されます。
※具体的に何に利用されるかは、ハンドシェイクで決定された暗号方式によります

ハンドシェイク中のやりとりは暗号化されていない状態で通信されているので、
盗聴されていれば誰からもそのやりとりが見えてしまいます。

それでも、マスターシークレットは数学的な仕組みで第三者に予測できないようにつくられていて、
SSL通信での暗号化はマスターシークレットを算出する困難さによって支えられています。


ですが、マスターシークレットが空のバイト配列だと分かれば暗号を読み解くことはとても簡単です。

第三者が通信を自由に復号化、暗号化できる状態になると、通信内容を書き換えて転送するという攻撃が可能になります。

この攻撃は、MITM 攻撃 (man in the middle: 中間者) と呼ばれています。


記事の先頭に戻る

3. MITM 攻撃ってなんだ

それでは、アリスとボブの間での通信を
悪者マロリーが中間者攻撃を利用して盗聴、改ざんする方法を見て行きましょう。

f:id:chanmoro999:20140610233907j:plain

マロリーが中間者攻撃を成功させるには、
どうにかしてアリスとボブの間に入り込む必要があります。

そのためには、

  1. マロリーがボブであるように見せる
  2. マロリーの見えるところで通信させる

というのがよくある方法です。

1.マロリーがボブであるように見せる

アリスからの送信先をマロリーにすり替えます。
アリスからはボブに送信したつもりでも、実はマロリーに送信している状態になります。

よくあるのは、ウイルスを使ってマロリーのサーバーを中継するようにアリスのPCを書き換えてしまう方法です。
その他、DNSの書き換えやネットワーク機器への攻撃で経路を書き換えている場合もあります。

2.マロリーの見えるところで通信させる

正規と思われるネットワークセグメント上にマロリーも接続する手法です。
1と似ているようですが微妙に違います。

最近では、偽のwifiアクセスポイントにつなげさせるというのがよくあるようです。
あとは、漫画喫茶のような不特定多数の人が使う有線LANにつなげることも同様に利用される場合もあります。


こんな感じで、アリスとボブの間にマロリーが入り込むことができると、
今回の脆弱性を利用した通信の盗聴、改ざんが可能になります。

f:id:chanmoro999:20140610234359j:plain

このマロリーの中間者攻撃のように、
悪い人は複数の攻撃を組み合わせて何段階にもわたって攻撃を仕掛けてきます。


記事の先頭に戻る

4. どの程度の影響があるのか

今回影響があるのは
サーバー、クライアント共にOpenSSLのライブラリで行われた通信です。

IIJさんの調査では、
サーバー、クライアント共にバージョン 1.0.1 系だった場合のみ
攻撃可能であることを確認したそうです。

IISの解説
IIJ Security Diary: OpenSSL の Man-in-the-middle 攻撃可能な脆弱性の影響



該当の通信において盗聴・改ざんが行われていた可能性がありますが、
それがどの程度の被害につながるかは通信内容によります。


ですが、SSLで送信されるのは重要な情報がほとんどなはずですので、
被害が大きい前提で対応を必要があります。


Web画面から入力した項目が盗聴されている場合もありますし、
ネットバンキングなどで、振込先口座、振込金額を不正に書き換えて送信することも可能です。

※自分が入力した内容が確認画面に表示されていれば、普通はそれを信じて振込ボタンを押しますよね


また、SSL秘密鍵が盗まれるわけではないので、
HeartBleed の時のように証明書の再発行などの必要はありません。

もちろん、過去に秘密鍵を送信していた場合は盗まれてしまっている可能性があるので対応を行う必要があります。



記事の先頭に戻る

5. まとめ

ざくっとした説明になってしまいましたが、
何となく雰囲気は伝わりましたでしょうか?


問題の動作を引き起こす部品は16年前から存在していたようですが、
当時からこの攻撃が可能だったわけではなく、
他の部分の修正と重なって後になってたまたま攻撃可能な状態になったようです。


TLSプロトコルの実装部分なので、もはやあまり注目されないコアな部分だったんでしょうか。

そんな中で4月に HeartBleed の問題が発生し、根本の部分から見直すことで更に今回の脆弱性が検出されました。
こういった経緯は僕も見習わないといけないなと思いました。



Webサービスがどんどん便利になっていく反面、
悪い人たちにとっても便利な状況になっています。

企業はより対応を強化する必要がありますが、
個人でも意識しなければいけない状況なのかもしれません。


僕自身もそうですが、
Web上でやりとりする情報ってどうしても疎かにしがちになっちゃいますよね。

便利なサービスが増えるにつれて、
住所やカード番号を入力することの精神的なハードルは下がっていってるような気がします。


万が一問題が起きたらどう対処したらいいのか?
というのは把握しておきたいですね。



難しいです。。。


今回はそんなお話でした。



より詳しい解説が記載されているのでぜひこちらも目を通してください。

・株式会社レピダムの記事
OpenSSL #ccsinjection Vulnerability

IISの記事
IIJ Security Diary: OpenSSL の Man-in-the-middle 攻撃可能な脆弱性の影響



記事の先頭に戻る