浅析中国国家防火墙(GFW)及其主要技术


数据跨境安全网关 - 中国国家防火墙 - 防火长城 - GFW

GFW 简介

《网络数据安全管理条例(征求意见稿)》 2021年11月14日

第四十一条 国家建立数据跨境安全网关,对来源于中华人民共和国境外、法律和行政法规禁止发布或者传输的信息予以阻断传播。

任何个人和组织不得提供用于穿透、绕过数据跨境安全网关的程序、工具、线路等,不得为穿透、绕过数据跨境安全网关提供互联网接入、服务器托管、技术支持、传播推广、支付结算、应用下载等服务。

境内用户访问境内网络的,其流量不得被路由至境外。

第七十三条 (十一)数据跨境安全网关是指阻断访问境外反动网站和有害信息、防止来自境外的网络攻击、管控跨境网络数据传输、防范侦查打击跨境网络犯罪的重要安全基础设施。

防火长城(英语:Great Firewall,常用简称:GFW),中文也称中国国家防火墙,俗称墙、网络长城、防火墙等等,中国国家互联网信息办公室称为数据跨境安全网关。

主要技术

域名解析服务缓存污染 (DNS污染)

什么是 DNS (域名解析服务)

AWS-Amazon

Internet 上的所有计算机,从您的智能手机或笔记本电脑到可提供大量零售网站内容的服务器,均通过使用编号寻找另一方并相互通信。这些编号称为 IP 地址。当您打开 Web 浏览器并前往一个网站时,用户不必记住和输入长编号。而是输入域名(如 example.com),然后在正确的位置结束。

DNS 服务是一种全球分布式服务,它将人类可读的名称 (如 www.example.com) 转换为数字 IP 地址 (如 192.0.2.1),供计算机用于相互连接。Internet 的 DNS 系统的工作原理和电话簿相似,都是管理名称和数字之间的映射关系。DNS 服务器将名称请求转换为 IP 地址,对终端用户在 Web 浏览器中输入域名时所访问的服务器进行控制。这些请求称为查询。

域名解析服务缓存污染 / DNS劫持

DNS劫持是一类旁观者攻击,攻击者借由其在网络拓扑中的特殊位置,发送比真实的DNS回应更早到达攻击目标的伪造DNS回应。 一部连上了互联网的电脑一般都会使用互联网服务提供商提供的递归DNS服务器,这个服务器通常都会将部分客户曾经请求过的域名暂存起来。缓存污染攻击就是针对这一特性,影响服务器的用户或下游服务。

在中国大陆,对所有经过防火长城的在UDP53端口上的域名查询进行IDS入侵检测,一经发现与黑名单关键词相匹配的域名查询请求,会马上伪装成目标解析服务器注入伪造的查询结果。攻击仅出现在DNS查询之路由经过防火长城时[注 1]。伪造的查询结果中的IP地址不是一成不变的,在一段时间后会更新。

[注 1]:

中国大陆用户查询当地的DNS服务器收到错误结果是域名解析缓存所致,其并没有直接受到防火长城的DNS劫持攻击。

(可以理解为地方DNS服务器继承了错误的查询结果)

对于TCP协议下的域名查询(DoT: DNS over TLS),防火长城可使用TCP重置攻击的方法进行干扰。

IP地址或传输层端口封锁

对拦截行为观察发现,在早期技术实现中,会使用访问控制列表ACL)技术来封锁特定的IP地址,由此延伸可以封锁传输层协议(TCPUDP)的特定目的端口的网络流量。不过由于大量的ACL匹配会导致网络性能不佳。现在主要是采用了效率更高的路由扩散技术封锁特定IP地址,也就是通过将需要拦截的IP地址配置为空路由黑洞设备特别配置的自治域网络上,然后通过动态路由协议将相应配置路由扩散到公众互联网网络中,从将条件匹配拦截行为转为路由器的常规转发行为,从而提高拦截效率。多见于自主拥有大量IP地址段的需要审查的企业中。

在大规模自治域的出入口路由器上新接入一个起控管作用的子网或者AS域,将要受控的网络地址配置在这个子网或者AS域内的路由器中,这样利用动态路由协议的网络拓扑自动识别特性,在出入口路由器上将生成受控网络地址的路由信息,将自治域内部网络对这些受控网络地址的访问转入到这个控管子网或者AS域的网络中,从而实现对受控网络地址的流量控制 。

边界网关协议(BGP)劫持

边界网关协议(BGP)劫持是指通过一个自治系统错误宣称IP为其所有,使得使用边界网关协议维护的互联网路由表的路由器错误地将用户发送的数据传送给非数据传送目的地

BGP

边界网关协议(英语:Border Gateway Protocol,缩写:BGP)是互联网上一个核心的去中心化自治路由协议。它通过维护IP路由表或“前缀”表来实现自治系统(AS)之间的可达性,属于矢量路由协议。BGP不使用传统的内部网关协议(IGP)的指标,而使用基于路径、网络策略或规则集来决定路由。因此,它更适合被称为矢量性协议,而不是路由协议。

背景

任何连接上互联网的主机,通过其自身的IP地址,能够与世界上任何连接上互联网的主机通信。主机将数据传送给路由器,每个路由器再将数据包传给另一个路由器,直到数据被传递给目的主机。为了顺利将数据传递到目的主机,每个路由器必须定期提供最新的路由表。具有相同的IP地址前缀的IP为同一家自治系统(AS)拥有,自治系统之间的路由器的路由表通过边界网关协议进行维护。边界网关协议能让路由表内保存最佳路由路线。

每个自治系统都通过边界网关协议来表明它可以向哪些IP前缀发送数据。例如如果IP前缀192.0.2.0/24位于AS 64496内,那么该自治系统就会将向其供应商表示它可以向192.0.2.0/24发送任何数据。

劫持

可以通过以下几种方式进行劫持:

  • 一个自治系统宣称一些IP前缀归其所有,但实际上并不是
  • 一个自治系统声称拥有某个IP前缀范围比实际声明拥有某个IP前缀的自治系统要更小
  • 一个自治系统声称它可以通过一条比已知的更短的路径将数据传递到被劫持的自治系统,而不管该路径是否真的存在

这些方式的共同点是它们破坏了网络的正常路由,自治系统宣称的内容被添加至使用边界网关协议的路由器的路由表中,那路由器则会根据路由表将数据包传输给错误的自治系统,数据包最终无法被转发到目的地。

黑洞攻击

封包舍弃攻击或黑洞攻击是在电脑网络中,一种借由丢弃封包阻断服务攻击。这种攻击可以是选择性(如:对于一网络位址,每n个封包和每t秒,或乱数选择一定比例的封包,也称作灰洞攻击)或成批的(如:舍弃所有封包)。

针对TCP和UDP连接的封锁

2011年3月,防火长城曾经对Google部分服务器的IP地址实施自动封锁(按时间段)某些端口,按时段对www.google.com(用户登录所有Google服务时需此域名加密验证)和mail.google.com的几十个IP地址的443端口实施自动封锁,具体是每10或15分钟可以连通,接着断开,10或15分钟后再连通,再断开,如此循环,使中国大陆用户和Google主机之间的连接出现间歇性中断,使其各项加密服务出现问题。Google指责中国这样的封锁手法,因为Gmail并非被完全阻断,营造出Google服务“不稳定”的假象,表面看上去好像问题出自Google本身。

2014年5月27日起,Gmail网页版的80和443端口被屏蔽。2014年12月26日起,Gmail客户端所用的IMAP/SMTP/POP3端口也被屏蔽。

目前防火长城会通过限制QoS优先级的方式干扰向境外的UDP连接,如网站使用HTTP/3(QUIC)协议时。

TCP连接重置

TCP重置是TCP的一种消息,用于重置连接。一般来说,例如服务器端在没有客户端请求的端口或者其它连接信息不符时,系统的TCP协议栈就会给客户端回复一个RESET通知消息,可见RESET功能本来用于应对例如服务器意外重启等情况。防火长城切断TCP连接的技术实际上就是比连接双方更快地发送连接重置消息,使连接双方认为对方终止了连接而自行关闭连接。

一般这种攻击方法需要结合相应的检测方式来实施,见下文:深度包检测

TCP重置攻击

TCP重置攻击指的是使用伪造的TCP重置包干扰用户和网站的连接。这个技术可以在善意的防火墙中应用,但也可用于网络审查或是攻击,恶意中断TCP连接,是一种旁观者攻击。中国大陆的防火长城会自动执行TCP重置攻击,来阻断不符合中国的法律法规的网站。

TCP重置

在传输控制协议(TCP)连接的数据包流中,每个数据包都包含一个TCP包头。这些包头中的每一个都包含一个称为“复位”(RST)标志的位。在大多数数据包中,该位设置为0,并且无效;但是,如果此位设置为1,则向接收计算机指示该计算机应立即停止使用TCP连接;它不应使用连接的标识号(端口)发送更多数据包,并丢弃接收到的带有包头的其他数据包,这些包头指示它们属于该连接。TCP重置基本上会立即终止TCP连接。

按照最初的设计,这是一个有用的工具。常见的应用是在进行TCP连接时计算机(计算机A)崩溃的情况。另一端的计算机(计算机B)将继续发送TCP数据包,因为它不知道计算机A已崩溃。重新启动计算机A后,它将从旧的崩溃前连接接收数据包。计算机A没有这些数据包的上下文,也无法知道如何处理这些数据包,因此它可以向计算机B发送TCP重置。此重置使计算机B知道该连接不再起作用。计算机B上的用户现在可以尝试其他连接或采取其他措施。

伪造TCP重置

在上述情况下,TCP重置是由作为连接端点之一的计算机发送的。但操作中,第三台计算机可以监视连接上的TCP数据包,然后将包含TCP重置的“伪造”数据包发送到一个或两个端点。伪造数据包中的报头必须错误地表明它来自端点,而不是伪造者。此信息包括端点IP地址和端口号。IP和TCP包头中的每个字段都必须设置为令人信服的伪造值,以进行伪重置,以欺骗端点关闭TCP连接。正确格式化的伪造TCP重置可能是中断伪造者可以监视的任何TCP连接的非常有效的方法。

状态防火墙

状态防火墙(英语:Stateful firewall),一种能够提供状态数据包检查(stateful packet inspection,缩写为SPI)或状态查看(stateful inspection)功能的防火墙,能够持续追踪穿过这个防火墙的各种网络连线(例如TCP与UDP连线)的状态。这种防火墙被设计来区分不同连线种类下的合法数据包。只有符合主动连线的数据包才能够被允许穿过防火墙,其他的数据包都会被拒绝。

状态数据包检查也被称为动态数据包过滤(Dynamic Packet Filtering)。

基本原理

状态防火墙监视网络连接的“状态”,比如TCP流、UDP数据和ICMP消息可能被分为LISTEN, ESTABLISHED, 或者CLOSING状态。按照相应的安全策略,状态防火墙在状态表中为各TCP流或者UDP数据创建记录。凡在表中的session,所有相关数据包都被允许通过,不再检测,因此比一般的检测使用更少CPU。

维持一个session的状态取决于其传输层协议。比如TCP是面向连接的协议,其session是由三路握手的SYN消息创建,由FIN消息终止。状态防火墙由此可以知道何时从表中移除session,而不必等待超时再移除。UDP是无连接的协议,它不会发送特别的连接消息,因此一个UDP的session只有等待超时才会被移除,UDP打洞就利用了这一特性设立隧道。ICMP消息与TCP和UDP不同,它传递网络本身的控制信息,比如ping命令。ICMP回复一般会被允许。有时UDP通信会使用ICMP来提供session的状态信息,因此和某UDP session有关的ICMP回复也是允许的。

深度包检测

深度报文检测(Deep packet inspection, DPI)是一种于应用层对网络上传递的资料进行侦测与处理的技术,被广泛用于入侵检测、流量分析及数据挖掘。就字面意思考虑,所谓“深度”是相对于普通的报文检测而言的——相较普通的报文检测,DPI可对报文内容和协议特征进行检测。

在中国大陆,DPI一度被ISP用于追踪用户行为以改善其广告推送业务的精准性,而最近则被开放网络促进会视为防火长城城赖以检测关键词及嗅探加密流量的重要技术之一。基于必要的硬件设施、适宜的检测模型(关键字过滤)及相应的模式匹配算法,防火长城能够精确且快速地从实时网络环境中判别出有悖于预期标准的可疑流量,并对此及时作出审查者所期望的应对措施。

TLS站点证书中间人攻击

2013年1月26日,有中国大陆的用户在访问GitHub时发现证书无效,经检查发现,GitHub的证书变为了一自签署的X.509证书,生成时间为2013年1月25日,有效期一年,故有人推测GitHub疑似遭到了中间人攻击。 GreatFire和研究人员认为攻击是由中国政府策划的。

自2014年8月28日起,原先可以通过IPv6直连Google的中国教育网(CERNET)内试图通过https连接.google.com.等网页时,可能收到SSL证书错误的提示,其中以连接www.google.com.hk几乎是每次连接均收到攻击,而其它连接例如ipv6.google.comaccounts.google.com也有受到攻击的报告,但攻击发生的几率相对较低。伪造的SSL证书显示其为google.com,颁发机构即为其本身,与真正的证书不同,显示谷歌在中国教育网上受到中间人攻击(MITM attack)。

2015年1月17日,Outlook遭到了中间人攻击。

实现与部署

据2010年的估计,防火长城可能拥有数百台曙光4000L服务器。

典型意义上的中国国家防火墙网络拓扑图 (结合实际骨干网出口情况,图中不包括中华人民共和国台湾省)

文章作者: sfc9982
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 sfc9982 !
  目录