保护自己 - 深入链路探究网络安全

标签: dev | 发表时间:2022-04-03 00:00 | 作者:
出处:http://itindex.net/relian

前言

说起基于网络的攻击,大家可能都会想到 SQL注入、SSRF、CSRF 这些比较常见的因为软件漏洞造成的攻击,但网络远不止如此。本文会介绍一些常见的网络安全问题及攻击方式,提高安全上网以及保密意识,帮助大家识别常见的网络信息泄漏、网络故障及发生的阶段。

信息系统的安全,是指完整性、保密性、可用性和不可否认性。

对应的攻击手段有,窃听、篡改、伪造、重放、抵赖和拒绝服务。

有一道常见的前端面试题,在浏览器地址栏中输入 www.baidu.com 并按下回车,会发生什么?我们也顺着这个思路,谈一谈网络上的安全。

DNS 和名称解析

要想找到对应的服务器,首先要知道它的 IP 地址。这一过程称为名称解析(name resolution)。对于一个传统浏览器,它通常会直接求助于操作系统进行查询。

当连接网络时,网关会为操作系统分配一个 DNS 地址,它被称为本地名称服务器(LDNS) ,系统通过它的 53 端口,基于 IP - UDP 协议进行 DNS 查询。所以一个 DNS packet 也有 IP 与 UDP 的内容。完整的 DNS packet 是这样的:

如果一个名称服务器不能回答我们的查询,根据请求的 RD 标志位,以及自身是否支持递归查询,会选择进行递归查询或迭代查询。LDNS 通常是递归的,即,它会帮我们取得最终结果并返回给我们。而根名称服务器、根域名的名称服务器等通常是迭代的,如下图:

DNS 是基于信任关系的协议,路径上所有信息明文传输,整个路径没有任何保护与校验,导致其存在很多问题。

针对 DNS 的攻击

假如我们的本地名称服务器(一般是运营商提供)不可信,它可以告诉我们任意错误的服务器地址。比如,以前国内网络治理不严格,经常出现当我们访问某些网站时,跳转到某些运营商的广告导航页面...

DNS 服务器通过返回虚假 IP 地址,使得浏览器向错误的服务器请求内容,这被称作 DNS 劫持(DNS hijacking)。

LDNS 是内鬼,那是不是在路由器或者 windows 设置里,手动设置一个信任的 LDNS,就可以了呢?过去上网比较多的话,可能把 DNS 地址改成 114.114.114.114或者 8.8.8.8,就能缓解这一问题,也可以访问一些本来无法打开的网站。

但后来,这种方法就没什么用了。

即使设置了 8.8.8.8,当我们访问 Google 或者某些其他网站时,还是无法访问。或是出现证书错误,证书指向 facebook;或是直接超时,无法打开。这还是 DNS 的问题吗?

我们通过 nslookup查询一下试试,向 8.8.8.8 查询竟然只需要 10ms 就返回了,访问谷歌的服务器怎么可能这么快,难道它就在我们旁边?进一步反查它对应的域名,这这这,看它绑定的这些域名,怎么想都是一些非法网站吧。为什么?我把 LDNS 地址改成 8.8.8.8 谷歌 DNS,它为什么会胡乱返回它自己的服务器地址呢?

8.8.8.8 是Anycast [1]任播的,但谷歌在中国境内应该没有服务器吧,10ms 的响应速度还是很可疑。

DNS 是明文传输的,即使没有内鬼,还有更糟糕的:实际上链路上的所有人都知道你正在进行这个网站的访问,它们都可以直接看到你的 IP 地址、端口、要查询的域名等信息。

回顾我们的 DNS Packet,受 DNS 协议限制,主机只要收到与请求 Query ID 相同的响应,就认为收到了 DNS 响应,它无法验证响应是否真的来源于对应服务器返回。而明文的 DNS 查询,导致链路上的所有人都有能力看到你查询的 Query ID,它们均可以抢在你查询的服务器返回前,直接返回给你任意的结果,这就是 DNS 抢答。

根据上述分析和文章提到的方法,不管你的 LDNS 如何设置,都有人能根据你的查询内容,抢答一个随机的或者错误的地址。

当然,还有其他多种攻击方式,如,缓存投毒 [2]、DoS(denial of service, 拒绝服务)...

这样看来,对照我们安全的定义,明文的 DNS 协议具有会被 窃听、篡改、伪造 和 拒绝服务 的风险。

针对 DNS 攻击的缓解方法

如何解决 DNS 存在的问题呢?

DNSSEC [3](Domain Name System Security Extensions, DNS 安全扩展) (中文资料:DNSSEC 实战 - 掘金 [4])可以解决 DNS 被篡改和伪造的问题。它通过对 DNS 响应进行签名,确保它来自于某一个权威服务器,路径上的人虽然能看到请求和响应,但伪造的响应没有对应服务器的签名,一旦篡改,原签名就失效了。攻击者看得见,却摸不着。

DNSSEC 需要权威域名服务器启用和设置,并需要链路上所有 DNS 服务器支持以构建信任链。而且,它要求递归名称服务器对响应进行验证,如果递归名称服务器,LDNS,本身就是内鬼,则这个机制就没什么意义了。

那么,怎样让链路上的人看不见我们在查询什么,甚至不知道我们在进行 DNS 查询,避免 DNS 查询被窃听、抢答呢?TCP/IP 层无能为力,我们可以在应用层想想办法。DoH (DNS over HTTPS) 或 DoT (DNS over TLS) 可以解决这个问题。因为基本原理与 HTTPS 一致,其更安全的原理,以及针对其的攻击,将在 HTTP 与 HTTPS这一节中继续。

DoH 需要我们在客户端主动启用。目前,主流浏览器(如 Chrome、Edge) 以及最新版操作系统(如 Windows 11、Mac) 均已支持 DoH(或 DoT)。

经过 DNSSEC 和 DoH,链路上内鬼问题被我们逐一解决。DNS 查询看不到,摸不着,甚至不知道我们正在使用 DNS,对我们来说,已经安全很多了。

我们用三张图回顾下(来源: https://www.3key.company/encrypted_dns):

DNS:看得见,摸得着

DNSSEC:看得见,摸不着,但如果 ISP DNS 是内鬼,无效

DoH:看不见,摸不着,需与 DNSSEC 结合确保安全性

DNS 不只有 A 记录(IPv4)和 AAAA 记录(IPv6)!它还会存储一些特别的信息,如 MX 记录用于邮箱服务器,TXT 记录用于存储各种公开验证数据,如申请 HTTPS 证书时用于验证域名所有权、存储服务发现数据... 因此 DNS 安全是非常重要的。

但假设你是一个顶级黑客,不想被任何人发现你的行踪,这还不够。安全需要不可否认性,而你需要随时否认自己做过任何操作。如果 DoH 服务器 监守自盗,它还是可以知道我们是谁、在访问什么网站...

找一个更好更值得信任的 DoH 服务器固然可以,但极客喜欢在技术上保证这一点。比如,一个办法是通过代理服务器。如果我们总是通过一个可信代理进行查询。这样,DNS 服务器就看不到我们是谁。根据这一点基本原理,ODoH(Oblivious DNS over HTTPS [5]) 致力于更进一步解决这个问题。

Proxy 应该是一个去中心化、随机选中的服务器,否则 proxy 与 target server 可能会 沆瀣一气,这个操作就完全没有意义了。

目前,大多数全球 CDN 都是通过 GeoDNS 实现的,即,权威名称服务器通过请求来源所在区域,返回离其最近机房的 IP 地址。在国内,如果使用国外提供的 DoH,或是通过代理查询 DNS,往往会得到在国外的、路由非常差的机房,拖慢了所有网站的访问速度,相当于为了安全,牺牲了效率。

  • 可以考虑境外 DNS 代理 +境内 DoH [6]
  • 或是区分中国境内网站和境外网站,选择不同的 DoH 服务器

Geo-based DNS 实现原理

由 DNS 可见,互联网早期出现的协议基本上都是基于信任关系的,而更好的互联网,是在致力于将这些基于信任关系的旧协议,变为技术上保证安全的新协议。

当然,这三种情况都解决不了一件更糟糕的情况:顶级名称服务器或顶级域名名称服务器不可信。

虽然目前还没有过这种情况,但顶级名称服务器宕机 [7]还是时有发生。互联网上有一些人设想并致力于解决这个权威与去中心化之间的矛盾:Handshake 名称解析系统。想知道它是怎么解决这个问题的,可以在这里了解:https://handshake.org/。

网络层 和 IP 协议

上一部分我们一直在说内鬼和其他攻击者,他们是怎么获得我们发给目标服务器的信息的呢?这我们就要讲一讲,包裹在链路中是如何路由的。当我们正确地拿到一个服务器的 IP 地址,还远没有万事大吉,我们只解决了 它是谁 的问题,从 IP 找到对应的服务器还有很长的路要走。

我们将继续解决 它为什么是它它在哪以及 如何找到它

路由策略

有没有想过,为什么我的 IP 地址是 A,它的 IP 地址是 B?如果我把我的 IP 地址改成它,会不会成为它,收到所有本该发给它的包裹呢?

因为 IP 地址是RIRs(Regional Internet Registries, 区域网络注册商) [8]统一持有、分配并追踪的,因此,谁持有哪些 IP 地址应该是已知且可查的。如果所有的 网络提供商(ISP) 和 IP 网间互联提供商(IP Transit Provider) 都尽忠职守地验证自己的广播的 IP 地址是否属于自己、转发对方的 IP 地址是否真的属于对方、别人广播的 IP 地址是否真的属于对方,那么他们均有能力发现错误并拒绝信任。因此,正常情况下是不会。

持有对应 IP 地址段的 resource holder 需要将 IP 挂靠在某个(或某些)特定的 AS(Autonomous System, 自治系统) 下(AS 可以自己持有,也可以自己不持有而是授权给其他 AS 广播),由它在某一个区域广播,并最终通过 BGP 接入全球网络。这是我请求将 IP 地址段授权给 Quadranet(AS8100) 广播时的授权书。

IP 地址在某个区域被广播后,我们就可以通过一定的路由协议,比如,ARP、OSPF、BGP 找到它并与它通信了。

当你 (192.168.1.100) 访问 某个网站(45.45.212.100) 时,一种可能的路径是:

你的电脑(192.168.1.100) - ARP => 你的路由器(192.168.1.1 / 23.226.130.100) - NAT(Network Address Translation), ARP, RIP 或 OSPF => ISP 路由(23.226.130.2) -> OSPF 或 IBGP => 自治系统 AS 边界(23.226.128.1) - BGP => 目标 AS 网关(45.45.128.1) -> OSPF、ARP => 对方服务器(45.45.212.100)

针对网络链路的攻击

目前,网络上的通信是基于 IP 协议的。明文传输原 IP 与目标 IP 地址,没有任何加密和校验机制。

如果这条路径上有内鬼,比如,就是某个 ISP 路由器。

如果它想劫持你对某网站的访问,只要把你 IP 层 header 的 destination 改一下,返回包 header 的 source 改一下,进行一下恶意 "NAT",那么你就毫不知情地访问了另一个服务器。

或者它想要在你毫不知情的情况下审查你的访问,比如记录你每天都访问哪些网站、屏蔽你对某些网站的访问,这些都是轻而易举的事情。

即使没有内鬼,在这个路径中的所有人(网络意义上的邻居)都可以滥用对应的协议,通过一些手段(如ARP 欺骗 [9]、OSPF 欺骗、BGP 劫持 [10]等),宣称自己就是对方服务器 104.193.88.77(ARP),或者拥有对方服务器的地址段 104.193.88.0/24(OSPF / IBGP / EBGP)。如果有路由器或权威路由器的验证机制存在漏洞,被欺骗,那么它就会把对应 IP 或网段的所有包裹转发给攻击者,从而轻易地劫持网络流量。

这些协议中,一旦出现问题,影响最大的就是 BGP,它往往会导致本该前往一个区域的网络包裹,被送至另一个区域,造成整个区域的互联网故障甚至中断。在全球网络 BGP 上,错误路由这种事情也时有发生,每一次都会在对应区域对全球互联网产生重大影响。这称作 BGP Incidents,一般分为 BGP Hijacking、BGP Leak 以及 IP address spoofing 三种。

What are Routing Incidents? (Part 4)[11]

CloudFlare 也介绍了一个(可能的)通过 BGP 劫持进行的针对于加密货币的攻击:

BGP leaks and cryptocurrencies[12]

攻击者通过 BGP,宣告自己拥有 Amazon DNS 的 IP 地址段并劫持了 DNS 解析。当用户访问加密货币网站时,返回一个恶意网站,进而窃取用户的 Cookies / 账号密码。

在国内发生过一次 github 和 京东 被中间人攻击的事件。

很不幸,网络层的所有协议都是 基于信任关系的。除了尽力而为地传输数据,我们无法在这一层解决任何安全问题,网络层说什么,我们就会相信什么。想要缓解这个问题,只能求助于应用层、使用代理或VPN。

我们目前入户的 IP 地址大多数为内网地址,通过 NAT 到公网,有的甚至需要多层转换。这导致一个公网 IPv4 地址被一个或多个区域中的用户共用。

当 IPv6 出现的时候,很多人对它并不看好,因为每个人、每个网站使用独立 IP,运营商就可以精准根据 IP packet 定位到谁在访问什么网站,这种说法有道理吗?

HTTP 与 HTTPS

经过 DNS 解析以及路由,不管最终对方是不是我们想要的服务器,现在我们要和它建立连接了。在浏览器中,最常用的协议是 HTTP 和 HTTPS。

针对 HTTP 协议的攻击

HTTP(Hypertext Transfer Protocol) 协议通过 TCP 建立连接,然后明文传输所有的内容,包括请求的域名、路径、请求内容、响应内容... 以及能想到的所有信息,而且,无法验证响应服务器的身份。

明文?缺少验证机制?那么 内鬼又要来了。根据上面路由策略相关的知识,对于它们来说,窃听、篡改、伪造、重放、拒绝服务,都是轻而易举的事情。早期的互联网,运营商可以在页面上插入小广告(不过最常见的还是通过 DNS 劫持来实现),或是搜索某些关键词时,连接被重置。

在没有 HTTPS 的年代,在注册或登录一些网站,传输密码时,为了防止被窃听,常见的方法是由后端返回一个 RSA 公钥给前端,前端通过这个公钥加密自己的请求发送的密码,后端用私钥解密,在一定程度上提高一下安全性。

比如微博移动版目前还会返回 pubkey,不过已经不用它来加密密码了。

事实上,如果链路上有内鬼,且盯上了你或者某些服务,这种做法并没有什么大用。虽然看起来很安全,但在攻击者眼中,窃听和篡改的难度几乎一样。它能监视你的请求,那么它同样可以篡改服务器给你的公钥,换成它的公钥,让你一无所知地就把密码加密给攻击者。

(所以早期网上银行的 U盾 或者 ActiveX 控件还是有用的)

好在,我们现在有了广泛应用的 HTTPS。

针对 HTTPS 的攻击和缓解方法

HTTPS 通过 TLS(Transport Layer Security, 传输层安全),完整在应用层实现了防止窃听、篡改、伪造、重放和抵赖的功能。HTTPS 原理也通常在前端面试中被考察。简单回顾一下:

来自 https://segmentfault.com/a/1190000021494676,最新的 TLS 1.3 加密方式与之有较大不同

需要注意,HTTPS 的安全性是建立在应用层的,底层的 TCP 和 UDP 协议会泄漏原 IP、目标 IP、使用的协议等信息,并非绝对保密。

信任证书或 SECRET 泄漏导致的中间人攻击

HTTPS 在大多数情况下都足够安全,可是,它仍然有很多被攻破的方法。比如,服务端可能因为各种原因导致证书私钥泄漏。或者客户端主动安装了不信任的证书、由于恶意软件等共享了 pre-shared key 等导致的中间人攻击。

比如,如果安装了 Bifrost,且信任了它提供的证书,Bifrost 就可以解密我们的 HTTPS 请求。

或是导出了 SSLKEYLOGFILE后,这段时间的 HTTPS 会话就可以被解密 (如图为 TLS 1. 3 的 key log)。

还有一些隐秘的、复杂的原因导致 HTTPS 不再安全。

权威机构错误签发证书或被攻击

最恐怖的就是权威机构胡乱签发证书。如果权威机构疏于验证就签发证书,或者出于某种目的故意签发错误的证书,那么它可以将全世界所有 HTTPS 变得不再安全。更恐怖的是,这种事情还真的发生过 [13]... 这也导致目前中国境内没有受信任的 Root CA。如果真的发生了这种事情,只能寄希望于浏览器和操作系统快速做出反应,移除对应根证书的信任。

不过好在,目前浏览器均要求证书必须符合Certificate Transparency [14]才会被信任,很多组织会监督证书的签发及使用,供网站主和监督组织发现这些乱签证书的 CA。而且,TLS 是 完全前向保密(Perfect Forward Secrecy) 的,即使某一天出现了乱签证书或密钥泄漏这种事情,也无法解密之前已经发生的会话,或伪造以前发生的会话。

如果一个权威机构或中间机构被攻击,造成私钥泄漏等,使用其已经签发的证书的网站均不再安全。目前浏览器可以通过 OCSP(Online Certificate Status Protocol) 来检查证书状态是否正常、是否被吊销。

降级至 http 的降级攻击

针对 HTTPS 的中间人攻击通常出现于建立连接前,因为一旦建立了 HTTPS 连接,客户端与服务端所有的通信都是加密的,操作起来不太方便。因此,最常见的做法是,攻击者发现你试图建立 HTTPS 连接,会直接拦截这个请求,并伪造服务器返回不支持 HTTPS,请使用 HTTP。

对于这种攻击,我们并不是毫无对策。HSTS(HTTP Strict Transport Security) [15]可以在一定程度上缓解这种问题。如果一个网站从不使用 HTTP,那么它可以通过设置 HTTP Header,强制浏览器使用 HTTPS 并记住一段时间。

  Strict-Transport-Security: max-age=<expire-time>   

根据标准,配置了 HSTS 的网站,应当没有任何办法继续使用 HTTP 连接。如果 https 失效,浏览器报错时,没有 继续前往 xxx 这一选项,就说明这个网站配置了 HSTS。

不过 Chrome 也留了个后门,在这个页面输入 thisisunsafe后,就可以无视这个警告了。

但 HSTS 的首个请求还是 HTTP,还是可以被劫持,浏览器通常会写死一些域名强制启用 HSTS,但还是不太够,因此,也有人提出基于 DNS 的 HSTS 等更好的实现。

降级至低版本安全套件或加密方式的降级攻击

而且,HTTPS 并不是生来就安全的。目前常用的加密方式是 TLS 1.3,而之前曾采用的 SSL 3.0、TLS 1.0、1.1 都各有各的漏洞以及对应的破解方法 [16]。因此,攻击者也在 HSTS 生效的情况下,拦截协商请求,伪造服务器返回只支持低版本 HTTPS 套件,强制浏览器进行降级并加以破解,这也是目前的 HSTS 覆盖不到的。

这是几种常见的针对 HTTPS 的降级攻击。

HTTPS 的其他缺陷

假设我们考虑了之前所有的安全方案,去访问 Google:用 Cloudflare DoH,没人能阻止我取得 Google 的 IP 地址;用谷歌最新的 IPv6 地址,没有人能从 IP 知道对方是谷歌;用 HTTPS,没有人知道我在和谁建立连接,访问什么内容,现在链路上的人应该一无所知了吧?

可是我发现,还是上不了 Google....

这是因为,一个广泛使用的 HTTPS 扩展,SNI(Server Name Indication),存在致命问题,会泄漏你要访问的域名。因为一个 IP 地址上可以部署多个服务器,而 HTTPS 需要域名正确的证书才能工作,服务器在与你建立连接前,需要知道你要访问的域名,并提供对应域名的 HTTPS 证书。

你的浏览器会将域名明文发送给服务器,以供对方决定应该使用哪个证书。

这给内鬼和其他攻击者们提供了可乘之机,导致 HTTPS 的保密性功亏一篑。而且,攻击者还可以用这个信息将域名和 IP 地址建立联系,启发式地知道后续这个 IP 地址对应的域名。

好消息是,TLS 1.3 可以使用ESNI(Encryped SNI) [17]扩展来解决这个问题。ESNI 依赖 DNS,DNS 依赖 DNSSEC 和 DoH,而 DoH 又依赖 TLS... 安全是薄弱的,也是相辅相成的,任何一个环节出了问题,其他环节再安全也没有用。

CloudFlare 提供了一个检测服务 [18],可以帮助你确认自己的浏览器是否安全。

浏览器

通过这些技术,我们和目标服务器建立好了可信信道,可以正式开始通信了。

但是... 如果对方是坏人,怎么办?

利用浏览器漏洞的攻击

在 IE 时代,经常出现点了陌生链接就会中病毒的情况。即使是目前的 Chrome 有比较完善的安全机制,也免不了在某些前提下,出现一些可供恶意利用的漏洞。比如在微信上点击某个链接,就可以启动某个应用程序或执行某些指令...

一旦浏览器漏洞被利用,通常会导致整个系统被攻破,影响范围较大,当然,相应地利用难度也大。

利用 Web 标准漏洞的攻击

Web 标准不够完善的时候,旧版本浏览器也可能会有很多跨域的问题,攻击者可以通过各种手段跨域访问,窃取 Cookie。现代浏览器会尽可能保护我们的安全,但还是有各种奇奇怪怪的方法进行攻击,而且防不胜防... 我们来举一些已知的例子:

DNS 重绑定攻击

一般来说,当向不同域发起请求时,会被浏览器认为违反同源策略,并通过 Preflight 方式检查对应请求是否合理或拦截对应的请求,以确保安全性。

假设用户在浏览 A 网站 a.attacker (IP: 192.0.0.1),B 网站 b.victim (192.0.0.2) 有一个 /get_password接口,正常情况下,A 无法向 B 请求这个资源。但如果此时 A 修改了自己的 DNS 解析为 192.0.0.2,此时,它便可以通过访问 a.attacker/get_password轻而易举地取得 B 的资源,且没有违反同源策略。

在现实中,因为大多数网站都有 Host Check,且不会和 a 持有相同的 HTTPS 证书,因此成功攻击的可能性比较小。它通常被用于外网对内网设备的检测和攻击,比如攻击内网路由器,或是智能设备、物联网设备等。

浏览器也想了一些办法来解决这些问题,如 DNS Pinning。

基于跨网络缓存投毒的攻击

浏览器会根据服务器的缓存控制,缓存一些资源,并在后续访问时,直接读取这些资源,这在外部网络访问时,通常不会发生什么问题,但是,如果你连接了公共 wifi,就不是这回事了。

假如你的家里有个路由器,它通过 my-awesome-router.com进行访问,并且会加载一个 /jquery.js提供用户界面访问。内网设备一般无法提供 HTTPS 证书,否则会有严重安全问题。

通常在外饭店或商场,我们连接的公共 wifi 需要打开一个登录页面,登录后,才可以上网。但如果这个热点是恶意的,当你打开它的登录界面时,它可以跳转到任意域名,如 my-awesome-router.com用于登录,进而可以在这一域名下缓存资源,比如, /jquery.js

当你回到家,登录自己的路由器管理界面时,攻击者就有能力在不知情的情况下,控制你的整个内网设备。

当然对于那些非 HTTPS 的网站,比如,公司内网某个页面没有 HTTPS (HTTPS 不会和 HTTP 共享缓存,如果攻击者没有能力破解 HTTPS,那么它不能写入 HTTPS 缓存),它也可以以此方式向对应页面注入脚本,借助安全漏洞向内网进行攻击。

基于信息收集的旁路攻击

还有许多针对特定网站的旁路攻击,会泄漏信息。

如果你想要浏览一些不希望被人发现的网站,你会怎么做?隐私模式?开个新用户?使用代理?不幸的是,这些都没有用。一些浏览器特性,会泄漏你的唯一特征,并最终确定你访问过哪些网站。这种技术称为浏览器指纹 [19]

如 FingerprintJS,它可以轻而易举地识别你是否处于隐私模式,并确定你的身份 (而且,这个网站的恐怖之处是,已知的反指纹方法对它基本都没用)。

还有一些通过被称作 supercookie 的技术来实现追踪的方法。如,浏览器通常会缓存 favicon,那么它通过给不同访问者生成不同的 favicon 就能确定你是谁,追踪你的访问记录。或者,利用浏览器会缓存 HSTS...

一些相关技术的测试网址

  • https://amiunique.org/fp
  • https://fingerprintjs.com/github/
  • https://audiofingerprint.openwpm.com/
  • https://supercookie.me/
  • https://mp.weixin.qq.com/s/gFCGM7ANOxHqYxGItyA_CA

最薄弱的环节: 你

安全系统中最薄弱的环节是人。互联网上最容易成功的的攻击是暴力破解。只要你的 IP 地址在公网上可见,每天就会有成千上万个扫描器尝试各种密码组合,利用各种常见软件的漏洞,攻破你的系统。

一旦你的系统或你被攻破,那么一切网络安全手段都没有任何作用。常见的被攻击的原因:

  • 连接了某个恶意的公共 Wifi,被劫持、窃听或投毒

  • 安装了某个恶意软件,执行了某个病毒文件

  • 通过 frp 等软件将端口暴露至公网,使用弱密码,关闭防火墙,开放常见端口

  • 使用有安全漏洞的软件,如 redisJAVA Apache log4j,且没有及时更新

  • 社会工程学

    • 被欺骗点击有病毒的链接、安装恶意软件或者有漏洞的正常软件
    • 被欺骗主动泄漏你的密码或凭据,如钓鱼、恐吓 或 Self-XSS

网络链路前的物理攻击

如果你的物理位置对攻击者已知,那么它还可以做更多事情。

比如,伪基站。在你的附近放一个信号更强的伪基站,轻而易举地就能骗取你的手机加入它的网络,这是针对 2G 网络的攻击,WLAN 是否有同样的攻击方式呢?

我们工区的厕所和楼梯间 Bytedance Inc. 的信号比较差,如果有人想要攻击 Bytedance,他是不是也可以在这些地方放一个信号更强、也叫 Bytedance Inc 的设备,欺骗你的电脑、手机连接它的路由器,获取你的凭据,进而实施更多的攻击呢?这种攻击方式叫做 Evil Twin,可以通过谷歌详细了解。

当然,我们工区的内网使用的 Wifi 安全性是 WPA2 Enterprise + 证书的方式。在 WPA2 的安全方式下,这样做不太可能会成功,因为设备和路由器之间的认证不是通过密码,而是通过一些方式 [20]证明自己拥有访问对应网络的凭据,就像 SSH 一样。但对于安全性更差的 WPA 或是没有密码的路由器,这样就可以轻而易举地通过 Evil Twin 对其进行攻击。

总结

不同方式,不同层会泄露什么信息,有哪些不安全因素?

  • TCP/UDP/IP:

    • 对运营商:你使用宽带/手机信号的精确位置,你是谁。
    • 对链路上的所有人:你的 IP 地址及归属地,进行网络劫持或污染,修改请求与响应,社会工程学攻击,进而阻止或监视你的访问。
    • 缓解:VPN 与 Proxy
  • DNS:

    • 对链路上的所有人:访问的网站,抢答、篡改、拦截返回的 IP 地址进而阻止或监视你的访问。
    • 缓解:DNSSEC 与 DoH
  • HTTP:

    • 对链路上的所有人:你访问的完整网址、凭据、请求、内容,任意窃听、篡改、伪造、重放。
    • 缓解:HTTPS
  • HTTPS:

    • 自带防止 窃听、篡改、伪造、重放(TLS 1.3 zero-rtt 除外)、抵赖(client cert) 的功能
    • 对链路上的所有人:正在使用 HTTPS 协议,(使用 SNI 或 TLS < 1.2) 目标网站的域名。
    • 缓解:TLS 1.3 + ESNI + 禁用 zero-rtt。
  • Chrome:

    • 对你访问的网站:你访问过哪些网站,关联你是谁、你在做什么、定位,根据授权获取的视频、声音、剪贴板等信息。
    • 缓解:区分浏览器访问不信任网站,减少授权。
  • 你以及与你有物理接触的人:

    • 对所有人:任何信息。

网络不是法外之地,找到你只是时间和成本的问题。怎么办,怎么办呢?

高度匿名的洋葱网络是否可以解决这些问题?去中心化的 Web 3.0 是否可以解决这些问题?这些话题,就只能下次再说了...

小测验

Q1: 假如有人不想让你访问 google.com,它可以怎么做?

  • 对大多数人来说,基于 DNS 劫持和抢答的方式是最有效的,可以部署在链路中或链路外
  • 对使用 http 的用户,进行 http 包分析并拦截或抢答
  • 对使用 https 的用户,通过 SNI 分析目标域名并拦截对应 IP packet,并启发式地记录 IP 与 域名对应关系
  • 对于使用 ESNI 的用户,根据 IP 域名对应关系,拦截对应 IP packet

最近比较火的离职倾向分析...

除了上述方式,如果是公司设备,还有更多的可能... 比如描述文件或组策略等

Q2: 当前,很多代理服务器以 HTTPS 方式实现,为什么它们不使用没有特征的更安全的加密方式?

  • 没有特征才是最大的特征,可以被轻易识别为异常流量并加以拦截
  • 混杂在正常流量中的协议更不容易引起注意

Q3: 假设一个人非常注重网络链路安全,他的网络链路中没有内鬼,如何定位他在哪里?

  • 利用对方软件的漏洞,如 QQ、微信、浏览器 等
  • 进行社会工程学攻击

Q & A

什么是社会工程学

  • 您,抖音,信誉,400,加Q,提现
  • 您好,公司今天发放新年时,发现您的卡发生异常,请及时点击链接 [21]更新您的工资卡信息。

社会工程学核心特点:

对方没有掌握你的某些信息,如,刷抖音时间长,或者掌握了部分信息,如,今天公司发红包,你的工资卡号、生日、手机号。通过一些途径,获取更多信息。大体上分为以下三种基本方法:

猜。对方通过你的生日、姓名缩写、各种弱密码,直接登录了你的手机、 SSO 以及 某些系统。

可以在这里查查你的 email、密码和电话有没有泄漏:https://haveibeenpwned.com/

骗。通过聊天工具、钓鱼邮件、电话、短信,骗取你提供给它更多的信息。打开恶意网站,运行病毒、木马程序等也属于社会工程学的一种。

骗的 6 大特点:

  • 冒充权威:您好,我是抖音官方人员,我们这边有兼职刷抖音赚钱的活动。
  • 威胁:请于 1 月 26 日 12:00 前,确认您的银行卡信息,否则红包将无法发放。
  • 共识:您身边人都在做,比如您的同事小王,3 天就提现了 3000 块
  • 稀缺性:您可是我们挑选的幸运用户,只需支付 8000 元就能买下抖音公司。
  • 紧急:我们这个活动可就剩半天了,您再不买我们就要永久降价了,以后没办法用这个价格买到了。
  • 亲近感:我正在公司实习,如果笔卖不出去我就要被开除了,您能帮忙扫扫码帮帮我,交个朋友?点个链接,就耽误您 3 分钟时间。

非交互式。对方通过公开信息搜集(如搜索引擎、QQ 空间、微博、论坛)、社工库 等获取你的 群关系、开房记录 等更多信息。或者通过以上提到的网络或物理攻击方法,如,在常用网站上挂马、黑掉路由器等方法,在不知情中进行监视或攻击。

❤️ 谢谢支持

以上便是本次分享的全部内容,希望对你有所帮助^_^

喜欢的话别忘了  分享、点赞、收藏 三连哦~。

欢迎关注公众号  ELab团队 收获大厂一手好文章~

我们来自字节跳动,是旗下大力教育前端部门,负责字节跳动教育全线产品前端开发工作。

我们围绕产品品质提升、开发效率、创意与前沿技术等方向沉淀与传播专业知识及案例,为业界贡献经验价值。包括但不限于性能监控、组件库、多端技术、Serverless、可视化搭建、音视频、人工智能、产品设计与营销等内容。

字节跳动校/社招内推码: UCDW4MK

投递链接: job.toutiao.com/s/Rb21Dk9 [22]

参考资料

[1]

Anycast: https://en.wikipedia.org/wiki/Anycast

[2]

缓存投毒: https://www.cloudflare.com/learning/dns/dns-cache-poisoning/

[3]

DNSSEC: https://www.icann.org/resources/pages/dnssec-what-is-it-why-important-2019-03-20-zh

[4]

DNSSEC 实战 - 掘金: https://juejin.cn/post/7044416908921159717

[5]

Oblivious DNS over HTTPS: https://blog.cloudflare.com/oblivious-dns/

[6]

境内 DoH: https://www.baidu.com/s?wd=%E4%B8%AD%E5%9B%BD%20DoH

[7]

顶级名称服务器宕机: https://en.wikipedia.org/wiki/Distributed_denial-of-service_attacks_on_root_nameservers

[8]

RIRs(Regional Internet Registries, 区域网络注册商): https://en.wikipedia.org/wiki/Regional_Internet_registry

[9]

ARP 欺骗: https://en.wikipedia.org/wiki/ARP_spoofing

[10]

BGP 劫持: https://en.wikipedia.org/wiki/BGP_hijacking

[11]

What are Routing Incidents? (Part 4): https://en.wikipedia.org/wiki/ARP_spoofing

[12]

BGP leaks and cryptocurrencies: https://blog.cloudflare.com/bgp-leaks-and-crypto-currencies/

[13]

还真的发生过: https://en.wikipedia.org/wiki/Root_certificate#Incidents_of_root_certificate_misuse

[14]

Certificate Transparency: https://certificate.transparency.dev/

[15]

HSTS(HTTP Strict Transport Security) : https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security

[16]

漏洞以及对应的破解方法: https://en.wikipedia.org/wiki/Transport_Layer_Security#Security

[17]

ESNI(Encryped SNI): https://blog.cloudflare.com/encrypted-sni/

[18]

一个检测服务: https://encryptedsni.com/

[19]

浏览器指纹: https://zhuanlan.zhihu.com/p/94158920

[20]

一些方式: https://en.wikipedia.org/wiki/IEEE_802.11i-2004#Four-way_handshake

[21]

点击链接: https://www.youtube.com/watch?v=dQw4w9WgXcQ

[22]

job.toutiao.com/s/Rb21Dk9: https://job.toutiao.com/s/Rb21Dk9

相关 [网络安全] 推荐:

网络安全

- - CSDN博客系统运维推荐文章
1、防止入侵者对主机进行ping探测,可以禁止Linux主机对ICMP包的回应.  iptables 防火墙上禁止ICMP应答.  关闭不必要的端口,时常检查网络端口情况.  nmap  可以扫描端口.  关闭不必要的服务和端口.  为网络服务指定非标准的端口.  开启防火墙,只允许授权用户访问相应的服务端口.

http网络安全

- - CSDN博客推荐文章
每天都会用到http协议,也听说http协议的安全的重要性,却一直很少真的去模拟攻击. 特意通过一篇博客整理下http可能遇到的安全问题,用脚本语言php去模拟和处理. 1 http为什么会存在安全问题. http是没有状态和加密的协议,如果不使用(ssl)https协议,很多信息都是透明的,传输的数据很容易被捕获.

网络安全-常见网络安全攻击

- - 互联网 - ITeye博客
主要介绍比较常见的3种网络安全攻击手段,分别是:跨站脚本攻击(XSS)攻击、跨站请求伪造(CSRF)攻击、SQL注入攻击. 1、XSS攻击:应该算是最普遍的应用程序层攻击之一,攻击的目的是盗走客户端 cookies,或者任何可以用于在 Web 站点确定客户身份的其他敏感信息. 用这三种方式可以保护站点不受 XSS 攻击:.

8个网络安全开源框架

- - HTML5资源教程
能帮助构建、操作安全系统的开源项目多到数不清,尤其是随着对工具的安全监控和事件反应的要求不断加强的情况下,开源安全软件不得不提高自己的性能. 下面为你介绍10款开源的安全软件. Bro 是一款很强大的框架,用于网络分析和安全监控,它和常见的IDS有所不同. 与通用的网络传输分析工具相比它侧重于网络安全监控和提供一个完整的平台化工具.

使用 Cilium 增强 Kubernetes 网络安全

- - IT瘾-dev
在本篇,我们分别使用了 Kubernetes 原生的网络策略和 Cilium 的网络策略实现了 Pod 网络层面的隔离. 不同的是,前者只提供了基于 L3/4 的网络策略;后者支持 L3/4、L7 的网络策略. 通过网络策略来提升网络安全,可以极大降低了实现和维护的成本,同时对系统几乎没有影响. 尤其是基于 eBPF 技术的 Cilium,解决了内核扩展性不足的问题,从内核层面为工作负载提供安全可靠、可观测的网络连接.

宣传网络安全,谷歌新广告不走寻常路

- tossking - 爱范儿 · Beats of Bits
2bon2btitq 这串密码也许比你现在用的要强些,况且它还真不难记. 问题是你是否想到了这种创建密码的方式. Google 正在和 Citizens Advice Bureau 广告公司发起一场广告活动:宣传网络安全. 谷歌曾发布过不少优质的广告:实验室里的科学怪人 (Wave);教室里的定格动画(Chrome).

SecTools 2011年的Top125款网络安全工具排行榜

- - 服务器运维与网站架构|Linux运维|X研究
PS:美帝知名网络安全网站SecTools在2011年年底对目前最流行的网络安全工具做了排名,这些工具里有部分也是我本人常用的,有开源的也有商业的. 详细榜单请看:(本人没空翻译了,英文不好的童鞋查查翻译工具.

Nmap 6.40 发布,网络安全审计工具

- - 开源中国社区最新新闻
Nmap 6.40 发布了,包含 14 个新的 NSE 脚本,大量的新操作系统和服务检测的签名,新增 --lua-exec 来执行脚本等等,详情请看 发行说明. 下载地址: http://nmap.org/download.html. nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端.

网络安全课堂:“中间人攻击”(MITM)

- - 煎蛋
你拿着刚买的咖啡,连上了咖啡店的WiFi,然后开始工作,这样的动作在之前已经重复了无数遍,一切都和谐无比. 但你不知道的是有人正在监视你,他们监视着你的各种网络活动,盗取你的银行凭证,家庭住址,个人电子邮件和联系人,当你发现的时候,已经晚了. 现在的小偷已经不仅仅是简单的在地铁上偷你的钱包,更高级的是使用网络攻击获取你的各种信息,当你在咖啡馆上网检查你的账户信息的时候,也许黑客就拦截了你电脑和WiFi之间的通信,监视着你的一举一动.

苹果表态:愿意接受中方网络安全审查

- - cnBeta.COM
新京报记者独家获悉,国家互联网信息办公室主任鲁炜在去年12月初赴美国考察时,曾与苹果公司CEO蒂姆·库克会面. 在会面中,库克表示将配合中国对苹果产品进行的网络安全评估. 据 一位参与会谈的国家网信办的负责人表示,双方的会谈重点是苹果产品在中国地区的安全保障. 鲁炜表示,中国已经成为苹果最大的市场之一,中国也愿意对苹果等 科技巨头开放,但前提是 iPhone、 iPad 和 Mac 等产品必须保证用户的信息安全和隐私,同时维护国家安全.