静态应用安全测试(SAST)工具Skill sast-semgrep

本技能是一个基于Semgrep的静态应用安全测试(SAST)解决方案,专为开发和安全团队设计。它提供自动化代码漏洞扫描、安全代码审查、OWASP Top 10与CWE框架映射、修复指导以及CI/CD流水线集成。核心功能包括多语言漏洞检测、模式化安全审查、自定义规则开发、合规性支持(如SOC2、PCI-DSS)和性能优化扫描。适用于提升软件开发生命周期(SDLC)中的安全性,实现左移安全(Shift-Left Security)。关键词:静态应用安全测试 SAST,Semgrep,代码安全扫描,漏洞检测,OWASP Top 10,CWE,安全代码审查,CI/CD安全,DevSecOps,应用程序安全。

安全审计 0 次安装 2 次浏览 更新于 3/1/2026

name: sast-semgrep description: > 使用Semgrep进行静态应用程序安全测试(SAST),用于漏洞检测、安全代码审查和基于OWASP及CWE框架的安全编码指导。 使用场景:(1)跨多种语言扫描代码中的安全漏洞,(2)使用基于模式的检测进行安全代码审查,(3)将SAST检查集成到CI/CD流水线中,(4)提供映射到OWASP Top 10和CWE的修复指导,(5)为组织特定模式创建自定义安全规则,(6)分析依赖项中的已知漏洞。 version: 0.1.0 maintainer: SirAppSec category: appsec tags: [sast, semgrep, 漏洞扫描, 代码安全, owasp, cwe, 安全审查] frameworks: [OWASP, CWE, SANS-25] dependencies: python: “>=3.8” packages: [semgrep] tools: [git] references:


使用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 - 带有Semgrep规则的OWASP Top 10到CWE映射
  • 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:每日安全基线扫描

# 运行全面扫描并生成报告
scripts/semgrep_scan.py --config security-audit \
  --output results.json \
  --format json \
  --severity HIGH CRITICAL

模式2:拉取请求安全门

# 仅扫描更改的文件,在HIGH/CRITICAL时失败
scripts/diff_scan.sh --fail-on high \
  --base-branch main \
  --output sarif

模式3:漏洞研究

# 搜索特定的漏洞模式
semgrep --config "r/javascript.lang.security.audit.xss" \
  --json /path/to/code | jq '.results'

模式4:自定义规则验证

# 针对易受攻击的样本测试自定义规则
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:安全最佳实践建议

性能优化

对于大型代码库:

# 使用 --jobs 进行并行扫描
semgrep --config auto --jobs 4

# 排除供应商/测试代码
semgrep --config auto --exclude "vendor/" --exclude "test/"

# 使用轻量级规则集以获得更快的反馈
semgrep --config "p/owasp-top-ten" --exclude-rule "generic.*"

故障排除

问题:误报过多

解决方案

  • 使用 --exclude-rule 禁用嘈杂的规则
  • 创建 .semgrepignore 文件以排除误报模式
  • 使用 --severity 过滤调整规则
  • 为确认的误报添加 # nosemgrep 注释(需提供理由)

问题:扫描时间过长

解决方案

  • 对供应商/生成的代码使用 --exclude
  • 增加 --jobs 以进行并行处理
  • 使用针对性规则集而非 --config=auto
  • 使用 --diff 运行增量扫描

问题:遗漏漏洞

解决方案

  • 使用全面的规则集:p/security-auditp/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: 来自用户输入拼接的潜在SQL注入
    severity: ERROR
    languages: [python]
    metadata:
      cwe: "CWE-89"
      owasp: "A03:2021-注入"

OWASP Top 10覆盖范围

此技能提供对所有OWASP Top 10 2021类别的检测。 有关完整的覆盖矩阵,请参阅 references/owasp_cwe_mapping.md

最佳实践

  1. 先建立基线:在强制执行门控之前建立安全基线
  2. 渐进式推出:从HIGH/CRITICAL开始,随时间推移扩展到MEDIUM
  3. 开发人员培训:教育团队了解常见漏洞和修复方法
  4. 规则维护:定期更新规则集并根据您的技术栈进行调整
  5. 指标跟踪:监控漏洞趋势、平均修复时间和误报率
  6. 深度防御:与DAST、SCA和手动代码审查相结合

参考资料