mcpField
S
sast-semgrep

sast-semgrep

github.com/agentsecops安全22838 次安装28 周前更新
代码仓库

关于 sast-semgrep

利用 Semgrep 执行静态应用安全测试的技能,面向开发与安全团队,可扫描代码并按严重性和 OWASP、CWE 分类发现。还提供修复指导、自定义规则及 CI/CD 集成示例。

主要功能

  1. 01扫描代码并按严重性分类
  2. 02映射 OWASP Top 10 与 CWE
  3. 03为变更文件执行定向扫描
  4. 04生成优先级修复建议
  5. 05创建并测试自定义规则
  6. 06输出 JSON 或 SARIF 结果

适用场景

  1. 01在提交或拉取请求中设安全门禁
  2. 02为代码库建立安全基线
  3. 03针对组织规范编写检测规则
  4. 04将扫描结果接入安全仪表板

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/agentsecops/secopsagentkit --skill sast-semgrep

安装后在 Claude Code 中输入/sast-semgrep确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

assets/
rule_template.yaml
semgrep_config.yaml
assets/ci_config_examples/
github-actions.yml
gitlab-ci.yml
jenkins.groovy
references/
owasp_cwe_mapping.md
remediation_guide.md
rule_library.md

详细介绍

使用 Semgrep 进行 SAST

概述

使用 Semgrep 这款快速、开源的静态分析工具,全面开展静态应用安全测试。此技能提供自动化漏洞检测、安全代码审查工作流,以及符合 OWASP Top 10 和 CWE 标准的修复指南。

快速入门

扫描代码库中的安全漏洞:

semgrep --config=auto --severity=ERROR --severity=WARNING /path/to/code

使用 OWASP Top 10 规则集运行:

semgrep --config="p/owasp-top-ten" /path/to/code

核心工作流

工作流 1:初始安全扫描
  1. 确定代码库中的主要语言
  2. 使用适当的规则集运行 scripts/semgrep_scan.py
  3. 解析扫描结果并按严重程度分类(CRITICAL、HIGH、MEDIUM、LOW)
  4. 将扫描结果映射到 OWASP Top 10 和 CWE 类别
  5. 生成按优先级排序的修复报告
工作流 2:安全代码审查
  1. 对于拉取请求或提交,针对已更改的文件运行定向扫描
  2. 使用 semgrep --diff 仅扫描修改过的代码
  3. 将高严重程度的扫描结果标记为阻塞问题
  4. 提供 references/remediation_guide.md 中的行内修复指南
  5. 将扫描结果关联到安全编码模式
工作流 3:自定义规则开发
  1. 确定要检测的组织特定安全模式
  2. 使用 assets/rule_template.yaml 以 YAML 格式创建自定义 Semgrep 规则
  3. 使用已知的易受攻击代码样例测试规则
  4. 将自定义规则集成到 CI/CD 工作流中
  5. 在 references/custom_rules.md 中记录规则
工作流 4:CI/CD 集成
  1. 使用 assets/ci_config_examples/ 将 Semgrep 添加到 CI/CD 工作流中
  2. 配置拉取请求的基线扫描
  3. 设置严重程度阈值(遇到 CRITICAL/HIGH 时失败)
  4. 生成 SARIF 输出,供安全仪表板使用
  5. 跟踪指标:发现的漏洞、修复率、误报数

安全注意事项

  • 敏感数据处理:Semgrep 在本地扫描代码;请确保扫描结果不会泄露机密或专有代码模式。使用 --max-lines-per-finding 限制输出。

  • 访问控制:Semgrep 扫描需要源代码的读取权限。请将扫描结果的访问权限限制为获授权的安全和开发团队成员。

  • 审计日志:记录所有扫描执行情况,包括时间戳、用户、提交哈希和扫描结果数量,以便进行合规审计。

  • 合规性:SAST 扫描有助于满足 SOC2、PCI-DSS 和 GDPR 合规要求。请保留扫描历史并跟踪修复情况。

  • 安全默认值:使用 --config=auto 进行均衡检测。对于安全关键型应用程序,使用 --config="p/security-audit" 以实现全面覆盖。

语言支持

Semgrep 支持 30 多种语言,包括:

  • Web:JavaScript、TypeScript、Python、Ruby、PHP、Java、C#、Go
  • 移动端:Swift、Kotlin、Java(Android)
  • 基础设施:Terraform、Dockerfile、YAML、JSON
  • 其他:C、C++、Rust、Scala、Solidity

捆绑资源

脚本
  • scripts/semgrep_scan.py - 功能全面的扫描,支持 OWASP/CWE 映射和报告
  • scripts/baseline_scan.sh - 用于 CI/CD 的快速基线扫描
  • scripts/diff_scan.sh - 仅扫描已更改文件(用于 PR)
参考资料
  • references/owasp_cwe_mapping.md - OWASP Top 10 到 CWE 的映射及 Semgrep 规则
  • references/remediation_guide.md - 按类别整理的漏洞修复模式
  • references/rule_library.md - 精选的实用 Semgrep 规则集列表
资源文件
  • assets/rule_template.yaml - 用于创建自定义 Semgrep 规则的模板
  • assets/ci_config_examples/ - CI/CD 集成示例(GitHub Actions、GitLab CI)
  • assets/semgrep_config.yaml - 推荐的 Semgrep 配置

常见模式

模式 1:每日安全基线扫描
# Run comprehensive scan and generate report
scripts/semgrep_scan.py --config security-audit \
  --output results.json \
  --format json \
  --severity HIGH CRITICAL
模式 2:拉取请求安全门禁
# Scan only changed files, fail on HIGH/CRITICAL
scripts/diff_scan.sh --fail-on high \
  --base-branch main \
  --output sarif
模式 3:漏洞研究
# Search for specific vulnerability patterns
semgrep --config "r/javascript.lang.security.audit.xss" \
  --json /path/to/code | jq '.results'
模式 4:自定义规则验证
# Test custom rule against vulnerable samples
semgrep --config assets/custom_rules.yaml \
  --test tests/vulnerable_samples/

集成点

CI/CD 集成
  • GitHub Actions:使用 semgrep/semgrep-action@v1 并上传 SARIF
  • GitLab CI:作为安全扫描作业运行,并生成制品报告
  • Jenkins:作为构建步骤执行,并集成质量门禁
  • pre-commit hooks:对暂存文件运行轻量级扫描

请参阅 assets/ci_config_examples/,获取可直接使用的配置。

安全工具集成
  • SIEM/SOAR:以 JSON/SARIF 格式导出发现项,供系统摄取
  • 漏洞管理:与 Jira、DefectDojo 或 ThreadFix 集成
  • IDE 集成:使用 Semgrep IDE 插件进行实时检测
  • 密钥扫描:与 trufflehog、gitleaks 等工具结合使用
SDLC 集成
  • 需求阶段:定义安全要求和自定义规则
  • 开发阶段:IDE 插件提供实时反馈
  • 代码审查:在 PR 工作流中自动进行安全审查
  • 测试阶段:与安全测试框架集成
  • 部署阶段:上线前的最终安全门禁

严重性分类

Semgrep 发现项按严重性分类:

  • CRITICAL:可利用的漏洞(SQLi、RCE、身份验证绕过)
  • HIGH:重大安全风险(XSS、CSRF、敏感数据泄露)
  • MEDIUM:安全弱点(弱加密、缺少验证)
  • LOW:具有安全影响的代码质量问题
  • INFO:安全最佳实践建议

性能优化

对于大型代码库:

# Use --jobs for parallel scanning
semgrep --config auto --jobs 4

# Exclude vendor/test code
semgrep --config auto --exclude "vendor/" --exclude "test/"

# Use lightweight rulesets for faster feedback
semgrep --config "p/owasp-top-ten" --exclude-rule "generic.*"

故障排除

问题:误报过多

解决方案:

  • 使用 --exclude-rule 禁用噪声较多的规则
  • 创建 .semgrepignore 文件,排除误报模式
  • 使用 --severity 筛选调整规则
  • 对已确认的误报添加 # nosemgrep 注释(并说明理由)
问题:扫描耗时过长

解决方案:

  • 对供应商代码或生成的代码使用 --exclude
  • 增大 --jobs 值以并行处理
  • 使用有针对性的规则集,而不是 --config=auto
  • 使用 --diff 运行增量扫描
问题:遗漏漏洞

解决方案:

  • 使用全面的规则集:p/security-audit 或 p/owasp-top-ten
  • 查看 references/rule_library.md 中的专用规则
  • 为组织特有的模式创建自定义规则
  • 与动态分析(DAST)和依赖项扫描结合使用

高级用法

创建自定义规则

有关编写有效 Semgrep 规则的指南,请参阅 references/rule_library.md。 使用 assets/rule_template.yaml 作为起点。

规则结构示例:

rules:
  - id: custom-sql-injection
    patterns:
      - pattern: execute($QUERY)
      - pattern-inside: |
          $QUERY = $USER_INPUT + ...
    message: Potential SQL injection from user input concatenation
    severity: ERROR
    languages: [python]
    metadata:
      cwe: "CWE-89"
      owasp: "A03:2021-Injection"
OWASP Top 10 覆盖范围

此技能可检测 OWASP Top 10 2021 的所有类别。 完整的覆盖范围矩阵请参阅 references/owasp_cwe_mapping.md。

最佳实践

  1. 先建立基线:在启用门禁前建立安全基线
  2. 逐步推广:先从 HIGH/CRITICAL 开始,之后逐步扩展到 MEDIUM
  3. 开发人员培训:向团队讲解常见漏洞及其修复方法
  4. 规则维护:定期更新规则集,并根据技术栈进行调整
  5. 指标跟踪:监控漏洞趋势、MTTR 和误报率
  6. 纵深防御:结合 DAST、SCA 和人工代码审查

参考资料

评论

支持 Markdown