0%

Bearer SAST 工具快速入门

这篇文章我们来学习一个开源的静态应用安全测试(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
2
mkdir -p ai_demo
git clone --depth 1 https://github.com/juice-shop/juice-shop.git ai_demo/juice-shop

使用 --depth 1 可以加速克隆,只获取最新的提交。

第二步:执行安全扫描

最简单的用法——直接扫描项目目录:

1
./bin/bearer scan ai_demo/juice-shop

Bearer 会自动:

  1. 检测项目中的语言分布
  2. 发现所有源代码文件
  3. 执行内置安全规则检测
  4. 输出安全报告到终端

扫描过程中会显示进度条,完成后输出详细的检测报告。如果需要保存扫描结果,可以将输出重定向到文件:

1
./bin/bearer scan ai_demo/juice-shop 2>&1 | tee ai_demo/scan_output.txt

第三步:生成 JSON 格式报告

终端输出方便快速查看,但如果需要进一步分析或集成到其他工具,JSON 格式更实用:

1
2
3
4
5
# 安全报告(JSON 格式)
./bin/bearer scan ai_demo/juice-shop --report security --format json > ai_demo/security_report.json

# 隐私报告(JSON 格式)
./bin/bearer scan ai_demo/juice-shop --report privacy --format json > ai_demo/privacy_report.json

--report 参数指定报告类型,--format 参数指定输出格式。

扫描结果分析

对 Juice Shop 的扫描结果如下:

1
2
3
4
5
6
7
175 checks, 389 findings

CRITICAL: 21 (CWE-502, CWE-798, CWE-89, CWE-95)
HIGH: 21 (CWE-22, CWE-312, CWE-73, CWE-79, CWE-918)
MEDIUM: 35 (CWE-1333, CWE-208, CWE-328, CWE-532, CWE-601, CWE-693)
LOW: 312 (CWE-330, CWE-532, CWE-548)
WARNING: 0

关键发现示例:

CRITICAL — SQL 注入 (CWE-89)

1
2
3
4
5
6
CRITICAL: Potential SQL injection detected
https://docs.bearer.com/reference/rules/javascript_lang_sql_injection

File: juice-shop/routes/login.ts:34

34 const query = `SELECT * FROM Users WHERE email = '${req.body.email || ''}' AND password = '${hash}'`

CRITICAL — 硬编码密码 (CWE-798)

1
2
3
4
5
6
CRITICAL: Hardcoded password detected
https://docs.bearer.com/reference/rules/javascript_lang_hardcoded_password

File: juice-shop/routes/login.ts:31

31 const hash = crypto.createHash('md5').update(req.body.password || '').digest('hex')

HIGH — XSS 跨站脚本攻击 (CWE-79)

1
2
3
4
5
6
HIGH: Cross-site scripting (XSS) vulnerability detected
https://docs.bearer.com/reference/rules/javascript_lang_xss

File: juice-shop/routes/tracking.ts:25

25 res.json(utils.queryResultToJson(result, req.query))

每个发现都包含:

  • 严重级别(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
2
3
4
5
6
7
8
# 添加忽略
bearer ignore add <fingerprint> --author "your-name" --comment "false positive"

# 查看忽略列表
bearer ignore show

# 移除忽略
bearer ignore remove <fingerprint>

忽略功能用于标记误报,被忽略的发现不会出现在后续扫描报告中。

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
name: Bearer Security Scan
on: [push, pull_request]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Bearer
run: curl -sfL https://raw.githubusercontent.com/Bearer/bearer/main/contrib/install.sh | sh -s - -b /usr/local/bin
- name: Run Scan
run: bearer scan . --format sarif > bearer.sarif
- name: Upload SARIF
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: bearer.sarif

GitLab CI 集成

1
2
3
4
5
6
7
bearer-scan:
image: bearer/bearer:latest-amd64
script:
- bearer scan . --format gitlab > gl-sast-report.json
artifacts:
reports:
sast: gl-sast-report.json

工作原理简述

Bearer 的扫描流程:

1
2
3
4
5
6
源代码文件
↓ 语言检测(gocloc)
↓ AST 解析(tree-sitter)
↓ 规则模式匹配 → Detection(检测结果)
↓ 分类(classification) → 数据类型/接口/框架分类
↓ 报告聚合 → Security/Privacy/Dataflow Report

核心技术要点:

  • Tree-sitter AST 解析:高效增量解析,支持错误容忍
  • YAML 自定义规则:用户可以定义自己的安全检测规则
  • 数据流追踪:5 种遍历策略(Nested、NestedStrict、Cursor、Result、CursorStrict)支持不同粒度的数据流分析
  • 分类数据库:内置 120+ 数据类型、Recipe 模式库,自动分类检测结果

总结

Bearer 作为一款数据优先的 SAST 工具,在快速入门体验上做得很好——一条命令即可扫描项目并获得详细的安全报告。与传统 SAST 工具相比,它的独特优势在于:

  1. 数据流视角:不仅检测漏洞,还关联敏感数据流,提供业务影响评估
  2. 隐私合规:一次扫描同时产出安全和隐私报告,满足 GDPR 等合规需求
  3. 开发者友好:清晰的报告格式、简单的 YAML 规则、便捷的忽略管理

对于想要快速评估代码安全状况的开发团队,Bearer 是一个值得尝试的选择。