暗号を鍵無しで解読するパディングオラクル攻撃 15
ストーリー by kazekiri
不正の不定義 部門より
不正の不定義 部門より
あるAnonymous Coward 曰く、
暗号を鍵を知らない状態で解読できるようになるというパディングオラクル攻撃が可能な脆弱性がASP.NET、Ruby on Rails、JSFなどのフレームワークで見つかっているとのこと(InfoQの記事、WatchGuardの記事)。検証ツールのPOET (Padding Oracle Exploitation Tool)も公開されている。
パディングオラクル攻撃はブロック暗号の解読エラーを利用するものである。適当な文字列を暗号文として送りつけ、パディングが不正な場合に起きる特殊なエラーもしくは処理されないという事実を利用して、その文字列が暗号文として適切かどうかを調べる。それを繰り返すことで、暗号化されたデータを鍵無しで解読できるようになるらしい。
ASP.NETではセッションクッキーの暗号化にこの脆弱性があったために、数百万のウェブアプリケーションに問題があったとのこと(threatpostのブログ記事)。現在は修正されている。
この攻撃を使ったApache MyFacesの暗号解読を行うデモやOSS CMSのDotNetNukeの完全アクセス権を奪うデモが公開されている。
パディングによる脆弱性 (スコア:5, 興味深い)
PKCSや決まる前のIPsec関連のドラフト等でも、「あれ、こんな簡便なやり方でいいのかな?」と
思っていたら、ある日突然変更になっていた。みたいな事が昔からよくありました。
(おそらく、レビューワーかML参加のメンバーからコッソリ指摘があったと思われる。)
それにしても、infoqの記事のMSの対応すばらしいですね。うちの会社の偉い人に爪の垢を煎じて飲ませたいものです。
おもわず、「この記事のスポンサーはMicrosoftです」とか書いてないか、最後まで見てしまいました:-)
Ruby on Railsへの影響 (スコア:1, 参考になる)
元の論文に書いてありますが、Ruby on Rails ではコンポーネントの一つである ActiveSupport の MessageEncryptor クラスに脆弱性があります。
具体的には ActiveSupport::MessageEncryptor#encrypt と ActiveSupport::MessageEncryptor#decrypt メソッドです。
ただし、このメソッドは安全にデータをやり取りしたい時に使う(安全ではないことがわかったわけですが)ユーティリティであり、フレームワークでは利用していません。
サードパーディのプラグインやライブラリで利用されているか、
開発しているアプリケーションで自分が使っていなければ影響を受けません。
もし利用していた場合には、代わりに encrypt_and_sign/decrypt_and_verify メソッドを使えば安全です。
また、ActiveSupport::MessageEncryptor は openssl を使っているだけですので、同様の openssl の使い方をしていれば、
ActiveSupport::MessageEncryptor を使っていなくとも脆弱性が存在します。
ストリーム暗号を使えと? (スコア:0)
Re: (スコア:0)
ネーミング (スコア:0)
padding(詰め込む)はわかりますが、oracle(神託)って何?
まさか、最初に見つかったのがJSFに対する攻撃だったからオラクルとか?
Re:ネーミング (スコア:3, 参考になる)
暗号学で安全性や脆弱性の証明をするに際して、普通は、現実には作れない出力装置を理論的に仮定します。そのような装置をオラクルと呼びます。もちろん作れないのでブラックボックス的に扱います。
たとえば、再現性が100%の乱数発生装置(同じ入力系列に関しては必ず同じ値を返す、という意味で再現性100%、ただし個々の値に対しては真の一様乱数となる)をランダムオラクルと言います。
ただ、今回のオラクルは単なるブラックボックスの言い変えで、個人的にはパディング・ブラックボックス攻撃と言った方が適切な気がします。
Best regards, でぃーすけ
Re:ネーミング (スコア:3, 参考になる)
暗号研究者見習いです。
#1838392の方もおっしゃってますけど補足です。
暗号理論で考える「出力装置」=オラクルの中には現実に存在し得る暗号化オラクルや復号オラクルがあります。
(通常は使えないんですけど、バグがある環境では現実に存在します。今回の件が示す通りです)
おっしゃるとおりブラックボックスの言い換えなんですけども、学術用語としてはオラクルです。
ということで、今回の攻撃はパディング・オラクル攻撃とした方が良いわけです。
オラクルとは (スコア:2, 参考になる)
なんか要を得てない感じがしたんで勝手に補足。
原理不明だけど必ず正しい答えを返す機械がオラクルマシン。直訳すると神託機か?
今回は、既存実装が、不正パディングすると「暗号文が正しいかを判断するオラクルマシン」として機能してしまうと云う脆弱性を突いたもの。
それで、名前が「パディングオラクル攻撃」になる訳。
余談だが、安全な暗号を設計する際には、特定の「オラクルマシン」が実在しても安全な様に設計する。
今は出来ないけど、将来には可能になるかも知れない。その時でも大丈夫って発想ね。
で、現実では、お粗末な実装で想定外のオラクルマシンが誕生してました、ってオチ。
-- Buy It When You Found It --
Re:ネーミング (スコア:1, 参考になる)
細工をしたパケットを送ったときの挙動が、ご神託、なのですから。
Re: (スコア:0)
先週のWindowsUpdate (スコア:0)
あぁ、予定もなかったのにいきなりUpdateかかった原因はこれだったのか‥
Re: (スコア:0)
…はっ! [wikipedia.org]
暗号解読 (スコア:0)
> 鍵を知らない状態で解読
暗号解読ってそもそもそういう意味でしょ?
と思って、ググッてみたら、区別しない場合もあるってことなんだろうか。
参考 [wikipedia.org]:
暗号の解読とは、暗号文を作成するのに用いた秘密情報(秘密の表記法や秘密の鍵など)にアクセスすることなく、暗号文を平文に戻すことである。これに対して、秘密情報を用いて暗号文を平文に戻すことは復号といい、解読と復号は区別することが多い。但し英語の"decryption"は両者の意味を持ち区別されない(以下、秘密情報のことを"鍵"と記す)。
誤用じゃないのか?
今回の影響範囲は (スコア:0)