okta-graveyard/repo-supervisor

GitHub: okta-graveyard/repo-supervisor

一款基于熵值分析的代码密钥检测工具,支持 GitHub PR 自动扫描和本地 CLI 两种运行模式。

Stars: 654 | Forks: 89

# Repo-supervisor [![在 https://gitter.im/repo-supervisor/Lobby 参与讨论](https://badges.gitter.im/repo-supervisor/Lobby.svg)](https://gitter.im/repo-supervisor/Lobby) [![构建状态](https://travis-ci.org/auth0/repo-supervisor.svg?branch=master)](https://travis-ci.org/auth0/repo-supervisor) :exclamation: Repo-supervisor 目前不再积极维护 Repo-supervisor 是一款帮助您检测代码中的秘密和密码的工具。安装非常简单,只需向您的 Github 仓库添加一个新的 webhook 即可。 它在两种独立的模式下运行。第一种模式允许我们扫描 Github pull request,第二种模式通过命令行工作,扫描本地目录。 - [Repo-supervisor](#repo-supervisor) - [用法](#usage) - [前置条件](#pre-requisites) - [命令行模式](#command-line-mode) - [Github Pull Request 模式](#github-pull-request-mode) - [支持的文件](#supported-files) - [安全检查](#security-checks) - [常见问题](#frequently-asked-questions) - [它是如何工作的?](#how-does-it-work) - [为什么它没有找到任何秘密?](#why-doesnt-it-find-any-secrets) - [如何添加对新文件类型的支持?](#how-to-add-support-for-new-file-types) - [什么是 Auth0?](#what-is-auth0) - [在 Auth0 创建免费账户](#create-a-free-account-in-auth0) - [问题报告](#issue-reporting) - [作者](#author) - [许可证](#license) ## 用法 ### 前置条件 要开始使用该工具,请从 Github 发布页面下载最新版本。有适用于 AWS Lambda 部署和 CLI 模式的两种捆绑包。使用 CLI 模式不需要任何额外配置,而要使用 PR 模式,则必须先将捆绑包部署到 AWS Lambda。 - [AWS Lambda 部署](docs/aws.lambda.deployment.md) - [使用 Docker 镜像](docs/docker.image.md) ### 命令行模式 CLI 模式允许扫描带有源代码的本地目录,以检测文件中的秘密和密码。这是最简单的部署选项,它可以成为 CI 流水线的一部分。 扫描结果可以以纯文本或 JSON 格式返回: ``` $ npm ci && npm run build $ node ./dist/cli.js ./test/fixtures/integration/dir.with.secrets [./test/fixtures/integration/dir.with.secrets/foo/bar.js] >> zJd-55qmsY6LD53CRTqnCr_g- >> gm5yb-hJWRoS7ZJTi_YUj_tbU >> GxC56B6x67anequGYNPsW_-TL >> MLTk-BuGS8s6Tx9iK5zaL8a_W >> 2g877BA_TsE-WoPoWrjHah9ta [./test/fixtures/integration/dir.with.secrets/foo/foo.json] >> d7kyociU24P9hJ_sYVkqzo-kE >> q28Wt3nAmLt_3NGpqi2qz-jQ7 $ JSON_OUTPUT=1 node ./dist/cli.js ./test/fixtures/integration/dir.with.secrets {"result":[{"filepath":"./test/fixtures/integration/dir.with.secrets/foo/bar.js","secrets":["zJd-55qmsY6LD53CRTqnCr_g-","gm5yb-hJWRoS7ZJTi_YUj_tbU","GxC56B6x67anequGYNPsW_-TL","MLTk-BuGS8s6Tx9iK5zaL8a_W","2g877BA_TsE-WoPoWrjHah9ta"]},{"filepath":"./test/fixtures/integration/dir.with.secrets/foo/foo.json","secrets":["d7kyociU24P9hJ_sYVkqzo-kE","q28Wt3nAmLt_3NGpqi2qz-jQ7"]}]} ``` ### Github Pull Request 模式 在 Pull Request 模式下运行该工具,需要向 Github 仓库添加一个新的 webhook。无论何时有人打开、更新或关闭 PR,该 webhook 都应在 pull request 事件上触发。因此,当触发扫描时,它会根据扫描结果将 PR 状态更新为成功或失败。 Webhook 配置详情: | 设置 | 值 | | ------------ | ------------------ | | Payload URL | AWS Lambda URL | | Content type | `application/json` | | 事件类型 | `Pull requests` | 每当工具发现安全问题时,它会将 PR 状态设置为 error,并添加一个查看报告的链接。报告链接是一个带有附加查询参数 `?id=` 的 AWS Lambda 部署 URL,该参数允许生成 HTML 报告。 查看示例报告:
根据扫描的成功或失败情况,它将设置相应的 PR 状态。 **Error - 检测到问题** **Success - 未发现问题** **报告了误报** ## 支持的文件 Repo-supervisor 旨在尽可能减少误报数量。这意味着它不会扫描所有的文件类型和扩展名。每个文件都根据其格式进行解析以提取字符串,这是一个需要使用语言分词器的上下文感知过程。目前支持的文件类型有: - JSON (.json) - JavaScript (.js) - YAML (.yaml) 我们计划在未来添加新的文件类型。请阅读关于[如何添加新文件类型](docs/add.new.file.type.md)的文档以了解更多信息。 ## 安全检查 这是该工具当前已实现的检查列表: | 模块 | 详情 | | ---------------- | -------------------------------------------------------------------------------- | | **Entropy Meter** | 查找具有高熵值的字符串,以检测受支持文件类型中的秘密和密码。 | ## 常见问题 ### 它是如何工作的? **CLI 模式:** - 扫描作为参数提供的目录 - 获取所有文件的列表,并仅返回与[受支持的扩展名](#supported-files)(如 `*.json` 或 `*.js`)匹配的文件 - 使用分词器处理每个受支持的文件(每种文件类型使用不同的分词器) - 遍历所有提取的字符串并对其运行安全检查 - Entropy Meter - 计算熵值以查看其是否超过定义的阈值([maxAllowedEntropy](config/filters/entropy.meter.json)) - 以纯文本或 JSON 格式打印出检测到的问题 **Pull Request 模式:** - 接收 webhook payload - 处理 payload 并提取所有修改过的文件 - 遍历每个文件: - 根据文件类型使用相应的分词器 - 从文件中提取字符串 - 对这些字符串运行安全检查 - 如果工具检测到问题,则将 CI 状态设置为 error,并附带报告链接 - 如果未发现问题,则将 CI 状态设置为 success 阅读有关 [CI 状态](https://developer.github.com/v3/repos/statuses/)定义的更多信息。 ### 为什么它没有找到任何秘密? 请验证您要查找的秘密是否位于受支持的文件类型中。请在[支持的文件](#supported-files)部分了解更多信息。 ### 如何添加对新文件类型的支持? 要支持新的文件类型,您需要创建一个新的解析器。由于结构复杂,某些文件类型可能需要使用外部分词器,例如 [JavaScript](src/parser/tokenizer/js/index.js) 文件。另一方面,对于简单的文件类型,这非常直接,就像处理 [JSON](src/parser/tokenizer/json/index.js) 文件一样。 阅读更多关于如何添加[新文件类型](docs/add.new.file.type.md)的信息。 ## 问题报告 如果您发现了错误或有功能请求,请在此仓库的 issues 部分进行报告。请不要在公开的 GitHub issue 追踪器上报告安全漏洞。[负责任的披露计划](https://auth0.com/whitehat)详细说明了披露安全问题的流程。 ## 作者 [Auth0](https://auth0.com) ## 许可证 本项目基于 MIT 许可证授权。有关更多信息,请参阅 [LICENSE](LICENSE) 文件。
标签:AWS Lambda, CI/CD安全, DevSecOps, Docker, GitHub安全, Llama, MITM代理, secrets 扫描, Webhook, 上游代理, 代码仓库安全, 信息泄露检测, 力导向图, 安全助手, 安全扫描, 安全配置错误, 安全防御评估, 密码检测, 密钥查找, 时序注入, 源码安全, 自定义脚本, 请求拦截, 错误基检测, 静态代码分析