web-dev-qa-db-ja.com

Windows 8.1でEMETは何をしますか?

しばらく前にWindows 8がリリースされたときに、いくつかの新しい緩和策とメモリ保護が導入されていたことを思い出しましたが、これらがEMETによって提供されているものと同じかどうかはわかりません。 バイパスの説明 に基づいて、KASLRおよびSMEPはWindows 8に固有のものであるように見えます(ただしEMETには存在しません)。

EMETはWindows 8以降に追加のメモリ保護を追加しますか?

さらに、EMETは十分にうまく証明書のピン留めを行いますが、Internet Explorerの証明書のピン留めを提供する他のツールがありますが、Chrome AND Firefox? このペーパー と呼ばれるツールの使用を推奨します- Convergence ですが、これはFirefoxのみのようで、エンタープライズ環境をできる限りサポートできるようにしたいと考えています。

最後に、EMET 4.1 とEMET 5. の両方が正常にバイパスされたとすると、それらを使用する意味はありますか? (提供されたセキュリティの観点から)どちらか一方を使用する設定はありますか(特にEMET 5.0には、クラッシュするアプリケーションに関する多くの問題が含まれているように思われるため)?

10
NULLZ

KASLRとSMEPはカーネルモード保護であり、ASLRをカーネルスペースに適用し、実行時に特権リング境界を強制します。 EMETは単にユーザースペース保護ツールであり、KASLRまたはSMEPには関与しません。

また、EMETは特効薬ではないことにも注意してください。これは、エクスプロイト開発のコストを上げること、および既存の事前に記述されたシェルコードの有効性を削減または排除することの2つの目標で設計されています。

したがって、EMETおよびWindows 8.1に関する質問に答えるには、答えはyesであり、EMETが提供する多くの保護機能があります。

セホップ

SEHOPは、SEHハンドラーの上書きによるスタックバッファーオーバーフローの悪用を防ぐために設計されたメカニズムです。 EMETは、例外処理を提供するOS機能をフックし、主にハンドラーアドレスがアプリケーションで事前定義されたものであることを確認することにより、ハンドラーが破損していないことを確認するチェックを挿入します。

動的DEP

データ実行防止により、メモリページの実行アクセスフラグをハードウェアで適用できます。 OSの通常の構成では、サービスに対してDEPを有効にしてから、コンパイラフラグ(PEフィールドの[特性]フィールドに格納されています)に基づいてアプリケーションをオプトインします。 EMETでは、このフラグでコンパイルされていなくても、プロセスに対してDEPを強制するポリシーを指定できます。また、追加の利点もあります。アプリケーション内からのSetProcessDEPPolicyへの呼び出しがこのフラグをオーバーライドできないようにプロセスのDEPポリシーを指定するため、そのAPIへのROPチェーンはDEPを無効にせず、簡単なスタックを許可しません実行。

ヒープスプレー保護

この保護は、Metasploitなどのフレームワークからプルされた標準のシェルコードから保護するために設計されています。ヒープスプレー攻撃で使用される一般的なページアドレスを事前に割り当て、メモリにアクセスできないように設定します。既存のドライブバイ攻撃の多くがこれらのアドレスを使用しているため、これは便利です。探しているページを割り当てることで、これらの攻撃がすべて機能しないようにすることができます。もちろん、何をしているのかを知っている人はシェルコードを書き直すだけで済みますが、MetasploitまたはPoCスクリプトの使用方法しか知らないスクリプトキディにとっては、さらに困難になります。

ヌルページ割り当て

ヒープスプレー保護と同じですが、ヌルページアドレスに読み取り専用メモリのブロックを割り当てる点が異なります。 nullページの逆参照は実際には悪用可能なバグではないため、これは単なる多層防御策であることを認めていますが、目標はnullページの逆参照がファンキーなことをしないようにすることです。

必須ASLR

DEPと同様に、ASLRはフラグを使用してコンパイルする必要があります。フラグもPEヘッダー内に設定されます。 ASLRの問題は、メインプログラムの実行可能ファイルがASLRとしてマークされている場合でも、単一の非ASLR DLLをメモリスペースにロードするだけで、潜在的なASLRバイパスが発生する-一度だけです。予測可能な場所に既知のコードブロックがある場合、攻撃者はROPチェーンを構築できます。必須のASLRは、読み込まれていないすべてのモジュールを、そのようにコンパイルされていなくても強制的にASLR対応としてマークします。

ただし、Windows 8(および8.1)では、OSレベルで同じ機能を実行するため、ネイティブの強制ASLR実装が有効になっている場合、この機能は何も実行しません。

住所フィルタリングのエクスポート

EAFは、エクスポートアドレステーブル(EAT)の読み取り操作を監視して、読み取りがシェルコードではなくアプリケーションコードの領域からのみ行われるようにします。これは、シェルコードがモジュールのEATをスキャンしてAPIを見つけるのを困難にすることを目的としています。このようなトリックを容易にするために、モジュールアドレスが何らかの方法でリークされます。これは、呼び出し元がシェルコードであるかどうかをヒューリスティックを使用して推測する別のメカニズムであり、絶対確実ではありません。ぶら下がっている果物を見つけ出すように設計されています。

EAF +

これはEAFの拡張ですが、EAFと組み合わせて、またはEAFから独立して使用できます。スタックポインターが許容範囲内にあるかどうか、およびスタックポインターとフレームポインターが一致していないかどうかをチェックします。 EMET 5.0はプロセスの「有効なモジュール」リストを導入し、それが入力されると、EAF +はそれらのモジュールのEATポインターへの読み取りかどうかを検出し、メモリー内の実行可能ファイルのMZおよびPEヘッダーの読み取りを監視してEAT/IATスキャン。

ボトムアップランダム化

ボトムアップASLRとも呼ばれ、スタックやヒープなどのボトムアップ割り当ての場所をランダム化します。レイアウトのエントロピーの量を増やすだけのROPに対する追加の対策です。

反ROP

これは、ROPの成功を防ぐのに役立つ保護のスイート全体です。 LoadLibrary呼び出しを監視して、UNCパスからDLLが読み込まれないようにし、メモリ保護APIがスタックを実行可能にするのを防ぎ、APIが適切に呼び出されることを確認します(つまり、RETではなくCALLを使用して)、呼び出しチェーンをたどってROPを確認しますのような動作で、スタックピボットを検出しようとします(特定のAPIで使用されるコンテキストスナップショットに保存されている値に対するESP/EBPのチェックを含む)。これらすべてが一緒になって、ビルドしようとする人にとって頭痛の種になります。有効なROPチェーン。

攻撃面の削減

ASRを使用すると、アプリケーションがロードできるDLLをホワイトリストに登録できます。これは、マルウェアがDLLインジェクションを実行することをブロックし、安全でないプラグイン(Flashなど)が読み込まれないようにすることや、エクスプロイトが悪意のある目的でLoadLibraryを利用するのを防ぐことなどを含みます。

高度な対ROP

この機能により、ROP防止機能がさらに追加されます。より深い機能をフックします。 ntdllのメモリ割り当て機能。これにより、ROP防止チェックをバイパスすることがより困難になります。また、関数プロローグのコピーを含むシェルコードを見つけて実行し、実際のプロローグを通過して、フックバイパスの形式で実際の関数に到達します。最後に、ntdll!LdrHotPatchRoutine関数を禁止して、ホットパッチ機能の悪用を防ぎます。

証明書のピン留め

これは他と同じ意味での緩和策ではありませんが、IE)で証明書を適用するため、簡単に置き換えることができません。


ここで私が強調しようとしている点は、EMETにはホストの保護全体があり、これをタンデムで有効にすると、悪用プロセスを大幅に困難にすることです。 EMETは、APTと国民国家が物を壊すのを防ぐことを試みていません。彼らは、悪用する人々が試すことの利益が少なくなるように、実用的なエクスプロイトを構築することを(時間/お金/スキルの点で)より高価にすることを試みています。彼らはまた、市場の大部分を占めるEMETが動作不能になることを避けるように特別に設計されたではないほとんどのシェルコードをレンダリングしています。それを有効にする価値は絶対にあります。

特定のアプリケーションでの安定性を懸念して、さまざまな保護機能との互換性を確認する必要があります。 EMET 5.0は、検出をログに記録するレポート機能を備えているため、問題を特定して試行することができます。すべての主要な保護を有効にして開始し、バランスに達するまで、他のオプションをオンまたはオフにします。


証明書のピン留めについては、主にブラウザ固有です。もちろん、FirefoxとChromeを実行するプラグインがありますが、私はいくつかに圧倒されています。CertificatePatrolは人気がありますが、うるさすぎて便利ではありません-あなた単に盲目的に[OK]をクリックする方法を学びます。Chromeには--hsts-hostsコマンドラインオプション。見栄えがいいですが、正しく設定するには手動で作業する必要があります。 Firefox 現在いくつかのサイトを固定しています デフォルトでは Chromeと同じように 、これはある程度保護されていることを意味します。残念ながら、環境内のすべてのブラウザで独自のピン留めを管理する簡単な方法はないようで、手動で作業する必要があります。


出典:

15
Polynomial