JavaScriptでASLRを無効化する攻撃「AnC」 27
整列 部門より
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の記事)。
誰か三行にまとめてくれ (スコア:0)
対処しづらくて厄介な問題って事はわかったが、仕組みが何度読み返してもさっぱりわからん(;´д`)
Re:誰か三行にまとめてくれ (スコア:1)
ただの引き算でしょ。
テーブルページのオフセットが判れば9bit分の確定ができる。
ASLRの能力が36bit分あっても、36-9=25で25bit分しかないのと同じことになる。
25bit程度では、現代では安全ではない。
Re:誰か三行にまとめてくれ (スコア:1)
x86_64ならPGD PUD PMD PTEと4つのページテーブルをたどる
1つ辺り9bitが確定できるから、9*4で36bit確定できる
よって、36bitでは意味がない
ってことだろ
Re:誰か三行にまとめてくれ (スコア:1)
36bitでは意味がないっていうか、36bitが4分割されてて、それぞれを攻撃可能だから
9bitのエントロピーを4回破壊、つまり11bitのエントロピーの破壊でできたってことで、
そこがミソなのかなと。
Re: (スコア:0)
ごめん引き算を間違えた。もう俺の脳は破壊されているかも
Re: (スコア:0)
このページには人の脳を攻撃するスクリプトが含まれている!
Re: (スコア:0)
ASLRを突破した後
どうやってバイナリ注入するんだろう?
Re: (スコア:0)
もうすでにブラウザ上、あるいは何かしらの方法で、native code を実行可能な段階なんでしょ。exploit があっても、ASLR があるから破壊行動ができなかった。でも今は Browser (というか JavaScript)の手助けがあれば、今まで悪用不能だった Exploit が悪用できるようになる、ということと、俺は理解した。
Re: (スコア:0)
正確に言えばASLRによって無効になった脆弱性がASLRを無効化する攻撃手法が発明されたので再度使えるようになったと。
ガンダムみたいな話ですな。
問題点はこれがソフトウェアではなくハードウェアに起因する脆弱性ってこと?
Re: (スコア:0)
ASLRが有効だと、従来のバッファオーバーフロー攻撃を防ぐことが可能。つまり従来型の攻撃を行う前にASLRを無効にしておかなければならない。ASLRを突破したからといって直ちに任意のコードを実行できるわけではない。ということなんでは。
9bitのエントロピーがどうとかいう話には私もついていけませんすんません。
Re:誰か三行にまとめてくれ (スコア:1)
ここで言ってる「エントロピー」は、おおざっぱに言えばものすごく精度の良い乱数源のことです。
32bitの乱数でアドレスを広範に変えていても、そのうち9bit分の答えがMMUでわかる。
だから総当たりの計算時間は1/500になって現実的な攻撃になりうる。(x86_64アーキテクチャの例)
Re: (スコア:0)
ごめんなさい、#3163880さんご指摘のとおり9bit×4ページなので
36bitの完全な乱数系でも危ういことがあるという記述ですね。
Re: (スコア:0)
3行にまとめてもらったところで仕組みがさっぱりわからんのは変わらんでしょ _(:3 」∠)_
Re:誰か三行にまとめてくれ (スコア:1)
ASLRの話や
昔、プログラミングi80386を読んだお陰か、
纏めてくださったものを見て、
そういう事なのかぁ~と何となくわかった気がしてます。
ありがとうございます。
MMU回りは昔イミフでしたが、読んでてよかった感。
MMUのメモリアクセス時間を計ってるってことかな (スコア:0)
プロジェクトページ [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が行うページテーブル走査の時間を測定する)
測定を何度も行うことで、統計的に、別スレッドや別プロセスのスタックアドレスなんかが判明するってことかしら。
Re: (スコア:0)
現時点ではサイドチャネル攻撃がjsで書けるようになりましたってだけのProof of conceptじゃないかこれ
普段からやってるけど (スコア:0)
>ユーザーレベルでは信頼できないソースからのスクリプト実行をブロックするといった対策しかできないが
単にJavaScriptを無効にしとくだけじゃダメなの???
Re: (スコア:0)
今時のWebだとJavaScript無効化するとまるで動かないサイトばっかだからでは。
うちの会社のUI/UX系やってるデザイナーもこのニュース見て「JavaScriptが死んだら俺の仕事無くなる」ってわめいてたし。
Re: (スコア:0)
Re: (スコア:0)
俺もJavaScriptは普段から無効にしています、煩わしい広告は出ないし得体の知れないサイトを閲覧するときも心強いですよ
ただ最近はサイトの表示をHTMLではなく完全にCSS+JavaScriptで組み立ててる所も時々あるのでそのときは文字と表組みぐらいしか見られませんが
そんな時やJavaScriptで記載されてる部分は自分でJavaScriptのソースを読むのでJavaScriptの勉強になるので一石二鳥
ASLR無効化はとても面白いと思いますね、まだ理解できるレベルでは無いですが
Re: (スコア:0)
確かにjavascriptが無効だと非常に不便ですね。「より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。」なんて表示されたりもします。
ただjsが無効だと利用できるタグのリストなんかが表示されて便利。
重要事項:
話題に沿うように努力しましょう
新しいスレッドを起こすかわりに、他の人のコメントに返事をしましょう
すでに投稿された内容かもしれないので、重複を避けるために、投稿をするまえに他の人のコメントを読みましょう
Re:普段からやってるけど (スコア:1)
>ただjsが無効だと利用できるタグのリストなんかが表示されて便利。
Firefoxの場合「ここに返信」ボタン押下を右クリックで「新しいTab/Window」
開くようにして表示させれば(具体例だとおもいねえ)
https://srad.jp/comments.pl?sid=704882&op=Reply&threshold=0&am... [srad.jp]
JavaScriptが有効な状態で使用していても表示されます。
// コメント投稿画面ではJavaScriptを使っていないわけでもないんだが。
使えん (スコア:0)
この攻撃には正確な時間の計測が必要で、論文ではTTT (Time-To-Tick)とSMC (Shared Memory Counter)という技術を使っているが、どちらも一般的なChrome環境の攻撃に使えない。そしてソフトウェアで対策が可能。
もっと面白いのが欲しいよー。
使えないって言っている人がいるけど (スコア:0)
ASLRが無効化できる点がポイントであって、JavaScriptで書けるっていうのはただのおまけだし、
別にブラウザ内部からの攻撃に限った話ではない。
モダンOSの多重防御の壁が1枚破れたんだから、重大な話でしょ。
Re: (スコア:0)
ちゃうちゃう。ASLRを無効かする手法はすでにある。今回のはJSでもそれができると証明された点が大きい。
JSならユーザに身元不明のコードを実行させるのが簡単だからな。JSでというよりブラウザ上でできるって点が大きい。
Re: (スコア:0)
多重防御の壁が1枚破れたくらい、どうってことないでしょ。
Edgeは対策済みみたいね (スコア:0)
でも重複排除機構を無効化とか。。。
再利用しないことで位置固定化防ぐんでしょうが、キャッシュ否定みたいで嫌な攻撃方法ですね。