最新のZero-DayエクスプロイトでのASLRの回避策

ASLR(Address Space Layout Randomization)は、最新のオペレーティングシステムで最も効果的な保護メカニズムの1つです。 しかし、この方法は完璧ではありません。 多くの最新の高度で持続的な脅威のAPTは、ASLRをバイパスするために革新的な技術を使用することをすでに学習しています。

過去1年間に発見された最も有名なバイパス方法を考えてみましょう。

それぞれの手法について、以下で詳しく説明します。

非ASLRモジュール


この方法は、最も一般的で使いやすい方法です。 IEで使用され、ASLRで保護されていない2つの一般的な非ASLRモジュール:MSVCR71.DLLおよびHXDS.DLL。

MSVCR71.DLLは、JRE 1.6.xで使用され、/ DYNAMICBASEオプションなしでコンパイルされたMicrosoft Visual Cランタイムライブラリから取得されます。 ライブラリはIEプロセス空間にロードされ、次のOSとブラウザの組み合わせで永続的なアドレスを持ちます。

HXDS.DLLはMS Office 2010/2007に由来し、ASLRサポートなしでビルドされます。 このベクターは最初にここで説明さ 、現在はWindows 7上のIE 8/9の主要なASLR回避策です。このライブラリは、ブラウザが「ms-help://」で始まるアドレスにアクセスするとロードされます。

このメソッドは、次のエクスプロイトで少なくとも1回使用されています: CVE-2013-3893 、CVE2013-1347、 CVE-2012-4969CVE-2012-4792

短所

システムには、JRE 1.6およびOffice 2007/2010の古いバージョンに付属し、IE8およびIE9でのみロードされる非ASLRモジュールが必要です。 プログラムを最新バージョンに更新すると、この攻撃ベクトルが不可能になります。

修正BSTR


2010年にPeter Vreudenhil この手法を初めて取り上げました。 メモリの書き換えの可能性に関連する特定の種類の脆弱性にのみ適用されます。バッファオーバーフロー、メモリへの任意の書き込み、またはポインタを操作する可能性が攻撃を可能にします。

メモリに書き込むとき、EIPを完全に制御することはできません。 ほとんどの場合、エクスプロイトは、任意のコードを実行する関数へのポインターなどの重要なプログラムデータを上書きします。 攻撃者の主な目標は、BSTRの長さを損なうことです。これにより、割り当てられたメモリの初期境界を超えることになります。 成功した場合、外部ライブラリのアドレスを特定し、それらをROPリポジトリとして使用できます。 したがって、メモリ破損とEIP制御が可能です。
いくつかの脆弱性を使用して、BSTRの長さを変更できます。 たとえば、一部の脆弱性では、メモリを1バイトまたは2バイト変更することができます。 この場合、攻撃者はBSTRのNULL文字を変更して、文字列を次のオブジェクトと組み合わせることができます。 その後、変更されたBSTRにアクセスすると、ロードされたライブラリのベースアドレスに関する情報を取得する機会があります。

CVE-2013-0640

Adobe XFAゼロデイエクスプロイトは、この手法を使用してAcroForm.apiのベースアドレスを検索します。その後、ROPチェーンが構築され、ASLRとDEPをバイパスできます。 この脆弱性を使用して、エクスプロイトはvftableから関数を呼び出す前にメモリを制御できます。
画像
DEC操作の前にメモリ割り当てを検討します。
[string][null][non-null data][object]
DEC操作後、メモリは次のようになります。
[string][\xfe][non-null data][object]
詳細については、 immunityincのブログエントリを参照してください。

短所

このメソッドは通常、アドレスを解決するために複数のメモリ操作を必要とし、ヒープの損傷を慎重に利用して、破損した他のオブジェクトではなく、文字列を分割する責任があるメモリの一部であることを確認する必要があります。 MicrosoftはIE9の作成時にノズルを使用してスプレー/風水を防止したため、攻撃者はVBArray技術を使用してヒープを正しく処理しなければならない場合があります。

配列オブジェクトを変更する


配列の長さを変更することは、BSTRの長さを変更することに似ています。両方とも、特定のクラスの「便利な」脆弱性を必要とします。 攻撃者は、長さをある程度変更した後、メモリへの任意の読み取りまたは書き込みを実行できます。ほとんどの場合、プログラムフローと任意のコードの実行を完全に制御できます。
以下は、この手法を使用した有名なザイロデスのリストです。

CVE-2013-0634

このエクスプロイトは、正規表現を処理するときにバッファオーバーフローを引き起こすAdobe Flash Playerを対象としています。 攻撃者はオブジェクトのベクトルの長さを上書きしてから、隣接するメモリ領域を読み取り、flash.ocxのベースアドレスを見つけます。
エクスプロイトの動作は次のとおりです。
新しいオブジェクトの無限メモリ割り当ての設定:
画像
1:
obj[1] = null;
RegExp , :
boom = "(?i)()()(?-i)||||||||||||||||||||||||";
var trigger = new RegExp(boom, "");


, , obj[2]. , obj[2] , flash.ocx vftable .

CVE-2013-3163
use-after-free CBlockContainerBlock, IE. CVE-2013-0634, .
OR. :
or dword ptr [esi+8],20000h
:
- :
画像
, . :
画像
DWORD, 0x03f0, , .
ESI + 8 0x03f0, OR 0x0203f0, , .
0x3FFFFFF0.
画像
IE. ASLR , DLL kernel32/NTDLL .
ZwProtectVirtualMemory API ROP , DEP :

画像
, flash.Media.Sound(). vftable ROP .

CVE-2013-1690
use-after-free DocumentViewerImpl Firefox 0×0001 , :
画像

, , "" . "IF", setImageAnimationMode(), . setImageAnimationMode() :
画像
ArrayBuffer, . ArrayBuffer var2 0xff004.
画像
, 0x010ff004. ArrayBuffer byteLength JavaScript. ArrayBuffer. NTDLL SharedUserData (0x7ffe0300) ROP .

CVE-2013-1493
JAVA CMM, .
0x7fffffff, SecurityManager . , .
Array . , .


APT 0day , :
画像


ASLR 0day . IE non-ASLR Microsoft Office, Microsoft non-ASLR . , . , .
, , , .

ASLR, Dion Blazakis's JIT Yuyang's LdrHotPatchRoutine technique. . , ASLR, , .

. , 0day , .

Dan Caselden and Yichong Lin .
解放し 1:
obj[1] = null;
RegExp , :
boom = "(?i)()()(?-i)||||||||||||||||||||||||";
var trigger = new RegExp(boom, "");


, , obj[2]. , obj[2] , flash.ocx vftable .

CVE-2013-3163
use-after-free CBlockContainerBlock, IE. CVE-2013-0634, .
OR. :
or dword ptr [esi+8],20000h
:
- :
画像
, . :
画像
DWORD, 0x03f0, , .
ESI + 8 0x03f0, OR 0x0203f0, , .
0x3FFFFFF0.
画像
IE. ASLR , DLL kernel32/NTDLL .
ZwProtectVirtualMemory API ROP , DEP :

画像
, flash.Media.Sound(). vftable ROP .

CVE-2013-1690
use-after-free DocumentViewerImpl Firefox 0×0001 , :
画像

, , "" . "IF", setImageAnimationMode(), . setImageAnimationMode() :
画像
ArrayBuffer, . ArrayBuffer var2 0xff004.
画像
, 0x010ff004. ArrayBuffer byteLength JavaScript. ArrayBuffer. NTDLL SharedUserData (0x7ffe0300) ROP .

CVE-2013-1493
JAVA CMM, .
0x7fffffff, SecurityManager . , .
Array . , .


APT 0day , :
画像


ASLR 0day . IE non-ASLR Microsoft Office, Microsoft non-ASLR . , . , .
, , , .

ASLR, Dion Blazakis's JIT Yuyang's LdrHotPatchRoutine technique. . , ASLR, , .

. , 0day , .

Dan Caselden and Yichong Lin .
1:
obj[1] = null;

RegExp , :
boom = "(?i)()()(?-i)||||||||||||||||||||||||";
var trigger = new RegExp(boom, "");


, , obj[2]. , obj[2] , flash.ocx vftable .

CVE-2013-3163
use-after-free CBlockContainerBlock, IE. CVE-2013-0634, .
OR. :
or dword ptr [esi+8],20000h
:
- :
画像
, . :
画像
DWORD, 0x03f0, , .
ESI + 8 0x03f0, OR 0x0203f0, , .
0x3FFFFFF0.
画像
IE. ASLR , DLL kernel32/NTDLL .
ZwProtectVirtualMemory API ROP , DEP :

画像
, flash.Media.Sound(). vftable ROP .

CVE-2013-1690
use-after-free DocumentViewerImpl Firefox 0×0001 , :
画像

, , "" . "IF", setImageAnimationMode(), . setImageAnimationMode() :
画像
ArrayBuffer, . ArrayBuffer var2 0xff004.
画像
, 0x010ff004. ArrayBuffer byteLength JavaScript. ArrayBuffer. NTDLL SharedUserData (0x7ffe0300) ROP .

CVE-2013-1493
JAVA CMM, .
0x7fffffff, SecurityManager . , .
Array . , .


APT 0day , :
画像


ASLR 0day . IE non-ASLR Microsoft Office, Microsoft non-ASLR . , . , .
, , , .

ASLR, Dion Blazakis's JIT Yuyang's LdrHotPatchRoutine technique. . , ASLR, , .

. , 0day , .

Dan Caselden and Yichong Lin .
1:
obj[1] = null;

RegExp , :
boom = "(?i)()()(?-i)||||||||||||||||||||||||";
var trigger = new RegExp(boom, "");


, , obj[2]. , obj[2] , flash.ocx vftable .

CVE-2013-3163
use-after-free CBlockContainerBlock, IE. CVE-2013-0634, .
OR. :
or dword ptr [esi+8],20000h
:
- :
画像
, . :
画像
DWORD, 0x03f0, , .
ESI + 8 0x03f0, OR 0x0203f0, , .
0x3FFFFFF0.
画像
IE. ASLR , DLL kernel32/NTDLL .
ZwProtectVirtualMemory API ROP , DEP :

画像
, flash.Media.Sound(). vftable ROP .

CVE-2013-1690
use-after-free DocumentViewerImpl Firefox 0×0001 , :
画像

, , "" . "IF", setImageAnimationMode(), . setImageAnimationMode() :
画像
ArrayBuffer, . ArrayBuffer var2 0xff004.
画像
, 0x010ff004. ArrayBuffer byteLength JavaScript. ArrayBuffer. NTDLL SharedUserData (0x7ffe0300) ROP .

CVE-2013-1493
JAVA CMM, .
0x7fffffff, SecurityManager . , .
Array . , .


APT 0day , :
画像


ASLR 0day . IE non-ASLR Microsoft Office, Microsoft non-ASLR . , . , .
, , , .

ASLR, Dion Blazakis's JIT Yuyang's LdrHotPatchRoutine technique. . , ASLR, , .

. , 0day , .

Dan Caselden and Yichong Lin .
1:
obj[1] = null;

RegExp , :
boom = "(?i)()()(?-i)||||||||||||||||||||||||";
var trigger = new RegExp(boom, "");


, , obj[2]. , obj[2] , flash.ocx vftable .

CVE-2013-3163
use-after-free CBlockContainerBlock, IE. CVE-2013-0634, .
OR. :
or dword ptr [esi+8],20000h
:
- :
画像
, . :
画像
DWORD, 0x03f0, , .
ESI + 8 0x03f0, OR 0x0203f0, , .
0x3FFFFFF0.
画像
IE. ASLR , DLL kernel32/NTDLL .
ZwProtectVirtualMemory API ROP , DEP :

画像
, flash.Media.Sound(). vftable ROP .

CVE-2013-1690
use-after-free DocumentViewerImpl Firefox 0×0001 , :
画像

, , "" . "IF", setImageAnimationMode(), . setImageAnimationMode() :
画像
ArrayBuffer, . ArrayBuffer var2 0xff004.
画像
, 0x010ff004. ArrayBuffer byteLength JavaScript. ArrayBuffer. NTDLL SharedUserData (0x7ffe0300) ROP .

CVE-2013-1493
JAVA CMM, .
0x7fffffff, SecurityManager . , .
Array . , .


APT 0day , :
画像


ASLR 0day . IE non-ASLR Microsoft Office, Microsoft non-ASLR . , . , .
, , , .

ASLR, Dion Blazakis's JIT Yuyang's LdrHotPatchRoutine technique. . , ASLR, , .

. , 0day , .

Dan Caselden and Yichong Lin .
1:
obj[1] = null;

RegExp , :
boom = "(?i)()()(?-i)||||||||||||||||||||||||";
var trigger = new RegExp(boom, "");


, , obj[2]. , obj[2] , flash.ocx vftable .

CVE-2013-3163
use-after-free CBlockContainerBlock, IE. CVE-2013-0634, .
OR. :
or dword ptr [esi+8],20000h
:
- :
画像
, . :
画像
DWORD, 0x03f0, , .
ESI + 8 0x03f0, OR 0x0203f0, , .
0x3FFFFFF0.
画像
IE. ASLR , DLL kernel32/NTDLL .
ZwProtectVirtualMemory API ROP , DEP :

画像
, flash.Media.Sound(). vftable ROP .

CVE-2013-1690
use-after-free DocumentViewerImpl Firefox 0×0001 , :
画像

, , "" . "IF", setImageAnimationMode(), . setImageAnimationMode() :
画像
ArrayBuffer, . ArrayBuffer var2 0xff004.
画像
, 0x010ff004. ArrayBuffer byteLength JavaScript. ArrayBuffer. NTDLL SharedUserData (0x7ffe0300) ROP .

CVE-2013-1493
JAVA CMM, .
0x7fffffff, SecurityManager . , .
Array . , .


APT 0day , :
画像


ASLR 0day . IE non-ASLR Microsoft Office, Microsoft non-ASLR . , . , .
, , , .

ASLR, Dion Blazakis's JIT Yuyang's LdrHotPatchRoutine technique. . , ASLR, , .

. , 0day , .

Dan Caselden and Yichong Lin .
1:
obj[1] = null;

RegExp , :
boom = "(?i)()()(?-i)||||||||||||||||||||||||";
var trigger = new RegExp(boom, "");


, , obj[2]. , obj[2] , flash.ocx vftable .

CVE-2013-3163
use-after-free CBlockContainerBlock, IE. CVE-2013-0634, .
OR. :
or dword ptr [esi+8],20000h
:
- :
画像
, . :
画像
DWORD, 0x03f0, , .
ESI + 8 0x03f0, OR 0x0203f0, , .
0x3FFFFFF0.
画像
IE. ASLR , DLL kernel32/NTDLL .
ZwProtectVirtualMemory API ROP , DEP :

画像
, flash.Media.Sound(). vftable ROP .

CVE-2013-1690
use-after-free DocumentViewerImpl Firefox 0×0001 , :
画像

, , "" . "IF", setImageAnimationMode(), . setImageAnimationMode() :
画像
ArrayBuffer, . ArrayBuffer var2 0xff004.
画像
, 0x010ff004. ArrayBuffer byteLength JavaScript. ArrayBuffer. NTDLL SharedUserData (0x7ffe0300) ROP .

CVE-2013-1493
JAVA CMM, .
0x7fffffff, SecurityManager . , .
Array . , .


APT 0day , :
画像


ASLR 0day . IE non-ASLR Microsoft Office, Microsoft non-ASLR . , . , .
, , , .

ASLR, Dion Blazakis's JIT Yuyang's LdrHotPatchRoutine technique. . , ASLR, , .

. , 0day , .

Dan Caselden and Yichong Lin .
1:
obj[1] = null;

RegExp , :
boom = "(?i)()()(?-i)||||||||||||||||||||||||";
var trigger = new RegExp(boom, "");


, , obj[2]. , obj[2] , flash.ocx vftable .

CVE-2013-3163
use-after-free CBlockContainerBlock, IE. CVE-2013-0634, .
OR. :
or dword ptr [esi+8],20000h
:
- :
画像
, . :
画像
DWORD, 0x03f0, , .
ESI + 8 0x03f0, OR 0x0203f0, , .
0x3FFFFFF0.
画像
IE. ASLR , DLL kernel32/NTDLL .
ZwProtectVirtualMemory API ROP , DEP :

画像
, flash.Media.Sound(). vftable ROP .

CVE-2013-1690
use-after-free DocumentViewerImpl Firefox 0×0001 , :
画像

, , "" . "IF", setImageAnimationMode(), . setImageAnimationMode() :
画像
ArrayBuffer, . ArrayBuffer var2 0xff004.
画像
, 0x010ff004. ArrayBuffer byteLength JavaScript. ArrayBuffer. NTDLL SharedUserData (0x7ffe0300) ROP .

CVE-2013-1493
JAVA CMM, .
0x7fffffff, SecurityManager . , .
Array . , .


APT 0day , :
画像


ASLR 0day . IE non-ASLR Microsoft Office, Microsoft non-ASLR . , . , .
, , , .

ASLR, Dion Blazakis's JIT Yuyang's LdrHotPatchRoutine technique. . , ASLR, , .

. , 0day , .

Dan Caselden and Yichong Lin .
1:
obj[1] = null;

RegExp , :
boom = "(?i)()()(?-i)||||||||||||||||||||||||";
var trigger = new RegExp(boom, "");


, , obj[2]. , obj[2] , flash.ocx vftable .

CVE-2013-3163
use-after-free CBlockContainerBlock, IE. CVE-2013-0634, .
OR. :
or dword ptr [esi+8],20000h
:
- :
画像
, . :
画像
DWORD, 0x03f0, , .
ESI + 8 0x03f0, OR 0x0203f0, , .
0x3FFFFFF0.
画像
IE. ASLR , DLL kernel32/NTDLL .
ZwProtectVirtualMemory API ROP , DEP :

画像
, flash.Media.Sound(). vftable ROP .

CVE-2013-1690
use-after-free DocumentViewerImpl Firefox 0×0001 , :
画像

, , "" . "IF", setImageAnimationMode(), . setImageAnimationMode() :
画像
ArrayBuffer, . ArrayBuffer var2 0xff004.
画像
, 0x010ff004. ArrayBuffer byteLength JavaScript. ArrayBuffer. NTDLL SharedUserData (0x7ffe0300) ROP .

CVE-2013-1493
JAVA CMM, .
0x7fffffff, SecurityManager . , .
Array . , .


APT 0day , :
画像


ASLR 0day . IE non-ASLR Microsoft Office, Microsoft non-ASLR . , . , .
, , , .

ASLR, Dion Blazakis's JIT Yuyang's LdrHotPatchRoutine technique. . , ASLR, , .

. , 0day , .

Dan Caselden and Yichong Lin .

1:
obj[1] = null;

RegExp , :
boom = "(?i)()()(?-i)||||||||||||||||||||||||";
var trigger = new RegExp(boom, "");


, , obj[2]. , obj[2] , flash.ocx vftable .

CVE-2013-3163
use-after-free CBlockContainerBlock, IE. CVE-2013-0634, .
OR. :
or dword ptr [esi+8],20000h
:
- :
画像
, . :
画像
DWORD, 0x03f0, , .
ESI + 8 0x03f0, OR 0x0203f0, , .
0x3FFFFFF0.
画像
IE. ASLR , DLL kernel32/NTDLL .
ZwProtectVirtualMemory API ROP , DEP :

画像
, flash.Media.Sound(). vftable ROP .

CVE-2013-1690
use-after-free DocumentViewerImpl Firefox 0×0001 , :
画像

, , "" . "IF", setImageAnimationMode(), . setImageAnimationMode() :
画像
ArrayBuffer, . ArrayBuffer var2 0xff004.
画像
, 0x010ff004. ArrayBuffer byteLength JavaScript. ArrayBuffer. NTDLL SharedUserData (0x7ffe0300) ROP .

CVE-2013-1493
JAVA CMM, .
0x7fffffff, SecurityManager . , .
Array . , .


APT 0day , :
画像


ASLR 0day . IE non-ASLR Microsoft Office, Microsoft non-ASLR . , . , .
, , , .

ASLR, Dion Blazakis's JIT Yuyang's LdrHotPatchRoutine technique. . , ASLR, , .

. , 0day , .

Dan Caselden and Yichong Lin .

1:
obj[1] = null;

RegExp , :
boom = "(?i)()()(?-i)||||||||||||||||||||||||";
var trigger = new RegExp(boom, "");


, , obj[2]. , obj[2] , flash.ocx vftable .

CVE-2013-3163
use-after-free CBlockContainerBlock, IE. CVE-2013-0634, .
OR. :
or dword ptr [esi+8],20000h
:
- :
画像
, . :
画像
DWORD, 0x03f0, , .
ESI + 8 0x03f0, OR 0x0203f0, , .
0x3FFFFFF0.
画像
IE. ASLR , DLL kernel32/NTDLL .
ZwProtectVirtualMemory API ROP , DEP :

画像
, flash.Media.Sound(). vftable ROP .

CVE-2013-1690
use-after-free DocumentViewerImpl Firefox 0×0001 , :
画像

, , "" . "IF", setImageAnimationMode(), . setImageAnimationMode() :
画像
ArrayBuffer, . ArrayBuffer var2 0xff004.
画像
, 0x010ff004. ArrayBuffer byteLength JavaScript. ArrayBuffer. NTDLL SharedUserData (0x7ffe0300) ROP .

CVE-2013-1493
JAVA CMM, .
0x7fffffff, SecurityManager . , .
Array . , .


APT 0day , :
画像


ASLR 0day . IE non-ASLR Microsoft Office, Microsoft non-ASLR . , . , .
, , , .

ASLR, Dion Blazakis's JIT Yuyang's LdrHotPatchRoutine technique. . , ASLR, , .

. , 0day , .

Dan Caselden and Yichong Lin .

1:
obj[1] = null;

RegExp , :
boom = "(?i)()()(?-i)||||||||||||||||||||||||";
var trigger = new RegExp(boom, "");


, , obj[2]. , obj[2] , flash.ocx vftable .

CVE-2013-3163
use-after-free CBlockContainerBlock, IE. CVE-2013-0634, .
OR. :
or dword ptr [esi+8],20000h
:
- :
画像
, . :
画像
DWORD, 0x03f0, , .
ESI + 8 0x03f0, OR 0x0203f0, , .
0x3FFFFFF0.
画像
IE. ASLR , DLL kernel32/NTDLL .
ZwProtectVirtualMemory API ROP , DEP :

画像
, flash.Media.Sound(). vftable ROP .

CVE-2013-1690
use-after-free DocumentViewerImpl Firefox 0×0001 , :
画像

, , "" . "IF", setImageAnimationMode(), . setImageAnimationMode() :
画像
ArrayBuffer, . ArrayBuffer var2 0xff004.
画像
, 0x010ff004. ArrayBuffer byteLength JavaScript. ArrayBuffer. NTDLL SharedUserData (0x7ffe0300) ROP .

CVE-2013-1493
JAVA CMM, .
0x7fffffff, SecurityManager . , .
Array . , .


APT 0day , :
画像


ASLR 0day . IE non-ASLR Microsoft Office, Microsoft non-ASLR . , . , .
, , , .

ASLR, Dion Blazakis's JIT Yuyang's LdrHotPatchRoutine technique. . , ASLR, , .

. , 0day , .

Dan Caselden and Yichong Lin .

1:
obj[1] = null;

RegExp , :
boom = "(?i)()()(?-i)||||||||||||||||||||||||";
var trigger = new RegExp(boom, "");


, , obj[2]. , obj[2] , flash.ocx vftable .

CVE-2013-3163
use-after-free CBlockContainerBlock, IE. CVE-2013-0634, .
OR. :
or dword ptr [esi+8],20000h
:
- :
画像
, . :
画像
DWORD, 0x03f0, , .
ESI + 8 0x03f0, OR 0x0203f0, , .
0x3FFFFFF0.
画像
IE. ASLR , DLL kernel32/NTDLL .
ZwProtectVirtualMemory API ROP , DEP :

画像
, flash.Media.Sound(). vftable ROP .

CVE-2013-1690
use-after-free DocumentViewerImpl Firefox 0×0001 , :
画像

, , "" . "IF", setImageAnimationMode(), . setImageAnimationMode() :
画像
ArrayBuffer, . ArrayBuffer var2 0xff004.
画像
, 0x010ff004. ArrayBuffer byteLength JavaScript. ArrayBuffer. NTDLL SharedUserData (0x7ffe0300) ROP .

CVE-2013-1493
JAVA CMM, .
0x7fffffff, SecurityManager . , .
Array . , .


APT 0day , :
画像


ASLR 0day . IE non-ASLR Microsoft Office, Microsoft non-ASLR . , . , .
, , , .

ASLR, Dion Blazakis's JIT Yuyang's LdrHotPatchRoutine technique. . , ASLR, , .

. , 0day , .

Dan Caselden and Yichong Lin .

Source: https://habr.com/ru/post/J201768/


All Articles