关于 sast-semgrep
利用 Semgrep 执行静态应用安全测试的技能,面向开发与安全团队,可扫描代码并按严重性和 OWASP、CWE 分类发现。还提供修复指导、自定义规则及 CI/CD 集成示例。
主要功能
- 01扫描代码并按严重性分类
- 02映射 OWASP Top 10 与 CWE
- 03为变更文件执行定向扫描
- 04生成优先级修复建议
- 05创建并测试自定义规则
- 06输出 JSON 或 SARIF 结果
适用场景
- 01在提交或拉取请求中设安全门禁
- 02为代码库建立安全基线
- 03针对组织规范编写检测规则
- 04将扫描结果接入安全仪表板
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ agentsecops/ secopsagentkit --skill sast-semgrep安装后在 Claude Code 中输入/sast-semgrep确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/rule_template.yamlsemgrep_config.yamlassets/ci_config_examples/github-actions.ymlgitlab-ci.ymljenkins.groovyreferences/owasp_cwe_mapping.mdremediation_guide.mdrule_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:初始安全扫描
- 确定代码库中的主要语言
- 使用适当的规则集运行
scripts/semgrep_scan.py - 解析扫描结果并按严重程度分类(CRITICAL、HIGH、MEDIUM、LOW)
- 将扫描结果映射到 OWASP Top 10 和 CWE 类别
- 生成按优先级排序的修复报告
工作流 2:安全代码审查
- 对于拉取请求或提交,针对已更改的文件运行定向扫描
- 使用
semgrep --diff仅扫描修改过的代码 - 将高严重程度的扫描结果标记为阻塞问题
- 提供
references/remediation_guide.md中的行内修复指南 - 将扫描结果关联到安全编码模式
工作流 3:自定义规则开发
- 确定要检测的组织特定安全模式
- 使用
assets/rule_template.yaml以 YAML 格式创建自定义 Semgrep 规则 - 使用已知的易受攻击代码样例测试规则
- 将自定义规则集成到 CI/CD 工作流中
- 在
references/custom_rules.md中记录规则
工作流 4:CI/CD 集成
- 使用
assets/ci_config_examples/将 Semgrep 添加到 CI/CD 工作流中 - 配置拉取请求的基线扫描
- 设置严重程度阈值(遇到 CRITICAL/HIGH 时失败)
- 生成 SARIF 输出,供安全仪表板使用
- 跟踪指标:发现的漏洞、修复率、误报数
安全注意事项
-
敏感数据处理: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。
最佳实践
- 先建立基线:在启用门禁前建立安全基线
- 逐步推广:先从 HIGH/CRITICAL 开始,之后逐步扩展到 MEDIUM
- 开发人员培训:向团队讲解常见漏洞及其修复方法
- 规则维护:定期更新规则集,并根据技术栈进行调整
- 指标跟踪:监控漏洞趋势、MTTR 和误报率
- 纵深防御:结合 DAST、SCA 和人工代码审查