Traceableai/ast-action
GitHub: Traceableai/ast-action
一个在 GitHub Actions 工作流中运行 Traceable API 主动安全测试的 DevSecOps 插件,用于在 SDLC 早期发现微服务与 API 的漏洞。
Stars: 4 | Forks: 1
## 概述
在云原生世界中,API 安全是一个重要的问题,因为大多数微服务都是通过 API 向外部用户和其他内部服务公开的。Traceable AST 补充了 API Catalog(API 目录)的功能,利用 DNA 构建智能定向扫描,以检测 API 层的漏洞。它还可以通过在预发布环境中运行安全扫描,帮助闭环在生产环境中发现的漏洞利用。它有助于在 SDLC(软件开发生命周期)的早期阶段发现漏洞,从而为开发者和产品安全工程师提供更多的时间和上下文,以优先考虑漏洞缓解并构建安全的 API。
Traceable 的 GitHub action 可用于持续测试您的软件构建是否存在活跃漏洞,并获取全面的报告,这将有助于根据新代码暴露的新漏洞或现有漏洞来决定构建是否应该通过。它会在触发时运行 AST 扫描,并映射扫描结果(包括基于 CVSS 和 CWE 分数的漏洞严重性列表),以帮助正确分类问题,并全面了解相关构建中新代码带来的风险。
## Traceable xAST Github action 提供了什么?
- 为微服务和 API 提供广泛的安全测试覆盖。
- 从实时功能流量中生成测试,以便基于实际 payload 进行定向安全测试。
- 融入 DevSecOps,通过扫描启动和从扫描结果中进行漏洞管理。
- 以完全自动化的方式,将安全性无缝插入同一流水线中现有的功能测试中。
- 使用资产清单、威胁情报和预测模型进行基于风险的优先级排序。
- 根据构建中引入的安全问题,做出构建通过或失败的决策。
## 开始使用 Traceable AST action
### 了解输入项
| **输入项** | **描述** |
|---------------------------------|-------------------------------------------------------------------------------|
| step\_name | 扫描操作:init/ run/ init and run/ stop。 |
| scan\_name | 扫描的名称 |
| client\_scan\_token | 来自平台的访问 token |
| cli\_version | 您想要用于 AST 的 CLI 版本。当前版本为 1.0.0-rc.3。 |
| traffic\_env | AST 应观察流量的环境。 |
| plugins | 您希望运行 AST 扫描的插件列表。 |
| include\_url\_regex | 包含要测试的 URL 模式。 |
| exclude\_url\_regex | 从扫描中排除的 URL 模式。 |
| target\_url | 测试的目标 URL。 |
| traceable\_server | traceable 服务器的 URL,不适用于 SaaS 客户。 |
| idle\_timeout | 扫描进入 IDLE 状态时的超时时间。 |
| scan\_timeout | 一般的扫描超时时间。 |
| reference\_env | AST 应获取 API spec 的参考环境。 |
| max\_retries | 扫描失败后的最大重试次数。 |
| scan\_suite | 在 Traceable.ai 平台上定义的 AST 套件名称。 |
| graphql\_schema\_ids | 上传到 Traceable.ai 平台上的、以逗号分隔的 GraphQl schema ID。 |
| graphql\_schema\_files | 以逗号分隔的 GraphQl SDL 文件路径。 |
| graphql\_introspection\_enabled | 允许通过对 target-url 运行内省来提取 GraphQl Schema。 |
### GitHub Action 工作流示例
1. 以下是 GitHub action 工作流示例,展示了如何配置 AST GitHub action。
```
name: Test Traceable AST Init Action And Traceable AST Run Action
on:
push:
branches:
- main
pull_request:
jobs:
AstScan:
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Init scan action
uses: Traceableai/ast-action@main
with:
step_name: 'init'
client_scan_token: ${{ secrets.CLIENT_SCAN_TOKEN }}
traffic_env: 'crapi-demo-1'
traceable_server: ${{ secrets.TRACEABLE_SERVER }}
- name: Run a loop as functional test (This is sample)
run: |
for ((i=1;i<=100;i++));
do
echo $i
done
- name: Run scan action
uses: Traceableai/ast-action@main
with:
step_name: 'run'
client_scan_token: ${{ secrets.CLIENT_SCAN_TOKEN }}
traffic_env: 'crapi-demo-1'
cli_version: 'latest'
- name: Stop Scan
if: always()
uses: Traceableai/ast-action@main
with:
step_name: 'stop'
client_scan_token: ${{ secrets.CLIENT_SCAN_TOKEN_DEMO }}
traffic_env: 'crapi-demo1'
traceable_server: ${{ secrets.TRACEABLE_SERVER_DEMO }}
```
```
name: Test Traceable AST Init And Run Action
on:
push:
branches:
- main
pull_request:
jobs:
InitAndRunAstScan:
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Init and run scan action
uses: Traceableai/ast-action@main
with:
step_name: 'init and run'
client_scan_token: ${{ secrets.CLIENT_SCAN_TOKEN_DEMO }}
cli_version: 'latest'
traffic_env: 'crapi-demo1'
traceable_server: ${{ secrets.TRACEABLE_SERVER_DEMO }}
- name: Stop Scan
if: always()
uses: Traceableai/ast-action@main
with:
step_name: 'stop'
client_scan_token: ${{ secrets.CLIENT_SCAN_TOKEN_DEMO }}
traffic_env: 'crapi-demo1'
traceable_server: ${{ secrets.TRACEABLE_SERVER_DEMO }}
functionalTest: // (This is a sample functional test that runs in parallel to scans)
runs-on: ubuntu-20.04
steps:
- name: Run a loop as functional test
run: |
for ((i=1;i<=100;i++));
do
echo $i
done
```
2. 如上述工作流所示,我们使用 initiate scan 操作步骤启动了扫描,该步骤将 client_scan_token、traffic_env 和 traceable_server 作为输入。
3. 在下一步中,我们执行了功能测试,然后在随后的步骤中运行了扫描,该步骤将 client_scan_token、traffic_env 和 cli_version 作为输入。
标签:API安全测试, DevSecOps, GitHub Action, LNA, 上游代理, 文档结构分析