Horusec多语言静态应用安全扫描器 sast-horusec

Horusec 是一款开源的多语言静态应用安全测试(SAST)工具,支持18种以上编程语言和20多种安全分析工具。它能高效扫描代码漏洞、检测Git历史中的敏感信息泄露,并集成到CI/CD流程中实现安全开发生命周期(SDLC)。适用于开发安全、漏洞管理、DevSecOps等场景,是提升软件安全性的必备工具。关键词:静态应用安全测试,SAST,代码安全扫描,漏洞检测,Git秘密扫描,CI/CD安全集成,多语言安全分析,DevSecOps。

安全审计 0 次安装 0 次浏览 更新于 2/28/2026

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:本地安全扫描

适用于开发人员进行预提交安全分析:

  1. 导航到项目目录
  2. 运行 Horusec 扫描:
    horusec start -p . -o json -O horusec-report.json
    
  3. 查看 JSON 输出中的漏洞
  4. 按严重性(HIGH, MEDIUM, LOW, INFO)过滤
  5. 处理关键和高严重性的发现
  6. 重新扫描以验证修复

工作流 2:CI/CD 管道集成

进度: [ ] 1. 将 Horusec 添加到 CI/CD 管道配置中 [ ] 2. 配置输出格式(JSON 用于自动化处理) [ ] 3. 设置构建失败的严重性阈值 [ ] 4. 在每次提交或拉取请求时运行扫描 [ ] 5. 解析结果并在发现高严重性问题时使构建失败 [ ] 6. 为审计跟踪生成安全报告 [ ] 7. 随时间跟踪修复进度

系统性地完成每个步骤。勾选已完成的项目。

工作流 3:Git 历史秘密扫描

用于检测暴露的凭证和机密:

  1. 运行启用了 Git 历史分析的 Horusec:
    horusec start -p . --enable-git-history-analysis
    
  2. 查看检测到的机密和凭证
  3. 立即轮换受损的凭证
  4. 将检测到的模式添加到 .gitignore.horusec/config.json
  5. 使用 git-filter-branch 或 BFG Repo-Cleaner 从历史记录中删除(如果需要)
  6. 记录事件并更新安全程序

工作流 4:误报管理

管理扫描结果和减少噪音时:

  1. 运行初始扫描并导出结果:
    horusec start -p . -o json -O results.json
    
  2. 查看发现并识别误报
  3. 创建或更新 .horusec/config.json 以添加忽略规则:
    {
      "horusecCliRiskAcceptHashes": ["hash1", "hash2"],
      "horusecCliFilesOrPathsToIgnore": ["**/test/**", "**/vendor/**"]
    }
    
  4. 重新运行扫描以验证误报已被抑制
  5. 记录风险接受决策以符合合规要求
  6. 定期审查被忽略的发现

配置

在项目根目录创建 .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 集成的结构化 JSON
  • sonarqube - 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:自定义规则集成

添加自定义安全规则:

  1. 创建自定义规则文件(YAML 格式)
  2. .horusec/config.json 中配置路径:
    {
      "horusecCliCustomRulesPath": "./custom-rules.yaml"
    }
    
  3. 运行应用了自定义规则的扫描

安全注意事项

  • 敏感数据处理: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'

参考资料