V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ssltest
V2EX  ›  推广

10 分钟对公司的 gitlab 代码仓库来一次安全体检

  •  
  •   ssltest · 2022-03-25 09:02:56 +08:00 · 1549 次点击
    这是一个创建于 734 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本文来自用户南瓜投稿

    去年 log4j 漏洞爆发时候就已经很痛苦了,当时把所有的线上服务排查了一遍。没想到这都已经过去 3 个月了,上周又遇到了一个服务仍在使用低版本,被外部攻击,有点受伤。 这件事后,老板让我全量扫一遍我们的代码库,看还有哪些服务还在用老版本的 log4j ,统一推一波修复,防止后续在发生此类事件。

    方案调研

    方案一(放弃) 当时我第一反应是写个脚本,遍历所有项目,再拉取项目到本地,通过正则匹配的方式识别代码中是否使用了 log4j ,并提取版本,并根据版本号判断是否有漏洞。但后面想了下,这个漏洞检测方式不具备通用性。一是组件判断很麻烦,我们通常说的组件名和配置文件中的组件名根本不是一回事,不是很好对应,二是如果后边再有其他漏洞,还要重新写正则,着实麻烦。 方案二(成功) 在 github 上搜了下开源项目,看看有没有能对项目做组件扫描的工具,找了半天找到了一个叫 Murphyscan 的开源项目,比较满足我的需求。思路是写个脚本,先通过 gitlab 接口获取项目列表,然后 clone 代码到本地,然后通过 Murphyscan 提供的客户端扫描,处理扫描结果获取目标漏洞组件。

    脚本流程

    为寻求便捷、高效,使用 python3 编写脚本,具体流程如下:

    1. 通过 python-gitlab 包,调用 gitlabapi ,获取项目列表及 clone 链接。
    2. clone 代码到本地
    3. 调用 Murphyscan 客户端,扫描项目
    4. 处理扫描结果(扫描结果为 json 类型),遍历漏洞,发现目标漏洞打印项目名及项目提交者。
    5. 删除 clone 代码

    进一步,增量检测

    全量检测搞定,老板交代的任务算是搞完,心情愉悦,但有一个问题,如果哪个程序员手抖,引用组件时候,又引入一个低版本的,那老板岂不是要杀我祭天。怀着忐忑的心情调研了下怎么扫描增量服务。 经过调研发现,gitlab 有一个叫 webhook 功能。他的功能是,管理员可以指定 push 、merge 等动作触发时,向某个指定接口通知该事件,这样我就可以知道有代码更新或者创建。拿到通知后我就去拉取最新代码,再扫描一次,发现有漏洞后通过机器人提醒我,这样增量检测就搞定了。

    gitlab 配置

    进入 Gitlab 平台,点击顶部 [菜单] - [管理员] 进入管理中心

    1. 选择系统钩子进入 Webhook 设置页面
    2. URL 处填写 python 起的 webapi 接口地址
    3. 下方触发器中确保 [仓库更新事件] 处于勾选状态
    4. 去掉 [启用 SSL 验证] 的默认勾选
    5. 点击 [添加系统钩子] 完成设置

    webapi

    通过 fastapi 起了一个 web 服务,其功能主要是接收 gitlab 的 webhook 事件推送,收到事件后,拉取项目代码,并进行扫描,同样扫描结果会通过飞书机器人将有问题的项目检测结果推送给我。

    待优化

    目前代码还有些问题,主要是目前流程还是单线程的,我们公司项目量和代码更新量比较少的情况下还可以,如果代码更新比较频繁,可能会导致使用 webapi 线程过多,服务崩溃。后续会通过任务队列形式,将 webhook 接口和漏洞检测拆开,通过任务队列管理检测任务。

    项目地址

    该项目已贡献给 MurphySecurity , 项目地址:https://github.com/murphysecurity/murphysec-gitlab-scanner.git

    1 条回复    2022-03-25 09:15:46 +08:00
    patrickyoung
        1
    patrickyoung  
       2022-03-25 09:15:46 +08:00   ❤️ 13
    @livid Promotion. 该公司曾经多次使用恶意滥用 GitHub API 创建大量 PR 目的推广其产品。被 GitHub 封禁后重复换号再来。目前暂时停止后改用发软文方式推广。

    #墨菲安全 #墨菲安全滥用 API 推广
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1742 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 16:37 · PVG 00:37 · LAX 09:37 · JFK 12:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.