# 沙箱环境搭建命令速查与操作序列 工具族按隔离级别组织:firejail(用户态轻量)、docker(容器)、VirtualBox/VMware(虚拟机+快照)、INetSim(网络模拟)。命令与参数以官方文档为准(firejail man、docker 文档、VBoxManage 手册、INetSim 手册)。 ## 命令族速查 ### firejail(用户态轻量隔离) - `firejail <程序>` 默认沙箱运行;`firejail --private <程序>` 临时 home/root(退出即弃) - `firejail --net=none <程序>` 断网(仅回环);`firejail --dns=127.0.0.1 <程序>` DNS 指向本机 - `firejail --private-etc=hosts,resolv.conf <程序>` 只带指定 /etc 文件进沙箱 - `firejail --list` 列出活动沙箱(`PID:USER:Name:Command`);`firejail --tree` 树形 - `firejail --shutdown=` 关停指定沙箱——注意没有 `--clean` 选项(0.9.80 实测报 invalid option) - `firejail --version` 验证;`--help` 全参数清单 ### docker(容器隔离) - `docker pull ubuntu:22.04` / `docker run --rm -it ubuntu:22.04 bash` 一次性容器 - `docker run --rm -d --network none --name sand <镜像>` 断网后台容器(`--network none` 无网卡) - `docker cp <样本> sand:/tmp/` 传入;`docker cp sand:/out/ ./out/` 取出产物 - `docker commit sandbox-image:v1` 把运行中容器提交为镜像(快照替代) - `docker rm -f ` 销毁容器;`docker images` / `docker ps -a` 查看 - 验证: `docker --version`;`docker run --rm hello-world` 跑通 ### VirtualBox(VM + 快照) - `VBoxManage list vms` 列虚拟机;`VBoxManage startvm --type headless` 无头启动 - `VBoxManage snapshot take clean` 建快照;`VBoxManage snapshot restore clean` 恢复 - `VBoxManage snapshot list` 快照清单;`VBoxManage modifyvm --nic1 hostonly` 改 Host-only 网卡 - `VBoxManage guestcontrol run --exe /bin/ls --username --password

` 客户机执行(需 Guest Additions) - `VBoxManage sharedfolder add --name in --hostpath <路径> --readonly` 只读共享(传入通道) - 验证: `VBoxManage --version` ### VMware Workstation(vmrun) - `vmrun start nogui`;`vmrun snapshot clean` 快照 - `vmrun revertToSnapshot clean` 恢复;`vmrun list` 运行中 VM - 验证: `vmrun list` ### INetSim(网络模拟) - `inetsim` 默认配置启动(HTTP/SMTP/DNS/FTP 等全模拟);`inetsim --session <名>` 命名会话 - `inetsim --version` 验证;日志在 `/var/log/inetsim/`(报告 `/var/log/inetsim/report/`) - 配置: `/etc/inetsim/inetsim.conf`(bind 地址、启停服务) ### 网络隔离验证 - `ping 8.8.8.8`(断网应不通);`curl http://example.com`(应命中 INetSim 模拟响应) - `dig @127.0.0.1 example.com`(fake DNS 应答);`ss -tlnp` 看沙箱内监听 ## 常用操作序列(组合套路) ### 1. VM 快照分析闭环(建快照 → 隔离 → 传样本 → 跑 → 恢复) ``` VBoxManage snapshot take clean # 干净基线 VBoxManage startvm --type headless # 网络隔离(Host-only + INetSim)→ 只读共享传入样本(sha256 先存证) # 沙箱内运行样本、观察行为、导出产物到专用输出目录 VBoxManage snapshot restore clean # 分析完恢复 VBoxManage snapshot list # 确认回到 clean ``` ### 2. firejail 快速隔离跑样本(轻量场景) ``` firejail --private --net=none --dns=127.0.0.1 ./sample # 断网 + 临时 home;退出后临时目录自动清理 firejail --list # 确认沙箱状态 firejail --shutdown= # 需要时按名关停 ``` ### 3. Docker 容器分析闭环(低风险样本快速测试) ``` docker run --rm -d --network none --name sand ubuntu:22.04 sleep 3600 docker cp ./sample sand:/tmp/ docker exec sand /tmp/sample # 容器内运行(无网) docker cp sand:/tmp/out ./out/ # 取出产物 docker rm -f sand ``` ### 4. INetSim fake 网络环境(C2 观察标准做法) ``` inetsim --session c2obs # 沙箱宿主起模拟服务 # 沙箱 VM DNS 指向宿主 INetSim(Host-only 网段 IP) # 样本外连被模拟服务接管并记录全部请求 → 配合 [[re-netcap]] 抓包 curl http://example.com # 验证命中模拟响应 # 日志与报告在 /var/log/inetsim/ 取回存档 ``` ## 实现教训(内化) - 完整性从高到低:VM 快照 > 容器 > firejail——按样本威胁等级选层,决策与理由写入记录(SKILL.md 步骤 1) - 网络隔离三档先定好再跑:断网 / fake DNS / INetSim——验证命令(ping/curl 落点)先跑通再放样本 - 传入传出走专用通道:只读共享进、专用输出目录出,样本与产物分离存证(sha256 双端) - 恢复快照是分析的一部分:步骤 1 就写下恢复命令,分析完立即执行并验证无残留(SKILL.md 坑 1) - INetSim 环境里 DNS 解析与 HTTP 服务都指向同一宿主,样本请求全落本地——抓包与日志对照还原 C2 行为 ## 使用注意 - 本技能是 [[re-analyze/platform-tips]] 最高原则(默认沙箱)的执行者——动态分析一律先过这里 - 高威胁样本用 VM 快照而非容器/firejail(内核共享面与隔离深度差异,SKILL.md 坑 3) - 时间/硬件/输入类环境指纹是另一层问题:隔离 ≠ 伪装,检测点应对见 [[re-evasion]](SKILL.md 坑 6-8)