GitHub疑似遭受中间人攻击

github-attacked-cover.png

昨天下午4点多起,github pages 突然不能访问,今早,GitHub 官网也出现不能访问的情况。访问这些网站时,浏览器统一检测出证书无效。

现在是2020年3月27日北京时间13点,目前 github.com 和 pages.github.com 已经恢复访问。

这是昨天我在访问 github pages 页面的截图:
githubpages-遭到攻击.jpg

提示ERR_CERT_AUTHORITY_INVALID网站证书无效。并告诉我:您目前无法访问 pages.github.com,因为此网站使用了 HSTS。网络错误和攻击通常是暂时的,因此,此网页稍后可能会恢复正常。

而我在国外的朋友访问却没有问题,开始我还天真地以为是被墙了,后来晚上看到有朋友在朋友圈讨论此事,这才认真去看了下浏览器收到的网站证书:

github-attacked-003.png

GitHub网站证书居然使用QQ邮箱?AYK?!显然,这不是被墙,这是被攻击了啊。这些网站的证书被攻击者使用的自签名证书代替,导致浏览器无法信任,从而阻止用户访问。这次攻击可能只针对中国IP的访问者,外网并未受到影响。

兴趣来了,这个留下qq邮箱的人是攻击者吗?

可能是,也可能不是(这不是废话吗 - -!)。可能是攻击者自信放出自己的邮箱,也有可能是攻击者不小心暴露了自己的邮箱,但也有可能是攻击者放出的烟雾弹,这个qq号只是混淆视听的假线索。

Anyway,不管怎样,也不妨碍我们去简单人肉这个qq号的主人是谁。搜索qq号 346608453 ,这是一个网名为心即灵山的用户:

github-attacked-004.png

经查资料,这不是 GitHub 第一次遭受攻击,早在2015年,就受到过一次大规模的中间人攻击,github官方日志
github2015年遭受中间人攻击.jpg

翻译:
我们正在遭受github历史上最大的DDOS(分布式拒绝服务)攻击,攻击从3月26号,周四下午两点开始,攻击手段组合了多种攻击方式,从一些老式的攻击手段到新式,通过浏览器让毫不相干的围观群众参与到对github攻击流量的贡献,根据我们收到的报告推断,我们相信攻击的目的是让我们删除某些特定的内容。

关于中间人攻击,我在百度百科找到了还算通俗易懂的解释:

中间人攻击(Man-in-the-MiddleAttack,简称“MITM攻击”)是一种“间接”的入侵攻击,这种攻击模式是通过各种技术手段将受入侵者控制的一台计算机虚拟放置在网络连接中的两台通信计算机之间,这台计算机就称为“中间人”。这是一种由来已久的网络入侵手段,并且当今仍然有着广泛的发展空间,如SMB会话劫持、DNS欺骗等攻击都是典型的MITM攻击。简而言之,所谓的MITM攻击就是通过拦截正常的网络通信数据,并进行数据篡改和嗅探,而通信的双方却毫不知情。
——百度百科

中间人攻击举例:
假设爱丽丝(Alice)希望与鲍伯(Bob)通信。同时,马洛里(Mallory)希望拦截会话以进行窃听并可能在某些时候传送给鲍伯一个虚假的消息。

首先,爱丽丝会向鲍勃索取他的公钥。如果Bob将他的公钥发送给Alice,并且此时马洛里能够拦截到这个公钥,就可以实施中间人攻击。马洛里发送给爱丽丝一个伪造的消息,声称自己是鲍伯,并且附上了马洛里自己的公钥(而不是鲍伯的)。

爱丽丝收到公钥后相信这个公钥是鲍伯的,于是爱丽丝将她的消息用马洛里的公钥(爱丽丝以为是鲍伯的)加密,并将加密后的消息回给鲍伯。马洛里再次截获爱丽丝回给鲍伯的消息,并使用马洛里自己的私钥对消息进行解密,如果马洛里愿意,她也可以对消息进行修改,然后马洛里使用鲍伯原先发给爱丽丝的公钥对消息再次加密。当鲍伯收到新加密后的消息时,他会相信这是从爱丽丝那里发来的消息。

整个过程大致会是这样:

  1. 爱丽丝发送给鲍伯一条消息,却被马洛里截获:
    爱丽丝 “嗨,鲍勃,我是爱丽丝。给我你的公钥” –>马洛里鲍勃
  2. 马洛里将这条截获的消息转送给鲍伯;此时鲍伯并无法分辨这条消息是否从真的爱丽丝那里发来的:
    爱丽丝马洛里 “嗨,鲍勃,我是爱丽丝。给我你的公钥” –>鲍伯
  3. 鲍伯回应爱丽丝的消息,并附上了他的公钥:
    爱丽丝马洛里<– [鲍伯的公钥] –鲍伯
  4. 马洛里用自己的公钥替换了消息中鲍伯的公钥,并将消息转发给爱丽丝,声称这是鲍伯的公钥:
    爱丽丝<– [马洛里的公钥] –马洛里鲍勃
  5. 爱丽丝用她以为是鲍伯的公钥加密了她的消息,以为只有鲍伯才能读到它:
    爱丽丝 “我们在公共汽车站见面!” –[使用马洛里的公钥加密]–>马洛里鲍勃
  6. 然而,由于这个消息实际上是用马洛里的公钥加密的,所以马洛里可以解密它,阅读它,并在愿意的时候修改它。他使用鲍伯的公钥重新加密,并将重新加密后的消息转发给鲍伯:
    爱丽丝马洛里 “在家等我!” –[使用鲍伯的公钥加密]–>鲍伯
  7. 鲍勃认为,这条消息是经由安全的传输通道从爱丽丝那里传来的。

其实马洛里一直夹在它们会话的中间,进行拦截和转发,必要时对内容进行篡改,而爱丽丝和鲍勃均毫不知情。这就是中间人攻击。

这个例子很形象地说明了在网络安全上的一个关键:通信双方需要某种方法来确定他们是真正拿到了属于对方的公钥,而不是拿到来自攻击者的公钥。否则,这类攻击一般都是可行的,在原理上,可以针对任何使用公钥——密钥技术的通讯消息发起攻击。

幸运的是,有各种不同的技术可以帮助抵御 MITM 攻击,比如最文章最开始提到的 HSTS。目前大多数网站都开启了加密技术对抗劫持,因此遇到证书伪造的攻击,用户访问会被阻止,用户的损失止步于打开不了网页。

关于什么是HSTS,推荐大家看这篇文章:
HSTS详解

更多关于中间人网络攻击的信息,有兴趣可以一读这篇:
对github的中间人攻击