name: sast-horusec description: > 使用 Horusec 进行多语言静态应用程序安全测试,支持 18+ 种编程语言和 20+ 种安全分析工具。执行 SAST 扫描、Git 历史中的秘密检测,并提供带有严重性分类的漏洞发现。使用场景:(1) 同时分析多种语言的代码安全漏洞,(2) 检测 Git 历史中暴露的机密和凭证,(3) 将 SAST 集成到 CI/CD 管道以实现安全 SDLC,(4) 在开发过程中执行全面的安全分析,(5) 管理误报并确定安全发现的优先级。 version: 0.1.0 maintainer: asrour category: secsdlc tags: [sast, horusec, 漏洞扫描, 多语言, 秘密检测, 静态分析, 安全sdlc] frameworks: [OWASP, CWE] dependencies: tools: [docker, git] references:
Horusec SAST 扫描器
概述
Horusec 是一个开源安全分析工具,使用 20+ 个集成的安全工具对 18+ 种编程语言执行静态代码分析。它在开发过程中识别漏洞,扫描 Git 历史以查找暴露的机密,并无缝集成到 CI/CD 管道中,以实现安全 SDLC 实践。
支持的语言
C#, Java, Kotlin, Python, Ruby, Golang, Terraform, JavaScript, TypeScript, Kubernetes, PHP, C, HTML, JSON, Dart, Elixir, Shell, Nginx
快速开始
在当前项目上运行 Horusec 扫描:
# 使用 Docker(推荐)
docker run -v /var/run/docker.sock:/var/run/docker.sock \
-v $(pwd):/src horuszup/horusec-cli:latest horusec start -p /src -P $(pwd)
# 本地安装
horusec start -p ./path/to/project
核心工作流
工作流 1:本地安全扫描
适用于开发人员进行预提交安全分析:
- 导航到项目目录
- 运行 Horusec 扫描:
horusec start -p . -o json -O horusec-report.json - 查看 JSON 输出中的漏洞
- 按严重性(HIGH, MEDIUM, LOW, INFO)过滤
- 处理关键和高严重性的发现
- 重新扫描以验证修复
工作流 2:CI/CD 管道集成
进度: [ ] 1. 将 Horusec 添加到 CI/CD 管道配置中 [ ] 2. 配置输出格式(JSON 用于自动化处理) [ ] 3. 设置构建失败的严重性阈值 [ ] 4. 在每次提交或拉取请求时运行扫描 [ ] 5. 解析结果并在发现高严重性问题时使构建失败 [ ] 6. 为审计跟踪生成安全报告 [ ] 7. 随时间跟踪修复进度
系统性地完成每个步骤。勾选已完成的项目。
工作流 3:Git 历史秘密扫描
用于检测暴露的凭证和机密:
- 运行启用了 Git 历史分析的 Horusec:
horusec start -p . --enable-git-history-analysis - 查看检测到的机密和凭证
- 立即轮换受损的凭证
- 将检测到的模式添加到
.gitignore和.horusec/config.json - 使用 git-filter-branch 或 BFG Repo-Cleaner 从历史记录中删除(如果需要)
- 记录事件并更新安全程序
工作流 4:误报管理
管理扫描结果和减少噪音时:
- 运行初始扫描并导出结果:
horusec start -p . -o json -O results.json - 查看发现并识别误报
- 创建或更新
.horusec/config.json以添加忽略规则:{ "horusecCliRiskAcceptHashes": ["hash1", "hash2"], "horusecCliFilesOrPathsToIgnore": ["**/test/**", "**/vendor/**"] } - 重新运行扫描以验证误报已被抑制
- 记录风险接受决策以符合合规要求
- 定期审查被忽略的发现
配置
在项目根目录创建 .horusec/config.json 以进行自定义配置:
{
"horusecCliCertInsecureSkipVerify": false,
"horusecCliCertPath": "",
"horusecCliContainerBindProjectPath": "",
"horusecCliCustomImages": {},
"horusecCliCustomRulesPath": "",
"horusecCliDisableDocker": false,
"horusecCliFalsePositiveHashes": [],
"horusecCliFilesOrPathsToIgnore": [
"**/node_modules/**",
"**/vendor/**",
"**/*_test.go",
"**/test/**"
],
"horusecCliHeaders": {},
"horusecCliHorusecApiUri": "",
"horusecCliJsonOutputFilePath": "./horusec-report.json",
"horusecCliLogFilePath": "./horusec.log",
"horusecCliMonitorRetryInSeconds": 15,
"horusecCliPrintOutputType": "text",
"horusecCliProjectPath": ".",
"horusecCliRepositoryAuthorization": "",
"horusecCliRepositoryName": "",
"horusecCliReturnErrorIfFoundVulnerability": false,
"horusecCliRiskAcceptHashes": [],
"horusecCliTimeoutInSecondsAnalysis": 600,
"horusecCliTimeoutInSecondsRequest": 300,
"horusecCliToolsConfig": {},
"horusecCliWorkDir": ".horusec"
}
输出格式
Horusec 支持多种输出格式,适用于不同用例:
text- 人类可读的控制台输出(默认)json- 用于 CI/CD 集成的结构化 JSONsonarqube- SonarQube 兼容格式
使用 -o 标志指定:
horusec start -p . -o json -O report.json
常见模式
模式 1:高严重性时使构建失败
配置 CI/CD 在发现关键问题时使构建失败:
horusec start -p . \
--return-error-if-found-vulnerability \
--severity-threshold="MEDIUM"
如果发现达到或超过阈值的漏洞,退出代码将非零。
模式 2:多项目单体仓库扫描
扫描单体仓库结构中的多个项目:
# 扫描特定子目录
for project in service1 service2 service3; do
horusec start -p ./$project -o json -O horusec-$project.json
done
模式 3:自定义规则集成
添加自定义安全规则:
- 创建自定义规则文件(YAML 格式)
- 在
.horusec/config.json中配置路径:{ "horusecCliCustomRulesPath": "./custom-rules.yaml" } - 运行应用了自定义规则的扫描
安全注意事项
- 敏感数据处理:Horusec 扫描暴露的机密。确保扫描结果安全存储,并且访问权限仅限于授权人员。
- 访问控制:限制对 Horusec 配置文件和扫描结果的访问。在 Docker 中对源代码扫描使用只读挂载。
- 审计日志记录:记录所有扫描执行、发现和风险接受决策,以进行合规性审计。
- 合规性:通过识别漏洞和跟踪修复,与 SOC2、PCI-DSS 和 GDPR 合规性集成。
- 安全默认值:配置适合您风险承受能力的严重性阈值。从 MEDIUM 或 HIGH 开始以减少噪音。
集成点
CI/CD 集成
GitHub Actions:
- name: 运行 Horusec 安全扫描
run: |
docker run -v /var/run/docker.sock:/var/run/docker.sock \
-v $(pwd):/src horuszup/horusec-cli:latest \
horusec start -p /src -o json -O horusec-report.json \
--return-error-if-found-vulnerability
GitLab CI:
horusec-scan:
image: horuszup/horusec-cli:latest
script:
- horusec start -p . -o json -O horusec-report.json
artifacts:
reports:
horusec: horusec-report.json
Jenkins:
stage('安全扫描') {
steps {
sh 'docker run -v $(pwd):/src horuszup/horusec-cli:latest horusec start -p /src'
}
}
VS Code 扩展
Horusec 提供了一个 VS Code 扩展,用于在开发过程中进行实时安全分析。从 VS Code 市场安装。
漏洞管理
Horusec 可以通过以下方式与集中式漏洞管理平台集成:
- JSON 输出解析
- Horusec 平台(独立的基于 Web 的管理工具)
- 使用 API 的自定义集成
故障排除
问题:Docker 套接字权限被拒绝
解决方案:确保 Docker 套接字具有适当的权限:
sudo chmod 666 /var/run/docker.sock
# 或者使用 sudo 运行(不推荐用于 CI/CD)
问题:测试文件中的误报
解决方案:在配置中排除测试目录:
{
"horusecCliFilesOrPathsToIgnore": ["**/test/**", "**/*_test.go", "**/tests/**"]
}
问题:大型仓库上的扫描超时
解决方案:增加配置中的超时值:
{
"horusecCliTimeoutInSecondsAnalysis": 1200,
"horusecCliTimeoutInSecondsRequest": 600
}
问题:缺少特定语言的漏洞
解决方案:验证语言是否受支持以及 Docker 镜像是否可用:
horusec version --check-for-updates
docker pull horuszup/horusec-cli:latest
高级用法
不使用 Docker 运行
直接安装 Horusec CLI(需要所有安全工具依赖项):
# macOS
brew install horusec
# Linux
curl -fsSL https://raw.githubusercontent.com/ZupIT/horusec/main/deployments/scripts/install.sh | bash
# Windows
# 从 GitHub 发布页面下载
然后运行:
horusec start -p . --disable-docker
注意:不使用 Docker 运行需要手动安装所有安全分析工具(Bandit, Brakeman, GoSec 等)。
严重性过滤
在输出中按严重性过滤结果:
# 仅显示 HIGH 和 CRITICAL
horusec start -p . --severity-threshold="HIGH"
# 显示所有发现
horusec start -p . --severity-threshold="INFO"
自定义 Docker 镜像
在配置中覆盖默认的安全工具镜像:
{
"horusecCliCustomImages": {
"python": "my-registry/custom-bandit:latest",
"go": "my-registry/custom-gosec:latest"
}
}
报告分析
解析 JSON 输出以进行自动化处理:
# 提取高严重性发现
cat horusec-report.json | jq '.analysisVulnerabilities[] | select(.severity == "HIGH")'
# 按语言统计漏洞数量
cat horusec-report.json | jq '.analysisVulnerabilities | group_by(.language) | map({language: .[0].language, count: length})'
# 列出唯一的 CWE ID
cat horusec-report.json | jq '[.analysisVulnerabilities[].securityTool] | unique'