はじめに
C2フレームワークの1つであるSliverの機能についてすこし検証してみましたので、その結果について報告します。
※本記事に記載の内容や手法を用いることで生じたいかなる問題につきましても、当社は一切の責任を負いかねます。あらかじめご了承ください。
Sliverとは
Sliverは、Go言語で開発されているオープンソースのC2フレームワークの1つです。
Sliverの特徴としては、クライアントとサーバー間の通信チャンネルとしてHTTP、HTTPS、DNSやmTLSが使えることのほか、任意の.NETアセンブリーやDLLをクライアント上で実行可能なことなどがあります。 私は先日受講したHack In The Boxの「- In & Out - Network Exfiltration and Post-Exploitation Techniques [RED Edition]」というトレーニングで初めてSliverを使ったのですが、これらの特徴が面白そうだったので検証してみることにしました。
検証環境
今回の検証は、下記のようなドメイン環境で行いました。
- ドメイン名:mars.solar.local(MARS)
- サーバー(OSはすべてMicrosoft Windows Server 2019):
- mars-dc:ドメインコントローラー
- phobos
- deimos
- ユーザー:
- Administrator:ドメイン管理者
- kepler:phobosのローカル管理者
- phobosadmin:phobosとdeimosのローカル管理者
- deimosadmin:deimosのローカル管理者。Domain Adminsグループに所属
- C2サーバー:
- c2srv(Ubuntu 18.04)
検証のおおまかな手順は下記のとおりです。
- Sliverセットアップ
- Sliverサーバー起動、初期インプラント生成
- 標的情報の取得
- .NETアセンブリー実行
- SYSTEM権限への昇格
- プロセスメモリのダンプ
- 他ユーザーのプロセスへの移行
- 横展開用インプラント生成
検証結果
Sliverセットアップ
SliverのGitHubからLinux用のサーバーファイル(sliver-server_linux.zip)をc2srvにダウンロードし、展開します。
ubuntu@c2srv:~$ wget https://github.com/BishopFox/sliver/releases/download/v1.0.7-beta/sliver-server_linux.zip ubuntu@c2srv:~$ unzip sliver-server_linux.zip
また、Windows用実行ファイルを生成するためのMingw-w64が未導入の場合は追加で導入しておきます。
Sliverサーバー起動、初期インプラント生成
c2srv上でSliverサーバー(sliver-server)を起動し、c2srvと標的が通信するためのクライアントモジュール(以下、インプラント)をgenerate
コマンドで生成します。
ここでは通信チャンネルとしてmTLSを指定します。
また、オプションとして--skip-symbols
(シンボル情報を難読化しない)も指定しています。
mtls
コマンドを実行し、インプラントからのmTLS通信を待ち受けます。
標的情報の取得
標的(ここではphobos)上でインプラントを実行し、c2srvとの通信を確立します。
通信を確立後、info
、ifconfig
コマンドなどを実行してphobosの情報を取得します。
.NETアセンブリー実行
Sliverでは、外部の.NETアセンブリーをインプラント経由で実行できます。
ここではexecute-assembly
コマンドによってSeatbeltをインプラント経由で実行し、phobosの詳細な情報を取得します。
SYSTEM権限への昇格
getsystem
コマンドを実行し、SYSTEM権限に昇格します。
当該コマンドの実行前に、UACバイパスなどによって管理者権限を取得しておきます。
権限昇格に成功すると、phobosとの新たなセッションが生成されます。
プロセスメモリのダンプ
procdump
コマンドを実行し、指定したプロセスのメモリをダンプします。
ここでは一例として、Windowsのシステムプロセスの1つであるlsass.exeプロセスのメモリをダンプしています。
他ユーザーのプロセスへの移行
migrate
コマンドを実行し、他ユーザーのプロセスに移行します。
ここでは元々のログインユーザーであるkeplerからphobosadminのプロセスに移行しています。
他ユーザーのプロセスに移行することで、移行先ユーザーの権限で以降のコマンドを実行できます。
プロセス移行に成功すると、phobosとの新たなセッションが生成されます。
横展開用インプラント生成
1つのホストを軸にして横展開(Pivot)するためのインプラントを生成します。 ここでは名前付きパイプ(named-pipe)経由で、phobosからdeimosへ横展開するためのインプラントを生成します。
まずはnamed-pipe
コマンドを実行し、phobos上で名前付きパイプ(ここではhogepipe)を作成します。
次にgenerate
コマンドを実行し、hogepipeを利用するインプラントを生成します。
このインプラントを実行したdeimosは、phobosを軸にしてc2srvとの以降の通信を行います。
おわりに
本記事では、C2フレームワークの1つであるSliverの主な機能について検証しました。 C2フレームワークの基本的な機能に加え、外部の.NETアセンブリーを実行できる機能がSliverの特色の1つだといえます。
実際のペネトレーションテストでは、標的へのインプラントの転送や、管理者権限への昇格、横展開法など工夫すべき点が多く存在しますが、Sliverはテストの補助ツールとして有効に機能してくれるのではないかと思います。


記事の著者
セキュリティ診断業務に10年間従事後、2016年よりシニアセキュリティアナリストとしてペネトレーションテスト業務に従事。
診断業務開始当初は社内イントラサイトの脆弱性に対する過激な指摘により物議を醸したが、
現在はだいぶおとなしくなっている。好きな周波数は13.56MHz。
GXPN、GAWN、GREM、GPEN、GDAT、GCPN、GCFA、GCFE、CRTE、CARTP、CEH
関連記事
RELATED ARTICLE