パスワードを忘れた? アカウント作成
13163883 story
セキュリティ

JavaScriptでASLRを無効化する攻撃「AnC」 27

ストーリー by headless
整列 部門より
あるAnonymous Coward 曰く、

x86/ARM CPUの多くが行っているメモリ管理の仕組みを悪用し、アドレス空間配置のランダム化 (ASLR)をJavaScriptから無効化する攻撃が公表された(PC Watchの記事)。

ASLRはアドレス予測を困難にすることで攻撃を防ぐという技術で、2000年代前半から実装が進んでいる。ローカルからの攻撃により無効化する手法も発見されているが、Webブラウザーの脆弱性緩和などには有効な対策と考えられていた。記事によれば、CPUのキャッシュ階層を利用した「ASLR⊕Cache (AnC)」と名付けられた攻撃により、100秒未満という短い時間でアドレスのランダム化が解除されてしまったという。AnCはハードウェアの仕組みを使用した攻撃のため、ユーザー側では対処不能としている。

正直タレコミ子には説明が難しすぎて理解不能なのだが、技術レベルの高い攻撃者であれば公開された論文を元に数週間程度で攻撃コードが再現できるという事なので、今後はメモリ周りの脆弱性に一層注意が必要かもしれない。

AnCはソフトウェアの弱点を利用するものではないため修正は容易ではないが、CPU/OS/ブラウザーベンダーに対しては公表前に短期的・長期的な緩和策が通知されている。実際にAppleはiOS 10.2.1でWebKitの強化を行ったとのこと。ユーザーレベルでは信頼できないソースからのスクリプト実行をブロックするといった対策しかできないが、有効な攻撃を行うためには別途ブラウザーの脆弱性を利用することになるため、セキュリティ更新プログラム適用の重要性も増しているといえるだろう(VUSecの記事The Registerの記事Ars Technicaの記事)。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Anonymous Coward on 2017年02月19日 16時26分 (#3163800)

    例えば、x86_64アーキテクチャでは、4つのページテーブルページのそれぞれについて、MMUによってアクセスされるオフセットを検出でき、各ページ内のオフセットは9bitのエントロピーを破壊するため、36bitのエントロピーを備えた“完全なASLR”の実装でも安全ではないとしている。

    対処しづらくて厄介な問題って事はわかったが、仕組みが何度読み返してもさっぱりわからん(;´д`)

    • by Anonymous Coward on 2017年02月19日 16時41分 (#3163804)

      ただの引き算でしょ。

      テーブルページのオフセットが判れば9bit分の確定ができる。
      ASLRの能力が36bit分あっても、36-9=25で25bit分しかないのと同じことになる。
      25bit程度では、現代では安全ではない。

      親コメント
      • by Anonymous Coward on 2017年02月19日 19時31分 (#3163880)

        x86_64ならPGD PUD PMD PTEと4つのページテーブルをたどる
        1つ辺り9bitが確定できるから、9*4で36bit確定できる
        よって、36bitでは意味がない
        ってことだろ

        親コメント
        • by Anonymous Coward on 2017年02月19日 21時15分 (#3163953)

          36bitでは意味がないっていうか、36bitが4分割されてて、それぞれを攻撃可能だから
          9bitのエントロピーを4回破壊、つまり11bitのエントロピーの破壊でできたってことで、
          そこがミソなのかなと。

          親コメント
      • by Anonymous Coward

        ごめん引き算を間違えた。もう俺の脳は破壊されているかも

        • by Anonymous Coward

          このページには人の脳を攻撃するスクリプトが含まれている!

    • by Anonymous Coward

      ASLRを突破した後
      どうやってバイナリ注入するんだろう?

      • by Anonymous Coward

        もうすでにブラウザ上、あるいは何かしらの方法で、native code を実行可能な段階なんでしょ。exploit があっても、ASLR があるから破壊行動ができなかった。でも今は Browser (というか JavaScript)の手助けがあれば、今まで悪用不能だった Exploit が悪用できるようになる、ということと、俺は理解した。

        • by Anonymous Coward

          正確に言えばASLRによって無効になった脆弱性がASLRを無効化する攻撃手法が発明されたので再度使えるようになったと。
          ガンダムみたいな話ですな。
          問題点はこれがソフトウェアではなくハードウェアに起因する脆弱性ってこと?

      • by Anonymous Coward

        ASLRが有効だと、従来のバッファオーバーフロー攻撃を防ぐことが可能。つまり従来型の攻撃を行う前にASLRを無効にしておかなければならない。ASLRを突破したからといって直ちに任意のコードを実行できるわけではない。ということなんでは。
        9bitのエントロピーがどうとかいう話には私もついていけませんすんません。

        • by Anonymous Coward on 2017年02月19日 19時17分 (#3163874)

          ここで言ってる「エントロピー」は、おおざっぱに言えばものすごく精度の良い乱数源のことです。
          32bitの乱数でアドレスを広範に変えていても、そのうち9bit分の答えがMMUでわかる。
          だから総当たりの計算時間は1/500になって現実的な攻撃になりうる。(x86_64アーキテクチャの例)

          親コメント
          • by Anonymous Coward

            ごめんなさい、#3163880さんご指摘のとおり9bit×4ページなので
            36bitの完全な乱数系でも危ういことがあるという記述ですね。

    • by Anonymous Coward

      3行にまとめてもらったところで仕組みがさっぱりわからんのは変わらんでしょ _(:3 」∠)_

  • by Anonymous Coward on 2017年02月19日 20時32分 (#3163925)

    プロジェクトページ [vusec.net]があった。

    Our attack, which we called ASLR⊕Cache (or AnC for short), first flushes part of the last level cache and then times the MMU’s page table walk performed due to a memory access.
    (我々がAnCと呼ぶ攻撃では、最終レベルキャッシュの一部をフラッシュし、メモリアクセスのためにMMUが行うページテーブル走査の時間を測定する)

    測定を何度も行うことで、統計的に、別スレッドや別プロセスのスタックアドレスなんかが判明するってことかしら。

    • by Anonymous Coward

      現時点ではサイドチャネル攻撃がjsで書けるようになりましたってだけのProof of conceptじゃないかこれ

  • by Anonymous Coward on 2017年02月19日 20時34分 (#3163929)

    >ユーザーレベルでは信頼できないソースからのスクリプト実行をブロックするといった対策しかできないが
    単にJavaScriptを無効にしとくだけじゃダメなの???

    • by Anonymous Coward

      今時のWebだとJavaScript無効化するとまるで動かないサイトばっかだからでは。
      うちの会社のUI/UX系やってるデザイナーもこのニュース見て「JavaScriptが死んだら俺の仕事無くなる」ってわめいてたし。

    • by Anonymous Coward
      お前、このサイトをJavaScript無効にして見てみろよ
    • by Anonymous Coward

      俺もJavaScriptは普段から無効にしています、煩わしい広告は出ないし得体の知れないサイトを閲覧するときも心強いですよ
      ただ最近はサイトの表示をHTMLではなく完全にCSS+JavaScriptで組み立ててる所も時々あるのでそのときは文字と表組みぐらいしか見られませんが
      そんな時やJavaScriptで記載されてる部分は自分でJavaScriptのソースを読むのでJavaScriptの勉強になるので一石二鳥

      ASLR無効化はとても面白いと思いますね、まだ理解できるレベルでは無いですが

      • by Anonymous Coward

        確かにjavascriptが無効だと非常に不便ですね。「より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。」なんて表示されたりもします。
        ただjsが無効だと利用できるタグのリストなんかが表示されて便利。

        重要事項:
        話題に沿うように努力しましょう
        新しいスレッドを起こすかわりに、他の人のコメントに返事をしましょう
        すでに投稿された内容かもしれないので、重複を避けるために、投稿をするまえに他の人のコメントを読みましょう

  • by Anonymous Coward on 2017年02月19日 22時35分 (#3163989)

    この攻撃には正確な時間の計測が必要で、論文ではTTT (Time-To-Tick)とSMC (Shared Memory Counter)という技術を使っているが、どちらも一般的なChrome環境の攻撃に使えない。そしてソフトウェアで対策が可能。
    もっと面白いのが欲しいよー。

  • by Anonymous Coward on 2017年02月20日 3時40分 (#3164066)

    ASLRが無効化できる点がポイントであって、JavaScriptで書けるっていうのはただのおまけだし、
    別にブラウザ内部からの攻撃に限った話ではない。

    モダンOSの多重防御の壁が1枚破れたんだから、重大な話でしょ。

    • by Anonymous Coward

      ちゃうちゃう。ASLRを無効かする手法はすでにある。今回のはJSでもそれができると証明された点が大きい。
      JSならユーザに身元不明のコードを実行させるのが簡単だからな。JSでというよりブラウザ上でできるって点が大きい。

    • by Anonymous Coward

      多重防御の壁が1枚破れたくらい、どうってことないでしょ。

  • by Anonymous Coward on 2017年02月20日 15時00分 (#3164300)

    でも重複排除機構を無効化とか。。。
    再利用しないことで位置固定化防ぐんでしょうが、キャッシュ否定みたいで嫌な攻撃方法ですね。

typodupeerror

最初のバージョンは常に打ち捨てられる。

読み込み中...