SharPersist: C# の Windows Persistence Toolkit

バックグラウンド

PowerShell は数年前から攻撃的なコミュニティによって使用されてきましたが、防御的なセキュリティ業界における最近の進歩により、攻撃的なツールキットが PowerShell からリフレクティブ C# に移行し、最新のセキュリティ製品を回避するようになっています。これらの進歩には、スクリプト ブロック ロギング、Antimalware Scripting Interface (AMSI)、およびサードパーティ セキュリティ ベンダーによる悪意のある PowerShell アクティビティのシグネチャの開発が含まれます。攻撃ライフサイクルのさまざまなフェーズでのタスクを支援するために、 SeatbeltSharpUpSharpViewなどのいくつかのパブリック C# ツールキットがリリースされています。 C# ツールキットが欠落している攻撃ライフサイクルの 1 つのフェーズは永続化です。この投稿では、FireEye Mandiant のレッド チームによって作成されたSharPersistという新しい Windows Persistence Toolkit について説明します。

Windows パーシステンス

レッドチームの関与中は、組織への最初のアクセスを取得するために多くの時間と労力が費やされるため、信頼できる方法でアクセスを維持することが重要です。したがって、図 1 に示すように、持続性は攻撃のライフサイクルにおける重要な要素です。

FireEye Attack Lifecycle Diagram
図 1: FireEye 攻撃のライフサイクル図

攻撃者がシステムに永続性を確立すると、攻撃者は、停電、再起動、またはネットワーク干渉の後も、システムに継続的にアクセスできます。これにより、攻撃者は、数週間、数か月、さらには数年という長期間にわたってネットワーク上に潜伏することができます。持続性を確立するための 2 つの重要なコンポーネントがあります。図 2 に示すように、持続性インプラントと持続性トリガーです。持続性インプラントは、実行可能ファイル (EXE)、HTML アプリケーション (HTA)、ダイナミック リンク ライブラリ (DLL) などの悪意のあるペイロードです。 、またはその他の形式のコード実行。持続性トリガーは、スケジュールされたタスクや Windows サービスなど、ペイロードを実行させるものです。 Windows サービス、スケジュールされたタスク、レジストリ、スタートアップ フォルダーなど、Windows で使用できるいくつかの既知の永続化トリガーがあり、さらに多くの発見が続いています。より完全なリストについては、 MITRE ATT&CK 永続性ページを参照してください。

持続方程式
図 2: 持続性の式

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」という名前のレジストリ値を作成します。

レジストリ永続性の追加
図 5: レジストリ永続性の追加

永続性を削除する必要がある場合は、図 6 に示すように、「-m remove」引数を使用して削除できます。以前に作成した「Test」レジストリ値を削除してから、すべてのレジストリ値を「HKCUSoftwareMicrosoftWindowsCurrentVersionRun」で削除されたことを確認します。

レジストリの永続性の削除
図 6: レジストリの永続性の削除
スタートアップ フォルダの永続性

強調表示される 2 番目の永続化手法は、スタートアップ フォルダーの永続化手法です。この例では、現在のユーザーのスタートアップ フォルダーに配置され、「cmd.exe /c calc.exe」を実行する「Test.lnk」という名前の LNK ファイルを作成します (図 7 参照)。

予行演習を実行し、スタートアップ フォルダーの永続性を追加する
図 7: 予行演習を実行し、スタートアップ フォルダーの永続性を追加する

図 8 に示すように、再び「-m remove」引数を使用して、スタートアップ フォルダーの永続性を削除できます。これにより、現在のユーザーのスタートアップ フォルダーから LNK ファイルが削除されます。

スタートアップ フォルダーの永続化の削除
図 8: スタートアップ フォルダーの永続性の削除
スケジュールされたタスク バックドアの持続性

ここで強調されている最後の手法は、スケジュールされたタスク バックドアの持続性です。スケジュールされたタスクは、一度に複数のアクションを実行するように構成できます。この手法は、追加のアクションを追加することで、既存のスケジュールされたタスクをバックドアします。最初に行う必要があるのは、バックドアへのスケジュールされたタスクを探すことです。この場合、図 9 に示すように、ログオン時に実行されるスケジュールされたタスクを探します。

ログオン時に実行されるスケジュールされたタスクの一覧表示
図 9: ログオン時に実行されるスケジュールされたタスクの一覧表示

バックドアしたいスケジュールされたタスクができたら、ドライ ランを実行してコマンドが正常に機能することを確認してから、実際にコマンドを実行します (図 10 参照)。

予行演習を実行し、スケジュールされたタスクのバックドア永続性を追加する
図 10: 予行演習を実行し、スケジュールされたタスクのバックドア永続性を追加する

図 11 からわかるように、スケジュールされたタスクは、悪意のあるアクションによってバックドアされています。

バックドアのスケジュールされたタスクの一覧表示
図 11: バックドアでスケジュールされたタスクの一覧表示

図 12 に示すように、永続化に使用されるバックドア付きのスケジュールされたタスク アクションを削除できます。

バックドアのスケジュールされたタスク アクションの削除
図 12: バックドアのスケジュールされたタスク アクションの削除

結論

リフレクティブ C# を使用して、攻撃ライフサイクルのさまざまなフェーズを支援することは、攻撃コミュニティでは必要であり、持続性も例外ではありません。 Windows は永続化のための複数の手法を提供しており、セキュリティの専門家と敵対者の両方によって、より多くの技術が発見され、使用され続けるでしょう。

このツールは、攻撃ライフサイクルの持続段階でセキュリティ プロフェッショナルを支援することを目的としています。 SharPersistをリリースすることで、FireEye Mandiant は、Windows で利用できるさまざまな永続化手法と、これらの永続化手法を PowerShell ではなく C# で使用できることを認識してもらいたいと考えています。

参照: https://www.mandiant.com/resources/blog/sharpersist-windows-persistence-toolkit

コメント

タイトルとURLをコピーしました