Windowsの最近のバージョンでのASLRの機能強化に関する
投稿では、悪意のあるコードをシステムにリモートでインストールするために攻撃者が使用したリモートコード実行の脆弱性(ドライブバイダウンロード)をリストした表を提供しました。 これらの脆弱性の半分以上は、いわゆるタイプです。 解放後使用(UAF)。 UAFは、攻撃者がコードに制御を移すための便利な方法と言えます。 このようなスキームでは、たとえばInternet Explorerなどの正当な実行可能コードには、メモリを操作するための不正なロジックが含まれている必要があります。

明らかに、メモリの操作中にこのようなエラーが発生すると、無効なポインタによってアクセスされるため、ブラウザがクラッシュする可能性があります。 ただし、このエクスプロイトの場合、攻撃者は脆弱なコードが目的のアドレスに制御を移すように、独自の目的でそれを使用します。 原則として、これにはヒープスプレーが使用されます。これにより、ヒープ内の予測可能なアドレスに多数のメモリブロックを確保し、攻撃者に必要な命令を埋めることができます。 Internet Explorer 11の
6月と
7月の累積的な更新プログラムで、Microsoftはオブジェクトにメモリを割り当て、メモリブロックのリリースを遅らせるときに、分離されたヒープの形で追加の緩和技術を導入しました。 このアプローチは、ブラウザーコードを保護します。ブラウザーコードには、メモリを操作しているときにエラーが含まれている可能性があり、エクスプロイトのアクションから保護されます。
通常、ヒープメモリロジックは次のようになります。
1)ブラウザがヒープ上にメモリブロックを割り当てます。
2)それを使用します。
3)リリース。
コードのバグの場合、メモリの操作は次のようになります。
1)ブラウザがヒープ上にメモリブロックを割り当てます。
2)それを使用します。
3)リリース。
4)変数に格納されたポインターによって(たとえば、vtableを介して)このブロックに繰り返しアクセスします。
最も一般的な操作レイアウトは次のようになります。
1)ブラウザがヒープ上にメモリブロックを割り当てます。
2)それを使用します。
3)リリース。
4)ユーザーがエクスプロイトを使用してWebページにアクセスします。
5)エクスプロイトは(ASLRをバイパスするために)スプレーヒープを実行し、ブロックに必要なコード(シェルコードなど)またはメモリアドレス(脆弱性をトリガーするため)を埋めます。
6)この悪用コードは、段落4のように、既に有効な無効なポインターによってブラウザーコードにアクセスされる状況の条件を作成します。
7)ブラウザはポインターに戻り、無許可のコードでメモリブロックに制御を移します(これを
行う前に、
ntdll!NtProtectVirtualMemoryを介してヒープブロックのDEPを無効に
するエクスプロイトガジェットを
実行します)。
このような状況では、脆弱なコードを悪用から保護するために、メモリの別個のヒープとそれからのメモリの遅延リリースを使用できます。 メモリブロックは後で解放されるため、攻撃者はこのアドレスを再予約できません。 このようなメカニズムは、Microsoftによって導入されました。

図
CMarkup :: CreateInitialMarkupメソッドを使用して分離されたヒープにメモリを割り当て、CMarkupオブジェクトを初期化します
。MicrosoftInternet Explorer CMarkupの解放後のリモートコード実行の脆弱性を参照してください。
MS14-035より前は、共通プロセスメモリヒープから割り当てが行われていました。

図 7月
MS14-037では、
MemoryProtection :: CMemoryProtector :: ProtectedFreeメソッドを使用してメモリブロックの遅延リリースを導入しました。このメソッドは、ブロックを実際には解放せず、システムデータ構造内で必要なメモをマークするだけです。

図 遅延メモリロジックの実装を担当するメソッド。

図
MemoryProtection :: CMemoryProtector :: ProtectedFreeメソッドは、分離されたヒープ
_g_hIsolatedHeapと
_g_hProcessHeapプロセス
自体のヒープのメモリブロックの遅延解放を導入し
ます 。

図 遅延メモリ割り当て解除は、CTreeNodeクラスでも使用されます。
以前の解放後使用CVE-2013-3893を参照してください。
したがって、Internet Explorer 11でWindows 8.1 x64の最新バージョンを操作する場合、ユーザーは0day脆弱性の悪用を防ぐために必要な機能を備えています。


安全である。