Cobalt Strike Beacon 構成の抽出

パート 2 - Cobalt Strike インプラント ビーコンから構成を抽出する。

7分で読めます
Cobalt Strike Beacon 構成の抽出

Cobalt Strikeビーコンインプラントの収集方法については、 以前の投稿 をご覧ください。 その情報に基づいて、ビーコンから構成を抽出します。

この記事では、優れた Cobalt Strike Configuration Extractor(CSCE)を使用して、バイナリビーコンペイロードからCobalt Strike C2構成を手動で分析する手順を説明します。 また、Elastic Stackの新機能をいくつか有効にして、監視対象のすべてのエンドポイントでこれを大規模に実行できるようにする方法についても説明します。これにより、メモリからビーコンを抽出できます。

Blackberryのチームは、Cobalt Strikeビーコンの構成を広範囲に掘り下げた「Finding Beacons in the Dark」(登録が必要)と呼ばれる素晴らしいハンドブックを持っています。 ここでは、設定のいくつかのフィールドについて説明しますが、ビーコンがどのように機能するかに興味がある場合は、そのリソースを確認することを強くお勧めします。

Cobalt Strike Configuration Extractor(コバルトストライク構成抽出器)

Stroz Friedberg による Cobalt Strike Configuration Extractor (CSCE) は、「Cobalt Strike ビーコンから設定を抽出および解析するための Python ライブラリとスクリプトのセット」です。

CSCE を使用するには、Python 仮想環境を作成してアクティブ化し、CSCE Python パッケージをインストールします。

Cobalt Strike Configuration Extractorの設定

$ python3 -m venv csce

$ source csce/bin/activate

(csce) $ pip3 install libcsce

...truncated...
Collecting libcsce
  Using cached libcsce-0.1.0-py3-none-any.whl (24 kB)
Collecting pefile>=2019.4.18
...truncated...

次に、メモリから抽出したビーコンペイロードでCSCEを実行して、収集できる興味深い情報が保存されているかどうかを確認できます(出力をJSONドキュメントとして読みやすくするために、 --pretty フラグを追加します)。

CS ビーコン構成のアトミック インジケーターの表示

(csce) $ csce --pretty beacon.exe

{
  "beacontype": [
    "HTTPS"
  ],
  "sleeptime": 45000,
  "jitter": 37,
  "maxgetsize": 1403644,
  "spawnto": "GNEtW6h/g4dQzm0dOkL5NA==",
  "license_id": 334850267,
  "cfg_caution": false,
  "kill_date": "2021-12-24",
  "server": {
    "hostname": "clevelandclinic[.]cloud",
    "port": 443,
    "publickey": "MIGfMA0GCSqGSIb3DQEBAQUAA4G...
...truncated...

すぐに、ビーコンがHTTPSを使用して通信し、ドメインが clevelandclinic[.]cloudされていることがわかります。 これにより、分析を行うことができる原子インジケーターが得られます。 Malleable Command and Controlのドキュメントを見ると、構成変数の説明が得られます。

例として、 sleeptime450000 ミリ秒であるため、デフォルトのビーコン チェックインが 60 秒ごとから 450 秒 ( 7 1/2 分) に変更されます。 さらに、ジッターは 37450000 ミリ秒(166,500 ミリ秒)の37%のランダムジッターが存在するため、ビーコンのチェックインは 283,000450,000 ミリ秒(4.7〜7.5分)になる可能性があります。

さらに、 publickey フィールドは、Cobalt Strike Team Server がサーバーとビーコン間の通信を暗号化するために使用されます。 これは、ブラウザやデータ転送ライブラリ( cURLなど)を使用してC2ドメインにアクセスするときに使用される通常のTLS証明書とは異なります。 このフィールドは、Team Serverが各ビーコンに同じ公開鍵を使用するため、脅威アクターが複数のキャンペーンに同じTeam Serverを使用することが多いため、このフィールドは、脅威アクターを複数のキャンペーンやインフラストラクチャにリンクするために使用できるため、彼らの視点でビーコンをクラスタリングする上で価値があります。

設定の出力を引き続き見ていくと、 process-inject ネストされたフィールドに関する別の興味深いセクション、 stubことがわかります。

process-inject.stub フィールドの表示

(csce) $ csce --pretty beacon.exe

...truncated...
  "process-inject": {
    "allocator": "NtMapViewOfSection",
    "execute": [
      "CreateThread 'ntdll!RtlUserThreadStart'",
      "CreateThread",
      "NtQueueApcThread-s",
      "CreateRemoteThread",
      "RtlCreateUserThread"
    ],
    "min_alloc": 17500,
    "startrwx": false,
    "stub": "IiuPJ9vfuo3dVZ7son6mSA==",
    "transform-x86": [
      "prepend '\\x90\\x90'"
    ],
...

stub フィールドには、Cobalt Strike Java アーカイブの Base64 でエンコードされた MD5 ファイル ハッシュが含まれています。これを変換するには、CyberChefを再度使用し、今回は「Base64から」と「To Hex」 のレシピを追加し、「To Hex」レシピの「区切り文字」を「なし」に変更してください。

JavaアーカイブのMD5値(222b8f27dbdfba8ddd559eeca27ea648)がわかったので、VirusTotalなどのオンラインデータベースと照合して、追加情報、具体的にはSHA256ハッシュ(7af9c759ac78da920395debb443b9007fdf51fa66a48f0fbdaafb30b00a8a858)を取得できます。

最後に、CobaltStrikeでSHA256ハッシュを検証し、 https://verify.cobaltstrike.com に移動してハッシュを検索することにより、Javaアーカイブのバージョンを特定できます。

これで、このビーコンはCobalt Strike 4.4のライセンスバージョンを使用して作成されたことがわかりました。

クラスタリング アクティビティに役立つ構成の別のフィールドは、 license_id フィールドです。

Cobalt Strike の透かしの表示

...truncated
  "spawnto": "GNEtW6h/g4dQzm0dOkL5NA==",
  "license_id": 334850267,
  "cfg_caution": false,
...truncated...

これは一般にウォーターマークと呼ばれ、ライセンスごとに一意の 9 桁の値です。 この値は変更できますが、 process-inject.stub フィールドと publickey フィールド (前述) と組み合わせて使用して、インフラストラクチャとアクティビティ グループをクラスター化することはできます。

これらは、Cobalt Strike ビーコンから抽出された構成を使用してアクティビティを識別およびクラスタリングするために使用できるフィールドのほんの一部です。 構成の詳細な分析に興味がある場合は、 BlackberryのチームによるFinding Beacons in the Dark Cobalt Strikeハンドブックを確認することをお勧めします。

分析を実行に移す

Cobalt Strikeビーコンペイロード、その構成、およびそこに含まれるメタデータを収集するためのアナリストプレイブックをテストするため。これらをより多くのデータに適用して、アクティビティのクラスターを特定できます。

上の図では、ビーコンペイロード公開鍵の共有使用に基づいて脅威アクターをクラスタリングできます。これは、上で説明したように、チームサーバーごとに一意です。 これにより、複数のビーコンペイロードハッシュ、インフラストラクチャ、およびキャンペーンを1つの脅威アクターにグループ化できます。

いつものように、ビーコンペイロード構成(この例ではclevelandclinic[.]cloud )から抽出されたアトミックインジケーターを使用すると、追加の共有インフラストラクチャ、ターゲットバーティカル、および脅威アクターの機能を特定できます。

今回は全速力で

このリリースと 以前のリリースで強調したすべてのステップは、 Cobalt Strike Beacon Extraction プロジェクトを使用して自動化し、Elasticsearchに書き込むことができます。

まとめ

この記事では、Elastic StackでCobalt Strike Malleable C2ビーコンペイロードの収集に使用できる新機能を紹介しました。 さらに、メモリとその構成からビーコンペイロードを抽出するためのFleetポリシーを構築するプロセスについても説明しました。

これらのFleetのポリシーとプロセスにより、セキュリティアナリストはCobalt Strikeビーコンのペイロードとその構成を収集し、脅威アクターが制御するインフラストラクチャとクラスターのアクティビティを特定できます。

アーティファクト(Artifacts)

観測可能 |タイプ |備考 -------------------------------------------------------------------|-------------|------------------------------------------ 697fddfc5195828777622236f2b133c0a24a6d0dc539ae7da41798c4456a3f89 |SHA256の |Cobalt Strike Malleable C2 ビーコンペイロード 7475a6c08fa90e7af36fd7aa76be6e06b9e887bc0a6501914688a87a43ac7ac4 |SHA256の |Cobalt Strike Malleable C2 ビーコンペイロード f9b38c422a89d73ebdab7c142c8920690ee3a746fc4eea9175d745183c946fc5 |SHA256の |Cobalt Strike Malleable C2 ビーコンペイロード clevelandclinic[.]cloud |ドメイン名 |Cobalt Strike Malleable C2 ドメイン 104[.]197[.]142[.]19 |IPv4-アドレス |Cobalt Strike Malleable C2 IPアドレス 192[.]64[.]119[.]19 |IPv4-アドレス |Cobalt Strike Malleable C2 IPアドレス

アーティファクト(Artifacts)

アーティファクトは、ECS形式とSTIX形式の両方で、結合されたzipバンドルで ダウンロード することもできます。

この記事を共有する