バックグラウンド
PowerShell は数年前から攻撃的なコミュニティによって使用されてきましたが、防御的なセキュリティ業界における最近の進歩により、攻撃的なツールキットが PowerShell からリフレクティブ C# に移行し、最新のセキュリティ製品を回避するようになっています。これらの進歩には、スクリプト ブロック ロギング、Antimalware Scripting Interface (AMSI)、およびサードパーティ セキュリティ ベンダーによる悪意のある PowerShell アクティビティのシグネチャの開発が含まれます。攻撃ライフサイクルのさまざまなフェーズでのタスクを支援するために、 Seatbelt 、 SharpUp 、 SharpViewなどのいくつかのパブリック C# ツールキットがリリースされています。 C# ツールキットが欠落している攻撃ライフサイクルの 1 つのフェーズは永続化です。この投稿では、FireEye Mandiant のレッド チームによって作成されたSharPersistという新しい Windows Persistence Toolkit について説明します。
Windows パーシステンス
レッドチームの関与中は、組織への最初のアクセスを取得するために多くの時間と労力が費やされるため、信頼できる方法でアクセスを維持することが重要です。したがって、図 1 に示すように、持続性は攻撃のライフサイクルにおける重要な要素です。
攻撃者がシステムに永続性を確立すると、攻撃者は、停電、再起動、またはネットワーク干渉の後も、システムに継続的にアクセスできます。これにより、攻撃者は、数週間、数か月、さらには数年という長期間にわたってネットワーク上に潜伏することができます。持続性を確立するための 2 つの重要なコンポーネントがあります。図 2 に示すように、持続性インプラントと持続性トリガーです。持続性インプラントは、実行可能ファイル (EXE)、HTML アプリケーション (HTA)、ダイナミック リンク ライブラリ (DLL) などの悪意のあるペイロードです。 、またはその他の形式のコード実行。持続性トリガーは、スケジュールされたタスクや Windows サービスなど、ペイロードを実行させるものです。 Windows サービス、スケジュールされたタスク、レジストリ、スタートアップ フォルダーなど、Windows で使用できるいくつかの既知の永続化トリガーがあり、さらに多くの発見が続いています。より完全なリストについては、 MITRE ATT&CK 永続性ページを参照してください。
SharPersist の概要
SharPersist は、さまざまな手法を使用して Windows オペレーティング システムでの永続性の確立を支援するために作成されました。これは C# で記述されたコマンド ライン ツールであり、Cobalt Strike の「アセンブリの実行」機能または .NET アセンブリのリフレクション ロードをサポートするその他のフレームワークを使用してリフレクション ロードできます。 SharPersist は、将来的に新しい永続化手法を追加できるようにモジュール化するように設計されています。また、ツールに組み込まれているトレードクラフトに関連する項目や、ファイル タイム ストンプ、最小化または非表示のアプリケーションの実行など、サポートされている永続化手法もいくつかあります。
SharPersist および関連するすべての使用法に関するドキュメントは、 SharPersist Mandiant GitHub ページにあります。
SharPersist 永続化テクニック
このブログ投稿の時点で、SharPersist でサポートされている永続化手法がいくつかあります。これらの手法と必要な権限の完全なリストを図 3 に示します。
技術 |
説明 |
テクニックスイッチ名 (-t) |
管理者権限が必要ですか? |
レジストリに触れますか? |
ディスク上のファイルを追加/変更しますか? |
キーパス |
バックドア KeePass 構成ファイル |
キーパス |
いいえ |
いいえ |
はい |
新しいスケジュールされたタスク |
新しいスケジュールされたタスクを作成します |
シュタスク |
いいえ |
いいえ |
はい |
新しい Windows サービス |
新しい Windows サービスを作成します |
サービス |
はい |
はい |
いいえ |
レジストリ |
レジストリ キー/値の作成/変更 |
登録 |
いいえ |
はい |
いいえ |
スケジュールされたタスクのバックドア |
追加のアクションで既存のスケジュールされたタスクをバックドアします |
schtaskbackdoor |
はい |
いいえ |
はい |
スタートアップ フォルダ |
ユーザーのスタートアップ フォルダーに LNK ファイルを作成します。 |
起動フォルダ |
いいえ |
いいえ |
はい |
亀SVN |
Tortoise SVN フック スクリプトを作成します |
カメvn |
いいえ |
はい |
いいえ |
図 3: サポートされている永続化手法の表
SharPersist の例
SharPersist GitHubには、各永続化手法の使用法と例に関する完全なドキュメントがあります。いくつかのテクニックを以下で強調します。
レジストリの永続性
強調表示される最初の手法は、レジストリの永続化です。 SharPersist でサポートされているレジストリ キーの完全なリストを図 4 に示します。
レジストリ キー コード (-k) |
レジストリ キー |
レジストリ値 |
管理者権限が必要ですか? |
Env Optional Add-On (-o env) をサポートしていますか? |
hklmrun |
HKLMSoftwareMicrosoftWindowsCurrentVersionRun |
ユーザー提供 |
はい |
はい |
hklmrunonce |
HKLMSoftwareMicrosoftWindowsCurrentVersionRunOnce |
ユーザー提供 |
はい |
はい |
hklmrunonceex |
HKLMSoftwareMicrosoftWindowsCurrentVersionRunOnceEx |
ユーザー提供 |
はい |
はい |
ユーザーイット |
HKLMSOFTWAREMicrosoftWindows NTCurrentVersionWinlogon |
ユーザー初期化 |
はい |
いいえ |
香港クルン |
HKCUSoftwareMicrosoftWindowsCurrentVersionRun |
ユーザー提供 |
いいえ |
はい |
hkcurunonce |
HKCUSoftwareMicrosoftWindowsCurrentVersionRunOnce |
ユーザー提供 |
いいえ |
はい |
ログオンスクリプト |
HKCU環境 |
UserInitMprLogonScript |
いいえ |
いいえ |
ポストイット |
HKCUSoftwareMicrosoftWindowsCurrentVersionRun |
RESTART_STICKY_NOTES |
いいえ |
いいえ |
図 4: サポートされているレジストリ キーの表
次の例では、引数の検証を実行してから、レジストリの永続性を追加します。永続化を追加する前に検証を実行することは、それぞれの永続化手法を実際に追加する前に、正しい引数とその他の安全性チェックがあることを確認するため、ベスト プラクティスです。図 5 に示す例では、「HKCUSoftwareMicrosoftWindowsCurrentVersionRun」レジストリ キーに「cmd.exe /c calc.exe」という値を持つ「Test」という名前のレジストリ値を作成します。
永続性を削除する必要がある場合は、図 6 に示すように、「-m remove」引数を使用して削除できます。以前に作成した「Test」レジストリ値を削除してから、すべてのレジストリ値を「HKCUSoftwareMicrosoftWindowsCurrentVersionRun」で削除されたことを確認します。
スタートアップ フォルダの永続性
強調表示される 2 番目の永続化手法は、スタートアップ フォルダーの永続化手法です。この例では、現在のユーザーのスタートアップ フォルダーに配置され、「cmd.exe /c calc.exe」を実行する「Test.lnk」という名前の LNK ファイルを作成します (図 7 参照)。
図 8 に示すように、再び「-m remove」引数を使用して、スタートアップ フォルダーの永続性を削除できます。これにより、現在のユーザーのスタートアップ フォルダーから LNK ファイルが削除されます。
スケジュールされたタスク バックドアの持続性
ここで強調されている最後の手法は、スケジュールされたタスク バックドアの持続性です。スケジュールされたタスクは、一度に複数のアクションを実行するように構成できます。この手法は、追加のアクションを追加することで、既存のスケジュールされたタスクをバックドアします。最初に行う必要があるのは、バックドアへのスケジュールされたタスクを探すことです。この場合、図 9 に示すように、ログオン時に実行されるスケジュールされたタスクを探します。
バックドアしたいスケジュールされたタスクができたら、ドライ ランを実行してコマンドが正常に機能することを確認してから、実際にコマンドを実行します (図 10 参照)。
図 11 からわかるように、スケジュールされたタスクは、悪意のあるアクションによってバックドアされています。
図 12 に示すように、永続化に使用されるバックドア付きのスケジュールされたタスク アクションを削除できます。
結論
リフレクティブ C# を使用して、攻撃ライフサイクルのさまざまなフェーズを支援することは、攻撃コミュニティでは必要であり、持続性も例外ではありません。 Windows は永続化のための複数の手法を提供しており、セキュリティの専門家と敵対者の両方によって、より多くの技術が発見され、使用され続けるでしょう。
このツールは、攻撃ライフサイクルの持続段階でセキュリティ プロフェッショナルを支援することを目的としています。 SharPersistをリリースすることで、FireEye Mandiant は、Windows で利用できるさまざまな永続化手法と、これらの永続化手法を PowerShell ではなく C# で使用できることを認識してもらいたいと考えています。
参照: https://www.mandiant.com/resources/blog/sharpersist-windows-persistence-toolkit
Comments