
リモートマシン上で、ローカル管理者権限を使用せずに、サービスが(ブラインドで)インストールされているかどうか、および/または(名前付きパイプを公開している場合に)実行中かどうかを検出します。
リモートマシン上で、ローカルの管理者権限を使わずに、サービスがインストールされているかどうか(ブラインドで)、および/または(名前付きパイプを公開している場合)実行中かどうかを検出します。
詳細には、このスクリプトを実行すると、ターゲットのSMBサービス(445/tcp)にリモートで接続し、以下のことを行います。
[MS-LSAT] RPC呼び出し LsarLookupNames() を通じて、指定されたサービスがインストールされているかを確認します。 特権アカウントを使用する必要はありませんが、「ブラインド」クエリのみ可能です(サービスを列挙することはできず、特定のサービスの状態を尋ねることしかできません)。
指定された名前付きパイプがターゲット上に存在するかを確認します。サービス(プロセス)は、サービスに特徴的な名前付きパイプを公開する場合があり、それは非特権ユーザーにも見えます。したがって、サービスに特徴的な特定の名前付きパイプを確認することで、特定のサービスが実行中かどうかを推測できる可能性があります。
これは Impacket を使用したスタンドアロンの Python スクリプトであり、何かをインストールする必要はありません。 最新の公式 Impacket(0.10.0 および 0.9.24)と Python(3.9 および 3.10)を使用して、最新の Kali と Arch Linux でテストしました。
チェックするサービス、サービス名、サービスに特徴的な名前付きパイプは、conf フォルダ内のJSON設定ファイル(または、後で気付いたのですが、より快適なCSVファイル。カスタムの csv2json コンバータも利用可能です)で指定します。形式を理解するには、同梱の例を参照してください。
同梱の設定ファイル:
ユースケースは、さらに多くのサービス/名前付きパイプによって拡張される可能性があります。EDR設定はかなり不完全なので、自由に追加してください。
このスクリプトはJSON設定形式を使用しますが、後でCSVを書く方がはるかに快適だと気付いたので、CSVをJSONに変換する csv2json.py スクリプトも同梱しています。
単一のターゲットに対して実行して、AV/EDRサービス(またはその他のもの)を列挙するのは簡単です:
./serviceDetector.py -conf conf/edr.json evil.corp/johndoe:[email protected]
Kerberos認証もサポートされています(KRB5CCNAME環境変数がccacheファイルを指しています):
./serviceDetector.py -conf conf/edr.json -k -no-pass server.ecorp.local
複数のターゲットに対して効果的に実行するには、GNU parallel が非常に便利です:
cat targets.txt | parallel -j 50 ./serviceDetector.py evil.corp/johndoe:Passw0rd1@{}
多数のターゲットに対して実行する前に、アカウントロックアウトを防ぐために1つのターゲットに対してテストしてください(例: パスワードのスペルミスの場合)。
Opsec注記: 異なるターゲットへの同時の大量ログインは、SOCアラートをトリガーする可能性があることに注意してください。
ここで使用されている2つのテクニックは新しいものではありません。
[MS-LSAT] RPC呼び出し LsarLookupNames() は、以前に Vincent Le Toux (@mysmartlogon) が、素晴らしい PingCastle ツールの Antivirusscanner モジュールで使用していました。
実行中のサービスを検出するための名前付きパイプのアイデアは、Lee Christensen (@tifkin_) によるこのツイートに触発されました。彼はこれをWebClientサービスの検出に使用しました。AV/EDR検出のためのこのテクニックは、NSAのNamedPipeTouchツール(Shadow Brokersグループによってリークされた)でも使用されていました。