哈萨克斯坦拦截HTTPS流量事件的详细分析

2023-12-12 17:20

本文主要是介绍哈萨克斯坦拦截HTTPS流量事件的详细分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

这篇文章是我们对哈萨克斯坦政府命令电信运营商协助进行HTTPS流量拦截事件的分析。

近期,哈萨克斯坦政府开始使用一个虚假的根证书对Facebook、Twitter和谷歌等网站的HTTPS连接进行中间人攻击。自从此事件被曝出,我们就一直对其中的技术细节和哈萨克斯坦的网络状况进行跟踪分析,先将初步研究结果公布如下:

  • 哈萨克斯坦政府使用虚假的根证书拦截HTTPS连接,这大大破坏了哈萨克斯坦互联网用户的上网体验。

  • 默认情况下,浏览器不信任虚假的根证书,用户必须手动安装。但如果用户不安装虚假的根证书,则根本无法访问某些站点。

  • 真正的拦截行为是在7月17日被首次发现的,自7月20日以来我们一直紧密监控拦截情况,整体拦截活动可以说是断断续续。

  • 只有某些站点的HTTPS流量被拦截,主要根据SNI(Server Name Indication)中的主机名进行拦截。至少有37个域名受到影响,包括知名的社交媒体和通讯网站(完整列表见下面)。

  • 到目前为止,此次拦截行为似乎影响了该国最大的互联网服务提供商Kazakhtelecom(即9198 KazTelecom)的部分网络服务。

  • 国外访问哈萨克斯坦也有可能触发拦截机制,这也方便了我们进行研究。

什么是HTTPS拦截?

HTTPS可通过加密来保证浏览器和网站之间的通信隐秘性,防止互联网服务提供商和政府拦截读取通信内容。网站服务器通过提供由证书颁发机构数字签名的证书来证明其身份,浏览器也有自己默认信任的证书机构。例如,facebook.com会向浏览器提供由DigiCert签名的证书,DigiCert是一个全球公认的证书颁发机构,几乎所有浏览器都信任它。

浏览器可以通过验证网站所提供的证书确认它的真实身份,确保他们正在与真正的facebook.com对话。此外,facebook.com提供的证书还包含一个加密密钥,用于保护浏览器和Facebook的后续通信。

而在HTTPS拦截攻击(中间人攻击)中,攻击者假装自己是一个知名网站(例如facebook.com),并向浏览器提供自己的假证书。通常,攻击者提供的证书并非由权威机构颁发,浏览器并不会信任,会阻断连接。但是,如果攻击者可以说服受害者手动往浏览器中添加虚假的根证书,则浏览器会信任攻击者的服务器发送的虚假证书。此时,攻击者可以假冒成任何网站,受害者会“主动”向其传递敏感信息。

Censored Planet的发现

Censored Planet是一个全球性的网络监察平台,位于密歇根大学。它会利用某种远程监控技术不断监测全球170多个国家各种类型的网络波动。

而这个平台提示我们,从2019年7月20日开始,哈萨克斯坦可能发生了大规模中间人攻击,一种名为HyperQuack的技术检测到了这一现象。HyperQuack的工作原理是主动连接到TLS服务器并发送握手包,其中的SNI包含了很敏感、可能会被拦截的域名。如果返回的结果与正常的有所不同,存在干扰迹象,则代表服务器所在的国家对特定网络通信做出了干扰。

在这里插入图片描述

经过调查,我们发现以上异常情况中所涉及的证书都是虚假的,都是由哈萨克斯坦根证书机构CA (Qaznet Trust Network)签署的。这意味着中间有人先解密流量,然后用自己的密钥加密,再转发到目的地。
在这里插入图片描述

我们的调查还显示,只有当连接遵循某条网络路径时,才会被拦截。但无论是从国内连国外,还是从国外连国内,都会被拦截。这意味着我们可以通过主动连接到哈萨克斯坦境内的TLS服务器来进行研究分析。

深入分析

受到Censored Planet平台的提示,我们进行了几个实验,以更好地理解哈萨克斯坦的HTTPS的拦截行为。
在这里插入图片描述

我们在哈萨克斯坦有2个VPS和52个RIPE Atlas网络探针。并且我们还对该国的TLS服务器进行了更全面的扫描。

最后,我们只直接观察到两个HTTPS拦截样例,都来自RIPE Atlas的探测。我们的两个VPS都可以访问受影响的站点(例如facebook.com),没有经过任何HTTPS拦截。这表示美国的网站的受影响面较小,即使是已知的受影响的域名,请求也并不一定都被拦截。

我们发现要注入证书必须满足以下几个条件:

  • 浏览器到服务器必须通过KazTelecom所能控制的路径,这也是我们能观察到的注入发生的地方。

  • 浏览器必须发送的TLS连接中的SNI中的主机名必须包含敏感域名。

  • 服务器必须提供一个有效的受浏览器信任的TLS证书,不一定是SNI中主机的证书。

当然,这些条件是必要的,但并不是充分的。我们建立了一些满足以上要求的连接,却没有观察到证书注入。我们仍在研究必须满足哪些其他条件才能触发拦截。

据Censys的数据,哈萨克斯坦有超过200000个可访问的TLS服务器,但其中只有6736个提供了浏览器信任的证书。在7月21日,我们从美国对这6736个服务器中进行了TLS握手,并将SNI中的主机名设置为facebook.com和google.com,结果只有459台服务器(7.0%)被注入了证书,这表明哈萨克斯坦的HTTPS拦截行动目前只发生在该国的一小部分地区。

我们又从哈萨克斯坦国内的VPS对6736个服务器进行了相同的扫描,发现有1598(24%)台被注入了证书。虽然这些服务器位于不同的位置,但是所有这些服务器的都和KazTelecom有关。

而在7月22日早些时候,我们注意到所有拦截行为都已停止,9小时后又恢复。此时,我们又重新测试了一遍,发现注入证书的HTTPS服务器数量减少了,仅300台(4.4%);我们再在哈萨克斯坦的VPS中进行测试,发现仅有400台(5.9%)。这表明拦截系统仍在测试或调优中,这可能是广泛部署的前兆。

分析技术

为了确定拦截发生的确切位置,我们使用了一种基于TTL的技术。对于每个出现拦截情况的HTTPS服务器,我们发送多个包含不同TTL值的请求,测试出在发生注入情况下,TTL的最小值。由于TTL控制了跳转步数,因此,如果我们将一个数据包的TTL设置为3,并且没有监测到任何证书注入,那么就说明进行注入的设备离我们超过3次跳转的距离。通过这种技术,我们精确定位了注入设备的网络位置。

我们在哈萨克斯坦的VPS上对被注入证书的1598台HTTPS服务器进行了这种扫描。对于每台服务器,我们都发送了两个请求,一个SNI中的域名为受影响网站,另一个则相反,然后再测量收到响应的最小跳转数。最后,我们发现,注入行为发生在离用户3、4跳的位置,在美国的测试也发现了相同的结果。

通过对网络跳转的分析,我们发现在95%的情况下,注入前的最后一跳地址为92.47.151.21092.47.150.198,注入后的跳转地址为95.56.243.9295.59.170.59。所有这些IP地址都属于KazTelecom,这表明KazTelecom是目前唯一进行HTTPS证书注入的互联网服务提供商位置。下面是一个示例,其中注入发生在4至5跳之间。

! 1 185.120.76.1
! 2 88.204.195.89
! 3 212.154.195.97
! 4 92.47.151.210
! 5 95.56.243.92
! 6 178.89.110.198
! 7 178.89.110.206
! 8 *
Certificate injection occurred between hops 4 and 5.

注入证书

虽然证书注入是由浏览器发出请求中的SNI触发,但是注入的虚假证书似乎是基于服务器的合法证书而不SNI中的域名。这意味着如果向站点iqala.kz发送一个SNI中主机名为facebook.com的请求,则会注入一个CN=iqala.kz的证书,且注入的证书具有以下属性:

  • 与原始服务器证书相同的主题名和主题替代名(SAN)

  • 将公钥替换为基于主机的RSA-2048密钥

  • 有效期与原证书相同,但这个特点已在过去6小时内变化

  • 序列号与原始序列号相同,但最后4个字节会被更改

  • 删除所有其他x509扩展

该证书由一个中间证书(C=KZ, CN=Security Certificate)颁发,该证书由根证书(C=KZ, CN=Qaznet Trust Network)签名。中间证书涉及一个2048位RSA密钥,有效期为3年,而根证书涉及一个4096位RSA密钥,有效期为30年。

流量指纹

执行拦截的设备必须连接到原始TLS服务器,以便检索其合法证书方便进行验证和替换。经过我们对自己所控制的HTTPS服务器发起TLS请求所进行的测试,触发拦截的TLS请求(即SNI中的域名为facebook.com)的响应和正常的响应有很大不同。如果你想进行研究分析,可以点击这里下载。

受影响的域

HTTPS拦截主要由SNI中的域名触发。在我们测试的约10000个域名中,有37个域名受到影响,这些域名主要属于社交媒体和交流网站:

allo.google.com, android.com, cdninstagram.com, dns.google.com, docs.google.com, encrypted.google.com, facebook.com, goo.gl, google.com, groups.google.com, hangouts.google.com, instagram.com, mail.google.com, mail.ru, messages.android.com, messenger.com, news.google.com, ok.ru, picasa.google.com, plus.google.com, rukoeb.com, sites.google.com, sosalkino.tv, tamtam.chat, translate.google.com, twitter.com, video.google.com, vk.com, vk.me, vkuseraudio.net, vkuservideo.net, www.facebook.com, www.google.com, www.instagram.com, www.messenger.com, www.youtube.com, youtube.com

互联网服务提供商告诉用户安装虚假的根证书,可以帮助防止欺诈、黑客攻击。然而,这个受影响域名列表表明,政府真正的意图是监视社交网络上的言论。

结论

哈萨克斯坦国内的HTTPS拦截行动侵犯了该国互联网用户的隐私。虽然没有在全国范围内实施,但政府似乎有意进行全国推广。国际社会或许需要持续关注这一事件,因为这与全球信息安全背道而驰。

本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场:https://nosec.org/home/detail/2809.html
来源:https://censoredplanet.org/kazakhstan

这篇关于哈萨克斯坦拦截HTTPS流量事件的详细分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/485375

相关文章

springboot filter实现请求响应全链路拦截

《springbootfilter实现请求响应全链路拦截》这篇文章主要为大家详细介绍了SpringBoot如何结合Filter同时拦截请求和响应,从而实现​​日志采集自动化,感兴趣的小伙伴可以跟随小... 目录一、为什么你需要这个过滤器?​​​二、核心实现:一个Filter搞定双向数据流​​​​三、完整代码

C#如何动态创建Label,及动态label事件

《C#如何动态创建Label,及动态label事件》:本文主要介绍C#如何动态创建Label,及动态label事件,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#如何动态创建Label,及动态label事件第一点:switch中的生成我们的label事件接着,

Nginx如何进行流量按比例转发

《Nginx如何进行流量按比例转发》Nginx可以借助split_clients指令或通过weight参数以及Lua脚本实现流量按比例转发,下面小编就为大家介绍一下两种方式具体的操作步骤吧... 目录方式一:借助split_clients指令1. 配置split_clients2. 配置后端服务器组3. 配

spring @EventListener 事件与监听的示例详解

《spring@EventListener事件与监听的示例详解》本文介绍了自定义Spring事件和监听器的方法,包括如何发布事件、监听事件以及如何处理异步事件,通过示例代码和日志,展示了事件的顺序... 目录1、自定义Application Event2、自定义监听3、测试4、源代码5、其他5.1 顺序执行

nginx生成自签名SSL证书配置HTTPS的实现

《nginx生成自签名SSL证书配置HTTPS的实现》本文主要介绍在Nginx中生成自签名SSL证书并配置HTTPS,包括安装Nginx、创建证书、配置证书以及测试访问,具有一定的参考价值,感兴趣的可... 目录一、安装nginx二、创建证书三、配置证书并验证四、测试一、安装nginxnginx必须有"-

nginx部署https网站的实现步骤(亲测)

《nginx部署https网站的实现步骤(亲测)》本文详细介绍了使用Nginx在保持与http服务兼容的情况下部署HTTPS,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值... 目录步骤 1:安装 Nginx步骤 2:获取 SSL 证书步骤 3:手动配置 Nginx步骤 4:测

Spring Boot统一异常拦截实践指南(最新推荐)

《SpringBoot统一异常拦截实践指南(最新推荐)》本文介绍了SpringBoot中统一异常处理的重要性及实现方案,包括使用`@ControllerAdvice`和`@ExceptionHand... 目录Spring Boot统一异常拦截实践指南一、为什么需要统一异常处理二、核心实现方案1. 基础组件

详解Java如何向http/https接口发出请求

《详解Java如何向http/https接口发出请求》这篇文章主要为大家详细介绍了Java如何实现向http/https接口发出请求,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用Java发送web请求所用到的包都在java.net下,在具体使用时可以用如下代码,你可以把它封装成一

使用zabbix进行监控网络设备流量

《使用zabbix进行监控网络设备流量》这篇文章主要为大家详细介绍了如何使用zabbix进行监控网络设备流量,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装zabbix配置ENSP环境配置zabbix实行监控交换机测试一台liunx服务器,这里使用的为Ubuntu22.04(

Python中的异步:async 和 await以及操作中的事件循环、回调和异常

《Python中的异步:async和await以及操作中的事件循环、回调和异常》在现代编程中,异步操作在处理I/O密集型任务时,可以显著提高程序的性能和响应速度,Python提供了asyn... 目录引言什么是异步操作?python 中的异步编程基础async 和 await 关键字asyncio 模块理论