这篇文章我们来学习一个开源的静态应用安全测试(Static Application Security Testing,SAST)工具:Bearer,我们将使用使用它来扫描一个示例项目,以对 SAST 有个基本的认知。
什么是 Bearer
Bearer 是一款开源的静态应用安全测试(SAST)工具,与传统 SAST 工具最大的不同在于——它以敏感数据流为核心来评估安全风险。这意味着它不仅告诉你"这里有漏洞",还会告诉你"这个漏洞是否涉及敏感数据泄露",从而帮助团队更好地优先排序和处置安全问题。
Bearer 的核心能力包括:
- 安全扫描:检测 OWASP Top 10 和 CWE Top 25 相关漏洞(SQL 注入、XSS、硬编码密码等)
- 隐私扫描:自动发现和分类 120+ 种敏感数据类型(PII、PHI),生成隐私合规报告
- 数据流分析:追踪敏感数据在代码中的流转路径
- 多语言支持:Go、Java、JavaScript、TypeScript、PHP、Python、Ruby
环境准备
安装 Bearer CLI
最快捷的安装方式是使用官方安装脚本:
1 | curl -sfL https://raw.githubusercontent.com/Bearer/bearer/main/contrib/install.sh | sh |
该脚本会自动检测系统架构,下载最新版本的 Bearer 二进制文件到 ./bin/ 目录。
安装完成后验证:
1 | ./bin/bearer version |
输出类似:
1 | bearer version 2.0.2, build 255b3d72c911000bfea9aae5413d354c7220b10 |
快速上手:扫描 OWASP Juice Shop
OWASP Juice Shop 是一个故意包含安全漏洞的 Web 应用,非常适合用来测试 SAST 工具。我们将用它来演示 Bearer 的扫描流程。
第一步:准备测试项目
克隆 Juice Shop 到测试目录:
1 | mkdir -p ai_demo |
使用 --depth 1 可以加速克隆,只获取最新的提交。
第二步:执行安全扫描
最简单的用法——直接扫描项目目录:
1 | ./bin/bearer scan ai_demo/juice-shop |
Bearer 会自动:
- 检测项目中的语言分布
- 发现所有源代码文件
- 执行内置安全规则检测
- 输出安全报告到终端
扫描过程中会显示进度条,完成后输出详细的检测报告。如果需要保存扫描结果,可以将输出重定向到文件:
1 | ./bin/bearer scan ai_demo/juice-shop 2>&1 | tee ai_demo/scan_output.txt |
第三步:生成 JSON 格式报告
终端输出方便快速查看,但如果需要进一步分析或集成到其他工具,JSON 格式更实用:
1 | # 安全报告(JSON 格式) |
--report 参数指定报告类型,--format 参数指定输出格式。
扫描结果分析
对 Juice Shop 的扫描结果如下:
1 | 175 checks, 389 findings |
关键发现示例:
CRITICAL — SQL 注入 (CWE-89):
1 | CRITICAL: Potential SQL injection detected |
CRITICAL — 硬编码密码 (CWE-798):
1 | CRITICAL: Hardcoded password detected |
HIGH — XSS 跨站脚本攻击 (CWE-79):
1 | HIGH: Cross-site scripting (XSS) vulnerability detected |
每个发现都包含:
- 严重级别(CRITICAL / HIGH / MEDIUM / LOW / WARNING)
- CWE 编号和漏洞描述
- 规则文档链接
- 触发规则的源代码文件和行号
- 忽略该发现的命令(
bearer ignore add <fingerprint>)
报告格式详解
Bearer 支持多种报告格式,满足不同场景需求:
安全报告
| 格式 | 参数 | 适用场景 |
|---|---|---|
| 终端文本 | 默认 | 快速查看 |
| JSON | --format json |
数据分析、自动化处理 |
| SARIF | --format sarif |
GitHub Code Scanning 集成 |
| GitLab | --format gitlab |
GitLab SAST 报告集成 |
| Reviewdog | --format reviewdog |
Reviewdog CI 集成 |
| HTML | --format html |
可读性强的 Web 报告 |
隐私报告
| 格式 | 参数 | 适用场景 |
|---|---|---|
| JSON | --format json |
数据分析、合规文档生成 |
| HTML | --format html |
可读性强的合规报告 |
数据流报告
| 格式 | 参数 | 适用场景 |
|---|---|---|
| JSON | --format json --report dataflow |
分析敏感数据流转路径 |
常用命令参考
初始化配置文件
1 | bearer init |
在项目根目录生成 bearer.yml 配置文件,可以自定义扫描行为。
查看版本信息
1 | bearer version |
管理忽略规则
1 | # 添加忽略 |
忽略功能用于标记误报,被忽略的发现不会出现在后续扫描报告中。
Scan 命令常用参数
1 | bearer scan <path> [flags] |
| 参数 | 说明 |
|---|---|
--report security |
安全报告(默认) |
--report privacy |
隐私报告 |
--report dataflow |
数据流报告 |
--format json/sarif/gitlab/html |
输出格式 |
--skip-rule <rule-id> |
跳过指定规则 |
--only-rule <rule-id> |
仅运行指定规则 |
--severity critical/high/medium/low |
指定严重级别 |
--debug |
启用调试日志 |
--diff |
仅扫描 Git diff 中的变更文件 |
CI/CD 集成建议
GitHub Actions 集成
1 | name: Bearer Security Scan |
GitLab CI 集成
1 | bearer-scan: |
工作原理简述
Bearer 的扫描流程:
1 | 源代码文件 |
核心技术要点:
- Tree-sitter AST 解析:高效增量解析,支持错误容忍
- YAML 自定义规则:用户可以定义自己的安全检测规则
- 数据流追踪:5 种遍历策略(Nested、NestedStrict、Cursor、Result、CursorStrict)支持不同粒度的数据流分析
- 分类数据库:内置 120+ 数据类型、Recipe 模式库,自动分类检测结果
总结
Bearer 作为一款数据优先的 SAST 工具,在快速入门体验上做得很好——一条命令即可扫描项目并获得详细的安全报告。与传统 SAST 工具相比,它的独特优势在于:
- 数据流视角:不仅检测漏洞,还关联敏感数据流,提供业务影响评估
- 隐私合规:一次扫描同时产出安全和隐私报告,满足 GDPR 等合规需求
- 开发者友好:清晰的报告格式、简单的 YAML 规则、便捷的忽略管理
对于想要快速评估代码安全状况的开发团队,Bearer 是一个值得尝试的选择。