SuperAPI AI 工具集

sast-scanning

安全与审计

查看项目

更新于 10-15 12:44

技能介绍

用途

本技能用于通过静态分析在源代码中识别安全漏洞。适用于以下场景:

  • 实施安全的 SDLC(软件开发生命周期)实践
  • 向 CI/CD 中添加安全门禁
  • 自动化代码安全审查
  • 在部署前发现漏洞
  • 满足合规要求

前置条件

  • 源代码访问权限
  • CI/CD 流水线
  • 安装 SAST 工具

主要能力

该技能涵盖多种静态应用程序安全测试工具的使用方法,并提供工具对比:

工具 许可证 语言支持 最佳用途
Semgrep OSS/商业 30+ 自定义规则、速度
CodeQL 免费(GitHub) 10+ 深度分析
SonarQube OSS/商业 25+ 质量 + 安全
Bandit OSS Python Python 项目
Brakeman OSS Ruby Rails 应用

Semgrep

安装方式:

# 通过 pip 安装
pip install semgrep

# 或通过 Homebrew
brew install semgrep

基础用法:

# 使用默认规则运行
semgrep --config auto .

# 运行指定规则集
semgrep --config p/security-audit .
semgrep --config p/owasp-top-ten .
semgrep --config p/ci .

# 扫描指定语言
semgrep --config p/python .
semgrep --config p/javascript .

# 输出格式
semgrep --config auto --json -o results.json .
semgrep --config auto --sarif -o results.sarif .

支持自定义规则,示例包括硬编码密码检测、SQL 注入检测和不安全随机数检测,规则中可关联 CWE 和 OWASP 元数据,并支持自动修复建议(fix 字段)。

CI 配置示例(GitHub Actions)使用 returntocorp/semgrep 容器并执行 semgrep ci。

CodeQL

提供完整的 GitHub Actions 工作流配置,包含初始化 CodeQL、自动构建和执行分析步骤,支持多语言矩阵策略,可添加 security-and-quality 查询集。

支持自定义查询,示例为使用数据流和污点跟踪进行 Python SQL 注入检测的 .ql 查询文件。

SonarQube

提供 Docker Compose 配置,包含 SonarQube 服务和 PostgreSQL 数据库服务。

扫描器配置示例(sonar-project.properties)涵盖项目键、名称、版本、源码目录、测试目录、排除项、语言设置、覆盖率报告路径以及质量门禁等待选项。

CI 集成示例使用 sonarsource/sonarqube-scan-action 和 sonarsource/sonarqube-quality-gate-action。

特定语言工具

Python (Bandit):

# 安装
pip install bandit

# 运行扫描
bandit -r src/ -f json -o bandit-report.json

# 使用配置
bandit -r src/ -c bandit.yaml

支持配置文件(如跳过指定检查编号、排除目录、对 assert 使用的跳过设置)。

JavaScript (ESLint Security):

npm install eslint eslint-plugin-security --save-dev

提供 .eslintrc.js 配置示例,启用 plugin:security/recommended 并配置多项安全规则(如对象注入检测、非字面量正则检测、不安全正则检测、缓冲区无断言检测、带表达式 eval 检测、方法覆盖前无 CSRF 检测、可能的时序攻击检测等)。

Ruby (Brakeman):

# 安装
gem install brakeman

# 运行扫描
brakeman -o brakeman-report.json -f json

# CI 配置
brakeman --no-exit-on-warn --no-exit-on-error -o report.html

质量门禁

提供 SonarQube 质量门禁的 JSON 定义示例,涵盖新代码安全评级、新漏洞数、新安全热点审查率等条件。

提供自定义门禁脚本(bash)示例,使用 jq 统计结果中 critical 和 high 级别漏洞数量,并根据阈值决定通过或失败。

使用方式

  1. 根据项目语言和需求选择合适的 SAST 工具
  2. 安装工具并配置扫描规则(可使用内置规则集或自定义规则)
  3. 在本地或 CI/CD 中执行扫描
  4. 设置质量门禁,根据漏洞严重程度决定是否阻断流水线
  5. 定期运行并跟踪趋势

常见问题与解决方案

  • 误报过多:调整规则、添加抑制、使用基线
  • 扫描缓慢:增量扫描、并行执行、排除测试文件
  • 覆盖不全:添加自定义规则、组合多个工具

最佳实践

  • 在每个 PR/提交上运行
  • 为现有代码建立基线
  • 按严重程度和可利用性排序
  • 为代码库维护自定义规则
  • 与 IDE 集成以获得早期反馈
  • 跟踪长期趋势
  • 记录误报抑制
  • 与 DAST 结合实现全面覆盖

相关技能

  • dast-scanning:动态测试
  • dependency-scanning:依赖漏洞
  • github-actions:CI 集成