开源项目敏感词检测设计方案

开源项目敏感词检测设计方案项为了规避开源代码里的敏感信息泄露,造成不可估量的损失,我们需要在开源之前进行代码扫描检测,并启动定时任务去检测全网与网易相关的敏感信息。

项目背景

为了规避开源代码里的敏感信息泄露,造成不可估量的损失,我们需要在开源之前进行代码扫描检测,并启动定时任务去检测全网与网易相关的敏感信息。

设计概述

开源项目代码检测分为2个阶段:

开源前:

使用Gitleaks工具,对本地文件进行扫描,识别触发配置规则的敏感信息。

开源后:

使用GSIL对 指定组织 github.com/netease-kit 或者 全网 进行定时扫描,做到双重保障。

工具介绍

gitLeaks

官方文档

Gitleaks 是一个 SAST(Static Application Security Testing)工具,用于检测和防止git repos 中的硬编码敏感信息,如appKey、密码、api 密钥和令牌。 Gitleaks 是一种易于使用的一体化解决方案,用于检测代码中过去(commit记录)或现在的敏感信息。

本地仓库检测

官方已去掉远程仓库检测功能,目前仅支持本地检测

step1:install

# MacOS
brew install gitleaks

# Docker (DockerHub)
docker pull zricethezav/gitleaks:latest
docker run -v ${path_to_host_folder_to_scan}:/path zricethezav/gitleaks:latest [COMMAND] --source="/path" [OPTIONS]

# Docker (ghcr.io)
docker pull ghcr.io/zricethezav/gitleaks:latest
docker run -v ${path_to_host_folder_to_scan}:/path zricethezav/gitleaks:latest [COMMAND] --source="/path" [OPTIONS]

# From Source
git clone https://github.com/zricethezav/gitleaks.git
cd gitleaks
make build

可以通过命令检查是否安装成功:

$ gitleaks version 
8.15.0

step2: 配置检测规则

gitleaks 的匹配规则是用 TOML 来定义的,详情可查看gitleaks rules summary。默认使用官方很全的默认规则 ,如果配置了自定义规则,运行命令时需要加上gitleaks detect -c=gitleaks.toml

添加一个 gitleaks.toml 文件,写入自定义匹配规则:

# 规则的名称
title = "gitleaks config"
# 规则的描述,对应扫描结果的Description字段 
description = "Check appKey" 
# 一个正则表达式 
regex = '''(?i)(?:appKey|key|token|secret|passwd|password|auth)(?:[0-9a-z\-_\t .]{0,20})(?:[\s|']|[\s|"]){0,3}(?:=|>|:=|\|\|:|<=|=>|:)(?:'|\"|\s|=|\x60){0,5}([0-9a-z\-_.=]{10,150})(?:['|\"|\n|\r|\s|\x60|;]|$)''' 
# 规则的标签,对应扫描结果的tags字段 
tags = ["gitlab", "security", "appKey"]

怎么忽略旧的检测结果?

扫描大型仓库或者历史悠久的仓库,使用此 –baseline-path(简写-b) 命令可以忽略指定文件的检测结果,然后通过–report-path(简写-c) 存放新的检测结果。

$ gitleaks detect -r report.json -b old-report.json

如何忽略检测某行代码?

  1. 在改行代码后面添加一条注释,指示gitleaks忽略该行。
discord_client_secret = '8dyfuiRyq=vVc3RRr_edRk-fK__JItpZ' #gitleaks:allow
  1. 在根目录添加 .gitleaksignore 文件,将漏洞唯一标识Fingerprint字段内容添加到该文件里,可以绕过扫描
123467b3axxxxxxx87f7: src/pages/index.tsx:generic-api-key:20

step3: 执行检测命令

利用上述匹配规则,能够对全部是数字的信息进行匹配,将其标记为敏感信息,并生成report.json文件记录匹配结果,可以用如下命令进行扫描检测:

$ gitleaks detect -r=report.json 
// 如果有自定义规则 
$ gitleaks detect -r=report.json -c=gitleaks.toml 
// 把检测结果直接打印在屏幕上 
$ gitleaks detect -v

使用命令介绍

Usage:
  gitleaks [command]

Available Commands:
  completion  generate the autocompletion script for the specified shell
  detect      detect secrets in code
  help        Help about any command
  protect     protect secrets in code
  version     display gitleaks version

Flags:
  -b, --baseline-path string path to baseline with issues that can be ignored
  -c, --config string config file path
                                   order of precedence:
                                   1. --config/-c
                                   2. env var GITLEAKS_CONFIG
                                   3. (--source/-s)/.gitleaks.toml
                                   If none of the three options are used, then gitleaks will use the default config
      --exit-code int exit code when leaks have been encountered (default 1)
  -h, --help help for gitleaks
  -l, --log-level string log level (trace, debug, info, warn, error, fatal) (default "info")
      --max-target-megabytes int files larger than this will be skipped
      --no-banner suppress banner
      --redact redact secrets from logs and stdout
  -f, --report-format string output format (json, csv, sarif) (default "json")
  -r, --report-path string report file
  -s, --source string path to source (default: $PWD) (default ".")
  -v, --verbose show verbose output from scan

Use "gitleaks [command] --help" for more information about a command.

检测结果说明

您可以使用命令验证 gitleaks 发现的结果 git log。以下为官方示例输出:

Finding:     aws_secret="AKIAIMNOJVGFDXXXE4OA"
RuleID:      aws-access-token
Secret       AKIAIMNOJVGFDXXXE4OA
Entropy:     3.65
File:        checks_test.go
Line:        37
Commit:      ec2fc9d6cb0954fb3b57201cf6133c48d8ca0d29
Author:      Zachary Rice
Email:       z@email.com
Date:        2018-01-28T17:39:00Z
Fingerprint: ec2fc9d6cb0954fb3b57201cf6133c48d8ca0d29:checks_test.go:aws-access-token:37

GSIL

官方文档

gitlab地址:g.hz.netease.com/yunxin-app/…

近实时监控GitHub敏感信息泄露,并发送邮箱告警通知。核心是通过各种参数配置来调用github API search-code-api 拿到对应的检测结果,发送到邮箱。

github在线搜索页面:github.com/search?q=or…

使用说明

环境安装

仅在Python3下验证过

$ git clone https://github.com/FeeiCN/GSIL.git 
$ cd GSIL/ 
$ pip3 install -r requirements.txt

参数配置

GSIL/config.gsil(复制config.gsil.cfg.example并重命名config.gsil.cfg): 告警邮箱和Github配置

[mail] 
host : smtp.qq.com 
# SMTP端口(非SSL端口,但会使用TLS加密) 
port : 465 
# 多个发件人使用逗号(,)分隔 
mails : gsil@feei.cn 
from : GSIL 
# 邮箱里开启POP3/SMTP服务时的授权码 
password : your_password 
# 多个收件人使用逗号(,)分隔 
to : feei@feei.cn [github]
# 扫描到的漏洞仓库是否立刻Clone到本地(~/.gsil/codes/) 
# 此选项用作监控其它厂商,避免因为仓库所有者发现后被删除 
clone: false # GitHub Token用来调用相关API,多个Token使用逗号(,)分隔 
# https://github.com/settings/tokens 
# GitHub已调整最新的速度限制,请求数量大幅降低,单账户多Token将共享限速,详见https://docs.github.com/en/rest/reference/search#rate-limit 以及 https://docs.github.com/en/rest/reference/rate-limit 
# 建议你根据关键词数量配置多个GitHub账户的Token以避免超速 
tokens : your_token

扫描规则

GSIL/rules.gsil(复制rules.gsil.yaml.example并重命名rules.gsil.yaml): 扫描规则

field meaning optional default describe
keyword key word required When multiple keywords are used, space segmentation is used(Example: 'username password'), When you need a precise search, use double(Example: "quotesele.me")
ext file suffix optional all suffixes Multiple suffixes are separated by comma(Example: java,php,python)
mode matching mode optional normal-match normal-match(The line that contains the keyword is matched, and the line near the line is matched) / only-match(Only the lines that match the key words) / full-match(Not recommended for use)(The search results show the entire file)
{
    # 一级分类,一般使用公司名,用作开启扫描的第一个参数(python gsil.py test)
    "test": {
        # General use of product name
        "mogujie": {
            # Internal domain name of the company
            "\"mogujie.org\"": {
                # mode/ext options no need to configure by default
                "mode": "normal-match",
                "ext": "php,java,python,go,js,properties"
            },
            # Company code's characteristic code
            "copyright meili inc": {},
            # Internal host domain name
            "yewu1.db.mogujie.host": {},
            # External mailbox
            "mail.mogujie.com": {}
        },
        "meilishuo": {
            "meilishuo.org": {},
            "meilishuo.io": {}
        }
    }
}

运行命令

第一个参数为规则里的一级分类

# 启动测试 
$ python gsil.py yunxin
# 测试token有效性
$ python gsil.py --verify-tokens
$ crontab -e

# 漏洞报告,此项任务发现漏洞后会立刻发送漏洞报告
# 每个小时运行一次,GitHub API接口调用频率限制可以根据token数量、规则数量来调整crontab频率实现,若觉得麻烦可简单配置多个token来实现。
# crontab执行时间决定了报告的发送时效性,间隔越短报告越快但频率限制越容易触发
# 建议配置5个token+20条规则,每15分钟运行一次(可以配置更短,根据各自需求确定)
*/15 * * * * /usr/bin/python /var/app/GSIL/gsil.py test > /tmp/gsil

# 统计报告,发送一天的扫描进展,包括运行次数、成功次数、失败次数、发现漏洞数、各域名状况、异常等等
# 每天晚上11点发送统计报告
0 23 * * * /usr/bin/python /var/app/GSIL/gsil.py --report

扫描报告过一次的将不会重复报告,缓存记录在~/.gsil/目录

今天的文章开源项目敏感词检测设计方案分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/23458.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注