Angler EKエクスプロイトスイートはEMETセキュリティバイパスに特化しています

FireEyeの専門家 、特別な技術を使用してEMETをバイパスするAngler Exploit Kitの新しい修正の発見を報告しました。 メモリ内の悪意のあるエクスプロイトアクションをブロックするために使用されるEMETセキュリティメカニズムをバイパスする非標準の方法を使用するAdobe FlashおよびMS Silverlightのエクスプロイトについてお話ししています。 エクスプロイトは、EMET 5.5の最新バージョンのDEP、EAF、およびEAF +設定をバイパスします。







EMETについて何度も書いています[1、2、3、4、5、6、7]。 Microsoftは、このツールをRCEエクスプロイト、つまり攻撃者がリモートでコードを実行するために使用するエクスプロイトから保護するための無料で効果的なツールとして位置付けています。 EMETの最新バージョンには、win32k.sysドライバーの脆弱性を悪用して特権をSYSTEMに昇格させるLPEエクスプロイトに対抗する機能も含まれています。



EMETはプロセスにDEPを強制し、RWメモリページを使用してプログラムコードを実行するエクスプロイトの試みをブロックします。 エクスプロイトはROPメソッドを使用してDEPをバイパスしますが、特殊なコードガジェットに依存し、コールスタックを使用して制御を渡します。 DEPをバイパスするには、少なくともVirtualProtect API関数を呼び出す必要があります。これにより、目的のメモリページからNXビットを削除できます。



FireEyeが検出するエクスプロイトの1つは、DEPをバイパスするためにROPを使用しないことです。 代わりに、Flash.ocxおよびCoreclr.dll(Silverlight)ライブラリの組み込み関数が使用され、 VirtualProtectおよびVirtualAllocは定数PAGE_EXECUTE_READWRITEで呼び出されます。 次の図は、coreclr.dllライブラリコードを使用してDEPをバイパスするSilverlightエクスプロイトを示しています。





図 coreclr.dllライブラリのVirtualAllocを呼び出します。これにより、ROP( FireEyeデータ )なしでDEPをバイパスできます



次に、Flashエクスプロイトはflash.ocxモジュールの機能を使用してVirtualProtectを呼び出し、シェルコードを実行する前にDEPをバイパスします。





図 flash.ocxでVirtualProtectを呼び出すコード( FireEye data )。



コードを使用したこのような操作は、組み込みのActionScriptおよびSilverlight関数で実行されるため、EMETは、ROP(EMET呼び出し側チェック、SimExecFlow、StackPivot設定)の検出に使用されるスタック上の呼び出された関数の戻りアドレスのチェックを効果的に使用できません。



エクスプロイトがバイパスする別の微調整はEAFと呼ばれ、EAF +の拡張された修正です。 EAF(Export Address Table Filtering)設定は、kernel32.dllおよびntdll.dllシステムライブラリエクスポートテーブルを含むメモリページへの不正アクセスをブロックするためにEMETによって使用されます。 EMETは、そのようなページにアクセスしようとするコードを区別し、不明なソースを検出すると、警告を表示します。 EAF +は、メンテナンスに最も一般的に使用される動的ライブラリをブラックリストに追加することにより、EAFを拡張します。 デフォルトでは、EAF +にライブラリmshtml.dll、flash * .ocx、jscript * .dll、vbscript.dll、vgx.dllのブラックリストが含まれています。



SilverlightエクスプロイトJITコードは、coreclr.dllと呼ばれるフレームワークライブラリを利用します。 このライブラリはEAF +ブラックリストに含まれていないため、それを介したシステムライブラリエクスポートテーブルへのアクセスは、EMETセキュリティポリシーの違反ではありません。





図 Silverlight coreclr.dll( FireEye data )を介してシェルコードを呼び出します。





図 Silverlight coreclr.dllから呼び出されるシェルコードは、user32.dllインポートテーブルにアクセスしてGetProcAddress APIアドレスをさらに取得し、EAFをバイパスする他の関数のアドレスを取得します。 シェルコードはGetProcAddressの正当な呼び出しを使用するため、EMETはEATモジュールでのコードアクセスを正当なものと認識します( FireEye data )。





図 エクスプロイトが受信したAPI関数のリスト( FireEyeデータ )。



Flashエクスプロイトの場合のEAFの操作とバイパスは次のとおりです。



ActionScriptの最初の段階で、コードはflash.ocxモジュールの先頭のアドレスをメモリ内で見つけます。 その後、彼はインポートディレクトリflash.ocx(インポートディレクトリテーブル)のアドレスを検索し、kernel32.dllのインポートディレクトリ要素を見つけます。 次に、エクスプロイトはRvaImportLookupTableバッファーとRvaImportAddressTableバッファーの内容を読み取り、必要なAPI関数のアドレスを取得し、これらのアドレスをシェルコードで使用する別のバッファーに書き込みます。 準備アクションの後、ActionScriptエクスプロイトコードはflash.ocxからVirtualProtectを呼び出します(上記を参照)。



次に、制御が第1レベルのシェルコードに転送され、 VirtualAllocが呼び出され、選択したバッファーに第2レベルのシェルコードがコピーされます。





VirtualAllocを呼び出して、シェルコードの2番目の部分( FireEye data )をコピーします。



次の図に示すように、第2レベルのシェルコードは再びIATインポートテーブルを介してGetProcAddress APIを取得しようとしているため、EAFチェックをバイパスします。 GetProcAddressアドレスを受信した後、この関数を使用して他のAPIアドレスを取得します。これにより、EAFをバイパスしてこのプロセスを正当化することもできます。





図 シェルコードはIAT flash.ocxを読み取ります。



すべての操作が完了した後、このエクスプロイトはTeslaCryptランサムウェアドロッパーを起動します。 また、悪意のあるプログラムの実行可能ファイルを実行せずに実行するためのオプションも提供します。 次に、 ntd!RtlExitUserThread関数へのインラインフックを使用してkernel32! ExitProcess関数の最初の5バイトを変更します 。 これにより、エクスプロイトは、タブを閉じた後にInternet Explorerブラウザープロセスが完了しないことを確認できます。 以下のスクリーンショットでは、システムでEMET 5.5が有効になっているときにTeslaCryptが起動する成功した悪用のデモを見ることができます。











こちらもご覧ください。



EMET 5.5がリリースされました

habrahabr.ru/company/eset/blog/276311



EMET 5.5がベータ版でリリース

habrahabr.ru/company/eset/blog/268165



EMET、操作の防止および明白でない設定

habrahabr.ru/company/eset/blog/221129



EMET v4リリース

habrahabr.ru/company/eset/blog/184428



MicrosoftはWindows 10に別のエクスプロイト保護機能を追加しました

habrahabr.ru/company/eset/blog/281481



All Articles