「スライバー」の裏地を探して: 新しいコマンド アンド コントロール フレームワークを探して

news

マイクロソフトは、Sliver のコマンド アンド コントロール (C2) フレームワークが現在、 国家の脅威アクターランサムウェアや恐喝を直接支援するサイバー犯罪グループ、および検出を回避するためのその他の脅威アクターによる侵入キャンペーンに採用され、統合されていることを確認しています。これらのアクターが Sliver を Cobalt Strike と一緒に、または Cobalt Strike の代わりに使用しているのを見てきました。攻撃ツールとしての Cobalt Strike の人気を考えると、それに対する防御も時間とともに改善されてきました。したがって、Sliver は、参入障壁が低く、あまり知られていないツールセットを探している攻撃者にとって魅力的な代替手段となります。

2019 年後半に初めて公開され、セキュリティの専門家に宣伝された Sliver は、GitHub で入手できるオープンソース フレームワークであり、複数の同時オペレーター、複数のリスナー タイプ、ユーザーが開発した拡張機能、ペイロード生成のサポートなど、多くの一般的な C2 フレームワーク機能が含まれています。 . 2020 年 12 月以降、攻撃者が Sliver を武器に採用しているのを観察してきました。

その採用者の中には、サービスとしてのランサムウェア (RaaS) アフィリエイトDEV-0237 が数多くあります。最近では、歴史的に人間が操作するランサムウェアに関与していたサイバー犯罪者が、初期アクセス ローダーとして Bumblebee マルウェア (COLDTRAIN としても知られる) を使用して、Sliver とさまざまな侵害後ツールを配信しているのを確認しています。お客様は、 Microsoft 365 Defenderポータルで入手できる脅威分析レポートで、Bumblebee の詳細を確認できます。

このブログでは、 Microsoft Defender Experts for Huntingの背後にいる研究者が Sliver を分析し、ラボでシミュレートされた攻撃と実際の脅威活動の両方を使用して、Sliver やその他の C2 フレームワークを明らかにするためのハンティング クエリを作成した方法を紹介します。

脅威ハンティング: 一部は芸術 (事実)、すべては科学

セキュリティ研究者にとって、ハンティングと検出は区別されます。新しい脅威の場合、研究者は、特定の既知のマルウェア ファミリ、脅威アクター、または動作のクラスを識別する忠実度の高い検出ルールと、より多くの誤検出を生成するが、より一般的に技術を捕捉する忠実度の低いハンティング ルールとの間でバランスを取ろうとします。およびその派生物。

次のセクションでは、これらの忠実度の低いルールが、脅威ハンターが疑わしい観察結果を測定して文脈化して、新しい脅威やステルス脅威を発見するのにどのように役立つかについての技術と科学を説明します。

探偵スリヴァー

攻撃者は、C2 フレームワークを使用して、侵入中に侵害されたホストやネットワークへのアクセスを管理します。通常、C2 フレームワークには、侵害されたシステム上のインプラントからの接続を受け入れるサーバーと、C2 オペレータがインプラントとやり取りして悪意のあるコマンドを起動できるようにするクライアント アプリケーションが含まれます。

多くの脅威アクターは、公開されているオープンソースの C2 フレームワーク オプションを武器庫に統合しています。これは、これらが参入障壁が低く、攻撃者にとって低コスト、変更の容易さ、特定の困難さなどのいくつかの利点を提供するためです。前述のように、Sliver はそのようなオープンソース フレームワークの 1 つです。 Sliver はいくぶん新しいものですが、Sliver が実装する TTP は多くのフレームワークで共通です。

以下は、Defender Expert がこれらの TTP を探して、顧客環境で Sliver やその他の新しい C2 フレームワークを特定する方法の例です。

インフラストラクチャー

Sliver は、多くの C2 フレームワークと同様に、DNS、HTTP/TLS、MTLS、TCP などのさまざまなネットワーク プロトコルをサポートしています。また、インプラントまたはオペレーター接続を受け入れ、ファイルをホストして、無害な Web サーバーになりすますこともできます。

C2 フレームワークをテストするための最初のステップは、リスナーを開始し、それらをスキャンして異常を特定することです。いくつかの一般的なアーティファクトは、一意の HTTP ヘッダーの組み合わせとJARM ハッシュです。後者は、TLS サーバーのアクティブなフィンガープリンティング手法です。 RiskIQ は、 SliverBumblebeeを検出するためのそのような方法論を共有しています。

ペイロード

Sliver は Go プログラミング言語 (GoLang) で記述されているため、そのインプラントはクロスプラットフォーム互換です。デフォルトでは、オペレーターは次のようないくつかの形式でインプラントを生成できます。

  • シェルコード
  • 実行可能
  • 共有ライブラリ/DLL
  • サービス

Sliver は、ステージャーもサポートしています。これは、主に完全なインプラントを取得して起動することを目的とした組み込み機能がほとんどない、より小さなペイロードです。ステージャーは、最初のペイロード (フィッシング メールなど) に含まれる悪意のあるコードを最小限に抑えるために、多くの C2 フレームワークで使用されます。これにより、ファイルベースの検出がより難しくなる可能性があります。

ただし、オペレーターは Sliver のデフォルトの DLL または実行可能なペイロードを使用する必要はありません。動機付けられた攻撃者は、Sliver シェルコードを生成し、それを Bumblebee のようなカスタム ローダーに埋め込み、侵害されたシステムで Sliver インプラントを実行することができます。検出エンジニアは、ローダー固有の検出を作成したり、シェルコードが難読化されていない場合は、ローダーに埋め込まれたシェルコード ペイロードのルールを作成したりできます。

設定抽出

セキュリティ アナリストは、疑わしい侵入に対応する際に、コンテキストがほとんどないマルウェア ペイロードに気付くことがあります。 C2 アドレス、ネットワーク構成、その他の埋め込みの詳細など、マルウェアから主要な構成の詳細をすばやく抽出することは、ネットワーク内の影響を受けるデバイスを探すための重要なステップです。

Sliver を含む多くのインプラントは、有用な情報を大幅に難読化または暗号化して、分析と検出の試行を長引かせます。 Sliver は、GoLang に基づく他のインプラントと同様に、この目的のためにパブリック ライブラリを使用します。現在の実装ではgarble ライブラリが使用されますが、以前のバージョンでは gobfuscateライブラリが使用されます。何人かの研究者が、ペイロード内の文字列の「難読化解除」を支援するツールを作成しましたが、それでもかなり手動のプロセスであり[1] 、すべてのライブラリがサポートされているわけではありません。

このような場合、関心のある構成をメモリにロードするときに、より簡単に抽出できます。 Sliver は構成を使用するために難読化を解除して復号化する必要があるため、メモリをスキャンしてこれらの値を探し、プログラムで抽出して構成データなどの結果を取得できます (図 1 を参照)。

Sliver バックドアのプロセス メモリから抽出された Sliver インプラント構成データのスクリーンショット。
図 1. Sliver テスト インプラントから抽出されたサンプル構成

Apr4h/CobaltStrikeScanCCob/ BeaconEye など、Cobalt Strike 用の同様の公開された難読化解除ツールがあります。

一部のマルウェアは、メモリ内の構成も難読化または暗号化しようとします。 Cobalt Strike の「sleep_mask」がその好例です。ただし、このような場合でも、マルウェアが C2 サーバーにチェックインして新しい指示を得るには、構成を復号化する必要があることに注意することが重要です。したがって、メモリから構成を抽出するには、意図的なタイミングが必要です。

コード実行

Sliver には、さまざまな組み込み手法と悪用後の機能が含まれています。 C2 オペレーターとフレームワークで使用される最も一般的な基本的な手法の 1 つは、プロセス インジェクションです。これは、別のライブ プロセスのアドレス空間内で任意のコードを実行する方法です。

攻撃者は、防御回避、アクセス、権限の昇格、危険なコード実行の回避、およびその他多くの理由でプロセス インジェクションを使用します。 Microsoft の研究者は次のように説明しています。コード インジェクションを使用すると、攻撃者はすぐに検出できるカスタム プロセスを使用する必要がなくなります。代わりに、悪意のあるコードを一般的な信頼できるプロセス (explorer.exe、regsvr32.exe、svchost.exe など) に挿入し、操作のステルス性と永続性を高めます。」以下の図 2 は、プロセス インジェクションが通常どのように機能するかを示しています。

典型的なプロセス インジェクションが 3 つのステップでどのように機能するかを四角と矢印で示した図: 1. リモート プロセスにメモリ ケイブを作成する (VirtualAllocEx) 2. ケイブに悪意のあるコードを書き込む (WriteProcessMemory) 3. ケイブを「実行可能メモリ」にする (VirtualPRotectEx)次にコードを起動して、リモート プロセス (CreateRemoteThread) の下の新しいスレッドでインプラントを生成します。
図 2. プロセス インジェクションのしくみ

他の C2 フレームワークと同様に、Sliver はプロセス インジェクションを多くのデフォルト コマンドまたは機能のコア部分として利用します。

  • migrate (コマンド) – リモート プロセスに移行する
  • spawndll (コマンド) – リモート プロセスでリフレクション DLL をロードして実行する
  • sideload (コマンド) – リモート プロセスで共有オブジェクト (共有ライブラリ/DLL) を読み込んで実行する
  • msf-inject (コマンド) – Metasploit Framework ペイロードをプロセスに挿入します
  • execute-assembly (コマンド) – 子プロセスで .NET アセンブリを読み込んで実行する
  • getsystem (コマンド) – NT AUTHORITYSYSTEMユーザーとして新しい Sliver セッションを生成します
  • 拡張機能/エイリアス – ビーコン オブジェクト ファイル (BOF)、.NET アプリ、およびその他のサードパーティ ツール

Sliver は、一般的なプロセス インジェクションの実装も使用します。たとえば、この記事の執筆時点では、組み込みの Sliver移行コマンドは、 VirtualAllocExWriteProcessMemoryVirtualProtectEx 、および最後にCreateRemoteThread Windows API 呼び出しの従来の組み合わせを使用して、リモート プロセスに移行します。 SideloadSpawnDll 、およびExecute Assemblyなど他のコマンドも、この組み合わせに依存しています。インジェクション関連の API 呼び出しのこのシーケンスは十分に文書化されており、Microsoft Defender for Endpointは、このような API 呼び出しの組み合わせに基づいて、潜在的に悪意のあるコードがプロセスに挿入されたようなアラートを生成します。

アラートを表示する Microsoft Defender for Endpoint ユーザー インターフェイスの部分的なスクリーンショット。
図 3. インジェクション関連の API 呼び出しに対する Microsoft Defender for Endpoint アラートの例

プロセス インジェクションとは別に、Sliver は、 PsExecコマンドを介したラテラル ムーブメントなどの追加の使い慣れた手法を提供します。 Defender for Endpoint は、次のような既定の手法で複数のアラートを生成します。

アラートを表示する Microsoft Defender for Endpoint ユーザー インターフェイスの部分的なスクリーンショット。
図 4. PsExecコマンドによって作成された既定のサービス インストールの Microsoft Defender for Endpoint アラートの例

Sliver の脅威活動の表面化

Sliver フレームワークの分析に基づいて、Defender Experts は、Sliver 関連の脅威活動を明らかにするための高度なハンティング クエリを設計しました。これらのハンティング クエリは、Azure の大規模なデータセットを操作するために特別に設計されたクエリ言語であるKusto クエリ言語 (KQL)を利用します。特に明記されていない限り、このブログの検出とハンティングのガイダンスは、この記事の執筆時点で入手可能なカスタマイズされていない公式の Sliver コードベース用に設計されています。

顧客はできる次のクエリを実行しますMicrosoft 365 Defender ポータルで。これらのクエリは、ハンターが Sliver によって実装された固有のデフォルト構成をキー入力する方法の例です。

ハンティング クエリを実行している Microsoft 365 Defender の Advanced Hunting ページのスクリーンショット。
図 5. Microsoft 365 Defender での高度な検索クエリの実行

GetSystem

次のクエリは、 spoolsv.exeの既定のターゲット プロセスがインジェクションのターゲット プロセスとして使用される、組み込みのGetSystemコマンドの起動の可能性を検出します。このクエリは、プロセスに追加されるSeDebug権限を探し、その後、同じプロセスが 30 秒以内にspoolsv.exeでリモート スレッドを作成します。

// この権限がトークンで有効になっているかどうかを識別するために使用される SeDebugPrivilege 定数
let SeDebugPriv = 1048576;
デバイスイベント
| |ここで、ファイル名 == 'spoolsv.exe'
| |ここで、ActionType == 'CreateRemoteThreadApiCall'
| |どこで InitiatingProcessFileName !~ 'csrss.exe'
| |プロジェクト InitiatingProcessId、DeviceId、CreateTime=Timestamp、FileName
| |結合の種類 = 内部 (
    デバイスイベント
    | |ここで、ActionType == 'ProcessPrimaryTokenModified'
    | |拡張 TokenModTime = タイムスタンプ
  ) DeviceId、InitiatingProcessId で
| | ((CreateTime - 30s) .. CreateTime) の間の TokenModTime
| | JSON を拡張 = parse_json(AdditionalFields)
// この行は SeDebugPrivilege が変更された唯一の権限であることを探します。これは、Sliver で実装されている方法です。
| |どこで binary_xor(tolong(JSON.OriginalTokenPrivEnabled),tolong(JSON.CurrentTokenPrivEnabled)) == SeDebugPriv
// 必要に応じて上記をコメント アウトし、この行を使用します。これはより一般的で、最初に有効になっていない SeDebugPrivilege をチェックするだけです。
//|どこで binary_and (tolong(JSON.OriginalTokenPrivEnabled), SeDebugPriv) == 0
| | where binary_and(tolong(JSON.CurrentTokenPrivEnabled), SeDebugPriv) != 0 // 現在のトークンで SeDebugPrivilege が有効になっていることを確認
| |拡張 TargetProcessFileName=FileName
| | project-reorder DeviceName、InitiatingProcessFileName、TargetProcessFileName、InitiatingProcessId

シェル

次のクエリは、Sliver が「Shell」コマンドを使用して対話型シェルを作成するときに使用される既定の一意の PowerShell コマンドを検索します。

DeviceProcessEvents 
| |ここで ProcessCommandLine == 'powershell.exe -NoExit -Command [コンソール]::OutputEncoding=[Text.UTF8Encoding]::UTF8'

Sideload/SpawnDll/Execute-Assembly

SideloadSpawnDll 、およびExecute Assemblyコマンド、デフォルトで生成され、 notepad.exeに挿入されます。次のクエリは、同じプロセスが 10 秒以内にnotepad.exeを作成して挿入するプロセス作成イベントを検索します。

DeviceProcessEvents
| |ここで、ActionType == 'ProcessCreated'
| |どこ ProcessCommandLine =~ 'notepad.exe'
| |個別の InitiatingProcessId、DeviceId
| |結合の種類 = 内部 (
    デバイスイベント
    | |ここで、ActionType == 'CreateRemoteThreadApiCall'
    | |どこで ProcessCommandLine == 'notepad.exe'
    | |ここで、(ProcessCreationTime .. (ProcessCreationTime+10s)) の間のタイムスタンプ
) DeviceId、InitiatingProcessId で

PsExec

次のクエリは、Sliver のPsExecコマンドを使用するときに、リモート システムにインストールされているサービスのImagePathDisplayName 、およびDescriptionの既定値を検索します。

DeviceRegistryEvents
| |ここで、ActionType == 'RegistryValueSet'
| |ここで (RegistryValueName == 'ImagePath' で、RegistryValueData は正規表現 @'^[a-zA-Z]:windowstemp[a-zA-Z0-9]{10}.exe' と一致します) または
        (RegistryValueName == 'DisplayName' および RegistryValueData == 'Sliver') または 
        (RegistryValueName == '説明' および RegistryValueData == 'Sliver インプラント')

次のクエリは、同じサービス プロパティを検索する別の方法ですが、レジストリ キーではなくサービス インストール イベント内にあります。

デバイスイベント
| |ここで、ActionType == 'ServiceInstalled'
| | JSON を拡張 = parse_json(AdditionalFields)
| |ここで、(FolderPath は_cs @':windowstemp' で終わり、FileName は正規表現 @'^[a-zA-Z0-9]{10}.exe' と一致します) または (JSON.ServiceName == 'Sliver')

脅威ハンティングによる将来の攻撃に対する回復力の構築

Sliver のソース コードと機能を分析した結果、他のマルウェア フレームワークに対しても使用できるハンティングの機会が明らかになりました。さらに、Sliver や他の多くの C2 フレームワークは、攻撃者が自動化されたセキュリティ検出を回避しようと継続的に試みていることを示すもう 1 つの例です。脅威ハンティングは、他のセキュリティ緩和策にレイヤーを追加し、防御回避の領域に対処するのに役立ちます。 Sliver 内で使用される基本的な攻撃者の手法に研究努力を集中することで、検出と脅威ハンティングの戦略は、それらの手法を実装する攻撃者ツールセットの将来の変更に対してより回復力があります。

Defender Experts は、マイクロソフトの 8,500 人を超えるセキュリティ エキスパートからなるグローバル ネットワークの一部であり、マイクロソフトの膨大なクロス ドメイン シグナルをさらに強化し、マイクロソフトのセキュリティ製品とソリューションで調整された脅威防御を提供できるようにします。 Sliver に関する調査で見られるように、脅威の状況を監視することで、高度で忠実度の高い KQL クエリが得られます。これは、 Defender Experts Notificationsの基礎を形成するために徹底的にテストされます。これらの通知は、最も重要なリスクを特定し、技術情報を提供するだけでなく、ハンティングと緩和のガイダンスを提供するように設計されています。

脅威のハンティングと監視から得た洞察は、Microsoft Defender for Endpoint などの製品にも提供され、Sliver などの C2 フレームワークで見られる悪意のあるアクティビティを顧客に警告します。セキュリティ センターの次のタイトルは、ネットワーク上の脅威の活動を示している可能性があります。

  • ランサムウェアに関連する新たな脅威の活動グループが検出されました
  • cmd.exe による不審な動作が確認されました
  • 疑わしい一連の探査活動
  • 不審なデータ転送
  • 不審なシステム ネットワーク構成の検出
  • プロセスの空洞化が検出されました
  • 潜在的に悪意のあるコードがプロセスに挿入されました
  • 疑わしい周辺機器の発見
  • 異常なリモート サービス実行
  • 疑わしいファイルがドロップされました
  • 遠隔地から起動された不審なコマンド
  • 疑わしいファイルまたはコンテンツの難読化/難読化解除アクティビティ

Microsoft のお客様は、次のセキュリティ緩和策を適用して、Sliver やその他の同様の脅威の影響を軽減することもできます。

  • ネットワーク保護をオンにします。ネットワーク保護は、ユーザーが危険なドメインや IP アドレスにアクセスするのを防ぐのに役立ちます。境界ファイアウォールとプロキシを確認して、サーバーがインターネットに任意に接続してファイルを参照またはダウンロードすることを制限します。このような制限は、マルウェアのダウンロードや、モバイル デバイスを含む C2 アクティビティを阻止するのに役立ちます。
  • Microsoft Defender ファイアウォールを使用します。これは、ネットワーク ファイアウォールと共に、可能な限りエンドポイントでのリモート プロシージャ コール (RPC) およびサービス メッセージ ブロック (SMB) 通信を防ぎます。これにより、横方向の動きやその他の攻撃活動が制限されます。
  • Microsoft Defender ウイルス対策で、 クラウドによる保護と自動サンプル送信を有効にします。これらの機能は、人工知能と機械学習を使用して、新しい未知の脅威を迅速に特定して阻止します。
  • Office 365 のメール フィルタリング設定を確認して、なりすましメール、スパム、およびマルウェアを含むメールを確実にブロックしてください。 Microsoft Defender for Office 365を使用して、強化されたフィッシング保護と、新しい脅威とポリモーフィック バリアントに対するカバレッジを実現します。 Office 365 を構成して、クリック時にリンクを再チェックし、新たに取得した脅威インテリジェンスに応じて送信済みメールを削除します。

組織は、次の一般的なベスト プラクティスに従って、ネットワークを攻撃に対して回復力のあるものにすることもできます。

  • クラウドを強化します。攻撃者がクラウド リソースに移行するにつれて、オンプレミス アカウントだけでなく、クラウド リソースと ID を保護することが重要になります。セキュリティ チームは、セキュリティ ID インフラストラクチャを強化し、すべてのアカウントに多要素認証 (MFA) を適用し、ドメイン管理者と同じレベルのセキュリティと資格情報衛生でクラウド管理者/テナント管理者を扱うことに集中する必要があります。
  • セキュリティの盲点を閉じます。組織は、セキュリティ ツールが最適な構成で実行されていることを確認し、定期的なネットワーク スキャンを実行して、セキュリティ製品がすべてのシステムを保護していることを確認する必要があります。
  • 攻撃面を減らします。 C2 フレームワークで使用される一般的な攻撃手法を防ぐために、 攻撃対象領域の削減ルールを確立します。
  • 周囲を評価します。組織は、攻撃者がネットワークへのアクセスに使用する可能性のある境界システムを特定して保護する必要があります。 パブリック スキャン インターフェイスを使用して、データを補強できます。
  • インターネットに接続する資産を強化します。攻撃者は、特に初期アクセス段階で、すでに公開されているかゼロデイであるかに関係なく、パッチが適用されていない脆弱性を使用して、C2 フレームワークを標的のシステムに侵入させます。また、新しい脆弱性も急速に採用しています。露出をさらに減らすために、組織は、Microsoft Defender for Endpoint などの脅威と脆弱性の管理機能を備えたエンドポイントの検出と対応 (EDR) 製品を使用して、脆弱性と構成ミスを検出し、優先順位を付け、修復することができます。

Microsoft のマネージド サービスを使用してセキュリティを保護および管理する能力を拡張する方法については、 Microsoft Security Expertsの詳細をご覧ください。

付録

Microsoft 365 Defender の検出

Microsoft Defender ウイルス対策

Microsoft Defender ウイルス対策は、Sliver 脅威コンポーネントを次のマルウェアとして検出します。

Microsoft Defender ウイルス対策は、Bumblebee ローダーを次のマルウェアとしても検出します。


[1]自動文字列デゴブファスケーション、Kryptos Logic

参照: https://www.microsoft.com/en-us/security/blog/2022/08/24/ looking-for-the-sliver-lining-hunting-for-emerging-command-and-control-frameworks/

Comments

Copied title and URL