フラグについて0x41414141回

メモリの破損を特定して操作を複雑にすることを目的としたリンカとコンパイラのフラグを使用する必要性についていくら話しても、RBS、ABS、およびさまざまな認定製品の開発者は、原則としてこれをまったく聞きません。 また、事前認証RCEサーバー側エクスプロイトを作成する際に、最新の作業に基づいてそれについて記述するというアイデアが再び浮上しました。







そのため、ソースコードを使用しないアプリケーションセキュリティ(Windows用のクライアントサーバーアプリケーション)の分析に関する最後の作業の過程で、ファジングメソッドを使用した脆弱性が見つかりました。 アプリケーションのクラッシュにつながるデータは、認証を担当する最初のパッケージに含まれていたため(2013年にヤードで)、操作にログインとパスワードを知る必要がないという事実にすぐに満足しました。



2011年に、研究者はOracle PeopleSoftに同様の脆弱性を発見しました(この脆弱性は2011年1月のCPUで解決されました)。 そこで、特定の長さのパスワードを入力すると、脆弱性が現れました。 しかし、コンパイルフラグ/ GS(スタックCookie)が使用されたため、DoSから何も取得できず、オーバーフローしたバッファーがSEHに到達せず、コードに制御を転送するために書き換えることができませんでした。



しかし、新しいターゲットにはこれがありませんでした。 彼女が使用した唯一のものはDEPでした。 そのため、Windows 7のリモートエクスプロイトを作成するのは単なる形式にすぎません。 タスクは非常に単純で退屈でした。戻りアドレスをROPガジェットチェーンに書き換えて、DEPを無効にし、同じスタックにあるシェルコードに制御を移しました。



Windows 8でエクスプロイトを作成することにしました。このエクスプロイトでは、/ DYNAMICBASE(ASLR)フラグなしでコンパイルされたライブラリの読み込みをランダム化するメカニズムに関心のある、いくつかの追加のセキュリティメカニズムが導入されました。 この機能はForceASLRと呼ばれます。 前述のように、Windows 8で導入されましたが、KB2639308 更新プログラムと、関心のあるアプリケーションの小さなレジストリ設定をインストールした後、Windows 7でも使用できます(イメージファイル実行オプションを参照)。



追加する

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\<executable>
      
      





およびx64上のWOWの場合-

 HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\<executable>
      
      





キーMitigationOptionsおよび値0x100、プログラムのASLRを強制できます。



したがって、必要なプログラムに対してASLRを有効にすることで、最後のDropboxファイルでもFirefox自体またはシステム管理者(Firefoxの場合はWindows 7/8ユーザー向けのChrome(この点ではIE10で問題ありません))で修正できます-ただし、Windows7 / 8 Windows Server 2008 R2、そして常にではない...しかし、それについては後で。



話に戻りましょう。 このプログラムにASLRの存在をほぼ人為的に導入したかったのですが、これはROPチェーンの準備段階で計画を破ります(現在、ROPガジェットのアドレスがわからないため)。 しかし、ここでは、アプリケーションが再配置テーブル(固定ベースアドレス)なしでコンパイルされたために失望しました。また、これに基づいて、実行可能ファイルのダウンロードの強制ランダム化が基づいています。 そのため、Windows 8の新しい機能もこのソフトウェアを助けませんでした。



何らかの方法で顧客を楽しませ、驚かせるために、オペレーティングサーバー自体の動作を復元するシェルコードを作成しました。これにより、クラッシュしてクライアントがスムーズに動作することは目立ちませんでした(問題は接続しているクライアントにのみある可能性があります)サーバーへ)=)これを行うには、ストリームを再起動し、すべてのサービス構造を正しく再初期化する必要がありました。



助けて ASLRバイパステクニック:



そのようなソフトウェアは操作が簡単であるという事実に加えて、ブラウザなどの他のより安全なプログラムの脆弱性を簡単に悪用する機会でもあります。 説明します。 ASLRバイパス手法の1つは、攻撃されたアプリケーションのアドレス空間にASLRなしでライブラリを特別な攻撃者が開始するロードです(この手法の最後の広く知られている使用は、Internet ExplorerのCVE-2013-3893を使用した標的型攻撃です)。 そして、攻撃者は銀行のクライアント/従業員(もちろん、RBシステムが使用される秘密ではない)または政府機関(もちろん、そのような企業で暗号化のために許可されている認定ソフトウェアのリスト、差別化は秘密ではありませんアクセス、メモリのクリアなど)。 このソフトウェアを調べた攻撃者は、ほとんどがASLRを使用していないため、それらをロードしようとします(独自にロードされていない場合)。 同時に、標的型攻撃としても優れています。 結局のところ、たとえば、特定のRBSシステムのActiveX要素がブラウザーにロードされていない場合、被害者はこの銀行のクライアントではない可能性が高いため、攻撃者の標的になります。







この例では、異種システムがどのようになり、高度な攻撃が行われるかを示したいと思いました。 膨大な量のソフトウェアがユーザーのコンピューターに同時に存在することを忘れないでください。 脆弱なソフトウェアを使用して、ソフトウェアを侵害したり、ソフトウェアを使用して他人のソフトウェアを侵害したりできます。



歴史的背景:



このメカニズムの外観は、VisualStudioでデフォルトで有効になったことを意味するものではありません。 あなたのプロジェクトがこれから何を使用しているかを見て、安全性の観点からそれらが関係する年を比較してください。



新しいスタジオに移行すると、新しいグラフィカルインターフェイスとプログラマーのニュースだけでなく、多くがセキュリティに関連するコンパイラとリンカーのすべての新機能も取得することに注意してください。 いくつかのニュースであることが判明する可能性がありますが、/ GSフラグも進化しており、2010年までにバージョン4になりました。ポインター保護、ヒープメタデータ保護、変数のスタック順序などの多くの改善は言うまでもありません。 。



完全を期すために、ASLRとDEPはフラグだけでなく、レジストリおよび特別なAPIを使用して構成できるとしましょう:IFEO(イメージファイル実行オプション)のMitigationOptions、UpdateProcThreadAttribute、SetProcessMitigationPolicy APIを使用しますが、フラグははるかに簡単です。



ユーザーのセキュリティを強化するために、もちろんEMET( Enhanced Mitigation Experience Toolkit )のようなものがありますが、残念ながら、リンクの記事に関するコメントに同意します:「 しかも、これは非常に上級のユーザー向けです 」。 私はこのプログラムを扱うことの複雑さではなく、ほとんどのユーザーのコンピューターリテラシーが弱いことを意味します。



数分を費やし、コンパイラとリンカのフラグを設定すると、何度も複雑になり、場合によっては安定したエクスプロイトを記述するプロセスが不可能になります。 その結果、攻撃者はDoSのみで満足します。



はい、モバイルプラットフォーム用の同様の(および特定の)フラグがあります。

iOS :-fPIE、-fstack-protector-all、-fobjc-arc

Android (ネイティブライブラリ用):-fstack-protector、-Wformat-security、NX、ASLR、PIE

BlackBerry 10 (ネイティブライブラリ用):-fstack-protector-all、-D_FORTIFY_SOURCE = 2、-fPIE、-Wl、-z、relro、-Wl、-z、now、-pie

WindowsPhone 8 (ネイティブライブラリ用):Windows 8と同様



誰もが安全なコードをすぐに(非現実的に)書けるわけではなく、誰もがコードセキュリティを分析するためのソフトウェアを買う余裕がない(予算が許さない)フラグを設定します。 したがって、最小限の労力で、セキュリティを大幅に向上できます。



PS:当然、コンパイルフラグはアーキテクチャ、論理、および構成の脆弱性に影響しません;)

PPS:サンドボックスと仮想化もありますが、これも万能薬ではありません。 それらについて-すでにZeroNights 2013で



All Articles