当前位置: 首页 > news >正文

【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

http://www.lryc.cn/news/93125.html

相关文章:

  • 搭建一个定制版New Bing吧
  • 使用AIGC工具提升论文阅读效率
  • 本周大新闻|Vision Pro头显重磅发布;苹果收购AR厂商Mira
  • 在Spring Boot微服务使用JedisCluster操作Redis集群String字符串
  • 5.1 合并数据
  • 华为OD机试真题 JavaScript 实现【求解立方根】【牛客练习题】
  • 初探BERTPre-trainSelf-supervise
  • Ficus 第二弹,突破限制器的 Markdown 编辑管理软件!
  • 基于Springboot+vue+协同过滤+前后端分离+鲜花商城推荐系统(用户,多商户,管理员)+全套视频教程
  • MixQuery系列(一):多数据源混合查询引擎调研
  • d2l学习——第一章Introduction
  • 【python】【Word】用正则表达式匹配正文中的标题(未使用样式)并通过win32com指定相应样式
  • Matlab实现光伏仿真(附上完整仿真源码)
  • JVM零基础到高级实战之Java内存区域方法区
  • SpringCloud-stream一体化MQ解决方案-消费者组
  • HNU计算机图形学-作业二
  • 湖南大学OS-2020期末考试解析
  • 【用户认证】密码加密,用户状态保存,cookie,session,token
  • LVS+Keepalivedd
  • WPF开发txt阅读器7:自定义文字和背景颜色
  • Elasticsearch文件存储
  • chatgpt赋能python:如何安装pyecharts
  • cmake 添加一个库
  • 代码随想录二刷 226 翻转二叉树 102 二叉树的层序遍历 101 对称二叉树
  • 【深入浅出C#】章节 3: 控制流和循环:条件语句
  • Java框架学习--Spring
  • 【爬虫】Xpath和CSS信息提取的方法异同点
  • 数字IC前端学习笔记:FIFO的Verilog实现(二)
  • 2.2 搭建Spark开发环境
  • webpack指定输出资源的路径和名称