Addepar/RedFlag

GitHub: Addepar/RedFlag

RedFlag 利用大语言模型在 CI 流水线或批量模式下自动识别高风险代码变更,帮助团队精准分配安全审查资源。

Stars: 162 | Forks: 10

RedFlag [![Python](https://img.shields.io/badge/Python-3.11+-blue?style=for-the-badge&logo=python&logoColor=white)][python-url] [![贡献者](https://img.shields.io/github/contributors/Addepar/RedFlag.svg?style=for-the-badge)][contributors-url] [![MIT License](https://img.shields.io/github/license/Addepar/RedFlag.svg?style=for-the-badge)][license-url] [![LinkedIn](https://img.shields.io/badge/-LinkedIn-black.svg?style=for-the-badge&logo=linkedin&colorB=555)][linkedin-url]
[![Forks](https://img.shields.io/github/forks/Addepar/RedFlag.svg?style=for-the-badge)][forks-url] [![Stargazers](https://img.shields.io/github/stars/Addepar/RedFlag.svg?style=for-the-badge)][stars-url] [![Issues](https://img.shields.io/github/issues/Addepar/RedFlag.svg?style=for-the-badge)][issues-url] RedFlag 利用 AI 来确定高风险的代码变更。 在 batch 模式下运行它,可以界定发布候选版本的手动安全测试范围, 或者在你的 CI pipeline 中运行它,以标记 PR 并添加合适的审查者。 尽管是一款安全工具,RedFlag 几乎可以被任何团队利用, 因为它的配置使其具有无限的灵活性。
阅读博客文章 »

查看示例报告 · 报告 Bug · 请求功能
目录
# Batch 模式 RedFlag 能够在单次运行中分析大量的 commit。 这些 commit 可以通过 commit hash、分支名称或 tag 来指定。 这对于界定逻辑代码组(例如发布候选版本)的手动安全测试范围非常有用。 ## 工作流 ![Batch 工作流](https://raw.githubusercontent.com/Addepar/RedFlag/main/docs/images/Batch-Workflow.png) ## 快速开始 ### 安装 ##### 使用虚拟环境 1. 创建一个虚拟环境: python -m venv redflag-venv source redflag-venv/bin/activate 2. 安装 RedFlag: pip install addepar-redflag 或者,如果你想使用 Poetry,请克隆该仓库并使用 `poetry install`,然后使用 `poetry run redflag`。 ### 设置凭据 凭据可以通过以下方式设置: 1. 环境变量 2. `.env` 文件 3. CLI 参数 4. 配置文件(出于安全原因,不推荐使用!) ##### AWS 凭据 RedFlag 使用 [Boto3 兼容的凭据](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html),并通过 **Profiles** 或 **Env Vars** 进行配置。 确保你的 AWS IAM policy 具有对 [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/security_iam_service-with-iam.html) 的 `InvokeModel` 和 `InvokeModelWithResponseStream` 权限。 最后,*确保你已经[请求了必要的 Claude 模型](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html)!* ##### GitHub PAT 使用具有 `repo` 权限的[个人访问令牌](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token)。将该 token 设置为环境变量: ``` export RF_GITHUB_TOKEN=your-token-here ``` ##### Jira API Token *(可选)* 首先,在配置文件(`jira_url`)中、作为 CLI 参数(`--jira-url`)、或作为环境变量(`RF_JIRA_URL`)设置 Jira URL(`https://your-org.atlassian.net`)。 然后创建一个 [Jira API Token](https://support.atlassian.com/atlassian-account/docs/manage-api-tokens-for-your-atlassian-account/) 并 将其设置为环境变量: ``` export RF_JIRA_USER=your-username-here export RF_JIRA_TOKEN=your-token-here ``` ##### Slack Token *(可选)* 1. [创建一个 Slack App](https://api.slack.com/quickstart) 2. [请求所需的权限范围](https://api.slack.com/quickstart#scopes) 3. [安装并授权该 App](https://api.slack.com/quickstart#installing) 4. 在运行 RedFlag 时添加环境变量或配置项 ``` export RF_SLACK_TOKEN=xoxb-slack-token-here export RF_SLACK_CHANNEL=C0123456789 ``` *不要忘记将 bot 邀请到频道中,以避免出现 `channel_not_found` 错误*。 ### 用法 以下是在 batch 模式下运行 RedFlag 的一些示例: ``` # 使用 branch names: redflag --repo YourOrg/SomeRepo --from main --to dev # 使用 commit hashes: redflag --repo YouOrg/SomeRepo --from a1b2c3 --to d4e5f6 # 使用自定义配置文件: redflag --config custom-config.yml ``` ## 报告输出 默认情况下,RedFlag 会生成一个可以在浏览器中打开的 HTML 报告。

(返回顶部)

# CI 模式 RedFlag 可以在 CI pipeline 中运行,以标记 PR 并添加合适的审查者。 此模式使用 GitHub Actions 在每个 PR 上运行 RedFlag,并在 该 PR 需要审查时发表评论。此外,CI 模式最适合用于 Slack 告警。 [![CI 模式](https://img.shields.io/badge/Read%20More-How%20To%20Use%20RedFlag%20In%20CI%20Mode-blue?style=for-the-badge&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAMKADAAQAAAABAAAAMAAAAADbN2wMAAABcUlEQVRoBe1ZQU7DMBBsOPMC3gISDwDxAr5BJe5I/Ki3gkS58ROO9MKFdJZmLyOysWIzUNiVVs527Rl7JrnUi8V/iL7vr5CPyC1SFQ9NtMVu71U7Zp7qAwDQlLd4R94gT6pBCwCM0KJgajwFGPbaWCzjmW27e8o2B3gbwD6Vx/Ozg3/DuHEZHNvraDyKmugdU/+D6pZle2xXAuPBvkJ+BvuIl8hf9xF30Ttgu4/6ot6m67qzMa6pb8DXneNhhXz1H4Tj6Wwuc8BiDGDfHe+PrSv9vQS/1IFSTvm8PIBcciJMB0gQeZkOyCUnwnSABJGX6YBcciJMB0gQeZkOyCUnwnSABJGX6YBcciJMB0gQeZkOyCUnwnSABJGX6YBcciJMB0gQefnnHdiapPibW3IzM8e+KQdeBtDrOeA/vgbKXw6XDF/ekZVcQNQcogQ/vCMzcoDcYbit2UjtWtyRTe4z5MAhLpBrpF9841EWT+HmDr25A8AdiN2uwvv8AAAAAElFTkSuQmCC)][docs-ci-mode-url]

(返回顶部)

# Evaluation 模式 RedFlag 可以在 evaluation 模式下运行,以使用你自己的自定义 数据集来评估 AI 模型的性能。此模式有助于了解模型和 prompt 在你的代码库上的表现,并辅助进行安全 风险评估。 [![Evaluation 模式](https://img.shields.io/badge/Read%20More-How%20To%20Use%20RedFlag%20In%20Evaluation%20Mode-blue?style=for-the-badge&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAMKADAAQAAAABAAAAMAAAAADbN2wMAAABcUlEQVRoBe1ZQU7DMBBsOPMC3gISDwDxAr5BJe5I/Ki3gkS58ROO9MKFdJZmLyOysWIzUNiVVs527Rl7JrnUi8V/iL7vr5CPyC1SFQ9NtMVu71U7Zp7qAwDQlLd4R94gT6pBCwCM0KJgajwFGPbaWCzjmW27e8o2B3gbwD6Vx/Ozg3/DuHEZHNvraDyKmugdU/+D6pZle2xXAuPBvkJ+BvuIl8hf9xF30Ttgu4/6ot6m67qzMa6pb8DXneNhhXz1H4Tj6Wwuc8BiDGDfHe+PrSv9vQS/1IFSTvm8PIBcciJMB0gQeZkOyCUnwnSABJGX6YBcciJMB0gQeZkOyCUnwnSABJGX6YBcciJMB0gQeZkOyCUnwnSABJGX6YBcciJMB0gQefnnHdiapPibW3IzM8e+KQdeBtDrOeA/vgbKXw6XDF/ekZVcQNQcogQ/vCMzcoDcYbit2UjtWtyRTe4z5MAhLpBrpF9841EWT+HmDr25A8AdiN2uwvv8AAAAAElFTkSuQmCC)][docs-eval-mode-url]

(返回顶部)

# 高级配置 ## 优先级顺序 1. CLI 参数 2. 环境变量 3. 配置文件 4. 默认值 在每次执行时,RedFlag 都会按照上述优先级顺序加载配置,然后 输出一个表格,显示最终的配置以及每个参数的设置位置。 ## 配置选项与默认值 下表显示了每个参数的配置选项: #### 常规设置 | 参数 | CLI 参数 | 环境变量 | 配置文件 | 默认值 | |---------------------------------------------------------------------------------------|-----------|---------|-------------|---------| | [配置文件](https://github.com/Addepar/RedFlag/blob/main/config.sample.yaml) | --config | - | - | - | | 仓库 | --repo | RF_REPO | repo | - | | 起始分支/Commit | --from | RF_FROM | from | - | | 目标分支/Commit | --to | RF_TO | to | - | #### 集成设置 | 参数 | CLI 参数 | 环境变量 | 配置文件 | 默认值 | |-------------------------------------------------------------------------------------------------------------------------------------|------------------|-------------------|---------------|---------| | [GitHub Token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens) | --github-token | RF_GITHUB_TOKEN | github_token | - | | Jira URL | --jira-url | RF_JIRA_URL | jira.url | - | | Jira 用户名 | --jira-user | RF_JIRA_USER | jira.user | - | | [Jira Token](https://support.atlassian.com/atlassian-account/docs/manage-api-tokens-for-your-atlassian-account/) | --jira-token | RF_JIRA_TOKEN | jira.token | - | | [Slack Token](https://api.slack.com/concepts/token-types) | --slack-token | RF_SLACK_TOKEN | slack.token | - | | [Slack 频道 (ID)](https://slack.com/help/articles/221769328-Locate-your-Slack-URL-or-ID) | --slack-channel | RF_SLACK_CHANNEL | slack.channel | - | | Slack 消息标题 | --slack-headline | RF_SLACK_HEADLINE | slack.headline | - | #### LLM 设置 | 参数 | CLI 参数 | 环境变量 | 配置文件 | 默认值 | |--------------------------------------------------------------------------------------------------------------------|--------------------|---------------------|----------------------------|-------------------------------------------| | 调试 LLM | --debug-llm | - | - | `False` | | [Bedrock 模型 ID](https://docs.aws.amazon.com/bedrock/latest/userguide/model-ids.html) | --bedrock-model-id | RF_BEDROCK_MODEL_ID | bedrock.model_id | `anthropic.claude-3-sonnet-20240229-v1:0` | | [Bedrock Profile](https://docs.aws.amazon.com/cli/v1/userguide/cli-configure-files.html) | --bedrock-profile | RF_BEDROCK_PROFILE | bedrock.profile | - | | [Bedrock Region](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.RegionsAndAvailabilityZones.html) | --bedrock-region | RF_BEDROCK_REGION | bedrock.region | - | | 审查 Prompt (角色) | - | - | prompts.review.role | 安全审查(见 `sample.config.yaml`) | | 审查 Prompt (问题) | - | - | prompts.review.question | 安全审查(见 `sample.config.yaml`) | | 测试计划 Prompt (角色) | - | - | prompts.test_plan.role | 安全审查(见 `sample.config.yaml`) | | 测试计划 Prompt (问题) | - | - | prompts.test_plan.question | 安全审查(见 `sample.config.yaml`) | #### 输入/输出设置 | 参数 | CLI 参数 | 环境变量 | 配置文件 | 默认值 | |---------------------------|--------------------------|----------------|-------------------------|-----------| | 输出目录 | --output-dir | RF_OUTPUT_DIR | output_dir | `results` | | 最大 Commit 数量 | --max-commits | RF_MAX_COMMITS | max_commits | `0` (∞) | | 不输出 HTML | --no-output-html | - | - | - | | 不输出 JSON | --no-output-json | - | - | - | | 不显示进度条 | --no-progress-bar | - | - | - | | 不移除 HTML 注释 | --no-strip-html-comments | - | - | - | | 过滤 Commit 标题 | - | - | filter_commits.title | - | | 过滤 Commit 用户 | - | - | filter_commits.user | - | | 移除描述行 | - | - | strip_description_lines | - | #### Evaluation 参数(`eval` 命令) | 参数 | CLI 参数 | 环境变量 | 配置文件 | 默认值 | |---------------------------------------------------------------------------------------------------------|------------|------------------|--------------|---------| | [Evaluation 数据集](https://github.com/Addepar/RedFlag/wiki/Evaluation-Mode#building-a-custom-dataset) | --dataset | RF_DATASET | dataset | - |

(返回顶部)

## 许可证 基于 MIT License 分发。查看 [`LICENSE.md`](https://github.com/Addepar/RedFlag?tab=MIT-1-ov-file#readme) 了解更多信息。

(返回顶部)

## 联系方式 通过 [security-engineering@addepar.com](mailto:security-engineering@addepar.com) 与 Addepar Security Engineering 打个招呼。

(返回顶部)

标签:DevSecOps, Python, 上游代理, 云安全监控, 人工智能, 代码审查, 无后门, 用户模式Hook绕过, 逆向工具, 静态分析