ブログトップ 記事一覧 ログイン 無料ブログ開設

piyolog RSSフィード

2014-04-10

OpenSSLの脆弱性(CVE-2014-0160)関連の情報をまとめてみた

| 23:14 | OpenSSLの脆弱性(CVE-2014-0160)関連の情報をまとめてみたを含むブックマーク

HeartBleed(CVE-2014-0160)関係のリンク集、自分のメモ用なので不正確です。

HeartBleedの影響対象となるOpenSSLバージョン

以下のバージョンが影響を受けます。但し、システムによっては原因となっているheartbeat機能が無効化されている場合もあるため、バージョンが一致しただけで当該脆弱性の影響を受けるかは確定しません。

(1) OpenSSL 1.0.1系
バージョン名リリース時期CVE-2014-0160
OpenSSL 1.0.12012/03/14脆弱性あり
OpenSSL 1.0.1a2012/04/19脆弱性あり
OpenSSL 1.0.1b2012/04/26脆弱性あり
OpenSSL 1.0.1c2012/05/10脆弱性あり
OpenSSL 1.0.1d2013/02/05脆弱性あり
OpenSSL 1.0.1e2013/02/11脆弱性あり
OpenSSL 1.0.1f2014/01/06脆弱性あり
OpenSSL 1.0.1g2014/04/07修正済
(2) OpenSSL 1.0.2系
バージョン名リリース時期CVE-2014-0160
OpenSSL 1.0.2 beta 12014/02/24脆弱性あり
OpenSSL 1.0.2 beta 2リリースされていない修正予定

OpenSSLのリリースやリポジトリを見直してみると「OpenSSL 1.0.2 beta」というリリースはないようです。JPCERT/CC他が公開している情報には影響対象に含まれていますが、当該バージョンが存在するのかは不明です。

(3) 影響を受けないバージョン
  • OpenSSL 0.9.8系
  • OpenSSL 1.0.0系
(4) 1.0.0h→1.0.1でheartbeatが追加

Changes between 1.0.0h and 1.0.1 [14 Mar 2012]

:

*) Add support for TLS/DTLS heartbeats.

[Robin Seggelmann <seggelmann@fh-muenster.de>]

:

http://git.openssl.org/gitweb/?p=openssl.git;a=blob_plain;f=CHANGES;hb=refs/heads/OpenSSL_1_0_1-stable
(5) CVE-2014-0160の修正箇所

HeartBleed(CVE-2014-0160)って何?って人向けの情報

f:id:Kango:20140413054554p:image

(1)日本語の情報
(2) 英語の情報
(3) 注意喚起
(4) CVE-2014-0160の原因となったHeartbeat Extension
(5) CVE-2014-0160の影響やリスクに関する考察
(6) 国内主要メディアでも取り上げられ始める
(7) NSAはHeartBleedを事前に把握していた?

Bloombergが4/12付でNSAが今回のHeartBleedを公になる前から把握していたと報じています。

NSAは当初コメントを拒否していたようですが、その後Statementを発表し、セキュリティ企業からの報告を受けるまで把握していなかったとして、Bloombergの記事を否定しました。

NSAはTwitterでも投稿しています。

CVE-2014-0160での影響が確認された事例

CVE-2014-0160の影響が確認された事例です。いずれも一例であり、脆弱性を持つすべてのサーバーで以下が発生することが確認されたわけではありません。

(1) FreeBSD9.1が稼働するサーバー秘密鍵が見えた事例

(2) Yahoo.comで他人のメールアドレスパスワードが見えた事例

FOXITの検証を見ると秘密鍵も漏れていた模様

(3) JIRAでHTTPリクエストが漏えいし、セッションハイジャックが出来た事例
(4) nginx 1.5.13で秘密鍵が取得できた事例

Cloudflareが「www.cloudflarechallenge.com」から証明書秘密鍵を取ることが出来るかといったHeartBleedの脆弱性評価コンテストを開催し実際にデータを取ることが出来たと報告が行われました。

  • 「/etc/shadowも抜けた」はデマでした*1

(5) カナダ 歳入庁でデータ侵害の被害が出た事例
(6) イギリス 育児サイト Mumsnetでデータ侵害の被害が出た事例
(7) 三菱UFJニコスが不正アクセスを受け、情報漏えいの可能性がある被害事例

CVE-2014-0160のScan結果を公開、まとめているところ

CVE-2014-0160を確認した数確認元確認日時ソース
61万5268サイト
(2858万1134サイトで検証)
Robert Graham不明
Twitter投稿は2014/04/09 8:17 UTC
約50万サイトNetcraft2014年4月調査
489サイト
Alexa Top10000より
James Vasile2014/04/09 11:30 UTC?頃
5サイト
Alexa Top100より
musalbas2014/04/08 11:30 UTC
48サイト
Alexa Top1000より
musalbas2014/04/08 12:00 UTC
630サイト
Alexa Top10000より
musalbas2014/04/08 16:00 UTC UTC
3万1312サイト
Alexa Top1millionより
zmap2014/04/10 14:00 EDT
約5万サイト
Alexa Top1millionより
TrendMicro2014/04/10 10:18 PDT
150サイト
国内3500図書館サイトより
カーリル2014/04/09 16:00 JST
1045ノード
約5000のTorExitNode
MUlliNER.ORG2014/04/11〜13

musalbasさん調査の3つはログインドメインが別に用意されている等、サブドメインまではチェックしてないリストです。

HeartBleed(CVE-2014-0160)で攻撃してもばれないのか

  • アクセスログ、システムログ上からは攻撃トラフィックか判断することが出来ない。
  • 目当ての情報を引き出そうと大量にアクセスを試行すればアノマリートラフィックとして攻撃と疑われる可能性はある。
  • IDS/IPSでHeartBleed対応が行われ始めたので、導入サイトへ対して行えば分かる。

(1) nginxはパッチ後にログが出力されるようになる

nginx, after being patched, logs the following from the PoC exploit:

2014/04/08 12:37:18 [info] 4151#0: *724561 peer closed connection in SSL handshake while SSL handshaking, client: 70.91.145.11, server: 0.0.0.0:8443

https://isc.sans.edu/diary/%2A+Patch+Now%3A+OpenSSL+%22Heartbleed%22+Vulnerability/17921

nginx 1.4.7でエラーログ(/var/log/nginx/error.log)に出力されることをUbuntu13.10で確認しました。但しログレベルをinfoにしなければ出力されません。

(2) iptablesを使った検知方法

デロイトトーマツの岩井さんがiptablesを使った検知(遮断)方法を紹介しています。以下その方法を引用します。

iptables log rules

 iptables -t filter -A INPUT -p tcp --dport 443 -m u32 --u32 "52=0x18030000:0x1803FFFF" -j LOG --log-prefix "BLOCKED: HEARTBEAT"

 

iptables block rules

 iptables -t filter -A INPUT -p tcp --dport 443 -m u32 --u32 "52=0x18030000:0x1803FFFF" -j DROP

http://blog.f-secure.jp/archives/50725604.html

この方法は根本的な対策ではないと岩井さんがコメントしている通り、yasulibさんもこのルールの回避方法を検証しています。

いくつか回避する方法があると思います。例えばTCPヘッダのOptionsヘッダにNOPを入れることでオフセットをずらすなど。

 

他にもSSLには一つのパケットの中に複数のContentを入れることができます。

 

よく見るのはServer Helo, Certificate, Server Key Exchange, Server Hello Doneが1つのパケットにまとまっていることなどです。

 

この仕様を使っても、フィルタを回避できます。

(3) IDS/IPSのHeartBleed対応状況
ベンダ対応状況製品名検知シグネチャ
IBM2014/04/09対応済Network Protection XGS
Proventia Network IDS
Proventia Network IPS
Proventia Network MFS
Proventia Server (Linux)
RealSecure Network
RealSecure Server Sensor
Proventia Desktop
Proventia Server IPS (Windows)
TLS_Heartbeat_Short_Request (既定で遮断)
TLS_Heartbeat_Long_Response
McAfee2014/04/09対応済McAfee Network Security PlatformUDS-SSL: OpenSSL TLS DTLS Heartbeat Extension Packets Information Disclosure
Cisco2014/04/09対応済Cisco Intrusion Prevention SystemOpenSSL Information Disclosure
Juniper Networks2014/04/09対応済IDPHIGH SSL:OPENSSL-TLS-DTLS-HEARTBEAT SSL: OpenSSL TLS DTLS Heartbeat Information Disclosure
SecureSoft2014/04/11対応済SniperIPSOpenSSL TLS Heartbeat Extension Memory Disclosure.C
OpenSSL TLS Heartbeat Extension Memory Disclosure.B
OpenSSL TLS Heartbeat Extension Memory Disclosure.A
OpenSSL TLS Heartbeat Extension Memory Disclosure
Suricata対応準備中Suricata2.0.1にて対応予定
HP対応済?TippingPoint IPS2014/04/08時点で準備中とのツイートあり
Snort(SourceFire)2014/04/08対応済SnortSnort Version 2960
Snort Version 2956
Snort Version 2946
TrendMicro2014/04/08対応済TrendMicro DeepSecurityDSRU-14-009
1006010 – Restrict OpenSSL TLS/DTLS Heartbeat Request
1006011 – OpenSSL TLS/DTLS Heartbeat Information Disclosure Vulnerability
1006012 – Identified Suspicious OpenSSL TLS/DTLS Heartbeat Request
Paloalto Networks2014/04/09対応済PAシリーズID 36416にて対応済
Arbor Networks2014/04/11対応済Pravail Security Analytics2018375 ­ ET CURRENT_EVENTS TLS HeartBeat Request (Server Intiated)
2018376 ­ ET CURRENT_EVENTS TLS HeartBeat Request (Client Intiated)
2018377 ­ ET CURRENT_EVENTS Possible OpenSSL HeartBleed Large HeartBeat
Response (Client Init Vuln Server)
2018378 ­ ET CURRENT_EVENTS Possible OpenSSL HeartBleed Large HeartBeat
Response (Server Init Vuln Client)
Symantec日付不明対応済Symantec IPS27517「Attack: OpenSSL Heartbleed CVE-2014-0160 3」

CVE-2014-0160の確認方法

(1) OpenSSLコマンドを使った確認方法
  • opensslコマンドを使ってサーバー内で確認する場合

$openssl version -a

出力結果に影響を受けるバージョンであること、無効化オプション(-DOPENSSL_NO_HEARTBEATS)が指定されていないこと、の2つが確認できた場合、脆弱性が存在する可能性が高いです。

  • opensslコマンドを使ってリモートからheartbeatが有効となっているか確認する場合

$echo | openssl s_client -connect host:port -tlsextdebug

と入力して「TLS server extention "heartbeat"」と出力されるとheartbeat機能が有効となっていることが分かります。ただし、脆弱性が存在するかは分かりません。

(2) オンラインスキャナーでの確認方法

方法といっても基本的にはURLを入れるだけです。インターネットに公開されたWebサーバーや自分自身に対してオンラインスキャナーを使ってCVE-2014-0160の影響を受けるか確認することが可能です。

オンラインスキャナ提供元検査対象言語CVE-2014-0160のチェック方法証明書の確認ログの記録
SSLチェックツールGlobalsign公開Webサーバー日本語Qualysのチェックサービスを利用有り有り
Heartbleed脆弱性検査NetAgent公開Webサーバー日本語CVE-2014-0160のExploitを実行して脆弱性の有無を確認している模様無し無し
SSL Labs Server TestQualys公開Webサーバー英語不明有り有り
LastPass Heartbleed checkerLastPass公開Webサーバー英語Webサーバーの種類からOpenSSLを推測有り不明
heartbleed testpossiblelv公開Webサーバー英語SSLパケットからheartbeat機能の利用有無を確認無し不明
Heartbleed testFilippo Valsorda公開Webサーバー英語CVE-2014-0160のExploitを実行して脆弱性の有無を確認無し有り
Check your certificate installationSymantec公開Webサーバー英語不明有り不明
Reverse Heartbleed TesterMeldium接続クライアント英語不明無し無し
heartbleedtestMcAfee公開Webサーバー英語不明無し不明
FREE HeartBleed TesterCrytical Watch公開Webサーバー英語不明無し不明
COMODO SSL AnalyzerCOMODO公開Webサーバー英語不明無し不明
rend Micro Heartbleed DetectorTrendMicro公開Webサーバー英語不明無し不明

脆弱性が存在するサイトをオンラインスキャナーにかけてみると次のように表示されます。

f:id:Kango:20140410225637p:image:w550

f:id:Kango:20140410225635p:image:w550

f:id:Kango:20140410225632p:image:w550

f:id:Kango:20140410225636p:image:w550

f:id:Kango:20140410225633p:image:w550

f:id:Kango:20140410225638p:image:w550

f:id:Kango:20140411113124p:image:w550

f:id:Kango:20140416005547p:image:w550

f:id:Kango:20140416005548p:image:w550

(3) Github/CodePlex上で公開されているCVE-2014-0160の確認ツール

公開されているツールの多くはjspenguinさんのPoCを使用しています。

CVE-2014-0160検証ツール開発者検査対象実装言語特記事項piyokango検証
ssltest.py@jspenguinWebサーバーpythonCSV(番号,ホストのフォーマット)を指定して一括チェック可能検証済
heartbleed @FiloSottileWebサーバーgo 未検証
docker-heartbleedkasimonWebサーバーdocter 未検証
hb-test.pytakeshixxWebサーバーpython2ssltest.pyがベース検証済
hb-test.pydyatlovWebサーバーpython3ssltest.pyがベース未検証
Bleed OutJohn LeichWebサーバーWindows/C#既定動作でExploitを実行し続ける。
.NetFramework 4/4.5が必要。
検証済
bleed_heart.batpartpcmd.exeWebサーバーpythonで実装されたExploitをバッチ実行する未検証
openmagicisgroup-srlサーバーbashHTTPS以外のサービスに対して検証を行う未検証
ssltest-stls.pyDerek CallawayサーバーpythonSMTPやIMAP等の様々なプロトコルに対応させたssltest.py未検証
pacemakerLekensteyn接続クライアントpython自身を検査できる。ssltest.pyがベース未検証
Hut3 Cardiac Arrestah8rサーバーpython2.7HeartBleedのPoCに存在する3つのバグを修正したツール検証済

脆弱性が存在するサイトでhb-test.pyを動かしてみた結果です。脆弱性の存在が確認できるとメモリを表示した後に次のような表示が出ます。

f:id:Kango:20140410225631p:image

尚、jspenguinさんのPoCには次のバグが存在しHeartBleed脆弱性検出の見落としが発生する可能性が指摘されています。上記のGithubツールだけでなく、NSEやNessusにも影響が及ぶようです。そのため、この指摘をしたhut3チームが公開している「Hut3 Cardiac Arrest」が確認ツールとしては良さげと思います。

バグ1:TLS Version Support

 検知スクリプトでは TLSv1.1が指定されているが、これ以外(TLSv1.0やTLSv1.2)しか

 サポートしていないサーバだと、このH eartbeatリクエストを捨ててしまう。

 リクエストが捨てられてしまった場合、検知スクリプトでは脆弱性なしと判定している。

 

バグ2:TLS Cipher Suite Support

 現在318種類のCipher suite がIANAによって登録されている。

 多くの検知スクリプトでは51種類しか使用していなかった。

 それをサポートしていないサーバは、このリクエストを捨ててしまう。

 リクエストが捨てられてしまった場合、検知スクリプトでは脆弱性なしと判定している。

 クライアントが実際にその318種類に対応している必要はない。脆弱性を引き起こすのは、暗号化が起きる前なので。

 

バグ3:Payload Detection

 レスポンスを受け取るまでに5秒以上かかると、脆弱性なしと判定している。

http://www.pupha.net/archives/1876/

というわけで「Hut3 Cardiac Arrest」を実行した結果です。脆弱性が存在すると次の通り出力されます。

f:id:Kango:20140416165534p:image

脆弱性が存在しない場合は次の通り出力されます。SSLv3だけでなく、TLSも総じてチェックされます。

f:id:Kango:20140416165535p:image

(4) 自分が利用しているAndroidが影響を受けるか検証するツール

HeartBleed関連でいくつかアプリが出ています。他のスキャナーと違って、自分自身(AndroidOS、アプリ)にインストールされているOpenSSLがCVE-2014-0160の影響を受けないか確認するためのアプリです。偽チェックツールも出回るかもしれないので利用前には十分な注意が必要です。また影響対象のOpenSSLがインストールされたAndroidのバージョンは4.1.1〜4.4.2_r2ですが、HeartBeat機能が有効となっているのは4.1.1のみのため、4.1.1のみCVE-2014-0160の影響を受けます。*2

開発元アプリ必要な権限
Lookout Mobile SecurityHeartbleed Detecterインターネットへの接続
BlueBoxHeartbleed Scanner特に無し

2社の関連情報も掲載しておきます

(5) Nessusでの確認方法
(6) NMAP Script Engineでの確認方法
  • ssl-heartbleed
    • 手元のWindows7環境ではうまく動作しませんでした。Ubuntu13.10(NMAP6.40)で動作確認済。
  • HeartBleedチェック用のNSEをダウンロードする。

$sudo wget https://svn.nmap.org/nmap/scripts/ssl-heartbleed.nse -P /usr/share/nmap/scripts

  • Scriptダウンロード後以下のコマンドを実行するのみ。

$nmap -sV -p SSLポート --script=ssl-heartbleed.nse ターゲットホスト

脆弱性が存在するサイトに対してNSEを実行すると次のように表示されます。脆弱性が存在しなければ何も表示されないようです。

f:id:Kango:20140410232752j:image

  • tlsがないと言われたらこちらもダウンロードする。

$sudo wget https://svn.nmap.org/nmap/nselib/tls.lua -P /usr/share/nmap/nselib

(7) Metasploitでの確認方法

OpenSSLを利用しているソフトウェア、オンラインサービスの影響範囲

量が増えてメンテナンスが大変になってきてしまったため、別ページとしました。

*1:2014/04/14修正

*2:4.1.1〜4.4.2まですべてが影響対象となる記載となっていたため、2014/04/10に修正しました。