【Rust项目实战】sensleak,扫描 Git 仓库中的敏感信息

这篇具有很好参考价值的文章主要介绍了【Rust项目实战】sensleak,扫描 Git 仓库中的敏感信息。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

github仓库:https://github.com/open-rust-initiative/sensleak-rs
Rust是一门神奇的编程语言,它提供了内存安全、零成本抽象、并发安全等特性,使开发人员能够编写高性能、高抽象和安全的代码。
这是我用rust开发的第一个工作,希望大家多多指教多多star,多多参与。

介绍

sensleak - 扫描 Git 仓库中的敏感信息
sensleak 是一个基于 Rust 的工具,用于扫描 Git 仓库中的敏感数据,特别是针对嵌入在代码中的密码、API 密钥、证书和私钥等敏感信息。

背景

许多开发人员在代码中存储了诸如密钥和证书等敏感信息,这会带来安全风险。因此,有商业服务如 GitGuardian 用于扫描 GitHub 和 GitLab,以及开源组件如 truffleHog 和 Gitleaks 提供类似功能的支持。

功能

  • 增强安全性。使用 Rust 开发工具,以确保提高安全性和内存安全性。 命令行界面。创建用户友好的命令行工具,生成全面的测试报告。
  • 带访问控制的 REST API。将工具作为服务运行,并通过 REST API 提供访问控制。利用 Swagger 生成 API 文档。
  • 并发扫描。利用线程池控制敏感信息的并发扫描,从而提高整体效率。

技术栈

  • 开发语言:Rust
  • 命令行交互:clap.rs
  • Git 仓库操作:git2
  • Web 框架:axum
  • 自动生成的 OpenAPI
  • 文档:utoipa

用法

命令行界面用法
在命令行界面 (CLI) 中运行工具,进行敏感数据检查。

cargo run --bin scan -- -help
使用说明:scan.exe [选项] --repo <REPO>

选项:
--repo <REPO> 目标仓库
--config <CONFIG> 配置文件路径 [默认值:gitleaks.toml]
--threads <THREADS> sensleak 启动的最大线程数 [默认值:10]
--chunk <BATCH_SIZE> 每个批次处理的 git 文件数量 [默认值:10]
--report <REPORT> 写入泄漏信息的 JSON 文件路径
--report-format <REPORT_FORMAT> 报告格式,可选项为 json、csv、sarif [默认值:json]
-v, --verbose 显示扫描过程的详细输出
--pretty 如果存在泄漏信息,则对 JSON 进行格式化打印
--commit <COMMIT> 要扫描的提交的 SHA
--commits <COMMITS> 以逗号分隔的要扫描的提交列表
--commits-file <COMMITS_FILE> 包含要扫描的提交列表的每行一个提交的文件
--commit-since <COMMIT_SINCE> 扫描比特定日期更新的提交。示例格式:'2006-01-02''2023-01-02T15:04:05-0700'
--commit-until <COMMIT_UNTIL> 扫描比特定日期更旧的提交。示例格式:'2006-01-02''2006-10-02T15:04:05-0700'
--commit-from <COMMIT_FROM> 从指定提交开始扫描
--commit-to <COMMIT_TO> 扫描直到指定提交为止
--branch <BRANCH> 要扫描的分支
--uncommitted 对未提交的代码运行 sensleak
--user <USER> 设置要扫描的用户 [默认值: ]
--repo-config 从目标仓库加载配置。配置文件必须是 ".gitleaks.toml""gitleaks.toml"
--debug 记录调试消息
--disk <DISK> 克隆仓库到磁盘
-h, --help 打印帮助信息(使用 '--help' 获取更多信息)
-V, --version 打印版本信息

运行 'cargo run --bin api' 获取 REST API。
仓库:https://github.com/open-rust-initiative/sensleak-rs
$ cargo run --bin scan -- --repo="D:/Workplace/Java/project/ExpiryReminderAssistant" -v --pretty
[INFO][2023-06-05 09:59:59] Clone repo ...
[
    Leak {
        line: "        String secret = \"1708b0314f18f420d3fe8128652af43c\"; //自己小程序的SECRET",
        line_number: 67,
        offender: "secret = \"1708b0314f18f420d3fe8128652af43c\"",
        commit: "410eb5a84408d3e63edb4d0975e5516e56f6ea6a",
        repo: "ExpiryReminderAssistant",
        rule: "Generic API Key",
        commit_message: "submit code\n",
        author: "sonichen",
        email: "1606673007@qq.com",
        file: "/backend/src/main/java/com/cyj/controller/login/WXLoginController.java",
        date: "2023-05-31 18:09:42 -08:00",
    },
   ....
    Leak {
        line: "  secret: \"c6e1180dda3eaca49f3d7ed912718e4d\"   #小程序密钥",
        line_number: 36,
        offender: "secret: \"c6e1180dda3eaca49f3d7ed912718e4d\"",
        commit: "410eb5a84408d3e63edb4d0975e5516e56f6ea6a",
        repo: "ExpiryReminderAssistant",
        rule: "Generic API Key",
        commit_message: "submit code\n",
        author: "sonichen",
        email: "1606673007@qq.com",
        file: "/backend/target/classes/application.yaml",
        date: "2023-05-31 18:09:42 -08:00",
    },
]
[WARN][2023-06-05 10:00:02]7 leaks detected. 1 commits scanned in 1.2538834s

API 用法
运行以下命令启动 REST API:

cargo run --bin api

API 文档位于 http://localhost:7000/swagger-ui/#

实现细节

整体的功能设计是模仿gitleaks(https://github.com/gitleaks/gitleaks)。
本项目主要是应用gitleaks的正则表达式规则(https://github.com/gitleaks/gitleaks/blob/master/config/gitleaks.toml),对文本内容进行扫描。

首先,通过git2 library获取到git仓库的文件内容,过了白名单文件allowlist后,再应用gitleaks的正则表达式规则对文本进行扫描,如果文本中含有rule.keyword关键词,就启动一个线程对文本进行正则表达式匹配。最后的结果支持在控制台直接输出或者以多种格式保存到本地。

其中,应用了线程池的知识来提高开发效率:

  1. 优化扫描单个文件的逻辑,当遇到一个keyword的时候,就启动一个线程用这个rule的正则表达式规则对内容进行扫描。遇到多个keyword则启动多个线程处理,具体线程数量由用户输入决定。
  2. 同时对多个文件内容进行扫描,具体线程数量由用户输入决定。

关于API和API文档

  1. Axum提供API
  2. 用utoipa集成swagger提供API文档

总结

Sensleak 是一个强大的基于 Rust 的工具,用于扫描 Git 仓库中的敏感数据。
它提供了增强的安全性、用户友好的界面和 REST API 功能。
利用并发扫描和批处理处理,优化了扫描过程。
Sensleak 使用了 Rust、clap.rs、git2、axum 和 utoipa 技术。

希望大家多多支持,多多star,参与进来一直开发。
源代码:https://github.com/open-rust-initiative/sensleak-rs文章来源地址https://www.toymoban.com/news/detail-508599.html

到了这里,关于【Rust项目实战】sensleak,扫描 Git 仓库中的敏感信息的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《三》Git 中的本地仓库

    通过 git init 初始化,可以把当前目录变成 Git 可以管理的本地仓库。目前仅仅是做了一个初始化 Git 仓库的操作,项目里的文件还没有交由 Git 仓库来管理。 git init 初始化后会在当前目录下会出现一个名为 .git 的目录,这个就是 Git 仓库的核心。 如果没有看到 .git 目录,那是

    2024年02月06日
    浏览(22)
  • kkfileview阿里云安全扫描:威胁类型敏感信息回显 (Sensitive Information Response)

    在阿里云部署的kkfileview,阿里云安全性扫描有漏洞 网络流量内容GET /getCorsFile?urlPath=file:///etc/passwd HTTP/1.1 Host: XXX.XXX.XXXX.XXX:80XX User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.6.2333.33 Safari/537.36 AliyunTaiShiGanZhi https://www.aliyun.com/product/sas Accept-Encod

    2023年04月20日
    浏览(49)
  • 本地项目上传到Git(Gitee)仓库,以及克隆仓库项目到本地

    1、打开我们的项目所在文件夹,我们发现是不存在.git文件 2、在你的项目文件夹外层【鼠标右击】弹出菜单,在【鼠标右击】弹出的菜单中,点击【Git Bash Here】,弹出运行窗口(前提条件是已装好git环境) 3、在命令窗口中输入:git init(初始化) 4、在 Gitee或Git 中 将创建好

    2024年02月13日
    浏览(71)
  • 如何将本地代码推送到git仓库/更换项目git仓库(简单粗暴)

    开发两年半了,这天有一个新项目需要我初始化项目,平常的工作自己只是拉取代码开发再推送,并没有自己创建过仓库,于是乎我研究了一个简单粗暴的方法,完美推送初始化项目! 1.首先在git网站先创建自己的远程仓库 2.直接复制远程仓库地址 3.使用编译工具直接拉取,

    2024年02月16日
    浏览(48)
  • 【代码管理】Git删除仓库中的大文件压缩仓库大小

    Git 仓库中有时会不小心加入了一些大文件,例如模型文件,视频文件 模型文件有可能以 .weights 结尾,或者 .onnx 结尾等等 视频文件有可能以 .avi 结尾,或者 .mp4 结尾 大文件如果一直在仓库中,仓库体积会非常大,下面我们提供一个脚本,专门用于清理 仓库中的文件使用。

    2024年04月26日
    浏览(39)
  • 【Git】本地项目代码上传到git仓库

    1.删除原有git信息,在项目目录,右键,选择 git Bash Here 删除当前项目的git信息: rm -rf .git 2.添加自己的远程信息 新建一个git远程仓库,以gitee为例: 仓库名称最好和你本地代码目录名称一致,因为下次拉取项目时候,这里的仓库名称就是你拉取代码的目录名称。 创建好的空

    2024年02月10日
    浏览(42)
  • Git 删除远程仓库中的分支

    要删除远程 Git 仓库中的分支,您可以使用以下命令。请注意,删除远程分支可能会影响其他协作开发者,因此 请谨慎操作 , 谨慎 , 请谨慎操作 。 首先,确保您已经将本地分支删除(如果有必要): 或者,如果分支尚未合并,您可能需要使用 -D 标志来强制删除本地分支:

    2024年02月06日
    浏览(42)
  • 本地项目关联远程git仓库

    背景:好久没有新建git仓库了、这次创建本地git仓库和远程推送时 遇到的问题 如果是复制已有项目重新执行1删除git仓库、如果不需要删除本地.git仓库、第一步可以省略  rm -rf .git // 删除本地.git文件 git init // 初始化git仓库 git remote add origin http://172.16.22.22:880/common/frontend.git

    2024年02月07日
    浏览(64)
  • 将本地项目上传git仓库

    将本地项目上传git仓库: 前提本地安装了git 2.1初始git 2.2添加到git 2.3 提交到git 2.4 添加本地的远程库地址(复制git上的) 2.5 推送远程分支

    2024年03月13日
    浏览(53)
  • Git更换项目代码仓库地址

    前言: 由于项目代码库整体迁移,导致开发机上旧的项目无法再推拉代码等,需要把项目的旧仓库地址更新为新仓库地址 更新地址 方式一:删除无效的仓库地址,添加新的仓库地址 方式二:直接修改本地仓库关联的远程仓库地址 方式三:手工修改 git 的 config 配置文件 【

    2024年02月04日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包