Design: セキュリティに぀いお説明する

䜜成日 2015幎06月19日  Â·  26コメント  Â·  ゜ヌス: WebAssembly/design

WebAssemblyのセキュリティモデルは、バグのあるファむルや悪意のある.wasmファむルからナヌザヌを保護するこずを目的ずしおいたす。 これは、開発者が安党なアプリケヌションを䜜成するのに圹立ちたせん。 私たちの蚭蚈では、その区別を明確にし、WebAssemblyがそのセキュリティを実装する方法ず、開発者が安党なアプリケヌションを䜜成するのに圹立぀ずWebAssemblyが期埅するツヌルを説明する必芁がありたすこれは、WebAssemblyで適切なプリミティブを提䟛するこずに䟝存しおいたす。

これは䞻に、これをデザむンに远加するための私自身の問題です。

党おのコメント26件

やあ

質問がありたす。このコンテキストで次のこずを詳しく説明するのは理にかなっおいたすか。

「それ以倖に、゜ヌス蚀語レベルで未定矩の動䜜を呌び出すプログラムは、アプリケヌションヒヌプのコンテンツの砎損、任意のパラメヌタヌを䜿甚したAPIの呌び出し、ハング、トラップ、たたは任意の量の消費など、他のこずを行うWebAssemblyプログラムにコンパむルされる堎合がありたす。リ゜ヌス制限内。」
https://github.com/WebAssembly/design/blob/master/CAndC++.md#undefined-and-implementation-defined-behavior

私が考えおいるのは、䟋ずさらなる議論を提䟛するこずによっお、非ネむティブのバックグラりンドから来たWeb開発者におそらく圹立぀かもしれないコンテキスト/リファレンスを提䟛するこずです。

たずえば、CERTのMSC14-C。 移怍性の動䜜未指定の動䜜、未定矩の動䜜、ロケヌル固有の動䜜、実装定矩の動䜜が䟋ずずもにリストされおいたす。 MSC15-CPP。 脆匱性ぞの䟝存しないでください。Cコンパむラは䞀郚のラップアラりンドチェックをサむレントに砎棄する可胜性があり「境界

より詳现な治療

その他の朜圚的に関連するアドバむス

wasmファむルを制埡するための䞀意のCSPヘッダヌがあるず圹に立ちたすか サむトの所有者は、サブリ゜ヌスがwasmをロヌドしないようにしたいず思うかもしれたせん。

それは興味深い質問です。 間違いなく、 evalずFunctionを蚱可しないのず同じ堎合に、サむトがWebAssemblyの動的ロヌドず評䟡を蚱可しないようにする必芁がありたすこれは、 LoaderでのES6モゞュヌル統合ずCSPチェックから倖れるだけです。

ダむナミックリンクに関するセキュリティ䞊の懞念のいく぀かに぀いおは、53を参照する䟡倀がありたす。

@jfbastien yup CORSずSRIは、可胜な堎合は開発者が利甚できるようにする必芁がありたす。

@lukewagnerwasmが有効にするリ゜ヌスぞの䜎レベルのアクセスに䟝存するず思いたす。 あなたが箱から出しお蚀うように、それはただのJSです。 ただし、wasmの包括的な目暙は、可胜な限り機械の金属に最も近いもののようです。 グロヌバルに制埡するためのCSPディレクティブがあるず䟿利です。
時間の経過ずずもに、他の機胜ぞのよりきめ现かいアプロヌチも改善されるでしょう。

他の盎接的な可胜性は、他の䜎レベルのアクセスにアクセス蚱可APIを利甚するこずです。

たあ、パフォヌマンスの意味で金属に近い。 セキュリティ、暩限、サンドボックスの芳点から、WebAssemblyをJSから分岐させるこずに぀いおの議論はありたせん。

それは私がポストMVPずブレンダンアむクの発衚の䞡方から埗た感芚ではありたせんでしたが、倧䞈倫です+1

あなたが蚀及しおいるのは、MVP埌のWebAssemblyセマンティクスがJSで効率的にポリフィルできるものずは異なるこずが蚱可されるこずに同意したずいうこずだず思いたす。 この盞違は、セキュリティ/蚱可ずは関係なく、蚈算機胜に関するものです。 ぀たり、それらを効率的にポリフィルするこずはできたせんでしたが、JS Emterpreterスタむルで蚘述されたWebAssemblyむンタヌプリタヌによっお新しい機胜をシミュレヌトするこずができたした。 この効果にメモを远加しお、「JSからの分岐」の意味を制限するずよいでしょう。

うん、それは確かにドキュメントの良い拡匵になるでしょう、私はドキュメントをあたりにも速く読んだかもしれたせんが、それはそれを明確にしないようでした。

スレッド機胜ずメモリ機胜を远加するこずに぀いおのEichsの話のひず぀で、wasmに新しい機胜が远加されるず思いたした。 これらもJavaScriptに远加される可胜性が高く、通垞の新機胜の粟査の察象になるず思いたす。

「セキュリティPOVずJSの違いはありたせん」がWeb.mdに远加され

私はむしろその区別をよりよく説明したいず思いたす。 JSを参照するこずは、自立の芳点からはあたり良くありたせん。実際には、JSが持぀セキュリティの衚面積を枛らしたいず思いたすたずえば、クロスオリゞンスクリプトなど。

CppConで話をしたので、これに぀いお説明したす:-)

暗号化実装のタヌゲットずしおWebAssemblyを䜿甚するこずに関心がある堎合は、固定時間実装のサポヌトに関しおJS / asm.jsJITずWebAssemblyJITの違いを詳しく説明するず䟿利です。 特に、ビットシフト、JIT埌のブランチ、条件付きゞャンプやルックアップ、たたはタむミングリヌクを匕き起こす可胜性のあるJITによるその他の倉曎などの操䜜に぀いお考えおいたす。

開発者がWebAssemblyがasm.jsですでに持っおいるものよりも固定時間の実装をより適切にサポヌトするこずを期埅しおいない堎合は、アプリケヌション蚭蚈に察するWebAssemblyのセキュリティぞの圱響を詳しく説明する䞀環ずしお圹立぀ず述べおください。 WebAssemblyが、珟圚存圚するものよりもアプリケヌションを匷化するための䜕らかの手段を提䟛するのであれば珟圚、たたはMVPの埌で、仕様を詳しく読んでいたせん、それに぀いおも詳しく説明するのは玠晎らしいこずです。 https://github.com/jedisct1/libsodium.js/issues/24#issuecomment -128002942には、クラむアント偎のJavaScript暗号に関する既存の問題に関する詳现がありたす。

ちなみに、これはすべお非垞に゚キサむティングです。 NS

@dconnollyによっお提案された明確なステヌトメントが必芁であるこずに同意したした。 今のずころ、MVPの堎合、JITが実行できるこず、実行できないこずは保蚌されおおらず、少なくずもMVPの堎合、定数時間アルゎリズムはwasmの適切な䜿甚法ではないずいう議論がありたした。 これは将来倉曎される可胜性がありたす。

私の珟圚の芋解は、適切な䞀定時間のコヌドを䜜成するには、マむクロアヌキテクチャのアセンブリず十分な理解が必芁になるこずが倚いため、倖郚APIWebプラットフォヌムなどの゚ンベッダヌによっお提䟛されるがそのような保蚌を提䟛するのに適しおいるずいうこずです。 動的バむナリ倉換を実行するCPUの極端な䟋を考えおみたしょう。WebAssemblyは、CPUが実行できるこず/実行できないこずを保蚌できたせん。 私の芋解では、WebAssemblyは抜象化レベルが高すぎお、真の䞀定時間コヌドを衚珟できたせん。

かっこいい、説明しおくれおありがずう。 WebプラットフォヌムAPIは、この皮のもの、特にプリミティブに最適な堎所であるこずに同意したした メモを介した新しい楕円曲線などの将来の远加の䜙地がある、基本をサポヌトしおい

@ jfbastien 、wasmのタむミング保蚌に぀いおあなたが蚀ったこずはすべお今日でも圓おはたりたすか

珟圚のドキュメントでは、定数時間アルゎリズムに察しお朜圚的にポゞティブに聞こえる、文曞化された゚ッゞケヌスの小さなリストを陀いお、決定論的実行が目暙であるこずがわかりたす。 ただし、 webassembly.org / docs / securityは、タむミング攻撃の可胜性を認めおおり、将来の朜圚的な緩和策をいく぀か瀺しおいたすが、「バグのあるCコヌドが魔法のように修正されない...ただ」たたは「通垞のCコンパむラでは発生しないサむドチャネルの脆匱性が導入される可胜性がありたす」。

厳しい保蚌はさおおき、少なくずも「定数時間アルゎリズムは100確実に倱敗する」ず「clangのネむティブバむナリ出力に匹敵するタむミング特性を垞に期埅しない明確な理由はない」の間にあるこずを理解するこずは圹に立ちたす。 @dconnollyの指摘に'use asm'ステヌトメントを完党に尊重するFirefoxのような実装ず、少し緩く再生するChromeのような実装の䞡方を考慮に入れるず䟿利です。 。

@ buu700のすべおのオペコヌドの決定論的結果は、どのオペコヌドでもタむミングが保蚌されおいるこずを意味するものではありたせん。 Clangは䞀定時間の実行も保蚌したせん。たた、情報挏えいの圱響を受けやすいコヌドを䜜成しおいる堎合は、䞀定時間だけでは䞍十分です。

珟圚、WebAssemblyはinfoleaksに関しお䜕も保蚌しようずはしおいたせん。

了解したした。決定論@jfbastienのセクションを明確にしおいただきありがずうございたす。

タむミング/サむドチャネルおよび保蚌たたはその欠劂を無芖するに関しおは、珟時点では仕様に関連するものはなく、実際の実装がclangずどのように比范されるかに぀いおの有甚なデヌタはただないようです。 以前のコメントを読んだ埌、私が実際に埗たのは、wasmの実装がこの領域でgcc / clangよりも垞に_悪い_であるずいう固有の理由があるかどうかです。 懞念事項ずしお抜象化のレベルに぀いお蚀及したしたが、「十分に良い」䞀定のタむミングネむティブC、アセンブリ、ハヌドりェアなどのベヌスラむン比范ずしお䜕を䜿甚しおいるかが明確ではありたせんでした。

蚀い換えれば、clangでむンフォリヌクに敏感なコヌドを実行するか、今日のWebAssembly仕様の仮想的な最良/最も成熟した/最もむンフォリヌクが匷化された実装のどちらかを遞択した堎合、あなたの理解に基づいお、前者が明らかに奜たれたすか

珟時点では、infoleakに敏感なコヌドに぀いおは、clangにもWebAssemblyにも䟝存しおいたせん。 私が望む保蚌を実際に埗るために珟圚私が知っおいる唯䞀の方法は、私がタヌゲットにしおいる特定のCPUのマニュアルを読むアセンブリを䜜成し、カヌネルず緊密に連携するこずです。 本圓にタむミングに䟝存しないようにしたい堎合は、「x86」たたは「ARM64」を知っおいるだけでは十分ではありたせん。

䞀郚のコンパむラ/蚀語でいく぀かの保蚌を埗るこずができたすが、コヌドを無効にするために必芁な情報リヌクが1぀だけの堎合、「䞀郚」では十分な保蚌はありたせん。

完璧です、ありがずう、それが私の質問に答えるず思いたす。 䞀般的なむンフォリヌク脅嚁モデリングに関するすべおの点で合意したした。 wasmを他のasmフリヌのCコンパむルタヌゲットよりもリヌクが倚いず芋なすべきかどうかを知りたかっただけですが、必ずしもそうではないずいうこずですか

「もっず挏れやすい」ずいうのは圹に立たないず思いたす。 指暙は「挏れはありたせんか」です。 WebAssembly、clang、C ++、およびCの答えは「はい」です。

特に、私が念頭に眮いおいたのは、@ dconnollyによっおリンクされたlibsodium / NaClの䟋など、玔粋なC実装で特定のサむドチャネル抵抗特性を実珟するように蚭蚈されたアルゎリズムでした。 考えられるすべおの攻撃シナリオで䜕かが生き残るこずができれば確かに理想的ですが、2぀のものの間のデルタを知るこずも圹立ちたす䞡方が吞う堎合でも、ある皋床吞うこずによっお、この堎合、LinuxABIの代わりにWebAssemblyを䜿甚するかどうかタヌゲットは、libsodiumの意図された脅嚁モデルを砎る可胜性がありたす。

libsodiumの問題スレッドに関するリンクされたコメントは、ラむブラリがasm.jsずどのように盞互䜜甚するかに぀いお非垞に有益ですが、専門家ではないため、その特定の分析がWebAssembly甚に曞き盎されたように聞こえるかどうかはわかりたせんi64サポヌトずブラりザヌがasm.jsよりもwasmの凊理の䞀貫性がありたす。

しかし、ずにかく、私はあなたの元のポむントが1幎前から䜕であったかを理解しおいたす、そしお私が本圓に心配したのはあなたが実際よりも匷い発蚀をしおいたかどうかだけでしたそれは仕様が特定の新しいサむドチャネルの匱点を導入するこずが知られおいたしたどちらも䞀般的にその目的に適しおいないのずは察照的に、暙準のC / clangにはありたせん、それを明確にしおくれおありがずう。

>>

「もっず挏れやすい」ずいうのは圹に立たないず思いたす。

@jfbastien 、定量的セキュリティは、
それ。 䞀般的なメトリックは、情報のビット数が
攻撃の成功-1ビットず32ビットは、たずえば、倧きな違いを生みたすそしお
緎習ほずんどすべおのシステムには、偎面からの小さな朜圚的な挏れがありたす
チャネル。 ただし、そのような定量化はかなり難しいこずがよくありたす。

>>

「もっず挏れやすい」ずいうのは圹に立たないず思いたす。

@jfbastien 、定量的セキュリティは、
それ。 䞀般的なメトリックは、情報のビット数が
攻撃の成功-1ビットず32ビットは、たずえば、倧きな違いを生みたすそしお
緎習ほずんどすべおのシステムには、偎面からの小さな朜圚的な挏れがありたす
チャネル。 ただし、そのような定量化はかなり難しいこずがよくありたす。

私はこれを認識しおおり、リヌクはリヌクであるため、たったく関心がありたせん。 開発者にずっお重芁な堎合は、最終的には私たちWebAssemblyの実装者に噛み付くでしょう。 他の優先事項を考えるず、WebAssemblyがすぐにこの問題に取り組むべきではないず思いたす。たた、WebCryptoはすでに取り組みずしお存圚しおいたす他の方法では欠点があるかもしれたせんが、この問題を解決するこずは、珟圚WebAssemblyが存圚する堎合よりも優れおいたす。 。 もちろん、自由にこれを探玢するこずができたす。

@jfbastienは、このトピックは珟圚優先されおいないこずに同意したした。
WasmはCよりもリヌクが倚くなく、取り組むための良い方法がわからないこず
それ。 しかし、「リヌクはリヌクです」のような過床の単玔化は、その点では圹に立ちたせん。
問題-すべおのシステムがある皋床リヌクしおいるので、実際には量はすべおです
それは重芁です。 そしお、「それが私たちを噛む」たで埅぀こずは、戊略ではありたせん
本圓の朜圚的な犠牲者の間で倚くの自信を刺激する぀もりです、すなわち
ブラりザナヌザヌ。

同意したした... WasmはCよりもリヌクが少ないわけではありたせん

よろしくお願いしたす。明瀺的に確認しおいただきありがずうございたす。 それが私がここに来たすべおですそれが「挏れない」かどうかの保蚌ではなく、私がそれを比范すべきものの䞀般的な感芚。

@ rossberg-chromium私はwasmがCよりもリヌクが少ないずいう考えに同意するずは思わない。結局それは各゚ンゞンがすべおをどのように実装するかに䟝存する。 たずえば、JavaScriptCoreはコヌドを階局化し、実行可胜メモリが䞍足するずコヌドの階局化を停止したす。 これは、Cコヌドには存圚しないリヌクです。 wasm゚ンゞンがより高床になるに぀れお、wasmはJVMのようなものず同じくらいリヌクする可胜性が高いず思いたす。 最終的には、特にパフォヌマンスを犠牲にするこずなく、仕様や実装者が情報挏えいの防止に察応しようず努力する可胜性は䜎いず思いたす。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡

関連する問題

jfbastien picture jfbastien  Â·  6コメント

ghost picture ghost  Â·  7コメント

Artur-A picture Artur-A  Â·  3コメント

bobOnGitHub picture bobOnGitHub  Â·  6コメント

aaabbbcccddd00001111 picture aaabbbcccddd00001111  Â·  3コメント