跳到主要内容

Docker 沙箱扫描

在隔离的 Docker 环境中运行安全扫描以最大化安全性。

为什么使用沙箱?

保护您的主机系统免受潜在恶意代码的侵害:

  • 隔离执行 - 代码在容器化环境中运行
  • 资源限制 - CPU、内存和时间限制
  • 网络隔离 - 无外部网络访问
  • 只读文件系统 - 无法修改主机文件
  • 增强扫描 - 使用外部工具(Trivy、Checkov、GitLeaks)

设置

从 Docker Hub 拉取(推荐)

docker pull ongjin/security-scanner-mcp:latest
docker tag ongjin/security-scanner-mcp:latest security-scanner-mcp:latest

或从源代码构建

npm run docker:build

注意:构建需要 5-10 分钟并创建约 500MB 的镜像,包含:

  • Trivy v0.50.4
  • GitLeaks v8.18.4
  • Checkov(基于 Python)

用法

基本沙箱扫描

我:在沙箱中扫描此代码

const apiKey = "AIzaSyC1234567890abcdef";
const query = `SELECT * FROM users WHERE id = ${userId}`;

Claude 将调用 scan-in-sandbox 它:

  1. 将代码写入临时文件
  2. 启动 Docker 容器
  3. 在容器内运行所有扫描工具
  4. 以 JSON 格式返回结果
  5. 清理容器

扫描不受信任的代码

我:此代码看起来可疑,请安全地扫描它

[粘贴可能的恶意代码]

安全配置

默认设置

内存限制:512MB
CPU 限制:0.5 核心
超时:30 秒
网络:禁用
文件系统:只读(除 /tmp)
能力:已删除(no-new-privileges)

可自定义的选项

您可以通过环境变量调整这些:

SANDBOX_MEMORY=1g \
SANDBOX_CPU=1.0 \
SANDBOX_TIMEOUT=60000 \
scan-in-sandbox

沙箱中可用的扫描工具

内置扫描工具

  • 密钥检测
  • SQL/NoSQL/命令注入
  • XSS 漏洞
  • 密码学问题
  • 身份验证问题
  • 路径穿越

外部工具(Docker 仅)

  • GitLeaks:增强的密钥检测,包含熵分析
  • Trivy:IaC 和容器漏洞扫描
  • Checkov:基础设施即代码安全分析

Docker 容器详情

基础镜像

FROM node:20-alpine

安全加固

# 非 root 用户
RUN addgroup -g 1001 scanner && \
adduser -D -u 1001 -G scanner scanner

# 只读根文件系统
# 没有新特权
# 已删除的能力
# 网络已禁用

已安装的工具

# 验证工具已安装
docker run security-scanner-mcp:latest sh -c "
trivy --version &&
gitleaks version &&
checkov --version
"

结果格式

沙箱扫描返回综合 JSON:

{
"success": true,
"language": "javascript",
"filename": "code.js",
"issuesCount": 3,
"issues": [
{
"type": "Google API Key",
"severity": "critical",
"message": "Google API Key is hardcoded",
"fix": "Use environment variables",
"line": 1,
"metadata": {
"tool": "gitleaks",
"ruleId": "google-api-key",
"entropy": 4.2
}
}
],
"summary": {
"critical": 1,
"high": 1,
"medium": 1,
"low": 0
}
}

性能考虑

容器启动

  • 首次运行:~2-3 秒(冷启动)
  • 后续运行:~1 秒(缓存)

扫描持续时间

  • 小文件(100 行以下):少于 5 秒
  • 中等文件(100-500 行):5-15 秒
  • 大文件(500 行以上):15-30 秒

资源使用

  • 内存:每次扫描约 100-200MB
  • CPU:最小(0.1-0.5 核心)
  • 磁盘:临时文件自动清理

故障排除

找不到容器

# 检查镜像是否存在
docker images | grep security-scanner-mcp

# 如果缺少则拉取
docker pull ongjin/security-scanner-mcp:latest

权限被拒绝

# 将用户添加到 docker 组
sudo usermod -aG docker $USER

# 重启 shell

超时问题

# 增加超时时间(毫秒)
SANDBOX_TIMEOUT=60000 scan-in-sandbox

最佳实践

  1. 用于不受信任的代码:始终扫描来自未知源的代码
  2. 定期镜像更新:每月拉取最新安全更新
  3. 监控资源使用:用限制防止滥用
  4. 清理:容器自动删除,但定期检查
  5. 网络隔离:保持网络禁用,除非需要

高级配置

自定义 Docker 镜像

FROM security-scanner-mcp:latest

# 添加自定义扫描工具
RUN pip3 install custom-scanner

# 添加自定义规则
COPY custom-rules.yaml /app/rules/

CI/CD 集成

# GitHub Actions 示例
- name: Scan Code in Sandbox
run: |
docker pull ongjin/security-scanner-mcp:latest
docker run --rm \
-v ${{ github.workspace }}:/code:ro \
security-scanner-mcp:latest \
scan /code

下一步