パスワードを忘れた? アカウント作成
262578 story
ソフトウェア

暗号を鍵無しで解読するパディングオラクル攻撃 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の完全アクセス権を奪うデモが公開されている。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Anonymous Coward on 2010年10月11日 14時34分 (#1838368)
    パディングの埋め方が脆弱性に繋がるのは比較的有名です。
    PKCSや決まる前のIPsec関連のドラフト等でも、「あれ、こんな簡便なやり方でいいのかな?」と
    思っていたら、ある日突然変更になっていた。みたいな事が昔からよくありました。
    (おそらく、レビューワーかML参加のメンバーからコッソリ指摘があったと思われる。)

    それにしても、infoqの記事のMSの対応すばらしいですね。うちの会社の偉い人に爪の垢を煎じて飲ませたいものです。
    おもわず、「この記事のスポンサーはMicrosoftです」とか書いてないか、最後まで見てしまいました:-)
  • by Anonymous Coward on 2010年10月12日 15時52分 (#1838889)

    元の論文に書いてありますが、Ruby on Rails ではコンポーネントの一つである ActiveSupport の MessageEncryptor クラスに脆弱性があります。
    具体的には ActiveSupport::MessageEncryptor#encrypt と ActiveSupport::MessageEncryptor#decrypt メソッドです。

    ただし、このメソッドは安全にデータをやり取りしたい時に使う(安全ではないことがわかったわけですが)ユーティリティであり、フレームワークでは利用していません。
    サードパーディのプラグインやライブラリで利用されているか、
    開発しているアプリケーションで自分が使っていなければ影響を受けません。

    もし利用していた場合には、代わりに encrypt_and_sign/decrypt_and_verify メソッドを使えば安全です。

    また、ActiveSupport::MessageEncryptor は openssl を使っているだけですので、同様の openssl の使い方をしていれば、
    ActiveSupport::MessageEncryptor を使っていなくとも脆弱性が存在します。

  • by Anonymous Coward on 2010年10月11日 11時36分 (#1838312)
    ブロック暗号ではなくストリーム暗号を使えばいいのでしょうか。
  • by Anonymous Coward on 2010年10月11日 13時59分 (#1838353)

    padding(詰め込む)はわかりますが、oracle(神託)って何?
    まさか、最初に見つかったのがJSFに対する攻撃だったからオラクルとか?

    • Re:ネーミング (スコア:3, 参考になる)

      by Deasuke (34806) on 2010年10月11日 15時27分 (#1838381) 日記
      > oracle(神託)って何?
      暗号学で安全性や脆弱性の証明をするに際して、普通は、現実には作れない出力装置を理論的に仮定します。そのような装置をオラクルと呼びます。もちろん作れないのでブラックボックス的に扱います。
      たとえば、再現性が100%の乱数発生装置(同じ入力系列に関しては必ず同じ値を返す、という意味で再現性100%、ただし個々の値に対しては真の一様乱数となる)をランダムオラクルと言います。

      ただ、今回のオラクルは単なるブラックボックスの言い変えで、個人的にはパディング・ブラックボックス攻撃と言った方が適切な気がします。
      --
      Best regards, でぃーすけ
      親コメント
      • Re:ネーミング (スコア:3, 参考になる)

        by Anonymous Coward on 2010年10月11日 22時54分 (#1838533)

        暗号研究者見習いです。
        #1838392の方もおっしゃってますけど補足です。

        暗号理論で考える「出力装置」=オラクルの中には現実に存在し得る暗号化オラクルや復号オラクルがあります。
        (通常は使えないんですけど、バグがある環境では現実に存在します。今回の件が示す通りです)
        おっしゃるとおりブラックボックスの言い換えなんですけども、学術用語としてはオラクルです。
        ということで、今回の攻撃はパディング・オラクル攻撃とした方が良いわけです。

        親コメント
      • オラクルとは (スコア:2, 参考になる)

        by BIWYFI (11941) on 2010年10月12日 2時53分 (#1838583) 日記

        なんか要を得てない感じがしたんで勝手に補足。

        原理不明だけど必ず正しい答えを返す機械がオラクルマシン。直訳すると神託機か?
        今回は、既存実装が、不正パディングすると「暗号文が正しいかを判断するオラクルマシン」として機能してしまうと云う脆弱性を突いたもの。
        それで、名前が「パディングオラクル攻撃」になる訳。

        余談だが、安全な暗号を設計する際には、特定の「オラクルマシン」が実在しても安全な様に設計する。
        今は出来ないけど、将来には可能になるかも知れない。その時でも大丈夫って発想ね。
        で、現実では、お粗末な実装で想定外のオラクルマシンが誕生してました、ってオチ。

        --
        -- Buy It When You Found It --
        親コメント
      • Re:ネーミング (スコア:1, 参考になる)

        by Anonymous Coward on 2010年10月11日 16時04分 (#1838392)
        この場合は、言葉どおり、神託でいいんですよ。
        細工をしたパケットを送ったときの挙動が、ご神託、なのですから。
        親コメント
    • by Anonymous Coward
      違うよ。InfoQ の和訳記事に載ってるから、タレコみのリンク先を読めば?
      • by Anonymous Coward
        和訳記事読んで納得した。
        あぁ、予定もなかったのにいきなりUpdateかかった原因はこれだったのか‥
    • by Anonymous Coward
      オラクル…… 鍵……


      …はっ! [wikipedia.org]
  • by Anonymous Coward on 2010年10月11日 16時23分 (#1838404)

    > 鍵を知らない状態で解読
    暗号解読ってそもそもそういう意味でしょ?

    と思って、ググッてみたら、区別しない場合もあるってことなんだろうか。
    参考 [wikipedia.org]:

    暗号の解読とは、暗号文を作成するのに用いた秘密情報(秘密の表記法や秘密の鍵など)にアクセスすることなく、暗号文を平文に戻すことである。これに対して、秘密情報を用いて暗号文を平文に戻すことは復号といい、解読と復号は区別することが多い。但し英語の"decryption"は両者の意味を持ち区別されない(以下、秘密情報のことを"鍵"と記す)。

    誤用じゃないのか?

typodupeerror

海軍に入るくらいなら海賊になった方がいい -- Steven Paul Jobs

読み込み中...