Pyclas on Security

pyclas@xmpp.cm (OTR)

OpenSSL AES-NI Padding Oracle MitM Information Disclosure

OpenSSL AES-NI Padding Oracle

OpenSSLのAES-NI Padding Oracleの確認方法をたまたま調べる機会があったので、メモ。 INTELのAES-NIが有効になっているCPUで、指定以下のバージョンのOpenSSLで、中間車攻撃を行われた場合、機密情報が解読される可能性がある。

  • AES-NI
    AESの暗号化・復号化を高速化するintelの命令セット。AMDでも対応しているとのことだが、確認方法不明のため、本基準では扱わない。最近のCPUならたいてい対応している。

検証環境

Processor: Intel(R) Core(TM) i5-4300M CPU @ 2.60GHz (4 CPUs), ~2.6GHz

Nessusでの出力

(91572 : OpenSSL AES-NI Padding Oracle MitM Information Disclosure)

確認方法

条件1~4をすべて満たしている場合に指摘 正確性よりも、指摘漏れ回避を重視する場合1~3だけでも可。

条件1

grep -m1 -o aes /proc/cpuinfo
を実行し、aesの表示があること

条件2

ark.intel.com

利用しているプロセッサの名前で検索し、(choose a Fiterを「family」を「intel core tm processor」※i5なら。エンタープライズ系製品では、利用しているCPUに合わせることXeonとか。 で診断対象の利用していると思われるプロセッサのページに遷移し、Intel® AES New Instructionsの項目が「yes」になっていることを確認。

条件3

OpenSSLが1.0.2系であれば、1.0.2h以下のバージョンであること
OpenSSLが1.0.1系であれば、1.0.1t以下のバージョンであること。

条件4

sslscanを実行し、AES-CBCが含まれること
※結果にAES-CBCの鍵長128 ビット、192 ビット、256 ビットのいずれ1つがあれば可

セカンドオピニオン(※矛盾する場合、条件1-3を優先)

インストール
$ go version # golangが入ってることの確認
go version go1.6.2 darwin/amd64
$ go get github.com/FiloSottile/CVE-2016-2107 # pocのダウンロード

実行

$./CVE-2016-2107 hogehoge.com
Vulnerable: false なら影響を受けない
Vulnerable: ture なら影響を受ける

対策

OpenSSLが1.0.2系であれば、1.0.2h以上にアップデート
OpenSSLが1.0.1系であれば、1.0.1t以上にアップデート

参考文献

3.3. OpenSSL インテル AES-NI エンジン
https://www.openssl.org/news/secadv/20160503.txt