NSE Week4: Hijacking and poisoning

NSE Week4: Hijacking and poisoning

TCP Session Hijacking

What is Hijacking 劫持?

指的是劫取其他人的东西,特别是在运行的时候。

Hijacking 劫持与spoofing的不同点在于:

  • Hijacking 是劫持一个已经存在的TCP连接
  • 而Spoffing则是通过修改IP header来发起新的连接进行欺骗
  • Off-path v.s. On-path adversaries

    顾名思义,就是判断发起劫持的主机是否在连接的两台主机的路由上:

    • 如果在路由上,那么就是On-path, 这种劫持更为强大,可以直接注入错误的信息,但是却很难扩大规模
    • 如果不在路由上,那么就是Off-path,这种劫持就无法直接注入错误的信息了

TCP connection

如何唯一识别一个TCP连接呢? (source IP address + port number) + (destination IP address + port number)

Port number就指示了双方所运行的应用层的应用

  • TCP three-way handshake

    通过不断增加Sequence number以及Acknowledgement number来实现握手,以及后续的通信

  • How does an attacker hijack a TCP session?

    攻击者需要构造一个TCP segment来满足sequence number & acknowledgement number的回复

    那么需要的信息有

    1. Source IP address + port number (easy to get)
    2. Destination IP address + port number (easy to get)
    3. Sequence number (如果攻击者在路由上的话就不会很难,因为可以通过获取到的通信数据包来推测)

    Sequence number可以是捕捉到的数据包的sequence number + 1 亦或是+ n,只要n不要太大,接收者都会将这些数据包保存在buffer中,等待中间“未接收到”的数据包

TCP on-path connection hijacking

TCP on-path connection hijacking, attacker可以更方便的接收到通信的sequence number和acknowledgement number

只需要合理增加数字,就可以实现劫持,并发出恶意修改的数据:

  1. 嗅探数据包
  2. 预测sequence number (client -> server; server -> client)
  3. 注入恶意数据

TCP off-path connection hijacking

由于攻击者的主机并不在连接的路由上,因此attacker没有办法获取任何当前连接的信息,因此其需要主动发起一个连接,然后在劫持这个连接,同时返回合法的sequence number,但这一次因为无法进行嗅探,只能进行猜测

  • How to guess the initial sequence number

    这里利用的就是一些操作系统没有使用规范的标准来实现TCP连接

    RFC 793 (TCP specification) :

    When new connections are created, an initial sequence number (ISN) generator is employed which selects a new 32 bit ISN. The generator is bound to a 32 bit clock whose low order bit is incremented roughly every 4 microseconds.

    Thus, the ISN cycles approximately every 4.55 hours. (4 microseconds x 2^32)

    Since we assume that segments will stay in the network no more than the Maximum Segment Lifetime (MSL, defined as 2 minutes in RFC 793) and that the MSL is less than 4.55 hours we can reasonably assume that ISN’s will be unique. [i.e., sequence numbers should not repeat for at least 4.55 hours]

    The purpose is to ensure undelivered packets from previous connection that arrive late do not overlap with current connection

    总结:在RFC 793的标准下,sequence number的递增周期就是4.55 hours,这超出了最长的连接时间(2mins),因此无论怎么递增,都基本不会从头开始,可以将所有的sequence number看作是unique唯一的

    Unfortunately, BSD Unix TCP/IP stack did not adhere to these recommendations : - The sequence number for BSD TCP/IP stacks increases by 128,000 every second and by 64,000 for every new TCP connection. - Such a sequence is relatively easy to predict and can be much more readily exploited than one which follows the RFC standard

    可是在BSD Unix中,却没有按照标准实现,而是变成了sequence number每秒增加128,000,每一个新的连接增加 64,000, 这放宽了预测的时间以及缩小了范围,使sequence number很容易被预测

  • TCP initial sequence number attack

    Attacker首先通过flooding使client无法正常工作,然后发起一个新的TCP连接给server,然后通过预测sequence number来伪装成client来进行通信

BGP Route Hijacking

BGP and AS

Border Gateway Procol 也被认为是最重要的Internet协议之一,因为其能够把多个ISPs组织在一起运作

BGP是一个inter-Autonomous System (ASs) 路由协议(用于自治区内部的设备之前通信)

Autonomous system (AS, 自治系统)
  • AS是路由策略中的基本单位,由同一个组织的管理员所管理的所有网络都属于一个AS来作为路由协议的基础
  • 每一个AS内部都有很多设备相连,也会有很多的网络
  • sometimes referred to as a routing domain
  • Autonomous System Number (ASN), 每一个AS都有一个,全球唯一

BGP routing table and CIDR prefix

在BGP中,路由并不是直接指定如何到达一个IP地址,而是如何达到一个网段, Classless Inter-Domain Routing (CIDR) prefixes

  • CIDR prefix

    CIDR prefix就是subnet mask中含有1的数量

    172.16.122.204/16 就位于172.16.0.0/16网段当中,前面16bits为network段,用来指示网段;后面为host段,用来指示具体的主机 CIDR prefix = 16

    BGP Routing table 由两部分组成一个entry (x, l):

    1. x就是网段

    2. l就是路由器的接口interface,指向下一跳的地址

  • BGP 的功能

    1. 从周边的ASs中获取不同的网段的reachability
      • BGP允许所有的子网都能宣告自己的存在
      • BGP接着会确保所有的路由器都能知道这个子网的存在
    2. 决定每一个路由器到达不同子网的最优路径
      • Policy
      • Prefix reachability information
    3. ASs使用最长掩码匹配机制(longest prefix matching)来选择路径
      • 例如当需要决定192.168.20.19的路由时,有两个子网需要选择
      • 192.168.20.16/28; 192.168.0.0/16
      • 选择192.168.20.16/28,因为其子网掩码长,更具体

BGP route advertisement and propagation

接着我们具体展开来讲上面提到过的BGP的功能

首先是宣告子网的功能

例如下图,AS22394中有66.174.161.0/24这个子网,于是其开始向外宣告自己有这个子网

然后按照相邻的顺序,AS6167首先收到了这个宣告,然后记录下来6167,22394这个顺序

然后依次继续宣告,并不断记录次序,方便将来路由

eBGP and iBGP connections

那么AS中也有很多的路由器属于不同的网络,他们之前也会交换子网的信息方便AS内部的路由,因此有内外两种BGP协议来进行路由

  1. eBGP, external BGP (TCP),用于不同的AS之前的路由器之间的通信

  2. iEBGP, internal BGP (TCP), 用于同一个AS中的路由器之间的通信

BGP route/prefix/sub-prefix hijacking

那么有信息交换,就有hijacking,本质上BGP的hijacking的目的就是通过宣告攻击者的AS能够到达目标子网,来诱使其他的AS将原本将要发送到目标子网的数据发送到攻击者的AS中来。其中也有两种不同的方式

  • BGP route/prefix hijacking

    一种是通过直接宣告目标子网在攻击者的AS中的错误信息来误导其他AS将数据发送过来

  • BGP sub-prefix hijacking

    就是利用我们之前提到的过的longest matching原则,通过加长子网掩码的长度,诱导AS选择更为确切的子网 例如目标子网为10.100.0.0/16,攻击者就宣告,10.100.0.0/24 来误导其他的AS

BGP routing blackhole and two incidents

How to create a routing blackhole? 如果ASs开始宣告无法提供的子网,那么整一个Internet就会陷入混乱,因为数据包永远无法到达应该发送的位置,也收不到任何的回复

DNS Cache Poisoning

DNS and DNS structure

Domain Name System, DNS

  • 一个分布式的数据库用来存储DNS信息,从而完成一个DNS服务器架构
  • 一个应用层的协议来向所有主机提供数据库信息

为什么我们需要DNS? 理由也很简单,好记!现在IPv4已经被用完了,取而代之的是更长的IPv6,如果每访问一个网站都需要记住IP地址就太麻烦了

DNS服务器采用树状结构

全世界一共有13个root server

顶级域名Top level domain (TLD)

  • com,edu, org, net, gov .etc
  • cn, uk, de, eu, etc.

本博客目前的域名后缀后缀就是org.cn

DNS name resolution (iterative and recursive)

DNS主要的作用就是map

  • Domain names to IP addresses
  • IP addresses to Domain names

DNS resolver向 nameservers 进行mapping请求,一般我们将查询请求分为两种

  • Iterative DNS query with caching 迭代查询

    顾名思义就是一个个DNS服务器查过来,一个查不到就下一个

    1. Local DNS server
    2. root DNS server
    3. Top level DNS server
    4. Authoritative DNS server

  • Recursive DNS query with caching 递归查询

    同样也是按次序查询,但是不同的地方在于,只有查到了才会原路返回给用户,否则就会继续将查询递交给下一个服务器

    注:一般来说不会在实际中使用

DNS caching

Why we need DNS caching? 通过缓存这些DNS的map信息来加速网页的访问 比如已经查到过一次谷歌的域名和IP地址的map之后,就存在本地的DNS server上,这样下一次就不用花这么多步骤再去查询了

DNS cache poisoning attack

那么这种偷懒的办法也就会遭到黑客的攻击,如果在DNS查询的过程中,黑客发送了伪造的DNS记录给本地的DNS server,那么既而被缓存在本地,造成长久的损害。

同时还会给同一区域的其他设备造成危害,记得之前我们在SCT中提到过的 Water holing attack 就是利用了 DNS cache poisoning attack, 通过获取组织内最频繁访问的页面,就可以利用DNS poisoning来将那个网站改为黑客所构建的恶意网站,既而达到其攻击目的

How DNS poisoning attack works?

那么具体是如何伪造的DNS query回复来使DNS server认为其是合法的查询结构并缓存的呢? 这里也有两种手段

  • Query QID attack

    • 每一个DNS query 都有一个唯一的 QID

    • DNS使用UDP进行通信

    • 因此不存在连接的说法,只要能够选对正确的QID,就能成功代替真实的回复

  • RRSet attack

    每一个DNS query response 会包含一组记录集,Resource Record Sets, or RRSets

    同时,这些记录集不只包含mapping的entry,还可以增加一些其他额外的信息,对未来的mapping有所“帮助”

    比如在一次递归查询中,一般会包含域名的mapping可以在某一个服务器上获得之类的信息,黑客就可以选择篡改这个信息,直接改为mapping的信息,就可以达到其重定向的目的

Licensed under CC BY-NC-SA 4.0
Last updated on May 28, 2022 17:24 +0100
comments powered by Disqus
Cogito, ergo sum
Built with Hugo
Theme Stack designed by Jimmy