KrakoX/scapture

GitHub: KrakoX/scapture

基于 sysdig/eBPF 的自动化系统调用捕获工具,专为 Falco 规则开发和安全研究设计,支持生成可重放的捕获文件和行为分析报告。

Stars: 0 | Forks: 0

# scapture [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/2e0af0b822143738.svg)](https://github.com/KrakoX/scapture/actions/workflows/ci.yml) 使用 sysdig/eBPF 自动捕获 syscall,用于 Falco 规则开发和安全研究。 在隔离容器内执行命令或脚本,捕获其完整的 syscall 跟踪信息,并生成 `.scap` 文件以及包含文件访问、进程行为和网络活动的分析报告。 ## 工作原理 ``` ┌─────────────────────────────────────────────────────────────────┐ │ scapture.sh │ │ │ │ 1. Deploy Deploy privileged sysdig container │ │ (K8s or Docker) - installs sysdig + eBPF probe │ │ │ │ 2. Capture Start sysdig --modern-bpf in background │ │ - restricted syscall set (execve, open, │ │ connect, etc.) tuned for Falco rules │ │ - writes to /tmp/*.scap inside container │ │ │ │ 3. Execute Run the target command/script │ │ - optional package install first │ │ │ │ 4. Collect Stop sysdig, copy .scap to scaps/ locally, │ │ delete from container │ │ │ │ 5. Analyze Read .scap and produce: │ │ - file access report │ │ - process behavior / parent-child tree │ │ - network protocol classification │ └─────────────────────────────────────────────────────────────────┘ ``` ## 与 Falco 规则集成 这是主要的使用场景。捕获的 syscall 集合经过特意限制,仅包含 Falco 监控的事件。 **工作流程:** 1. 捕获攻击技术、漏洞利用或恶意软件样本的行为 2. 检查分析报告以识别具有辨识度的 syscall 模式 3. 编写针对这些模式的 Falco 规则 4. 通过将 `.scap` 文件重放通过 Falco 来验证规则 **针对捕获内容验证规则:** `.scap` 文件会保存在本地的 `scaps/` 目录中。将其(以及你的规则文件)复制到正在运行的容器中进行重放: ``` # Kubernetes kubectl cp scaps/scapture-YYYYMMDD-HHMMSS.scap \ -n scapture deployment/scapture-deployment:/tmp/ kubectl cp your_rule.yaml \ -n scapture deployment/scapture-deployment:/tmp/ kubectl exec deployment/scapture-deployment -n scapture -- \ falco -r /tmp/your_rule.yaml \ -o engine.kind=replay \ -o engine.replay.capture_file=/tmp/scapture-YYYYMMDD-HHMMSS.scap # Docker docker cp scaps/scapture-YYYYMMDD-HHMMSS.scap scapture-container:/tmp/ docker cp your_rule.yaml scapture-container:/tmp/ docker exec scapture-container \ falco -r /tmp/your_rule.yaml \ -o engine.kind=replay \ -o engine.replay.capture_file=/tmp/scapture-YYYYMMDD-HHMMSS.scap ``` ## 前置条件 | 需求 | 备注 | |-------------|-------| | Kubernetes **或** Docker | K8s 方式:具有集群访问权限和创建特权 pod 权限的 `kubectl`。Docker 方式:具有运行 `--privileged` 容器权限的 `docker` CLI。 | | 特权 pod/容器策略 | K8s:PSA 必须在目标命名空间中允许 `privileged`,或者使用不受此限制的集群。 | | 容器内的互联网访问 | 容器启动时会从 GitHub releases 下载 sysdig。 | ## 安装 ``` git clone https://github.com/KrakoX/scapture cd scapture chmod +x scapture.sh ``` 无需构建步骤。脚本是自包含的。 对于 Kubernetes,仓库中包含部署清单 (`scapture-deployment.yaml`)。脚本会在首次运行时自动应用它 —— 无需手动执行 `kubectl apply`。 ## 用法 ### 捕获单个命令 ``` ./scapture.sh --platform kubernetes --command "curl https://example.com" ``` ### 预装软件包进行捕获 ``` ./scapture.sh --platform docker --command "hping3 -1 -c 4 127.0.0.1" --packages "hping3" ``` ### 捕获脚本 ``` ./scapture.sh --platform kubernetes --script ./exploit.sh --packages "wget curl netcat" ``` ### 仅捕获(跳过分析) ``` ./scapture.sh --platform docker --command "suspicious_cmd" --no-analysis ``` ## 选项 | 标志 | 描述 | |------|-------------| | `--command "CMD"` | 要执行并捕获的命令 | | `--script FILE` | 要执行并捕获的脚本文件 | | `--packages "pkg1 pkg2"` | 运行命令前要安装的软件包 | | `--no-analysis` | 跳过分析,仅生成 `.scap` 文件 | | `--platform kubernetes\|docker` | **必需**:目标平台 | ## 输出 ### 捕获文件 `.scap` 文件会保存在本地的 `scaps/` 目录中,文件名包含时间戳: ``` scaps/scapture-20260315-143022.scap ``` 典型大小:100 KB – 20 MB,具体取决于命令持续时间和 syscall 数量。文件在被复制后会从容器中删除。 ### 分析报告 捕获完成后,脚本会打印一份结构化的报告: **文件系统分析** - 运行期间创建的文件 - 访问最频繁的文件(前 30 个) **进程行为分析** - 父子进程树 - 可疑的衍生模式(例如 curl → bash) - 进程执行时间线 **增强型网络分析** - 带有风险评分(低/中/高)的协议分类 - 外部与内部连接 - 端口扫描检测 - 监听服务 ### 重新分析捕获内容 `.scap` 文件位于本地的 `scaps/` 目录中。要离线重新分析,请将其复制到正在运行的容器中: ``` # Kubernetes kubectl cp scaps/scapture-YYYYMMDD-HHMMSS.scap \ -n scapture deployment/scapture-deployment:/tmp/ kubectl exec deployment/scapture-deployment -n scapture -- \ sysdig -r /tmp/scapture-YYYYMMDD-HHMMSS.scap "evt.type=execve" \ -p "%proc.name %proc.cmdline" # Docker docker cp scaps/scapture-YYYYMMDD-HHMMSS.scap scapture-container:/tmp/ docker exec scapture-container \ sysdig -r /tmp/scapture-YYYYMMDD-HHMMSS.scap "evt.type=execve" \ -p "%proc.name %proc.cmdline" ``` ## 本地验证 在推送之前运行与 CI 相同的检查: ``` shellcheck --severity=warning scapture.sh yamllint -c .yamllint.yml scapture-deployment.yaml ``` ## 许可证 [MIT](LICENSE)
标签:AMSI绕过, Beacon Object File, Cutter, DAST, DevSecOps, Docker, Docker镜像, Falco, HTTP工具, IP 地址批量处理, Linux内核, SCAP文件, Web截图, 上游代理, 取证, 威胁检测, 子域名突变, 安全防御评估, 审计, 容器安全, 恶意软件分析, 提示词模板, 敏感词过滤, 文件访问监控, 沙箱, 系统调用捕获, 网络安全审计, 网络活动监控, 规则开发, 请求拦截