name: security-scan description: 快速例行的安全检查,用于检测秘密、依赖项、容器镜像和常见漏洞。在开发期间频繁运行。触发词:安全扫描、SAST、DAST、漏洞扫描、依赖扫描、容器扫描、秘密扫描、凭证扫描、快速扫描、秘密检查、漏洞检查、安全检查、预提交安全、例行安全、Snyk、Trivy、Semgrep、CodeQL、Bandit、safety、npm audit、cargo audit、gitleaks、trufflehog、govulncheck、pip-audit。 allowed-tools: Read, Grep, Glob, Bash
安全扫描
概述
本技能提供快速、例行的安全检查,应在开发期间频繁运行。这些是轻量级扫描,旨在早期捕捉常见问题,而非全面审计。
工具选择矩阵
| 扫描类型 | 最佳工具 | 替代工具 | 用途 |
|---|---|---|---|
| 秘密 | TruffleHog | Gitleaks | 硬编码凭证、API密钥 |
| 依赖项 (JS) | npm audit | Snyk, OWASP | 包中的已知CVE |
| 依赖项 (Python) | pip-audit | safety | PyPI漏洞数据库 |
| 依赖项 (Go) | govulncheck | nancy | 官方Go漏洞DB |
| 依赖项 (Rust) | cargo audit | - | RustSec咨询DB |
| 容器镜像 | Trivy | Grype, Snyk | 镜像漏洞、秘密 |
| SAST (多语言) | Semgrep | CodeQL | 安全反模式 |
| SAST (Python) | Bandit | Semgrep | Python特定问题 |
| SAST (Go) | gosec | Semgrep | Go特定问题 |
| Dockerfile | hadolint | Trivy config | 最佳实践、错误配置 |
| IaC (Terraform) | tfsec | Checkov, Trivy | Terraform错误配置 |
| IaC (K8s) | kubesec | Trivy, Checkov | Kubernetes YAML安全 |
使用时机
- 提交前: 快速检查秘密和明显问题
- PR审核期间: 验证未引入新漏洞
- 定期间隔: 每日/每周自动检查
- 依赖项更新后: 验证无新CVE
- 快速健全性检查: 开发期间的快速验证
对于全面的安全工作,使用security-audit技能或升级到具有/security-audit和/threat-model技能的senior-software-engineer代理。
快速扫描检查清单
按优先级顺序运行这些检查:
1. 秘密检测 (关键)
目标: 在版本控制前找到硬编码凭证、API密钥、令牌和私钥。
# 使用grep模式检查硬编码秘密
# API密钥
grep -rn --include="*.{js,ts,py,go,java,rb,php}" \
-E "(api[_-]?key|apikey)\s*[:=]\s*['\"][a-zA-Z0-9]{16,}" .
# AWS凭证
grep -rn --include="*.{js,ts,py,go,java,rb,php,env,yaml,yml,json}" \
-E "(AKIA|ABIA|ACCA|ASIA)[A-Z0-9]{16}" .
# 私钥
grep -rn --include="*.{pem,key,env}" \
-E "-----BEGIN (RSA |EC |DSA |OPENSSH )?PRIVATE KEY-----" .
# 通用秘密
grep -rn --include="*.{js,ts,py,go,java,rb,php}" \
-E "(password|secret|token)\s*[:=]\s*['\"][^'\"]{8,}" .
更好: 使用专用工具
# TruffleHog (推荐)
trufflehog filesystem --directory=. --only-verified --no-update
# GitLeaks
gitleaks detect --source=. --no-git
# git-secrets (如已安装)
git secrets --scan
2. 依赖项漏洞 (高)
目标: 跨包生态系统识别直接和传递依赖项中的已知CVE。
# Node.js
npm audit --audit-level=high
# 或
yarn audit --level high
# Python
pip-audit
# 或
safety check
# Go
govulncheck ./...
# Rust
cargo audit
# Ruby
bundle audit check --update
# .NET
dotnet list package --vulnerable --include-transitive
# 多生态系统 (Snyk - 需要账户)
snyk test --severity-threshold=high
# OWASP Dependency-Check (慢但全面)
dependency-check --scan . --failOnCVSS 7
3. 容器镜像扫描 (高)
目标: 扫描Docker镜像的漏洞、错误配置和嵌入秘密。
# Trivy (推荐 - 快速、全面)
trivy image --severity HIGH,CRITICAL myimage:latest
trivy image --scanners vuln,secret,config myimage:latest
# Grype (Anchore)
grype myimage:latest --only-fixed
# Snyk Container
snyk container test myimage:latest --severity-threshold=high
# Docker Scout (Docker Desktop)
docker scout cves myimage:latest --only-severity critical,high
# Clair (需要服务器)
clairctl analyze myimage:latest
# 构建前扫描Dockerfile
hadolint Dockerfile
trivy config --severity HIGH,CRITICAL Dockerfile
4. 快速静态分析 (中)
目标: 使用SAST工具检测安全反模式和常见漏洞类。
# 多语言用Semgrep (快速默认)
semgrep --config=p/security-audit --config=p/secrets .
# 仅Python
bandit -r . -ll # 仅高严重性
# JavaScript/TypeScript
npx eslint . --ext .js,.ts --no-eslintrc \
--plugin security --rule 'security/detect-object-injection: error'
# Go
gosec -severity high ./...
# CodeQL (需要GitHub设置)
codeql database create codeql-db --language=javascript
codeql database analyze codeql-db --format=sarif-latest --output=results.sarif
# SonarQube (需要服务器)
sonar-scanner -Dsonar.projectKey=myproject
5. 配置检查 (中)
目标: 验证基础设施即代码和配置文件的安全性错误配置。
# Docker
hadolint Dockerfile
# Terraform
tfsec . --minimum-severity HIGH
# Kubernetes
kubesec scan deployment.yaml
# 通用配置
checkov -f config.yaml --check HIGH
预提交钩子设置
添加到.pre-commit-config.yaml:
repos:
- repo: https://github.com/trufflesecurity/trufflehog
rev: v3.63.0
hooks:
- id: trufflehog
entry: trufflehog filesystem --no-update --fail --only-verified
args: ["--directory=."]
- repo: https://github.com/zricethezav/gitleaks
rev: v8.18.0
hooks:
- id: gitleaks
- repo: https://github.com/returntocorp/semgrep
rev: v1.52.0
hooks:
- id: semgrep
args: ["--config=p/secrets", "--error"]
工具安装快速参考
# 秘密扫描
brew install trufflesecurity/trufflehog/trufflehog
brew install gitleaks
# 依赖项扫描
npm install -g npm-audit
pip install pip-audit safety
go install golang.org/x/vuln/cmd/govulncheck@latest
cargo install cargo-audit
# 容器扫描
brew install trivy
brew install anchore/grype/grype
# SAST
brew install semgrep
pip install bandit
go install github.com/securego/gosec/v2/cmd/gosec@latest
# 基础设施扫描
brew install hadolint tfsec
CI/CD集成
GitHub Actions (推荐)
name: Security Scan
on:
push:
branches: [main]
pull_request:
jobs:
security-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Secret Scan
uses: trufflesecurity/trufflehog@main
with:
extra_args: --only-verified
- name: Dependency Scan
run: |
npm audit --audit-level=high || true
# 根据需要添加其他包管理器
- name: SAST
uses: returntocorp/semgrep-action@v1
with:
config: p/security-audit p/secrets
- name: Container Scan
uses: aquasecurity/trivy-action@master
with:
image-ref: myimage:${{ github.sha }}
severity: HIGH,CRITICAL
exit-code: 1
GitLab CI
security-scan:
stage: test
image: returntocorp/semgrep:latest
script:
- semgrep --config=p/security-audit --config=p/secrets .
allow_failure: false
dependency-scan:
stage: test
image: node:latest
script:
- npm audit --audit-level=high
allow_failure: false
container-scan:
stage: test
image: aquasec/trivy:latest
script:
- trivy image --severity HIGH,CRITICAL $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
CircleCI
version: 2.1
orbs:
security: circleci/security@1.0
workflows:
security-checks:
jobs:
- security/scan:
severity: high
- trivy/scan:
image: myimage:latest
扫描结果解释
严重性级别
| 级别 | 行动 | 时间线 |
|---|---|---|
| 关键 | 阻止合并,立即修复 | 小时 |
| 高 | 应在合并前修复 | 天 |
| 中 | 计划修复 | 冲刺 |
| 低 | 跟踪,机会性修复 | 积压 |
常见误报
秘密检测:
- 测试夹具中的假密钥
- 文档示例
- 非秘密的Base64编码
- UUID和随机ID
依赖项扫描:
- 仅开发依赖项
- 未使用代码路径
- 已缓解问题
结果分类
## 扫描结果分类
### 确认问题
| 发现 | 严重性 | 文件 | 行动 |
| ----------------- | -------- | ------------ | ------------------ |
| 硬编码API密钥 | 关键 | config.js:42 | 移除、轮换密钥 |
| lodash CVE | 高 | package.json | 更新到4.17.21 |
### 误报
| 发现 | 原因 | 行动 |
| ------------------ | ------------ | ---------------------- |
| test_api_key | 测试夹具 | 添加到.gitleaksignore |
| 开发依赖项CVE | 不在生产 | 记录接受 |
### 接受风险
| 发现 | 理由 | 审核者 |
| ------------------- | ----------------- | --------- |
| CLI工具中的低CVE | 仅内部使用 | @security |
快速命令参考
# 一行命令: 快速秘密 + 依赖项检查
npm audit --audit-level=high && gitleaks detect --no-git
# Python项目
pip-audit && bandit -r src/ -ll
# Go项目
govulncheck ./... && gosec -severity high ./...
# Rust项目
cargo audit && cargo clippy -- -W clippy::security
# 容器安全堆栈
trivy image --severity HIGH,CRITICAL myimage:latest && \
hadolint Dockerfile && \
trivy config --severity HIGH,CRITICAL .
# 完整快速扫描 (所有工具已安装)
trufflehog filesystem . --only-verified && \
npm audit --audit-level=high && \
semgrep --config=p/security-audit --config=p/secrets . && \
trivy fs --severity HIGH,CRITICAL .
# 全面多生态系统扫描
snyk test --all-projects --severity-threshold=high
升级
当发现以下情况时,升级到完整security-audit技能或senior-software-engineer代理 (具有/security-audit和/threat-model技能):
- 关键发现
- 不寻常或复杂漏洞
- 架构级安全担忧
- 合规相关问题
- 需要事件响应