ヒープスプレー


Heap_spraying
コンピュータセキュリティでは、ヒープスプレーは、任意のコードの実行を容易にするエクスプロイトで使用される手法です。この手法を実装するエクスプロイトのソースコードの一部は、ヒープスプレーと呼ばれます。一般に、ヒープをスプレーするコードは、プロセスのヒープに(大きな)ブロックを割り当て、これらのブロックのバイトを次のように埋めることにより、ターゲットプロセスのメモリ内の所定の場所に特定のバイトシーケンスを配置しようとします。正しい値。

コンテンツ
1 手術2 歴史 3 実装
3.1 JavaScript 3.2 VBScript 3.3 ActionScript 3.43.4 画像 3.5 HTML5
4 検出と防止
5 も参照してください
6 参考文献

手術
ヒープスプレーは実際にはセキュリティの問題を悪用しませんが、脆弱性を悪用しやすくするために使用できます。ヒープスプレー自体を使用してセキュリティ境界を破ることはできません。別のセキュリティ問題が必要です。
さまざまな要因がこのプロセスに影響を与える可能性があるため、セキュリティの問題を悪用することはしばしば困難です。メモリとタイミングのチャンスアラインメントは、(攻撃者の観点から)多くのランダム性をもたらします。ヒープスプレーを使用して、これを補い、悪用が成功する可能性を高めるために大量の注文を導入することができます。ヒープスプレーは、ほとんどのアーキテクチャとオペレーティングシステムで、大きなヒープ割り当ての開始位置が予測可能であり、連続した割り当てがほぼ順次であるという事実を利用しています。これは、ヒープスプレーが実行されるたびに、スプレーされるヒープがほぼ同じ場所にあることを意味します。
ヒープに保存されたデータは複数の役割を果たしているため、エクスプロイトは特定のバイトを使用してヒープをスプレーすることがよくセキュリティの問題を悪用している間、アプリケーションコードは、メモリ内の任意の場所からアドレスを読み取るように作成されることがよくこのアドレスは、実行する関数のアドレスとしてコードによって使用されます。エクスプロイトがアプリケーションにスプレーされたヒープからこのアドレスを読み取らせることができる場合、コードがそのアドレスを関数ポインターとして使用し、スプレーされたヒープにリダイレクトするときに、実行のフローを制御できます。エクスプロイトが制御フローをスプレーされたヒープにリダイレクトすることに成功すると、そこにあるバイトが実行され、攻撃者が望むアクションをエクスプロイトが実行できるようになります。したがって、ヒープ上のバイトは、ヒープスプレー自体内の有効なアドレスを表すように制限され、ターゲットアーキテクチャの有効な命令を保持するため、アプリケーションがクラッシュすることはありません。したがって、有効なアドレスと、ターゲットアーキテクチャ上のNOPまたはNOPのような命令の両方に変換される1バイトをスプレーするのが一般的です。これにより、ヒープスプレーを非常に大きなNOPスレッドとして機能させることができます(たとえば、0x0c0c0c0cは非正規NOPとしてよく使用されます) 。

歴史
ヒープスプレーは、少なくとも2001年以来、エクスプロイトで時折使用されてきました が、この手法は、この手法を使用したいくつかのエクスプロイトがリリースされた後、2005年の夏にWebブラウザのエクスプロイトで広く使用されるようになりました。 InternetExplorerのさまざまなバグ。 これらすべてのエクスプロイトで使用されたヒープスプレーは非常に類似しており、エクスプロイト間で大きな変更を加えることなく、技術の多様性と使いやすさを示しました。初心者のハッカーがWebブラウザやWebブラウザプラグインのさまざまな種類の脆弱性に対する信頼できるエクスプロイトをすばやく作成できるようにするために、理解して使用するのは簡単であることがわかりました。ヒープスプレーを使用する多くのWebブラウザのエクスプロイトは、脆弱性を引き起こす小さなスクリプトまたはHTMLと組み合わせて、以前のエクスプロイトからコピーアンドペーストされたヒープスプレーのみで構成されています。

実装

JavaScript
Webブラウザのヒープスプレーは通常JavaScriptで実装され、大きな文字列を作成してヒープをスプレーします。使用される最も一般的な手法は、1文字の文字列から始めて、それをそれ自体と何度も連結することです。このようにして、文字列の長さは、スクリプトエンジンで許可されている最大長まで指数関数的に増加する可能性がブラウザが文字列を実装する方法に応じて、ASCII文字またはUnicode文字のいずれかを文字列で使用できます。ヒープスプレーコードは、シェルコードを使用して長い文字列のコピーを作成し、エクスプロイトが確実に機能するように十分なメモリがスプレーされるまで、これらを配列に格納します。

VBScript
時折、VBScriptはInternet Explorerで使用され、String関数を使用して文字列を作成します。

ActionScript
2009年7月、エクスプロイトがActionScriptを使用してAdobeFlashにヒープをスプレーしていることが判明しました。

画像
ヒープスプレーは、たとえば画像ファイルをプロセスにロードするなど、他の方法で実行できることが証明されていますが、これは広く使用されていません(2008年8月現在)。

HTML5
2012年9月、EuSecWest2012で新しい技術が発表されました。 2人のCORE研究者、FedericoMuttisとAnibalSaccoは、 HTML5で導入された技術を使用することで、ヒープに非常に高い割り当て粒度でスプレーできることを示しました。具体的には、 canvas APIが提供する低レベルのビットマップインターフェイスと、Webワーカーを使用してより迅速に実行しました。

検出と防止
Microsoft ResearchのNozzleプロジェクトは、ヒープスプレーを検出して防止することを目的としています。
BuBBleは、ヒープのスプレー後にトリガーされた攻撃を検出して防止するために検討できるもう1つの対策です。

も参照してください
NOPスライドまたはNOPスレッド、ヒープスプレーを補完する手法
ヒープ風水、ヒープレイアウトを操作するための手法
JITスプレー

参考文献
^ John Hays、セキュリティトレーニングエンジニア(2016年9月2日)。「Youtubeタイトル:ヒープスプレーエクスプロイトテクニック」。パロアルトネットワークスライブコミュニティ。公式の「パロアルトネットワークスライブコミュニティ」のYouTubeチャンネルから、「ヒープスプレーエクスプロイトテクニック」というタイトルが付けられました。
^ corelanc0d3r(2011年12月31日)。「エクスプロイトライティングチュートリアルパート11:ヒープスプレーの謎を解き明かす」。Corelanチーム。2015年4月25日にオリジナルからアーカイブされました。
^ “cami”:telnetdエクスプロイトコード
^ eEyeデジタルセキュリティ-調査
^ InternetExploiter 1:MSIE IFRAME src&nameパラメーターBoFエクスプロイト
^ InternetExploiter 3:MSIE.ANIファイル「anih」ヘッダーBoFエクスプロイト
^ InternetExploiter 2:MSIEDHTMLオブジェクト処理の競合状態の悪用
^ 「FrSIRT-MicrosoftInternetExplorer javaprxy.dll COMオブジェクトの脆弱性/エクスプロイト(セキュリティアドバイザリ)」。2008-03-27にオリジナルからアーカイブされました。
^ 「FrSIRT-MicrosoftInternetExplorer「Msdds.dll」リモートコード実行/エクスプロイト(セキュリティアドバイザリ)」。2007年12月19日にオリジナルからアーカイブされました。
^ Roee Hay:CVEの悪用-2009-1869
^ 「FireEyeマルウェアインテリジェンスラボ:Actionscriptによるヒープスプレー」。2014-05-01にオリジナルからアーカイブされました。
^ Michael Sutton&Greg MacManus、Punk Ode—Hiding Shellcode in Plain Sight、Black Hat 2006
^ HTML5ヒープスプレー。EUSecWest 2012
^ Microsoft Researchのノズルプロジェクトは、ヒープスプレーを検出して防止することを目的としています
^ BuBBle:ヒープスプレー攻撃に対するJavascriptエンジンレベルの対策