re-sandbox について
動的解析用の隔離環境を構築するセキュリティ分析スキルです。分析者がリスクに応じて firejail、Docker、VM を選び、ネットワークシミュレーション、スナップショット、サンプル転送を設定できます。
主な機能
- 01リスクに応じた隔離レベルの選択
- 02オフライン・fake DNS・INetSim の設定
- 03環境スナップショットの作成と復元
- 04隔離経路を通じたサンプル転送
- 05自動サンプル解析サンドボックスの実行
活用シーン
- 01未信頼サンプルの隔離環境での実行
- 02マルウェアの挙動とコールバックの解析
- 03アンパック後のサンプル挙動の検証
- 04プログラムの動的監視と環境のロールバック
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ dslsdzc/ rev-skills --skill re-sandboxインストール後、Claude Code で/re-sandboxを入力して読み込まれたか確認します。
同梱ファイルreferences/commands.mdreferences/gotchas.md
詳細
サンドボックス環境の構築
使用する場合/使用しない場合
- 使用する:サンプルを実行する動的解析(挙動解析、コールバックの観察、アンパックの検証、動的 API の監視)を伴うものすべて――動的解析では事前準備が必須であり、デフォルトのサンドボックスを最優先の原則とします([[re-analyze/platform-tips]] を参照)
- 使用する:信頼できないプログラムを、クリーンでロールバック可能な隔離環境で実行する必要がある場合
- 使用しない:純粋な静的解析([[re-triage]] / [[re-format-pe]] / [[re-ghidra]] など)はサンドボックスを省略できます
- 使用しない:サンプルに信頼できる実行環境がすでにあり、ユーザーがローカルでの実行を明示的に求めている場合(それでも、まずリスクを説明してください)
ツールの準備
すべてのツールは、使用前に検証してください。本スキルは [[re-analyze/platform-tips]] の最優先原則(デフォルトでサンドボックスを使用し、動的実行の事前準備を必須とする)を実行するものです。すべてのツールは、「サンプルの実行」をより安全かつ制御可能にするためだけに使用します。
firejail —— 軽量アプリケーションサンドボックス(最低レベルの隔離、Linux のみ)
- Linux:
apt install firejail/dnf install firejail/pacman -S firejail - macOS/Windows:非対応(Docker または VM で代替)
- WSL:Linux パッケージをそのまま使用できます
- 検証:
firejail --version;firejail --listでアクティブなサンドボックスを確認できます - 注意:firejail はユーザー空間での隔離(namespace/seccomp の組み合わせ)であり、セキュリティ境界ではありません。カーネルの脆弱性悪用や権限昇格を防げないため、高脅威のサンプルには VM を使用してください(「落とし穴 3」を参照)。よく使うパラメーターは
--private(一時的な home。終了時に破棄)、--net=none(ネットワーク切断)、--dns=<ip>(DNS の接続先を指定)です
docker —— コンテナーによる隔離(中級)
- Linux:
apt install docker.io/dnf install docker/pacman -S docker(または Docker 公式スクリプト) - macOS:
brew install --cask docker(Docker Desktop。手動での起動が必要)またはbrew install docker+brew install colima+colima start - Windows:
choco install docker-desktop(Docker Desktop);WSL2 内では Linux 版を使用 - 検証:
docker --version;docker run --rm hello-worldが正常に実行できること - 注意:コンテナーはカーネルを共有するため、完全な隔離ではありません(「落とし穴 3」を参照)
VirtualBox / VMware —— 仮想マシン + スナップショット(最高レベルの隔離)
- VirtualBox:
- Linux:
apt install virtualbox/dnf install VirtualBox(RPMFusion リポジトリ)/pacman -S virtualbox - macOS:
brew install --cask virtualbox - Windows:
choco install virtualbox - 検証:
VBoxManage --version
- Linux:
- VMware Workstation/Fusion:商用ライセンスが必要;Windows では
choco install vmware-workstation;検証:vmrun listまたはvmware --version - スナップショットコマンド(VBoxManage の例):
VBoxManage snapshot <vm> take clean # 建立快照 VBoxManage snapshot <vm> restore clean # 恢复快照
INetSim —— ネットワークサービスのシミュレーション(ネットワーク隔離の主力)
- Linux:Debian/Ubuntu では
apt install inetsim(または公式の .deb。他のディストリビューションではソースからビルドします。Perl の依存関係が多いため、専用の Debian VM を推奨します) - macOS/Windows:ローカルへのインストールは非推奨です。Linux VM 内で実行してください
- 検証:
inetsim --version;起動後、inetsimのログに HTTP/SMTP/DNS/FTP などのサービスがリッスンしていることが表示されます
Cuckoo / CAPE —— 悪意のあるサンプルを自動解析するサンドボックス
- Cuckoo(旧版、現在も使用可能):
pip install cuckoo;検証:cuckoo --version - CAPE(現在の後継):
検証:git clone https://github.com/kevoreilly/CAPEv2 cd CAPEv2 && pip install -r requirements.txtpython cuckoo.py --helpまたはcapeサブコマンドで一覧が表示されること - 仮想マシンとネットワーク隔離の設定が必要で、初回構築のコストが高いため、単発の手動解析には VM スナップショット方式を優先してください
操作手順
順番に実行し、各手順の結果を記録してください。
-
隔離レベルを選択(完全性の高い順:VM スナップショット > コンテナー > firejail):
- 中・低の 2 段階は、リスクが低いと判明しているサンプルにのみ適しています:コンテナーと firejail はホストカーネルを共有します。サンプルにカーネル攻撃対象領域(権限昇格、カーネル脆弱性の悪用、ドライバー/カーネルモジュールのペイロード)がある場合、この 2 段階は隔離境界になりません。未知または高脅威のサンプルを実行するデフォルト環境は VM スナップショットです。一般的な悪意のあるサンプルに対する「予備の隔離レイヤー」としてコンテナーを扱うのは、よくある隔離レベルの誤用です
- VM スナップショット(VirtualBox/VMware):完全な復元と、サンプルの外部通信/脱出の防止が必要な場合に使用します。未知の高脅威サンプルを解析する際のデフォルトの選択肢です
- コンテナー(Docker):Linux バイナリーの迅速なテストや、低リスクのサンプルに使用します
- firejail:ファイルシステムとネットワークの制限だけが必要で、一時的に実行する場合に使用します
- 判断の記録:選択したレベルとその理由を記録し、「解析後にスナップショットを復元」するコマンド(手順 5)もあらかじめ記載してください
-
ネットワーク隔離(強い順に 3 段階):
- ネットワーク切断:VM のネットワークモードを Host-only / Internal に設定します(NAT はデフォルトで外部への通信を許可するため、ネットワーク切断には使用できません)。firejail では
--net=noneを使用します - フェイク DNS:/etc/hosts または dnsmasq を使って、疑わしいドメインをローカルマシンに向けます。または
firejail --dns=127.0.0.1を使用します - INetSim:サンドボックスの DNS を INetSim ホストに向け、HTTP/SMTP/FTP/DNS サービスをシミュレートして、サンプルからのすべてのリクエストを記録します。C2 解析の標準的な方法です([[re-protocol]] の [[re-netcap]] と併用)
- 検証:サンドボックス内で
ping 8.8.8.8が通らず、curl http://example.comで INetSim のシミュレーション応答が返ること
- ネットワーク切断:VM のネットワークモードを Host-only / Internal に設定します(NAT はデフォルトで外部への通信を許可するため、ネットワーク切断には使用できません)。firejail では
-
スナップショットの作成:
# VirtualBox VBoxManage snapshot <vm> take clean # VMware vmrun snapshot <vm> clean # Docker: 提交运行中容器为镜像 docker commit <container> sandbox-image:v1 # firejail 无快照概念——靠 --private/--private-etc 临时目录,退出即清理スナップショットには、少なくともクリーンな OS + 解析ツール(procmon / sysdig / bpftrace)+ ネットワーク隔離の設定を含めてください。
-
サンプルの持ち込み/持ち出し(隔離された経路):
- 持ち込み:読み取り専用の共有ディレクトリを使用します。VM ではクリップボード/ドラッグ&ドロップの共有を無効にします(サンプルからホストを読み取られるのを防ぐため)。または、ウイルス対策ソフトでスキャンしてから持ち込みます
- 持ち出し:成果物(ログ/メモリダンプ/設定)は専用の出力ディレクトリから取り出し、サンプルとは分けて証拠として保管します
- 持ち込み前に、元のサンプルの
sha256sumを記録します([[re-triage]] を参照)。元のハッシュはホストとサンドボックス内の両方に保存してください - Guest Additions のクリップボード/ドラッグ&ドロップ共有を無効にし、Host-only ネットワークのみを有効にします。VM 脱出の検知を回避する対策については「落とし穴 4」を参照してください
-
解析後にスナップショットを復元:
VBoxManage snapshot <vm> restore clean # Docker docker rm -f <container> # firejail——没有 --clean 选项(0.9.80 实测报 invalid option),按名/PID 关停: firejail --shutdown=<name|pid> # 沙箱名/pid 用 `firejail --list` 查 # 或直接退出 firejail 进程,--private 临时目录退出自动清理復元後の検証:
VBoxManage snapshot <vm> listで clean に戻ったことを確認します。サンドボックス内でps auxを実行し、残留プロセスがないことを確認してください。スナップショットを復元しないと、環境が汚染されます(「落とし穴 1」を参照)。
複数領域の連携
- [[re-malware]]:この領域のワークフローでは、手順 1 で事前準備を必須とします。デフォルトのサンドボックスを最優先とし([[re-analyze/platform-tips]])、悪意のあるサンプルの動的解析はすべてここから開始します
- [[re-anti-analysis]]:アンパックした成果物の動的検証は、サンドボックス内で再実行する必要があります(パッカーが完全に除去されたかを判定します)
- [[re-protocol]]:C2 トラフィックのキャプチャでは、本スキルの INetSim/フェイク DNS ネットワーク隔離環境を使用します
- [[re-binary-core]]:動的解析の各段階([[re-tracing]] / [[re-gdb]] / [[re-x64dbg]] / [[re-memdump]])では、本スキルを実行前の準備として参照します
- [[re-evasion]]:サンプルがサンドボックス/VM 環境を検知する場合(脱出とアンチサンドボックス)の対抗策については、検知箇所の特定と回避を同領域で扱います
常见坑与陷阱
- 忘恢复快照 = 环境污染:现象——下一次分析的沙箱里有上一次样本的残留(进程/文件/注册表),两次分析结果互相污染;原因——快照只建不恢复,样本持久化行为留在沙箱里;对策——步骤 1 就写下恢复命令,分析完立即执行,恢复后验证无残留进程
- 网络未隔离样本外联:现象——样本真实访问了外网 C2 或继续扩散;原因——跳过网络隔离直接联网跑;对策——任何运行前先按步骤 2 三档之一隔离,并验证 ping/curl 的落点
- 容器共享内核 ≠ 完全隔离:现象——样本利用内核漏洞或修改 sysctl 等全局配置影响宿主机;原因——Docker 与宿主机共享内核,仅 namespace/cgroup 隔离;对策——高威胁样本用 VM 快照而非容器,容器只用于低风险快速测试
- 样本逃逸检测 VM 环境:现象——样本检测到 VM 特征(Guest Additions、vmware 进程、虚拟网卡名)后休眠/退出,行为分析拿不到结果;原因——反分析技术(见 [[re-anti-analysis]] 域);对策——禁用 Guest Additions、改虚拟硬件指纹、与 [[re-behavior]] 的延迟/交互检查对策配合延长观察
- 时间检测(RDTSC / Sleep 加速):现象——样本睡 30 秒后直接退出或行为异常,或 RDTSC 计时发现"时间不对";原因——沙箱常 hook/加速计时 API(Sleep/GetTickCount),样本用 RDTSC(配 CPUID 强制 VM exit)、
Sleep+GetTickCount对比、GetSystemTimeAdjustment等发现异常;对策——识别时间检测点(xref RDTSC/GetTickCount/NtDelayExecution),沙箱保持真实时钟或 patch 检测点后继续([[re-anti-analysis]] 域),需要长等待时用真实等待而非加速时钟 - 环境命名与资源阈值检测:现象——样本在
sample.exe/malware目录下不触发恶意行为,改名或调资源后行为差异巨大;原因——检测分析文件名/路径、CPU 核数/内存/磁盘容量阈值、鼠标键盘交互缺失(ATT&CK T1497.001);对策——样本命名规范化(避免 sample/sandbox/恶意 字样)、沙箱资源充足(≥2 核、≥2GB 内存、正常磁盘容量),配合交互模拟(鼠标移动)与 [[re-behavior]] 的延迟观察 - 沙箱隔离≠分析环境伪装:现象——样本在隔离环境内安全跑通,但仍因时间/硬件/输入类环境指纹检测改变行为;原因——隔离≠伪装:时间/硬件/输入检测是环境指纹,完整 VM 也会被检测;对策——把"隔离"与"环境伪装"分开处理,按指纹类别逐个定位检测点(时间/硬件/输入)再针对性应对([[re-anti-analysis]] 域),参考 [[re-analyze/platform-tips]] 沙箱分支
- 简单交互模拟被统计检测识破:现象——模拟了鼠标移动/输入事件,样本仍判定"非人类"不触发载荷;原因——Rhadamanthys 等新样本对交互做统计级校验:30ms 采样 1500 次光标/前景窗口/时间戳,要求光标移动 ≥30 次且 ≥2 个不同前景窗口(其一非桌面进程),再用光标轨迹欧氏距离判别"非人类"移动模式,观测期长达 45s+;对策——按人类行为分布模拟(随机间隔、非线性轨迹、真实窗口切换)而非固定像素移动,对照样本采样参数(光标/前台窗口/时间戳)逐个满足,拉长观察窗口(CAPE/VMRay 已内置该级交互模拟)
- firejail 清理选项被讹传(--clean 不存在):现象——按旧文档执行
firejail --clean报invalid --clean command line option;原因——官方 man 页(0.9.72 起)与 0.9.80 实测均无该选项,教程间互相转抄讹传;对策——沙箱清单firejail --list查 name/pid,用firejail --shutdown=<name|pid>关停;临时目录靠--private退出自动清理 - 样本借道白名单进程执行(brokered execution):现象——沙箱里样本自身进程行为几乎干净,恶意动作全发生在 rundll32/mshta/PowerShell/WMI 等进程里;原因——样本通过 IPC(ALPC/RPC/COM/命名管道)或 LOLBin 把敏感动作"外包"给已放行的进程——监控只盯样本进程就漏掉真实行为;对策——按"样本派生的整条进程链"观察(父→子树,Sysmon 1 进程创建关联),procmon/sysdig 过滤按根进程而非单进程,内核侧(ETW/bpftrace)补用户态监控盲区
コメント
Markdown 対応