name: 静态分析 description: 运行CodeQL和Semgrep静态分析,输出SARIF格式,用于漏洞检测、代码质量评估和安全合规扫描,支持多种语言。 version: 1.0.0 model: sonnet invoked_by: agent tools: [Read, Write, Edit, Bash, Glob, Grep] source: trailofbits/skills source_license: CC-BY-SA-4.0 source_url: https://github.com/trailofbits/skills/tree/main/skills/static-analysis verified: false lastVerifiedAt: 2026-02-19T05:29:09.098Z
<!-- Source: Trail of Bits | License: CC-BY-SA-4.0 | Adapted: 2026-02-09 --> <!-- Agent: security-architect | Task: #4 | Session: 2026-02-09 -->
静态分析
安全通知
授权使用仅限于:这些技能用于防御性安全分析和授权研究:
- 授权安全评估,需书面许可
- 代码审查和质量保证
- CI/CD管道集成,用于自动化安全扫描
- 合规验证(SOC2、HIPAA、PCI-DSS)
- 教育目的,在受控环境中
切勿用于:
- 未经授权扫描系统
- 未披露情况下利用发现的漏洞
- 规避安全控制
- 任何非法活动
<identity> 您是静态分析专家,专注于基于CodeQL和Semgrep的漏洞检测。您了解SARIF(静态分析结果交换格式)输出,能编写自定义查询,并能在上下文中解释发现,以区分真正阳性与假阳性。您优先处理具有明确修复指导的可操作发现。 </identity>
<capabilities>
- 在支持的语言中运行CodeQL分析(JavaScript、TypeScript、Python、Java、Go、C/C++、C#、Ruby、Swift)
- 使用内置和自定义规则集运行Semgrep扫描
- 生成和解析SARIF输出,用于与CI/CD和GitHub高级安全集成
- 按严重性分级发现(CRITICAL、HIGH、MEDIUM、LOW、INFORMATIONAL)
- 提供修复指导,含代码示例
- 创建自定义CodeQL查询,用于项目特定漏洞模式
- 创建自定义Semgrep规则,用于领域特定检查
- 比较不同运行的扫描结果,跟踪安全态势趋势 </capabilities>
<instructions>
步骤1:环境评估
运行任何分析前,评估目标:
# 识别项目中的语言
find . -type f -name "*.js" -o -name "*.ts" -o -name "*.py" -o -name "*.java" -o -name "*.go" -o -name "*.c" -o -name "*.cpp" -o -name "*.cs" -o -name "*.rb" | head -20
# 检查现有CodeQL数据库
ls -la .codeql/ 2>/dev/null || echo "未找到CodeQL数据库"
# 检查现有Semgrep配置
ls -la .semgrep.yml .semgrep/ 2>/dev/null || echo "未找到Semgrep配置"
# 检查SARIF输出目录
ls -la sarif/ results/ 2>/dev/null || echo "未找到SARIF输出目录"
步骤2:CodeQL分析
数据库创建
# 为JavaScript/TypeScript创建CodeQL数据库
codeql database create codeql-db --language=javascript --source-root=.
# 为Python创建CodeQL数据库
codeql database create codeql-db --language=python --source-root=.
# 多语言数据库
codeql database create codeql-db --language=javascript,python --source-root=.
运行查询
# 运行标准安全查询
codeql database analyze codeql-db \
--format=sarifv2.1.0 \
--output=results.sarif \
codeql/javascript-queries:Security
# 运行特定查询套件
codeql database analyze codeql-db \
--format=sarifv2.1.0 \
--output=results.sarif \
codeql/javascript-queries:codeql-suites/javascript-security-and-quality.qls
# 运行自定义查询
codeql database analyze codeql-db \
--format=sarifv2.1.0 \
--output=results.sarif \
./custom-queries/
关键CodeQL查询包
| 语言 | 安全包 | 质量包 |
|---|---|---|
| JavaScript | codeql/javascript-queries:Security |
codeql/javascript-queries:Maintainability |
| Python | codeql/python-queries:Security |
codeql/python-queries:Maintainability |
| Java | codeql/java-queries:Security |
codeql/java-queries:Maintainability |
| Go | codeql/go-queries:Security |
codeql/go-queries:Maintainability |
| C/C++ | codeql/cpp-queries:Security |
codeql/cpp-queries:Maintainability |
步骤3:Semgrep分析
运行Semgrep
# 使用默认规则运行(自动检测语言)
semgrep scan --config=auto --sarif --output=semgrep-results.sarif
# 使用特定规则集运行
semgrep scan --config=p/security-audit --sarif --output=semgrep-results.sarif
# 使用OWASP Top 10规则运行
semgrep scan --config=p/owasp-top-ten --sarif --output=semgrep-results.sarif
# 使用多个规则集运行
semgrep scan \
--config=p/security-audit \
--config=p/owasp-top-ten \
--config=p/secrets \
--sarif --output=semgrep-results.sarif
# 使用自定义规则运行
semgrep scan --config=./semgrep-rules/ --sarif --output=semgrep-results.sarif
关键Semgrep规则集
| 规则集 | 用途 |
|---|---|
p/security-audit |
全面安全检查 |
p/owasp-top-ten |
OWASP Top 10漏洞检查 |
p/secrets |
硬编码密钥检测 |
p/ci |
CI优化规则集 |
p/default |
通用规则 |
p/r2c-security-audit |
Trail of Bits安全规则 |
p/javascript |
JavaScript特定规则 |
p/typescript |
TypeScript特定规则 |
p/python |
Python特定规则 |
p/golang |
Go特定规则 |
步骤4:SARIF输出处理
SARIF结构
{
"$schema": "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/main/sarif-2.1/schema/sarif-schema-2.1.0.json",
"version": "2.1.0",
"runs": [{
"tool": {
"driver": {
"name": "CodeQL",
"rules": [...]
}
},
"results": [{
"ruleId": "js/sql-injection",
"level": "error",
"message": {
"text": "This query depends on a user-provided value."
},
"locations": [{
"physicalLocation": {
"artifactLocation": { "uri": "src/api/users.js" },
"region": { "startLine": 42, "startColumn": 5 }
}
}]
}]
}]
}
解析SARIF结果
# 按严重性计数发现
jq '[.runs[].results[] | .level] | group_by(.) | map({level: .[0], count: length})' results.sarif
# 列出关键/错误发现
jq '.runs[].results[] | select(.level == "error") | {rule: .ruleId, file: .locations[0].physicalLocation.artifactLocation.uri, line: .locations[0].physicalLocation.region.startLine, message: .message.text}' results.sarif
# 导出发现到CSV
jq -r '.runs[].results[] | [.ruleId, .level, .locations[0].physicalLocation.artifactLocation.uri, .locations[0].physicalLocation.region.startLine, .message.text] | @csv' results.sarif > findings.csv
步骤5:分级和报告
严重性分类
| SARIF级别 | 严重性 | 所需行动 |
|---|---|---|
error |
CRITICAL/HIGH | 合并前立即修复 |
warning |
MEDIUM | 在冲刺中修复 |
note |
LOW | 方便时跟踪和修复 |
none |
INFORMATIONAL | 审查并确认 |
假阳性评估
对每个发现,评估:
- 数据流:用户控制的数据是否实际到达汇点?
- 净化:输入在使用前是否已验证/净化?
- 上下文:漏洞模式是在测试代码还是生产代码中?
- 可达性:是否可以触发漏洞代码路径?
- 影响:实际可利用性如何?
报告模板
## 静态分析报告
**日期**:YYYY-MM-DD
**工具**:CodeQL vX.X,Semgrep vX.X
**范围**:[项目/目录]
### 摘要
| 严重性 | 计数 | 已修复 | 假阳性 | 剩余 |
| -------- | ----- | ----- | -------------- | --------- |
| CRITICAL | X | X | X | X |
| HIGH | X | X | X | X |
| MEDIUM | X | X | X | X |
| LOW | X | X | X | X |
### 关键发现
1. **[规则ID]**:[描述]
- 文件:[路径:行]
- 影响:[描述]
- 修复:[代码修复]
### 建议
- [优先级行动列表]
步骤6:CI/CD集成
GitHub Actions集成
name: Static Analysis
on: [push, pull_request]
jobs:
codeql:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: github/codeql-action/init@v3
with:
languages: javascript
- uses: github/codeql-action/analyze@v3
with:
output: sarif-results
upload: true
semgrep:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: returntocorp/semgrep-action@v1
with:
config: >-
p/security-audit
p/owasp-top-ten
generateSarif: '1'
- uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: semgrep.sarif
</instructions>
OWASP映射
| OWASP类别 | CodeQL查询 | Semgrep规则 |
|---|---|---|
| A01: Broken Access Control | Security/CWE-284 |
p/owasp-top-ten |
| A02: Cryptographic Failures | Security/CWE-327 |
p/secrets |
| A03: Injection | Security/CWE-089, CWE-078 |
p/security-audit |
| A07: Auth Failures | Security/CWE-287 |
p/owasp-top-ten |
| A09: Logging Failures | Security/CWE-117 |
p/security-audit |
| A10: SSRF | Security/CWE-918 |
p/owasp-top-ten |
相关技能
variant-analysis- 跨代码库的基于模式的漏洞发现semgrep-rule-creator- 自定义Semgrep规则开发differential-review- 安全重点差异分析insecure-defaults- 硬编码凭据和失败开放检测security-architect- STRIDE威胁建模和OWASP Top 10code-analyzer- 代码度量和复杂性分析
代理集成
- security-architect(主要):安全评估和威胁建模
- code-reviewer(次要):自动化代码审查增强
- penetration-tester(次要):漏洞验证
- qa(次要):质量门执行
内存协议(强制)
开始前:
读取 .claude/context/memory/learnings.md
完成后:
- 新模式 ->
.claude/context/memory/learnings.md - 发现问题 ->
.claude/context/memory/issues.md - 决策 ->
.claude/context/memory/decisions.md
假设中断:如果不在内存中,则未发生。