旧树开新花:再谈GitHub监控

新闻 应用安全
本文不涉及常见的基于代码关键字匹配的 GitHub 监控。而是从 GitHub 的账户出发,通过人的关系来获得一些代码搜索不具有的优势。

 本文不涉及常见的基于代码关键字匹配的 GitHub 监控。而是从 GitHub 的账户出发,通过人的关系来获得一些代码搜索不具有的优势。 

  疑云乍现

  问题要从一个晴朗而又妩媚的下午说起,我喝着娃哈哈,看着自认为世界上***雅的代码,然而当我上传到 GitHub 私有仓库的时候,嘴角的一抹笑意停留在 10 秒 24 毫秒前的阳光下,因为我发现上传显示的用户并非是我,换句话说,commit 页面并未显示我帅气的头像,我的职业第二敏感性告诉我,这个事情有点蹊跷:

a.这个人是谁?

b.我的机器被劫持了?

c.我的账户被黑了?

d.GitHub 出问题了?

e.某些未知原因?

  a 问题是比较好回答的,点进去发现是一个非常正常的用户,我总不至于被黑了,不行,职业尊严让我强制排除了这个选项,但是我比较关心的一个问题是 ta 是不是能看到我的代码?ta 会不会因为如此优雅的代码而感到自愧不如?所以随后出于对他情感的考虑先清空了自己的代码。

  对于b,更换了多台机器,发现仍然具有相同的问题,同样出于职业尊严,我的机器不可能都被黑了,所以问题坚决不在b。 

  随后又细细过滤了最近的 GitHub 登录记录,c的可能性也被排除了;再问周围的童鞋,d的问题也被排除了。

  目前只剩下e原因,但是这句话其实相当于没有说,因为一切未知都能归结到未知。

  刨根问底

  问题在这已经陷入了死胡同,简单描述下就是:因为某些未知原因,我的 GitHub 的提交人变成了未知的某人,而且在换了多台机器之后,问题依然重复。一般遇到这种情况,我的习惯都是从头梳理整个流程,从全局分析可能存在问题的环节。当务之急是需要重新梳理下所有的流程,然后不断尝试,那么问题来了,从编写代码到下载 Git 并使用 Git 提交到 GitHub 的流程是什么呢?

  Git 首先需要下载到本地,下载本地的时候需要使用 HTTP 协议,HTTP 协议是基于 TCP 的,说到 TCP,那么就要了解三次握手…….

  半小时后……

  看着 16 位微处理器芯片 8086 微处理器总线接口部分(BIU) 和执行部件(EU)知识的我……感觉再深挖下去估计要开始学习二氧化硅的化学反应了,呵,知识啊。 

  只好另辟蹊径,找了一个熟悉 Git 的强力外援,我们先尝试了……然后尝试了……接着又尝试了……终于功夫不负有心人,找到了***的症结所在。不是故意跳过这段,实在是这个过程乏善可陈。

  总之看下边重点了:

  这个问题引发的根本原因是使用某发行版源仓库安装的 Git 默认内置了一个邮箱和用户名,然后 GitHub 在上传的时候识别用户是默认通过 Git 中配置的邮箱来识别,倘若用户邮箱存在(在 GitHub 注册或者登记)则显示匹配到的用户名,否则会显示 Git 配置中的用户名,验证之后发现这个邮箱不一定是注册邮箱,而是在设置里添加的都可以关联到,也就是刚刚提到的登记邮箱,即使你没有验证邮箱的归属权限,如下图:

  而且尤其比较诡异的是使用 Git config user.name 和 Git config user.email 这两个命令查看均显示为空,就像这个命令从未执行一样,但是在使用 Git log 的时候才会真正显示提交本次 commit 的用户名和邮箱,也就是该发行版 Git 内置的缺省账户和邮箱。

  拨云见日

  上边说了那么多,那么这个东西有什么用呢?我一直秉承一个观点:安全总是跟场景相关的,所以要想知道这个有什么危害,首先需要做的就是设想一些可利用的场景。

  在这里最基本的利用方式是可以伪造别人去提交代码,但是这个对我们来说其实并没有什么太大的用处。准确来说,更多有一种恶作剧的味道。

  那有没有什么其他的场景是比较有用的,其实在写这篇文章之前,我还是比较犹豫的,众所周知,GitHub 有很多用户提交了一些比较敏感的东西,而作者是不想在现实中被发现的,但是上述提到这个接口,可以通过批量爆破邮箱从而获得对应的用户名。那么也有可能获得了那些不愿意公开自己身份用户的联系方式。

  扯的有点远了,还是回归到题目当中 GitHub 监控的问题,当前 GitHub 监控一直是基于代码搜索中的关键字匹配,真的是谁用谁知道——那是相当的难用。所以目前很多人也是在爬虫和更好的过滤上下功夫。但是这个流程还有一个盲点存在,就是在发现违规上传的***时间并不能特别准确的定位到具体的个人。

  说完传统监控的缺陷同时,我们其实也找到了新的利用场景,因为入职信息登记都会写到自己的常用邮箱(还没有入职,所以基本填写自己私人常用邮箱),那么可以通过这个接口来获得对应的用户账户,换句话说,安全团队基本就有了部分员工注册的 GitHub 账户,这个时候违规上传公司代码的监控是不是可以做一些分级管理,重点监控。而且更重要的一点,这也解决了发现问题简单、定位人员困难的问题。

  至于操作过程,就相当简单了,新建一个项目,然后使用脚本修改自己用户邮箱进行 commit,在这里我以修改自己的邮箱为例:

  之后 push 到 GitHub 上去,***在 GitHub 上就可以看到绑定了对应邮箱的用户,如下图(项目地址:https://github.com/daysdaysup/TSRC_TEST):

  至于剩下的就不用再多说了。套用一句比较流行的打油诗:懂的自然懂,刀剑侠客梦,事了拂衣去,深藏身与名。

  ***特别致谢我的师兄吴恒,感谢他在撰写本文时提供的帮助。

责任编辑:张燕妮 来源: freebuf
相关推荐

2013-10-22 09:37:14

网络配置管理网络性能监控

2020-01-21 22:23:18

代码开发AI

2017-08-25 09:22:18

miui小米MIUI

2015-06-10 10:35:51

2013-04-18 17:07:36

2012-11-20 16:23:19

飞轮UPS数据中心电源

2022-05-09 08:01:23

countdistinctMySQL

2010-06-21 21:35:28

运维管理安防行业H3C

2010-06-18 23:01:16

IT管理安防产业H3C

2014-03-19 10:03:56

2021-08-13 15:03:04

GitHub代码开发

2013-07-21 04:11:12

PythonRubyPHP

2009-11-04 11:51:08

技术领袖

2021-07-31 23:09:42

GPU内存带宽

2012-02-27 09:30:22

JavaScript

2019-12-04 10:15:10

GitHub代码开发者

2016-12-15 14:11:28

手工测试消失

2010-06-17 16:27:26

WAP协议

2010-09-28 15:30:39

3550配置dhcp

2017-10-18 22:34:33

SQL等值分组有序分组
点赞
收藏

51CTO技术栈公众号