TCP三次握手及会话劫持原理与实例

更新时间:2023-06-22 18:37:00 阅读: 评论:0

TCP三次握手及会话劫持原理与实例
首先详细了解一下TCP三次握手的过程
三次握手Three-way Handshake

一个虚拟连接的建立是通过三次握手来实现的

1. (B) --> [SYN] --> (A)

假如服务器A和客户机B通讯. A要和B通信时,B首先向A发一个SYN (Synchronize) 标记的包,告诉A请求建立连接.

注意: 一个 SYN包就是仅SYN标记设为1TCP(参见TCP包头Resources). 认识到这点很重要,只有当A受到B发来的SYN包,才可建立连接,除此之外别无他法。因此,如果你的防火墙丢弃所有的发往外网接口的SYN包,那么你将不 能让外部任何主机主动建立连接。


2. (B) <-- [SYN/ACK] <--(A)

接着,A收到后会发一个对SYN包的确认包(SYN/ACK)回去,表示对第一个SYN包的确认,并继续握手操作.

注意: SYN/ACK包是仅SYN ACK 标记为1的包.

3. (B) --> [ACK] --> (A)

B收到SYN/ACK ,B发一个确认包(ACK),通知A连接已建立。至此,三次握手完成,一个TCP连接完成

Note: ACK包就是仅ACK 标记设为1TCP. 需要注意的是当三此握手完成、连接建立以后,TCP连接的每个包都会设置ACK


这就是为何连接跟踪很重要的原因了. 没有连接跟踪,防火墙将无法判断收到的ACK包是否属于一个已经建立的连接.一般的包过滤(Ipchains)收到ACK包时,会让它通过(这绝对不是个 好主意). 而当状态型防火墙收到此种包时,它会先在连接表中查找是否属于哪个已建连接,否则丢弃该包

四次握手Four-way Handshake

四次握手用来关闭已建立的TCP连接

1. (B) --> ACK/FIN --> (A)

2. (B) <-- ACK <-- (A)

3. (B) <-- ACK/FIN <-- (A)


4. (B) --> ACK --> (A)

注意: 由于TCP连接是双向连接, 因此关闭连接需要在两个方向上做。ACK/FIN (ACK FIN 标记设为1)通常被认为是FIN(终结).然而, 由于连接还没有关闭, FIN包总是打上ACK标记. 没有ACK标记而仅有FIN标记的包不是合法的包,并且通常被认为是恶意的

连接复位Retting a connection

    四次握手不是关闭TCP连接的唯一方法. 有时,如果主机需要尽快关闭连接(或连接超时,端口或主机不可达),RST (Ret)包将被发送. 注意在,由于RST包不是TCP连接中的必须部分, 可以只发送RST(即不带ACK标记). 但在正常的TCP连接中RST包可以带ACK确认标记

请注意RST包是可以不要收到方确认的


无效的简单韩语学习TCP标记Invalid TCP Flags

到目前为止,你已经看到了 SYN, ACK, FIN, RST 标记. 另外,还有PSH (Push) URG (Urgent)标记.

最常见的非法组合是SYN/FIN . 注意:由于 SYN包是用来初始化连接的, 它不可能和 FINRST标记一起出现. 这也是一个恶意攻击.

由于现在大多数防火墙已知 SYN/FIN , 别的一些组合,例如SYN/FIN/PSH, SYN/FIN/RST, SYN/FIN/RST/PSH。很明显,当网络中出现这种包时,很你的网络肯定受到攻击了。

别的已知的非法包有FIN (ACK标记)"NULL"包。如同早先讨论的,由于ACK/FIN包的出现是为了关闭一个TCP连接,那么正常的FIN包总是带有 ACK andely chan标记。"NULL"包就是没有任何TCP标记的包(URG,ACK,PSH,RST,SYN,FIN都为0)


到目前为止,正常的网络活动下,TCP协议栈不可能产生带有上面提到的任何一种标记组合的TCP包。当你发现这些不正常的包时,肯定有人对你的网络不怀好意。

UDP (用户数据包协议Ur Datagram Protocol)
TCP是面向连接的,而UDP是非连接的协议。UDP没有对接受进行确认的标记和确认机制。对丢包的处理是在应用层来完成的。(or accidental arrival).

此处需要重点注意的事情是:在正常情况下,当UDP包到达一个关闭的端口时,会返回一个UDP复位包。由于UDP是非面向连接的, 因此没有任何确认信息来确认包是否正确到达目的地。因此如果你的防火墙丢弃UDP包,它会开放所有的UDP端口(?)

由于Internet上正常情况下一些包将被丢弃,甚至某些发往已关闭端口(非防火墙的)UDP包将不会到达目的,它们将返回一个复位UDP包。

因为这个原因,UDP端口扫描总是不精确、不可靠的。

看起来大UDP包的碎片是常见的DOS (Denial of Service)攻击的常见形式 (这里有个DOS攻击的例子,/dos/grcdos.htm ).

ICMP (网间控制消息协议Internet Control Message Protocol)
同名字一样, ICMP用来在主机/路由器之间传递控制信息的协议。 ICMP包可以包含诊断信息(ping, traceroute - 注意目前unix系统中的tracerouteUDP包而不是ICMP),错误信息(网络/主机/英语四级成绩查询系统入口端口 不可达 network/host/port unreachable), 信息(时间戳timestamp, 地址掩码address mask request, etc.),或控制信息 (source quench, redirect, etc.)

你可以在www.iana/assignments/icmp-parameters中找到ICMP包的类型。

尽管ICMP通常是无害的,还是有些类型的ICMP信息需要丢弃。

Redirect (5), Alternate Host Address (6), Router Advertiment (9) 能用来转发通讯。

Echo (8), Timestamp (13) and Address Mask Request (17) 能用来分别判断主机是否起来,本地时间 和地址掩码。注意它们是和返回的信息类别有关的。它们自己本身是不能被利用的,但它们泄露出的信息对攻击者是有用的。

ICMP消息有时也被用来作为DOS攻击的一部分(例如:洪水ping flood ping, ping ?呵呵,有趣 ping of death)?/p>

包碎片注意A Note About Packet Fragmentation

如果一个包的大小超过了TCP的最大段长度MSS (Maximum Segment Size) MTU (Maximum Transmission Unit),能够把此包发往目的的唯一方法是把此包分片。由于包分片是正常的,它可以被利用来做恶意的攻击。 thereis

因为分片的包的第一个分片包含一个包头,若没有包分片的重组功能,包过滤器不可能检测附加的包分片。典型的攻击Typical attacks involve in overlapping the packet data in which packet header is 典型的攻击Typical attacks involve in overlapping the packet data in which packet header isnormal until is it overwritten with different destination IP (or port) thereby bypassing firewall rules。包分片能作为without是什么意思 DOS 停机英文攻击的一部分,它可以crash older IP stacks 或涨死CPU连接能力。

Netfilter/Iptables中的连接跟踪代码能自动做分片重组。它仍有弱点,可能受到饱和连接攻击,可以把CPU资源耗光。
握手阶段:
序号 方向  q    ack
1  A->B 10000 0
2 B->A 20000 10000+1=10001
3 A->B 10001 20000+1=20001
解释:
1AB发起连接请求,以一个随机数初始化Aq,这里假设为10000,此时ACK0
2B收到A的连接请求后,也以一个随机数初始化Bq,这里假设为20000,意思是:你的请求我已收到,我这方的数据流就从这个数开始。BACKAempty什么意思q1,即10000110001
3A收到B的回复后,它的q是它的上个请求的q1,即10000110001,意思也是:你的回复我收到了,我这方的数据流就从这个数开始。A此时的ACKBq1,即20000+1=20001

数据传输阶段:
序号  方向  q    ack      size
23          A->B      40000 70000 1514
24 B->A 70000 40000+1514-54=41460 54
25 A->B 41460 70000+54-54=70000 1514
26 B->A 70000 41460+1514-54=42920 54
解释:
23:B接收到A发来的q=40000,ack=70000,size=1514的数据包
24:于是BA也发一个数据包,告诉B,你的上个包我收到了。Bq就以它收到的数据包的ACK填充,ACK是它收到的数据包的SEQ加上数据包的大小(不包括以太网协议头,IP头,TCP),以证实B发过来的数据全收到了。
25:A在收到B发过来的ack41460的数据包时,一看到41460,正好是它的上个数据包的q加上包的大小,就明白,上次发送的数据包已安全 到达。于是它再发一个数据包给B。这个正在发送的数据包的q也以它收到的数据包的ACK填充,ACK就以它收到的数据包的q(70000)加上包 size(54)填充,ack=70000+54-54(全是头长,没数据项)
其实在握手和结束时确认号应该是对方序列号加1,传输数据时则是对方序列号加上对方携带应用层数据的长度.如果从以太网包返回来计算所加的长度,就嫌走弯路了.
另外,如果对方没有数据过来,则自己的确认号不变,序列号为上次的序列号加上本次应用层数据发送长度.



通常,大家所说的入侵,都是针对一台主机,在获得管理员权限后,就很是得意;其实,真正的入侵是占领整个内部网络 针对内部网络的攻击方法比较多,但比较有效的方法非ARP欺骗、DNS欺骗莫属了。但是,不管使用什么技术,无非都是抓取目标的数据包,然后分析出敏感数 据。如果目标内部采用的是共享式网络(采用HUB集线器连网),那只需要把网卡设置为混杂模式,挂上嗅探器(Sniffer),就能简听到你想得到的 数据。如果是交换式网络(采用交换机连网),这样方法就行不通了,因为对于嗅探器,有三种网络环境是无法跨越的:网桥交换机路由器。可 惜,对于ARP欺骗,交换式网络还是无能为力,如果我们借助ARP欺骗,在实现更高一层的入侵手段,从而真正的控制内部网络。这也就是本文要叙述的会 话劫持攻击。
  一、会话劫持原理
  1、什么是会话劫持
   在现实生活中,比如你去市场买菜,在交完钱后你要求先去干一些别的事情,稍候再来拿菜;如果这个时候某个陌生人要求把菜拿走,卖菜的人会把菜给 陌生人吗?!当然,
这只是一个比喻,但这恰恰就是会话劫持的喻意。所谓会话,就是两台主机之间的一次通讯。例如你Telnet到某台主机,这就是一次 Telnet会话;你浏览某个网站,这就是一次HTTP会话。而会话劫持(Session Hijack),就是结合了嗅探以及欺骗技术在内的攻击手段。例如,在一次正常的会话过程当中,攻击者作为第三方参与到其中,他可以在正常数据包中插入恶 意数据,也可以在双方的会话当中进行监听,甚至可以是代替某一方主机接管会话。我们可以把会话劫持攻击分为两种类型:1)中间人攻击(Man In The Middle,简称MITM)2)注射式攻击(Injection);并且还可以把会话劫持攻击分为两种形式:1)被动劫持,2)主动劫持;被动劫持实 际上就是在后台监视双方会话的数据流,丛中获得敏感数据;而主动劫持则是将会话当中的某一台主机下线,然后由攻击者取代并接管会话,这种攻击方法危害非常大,攻击者可以做很多事情,比如cat etc/master.passwd”(FreeBSD下的Shadow文件)。
  MITM攻击简介
   这也就是我们常说的中间人攻击,在网上讨论比较多的就是SMB会话劫持,这也是一个典型的中间人攻击。要想正确的实施中间人攻击,攻击者首 先需要使用ARPmarvelous什么意思欺骗或D
NS欺骗,将会话双方的通讯流暗中改变,而这种改变对于会话双方来说是完全透明的。关于ARP欺骗黑客防线介绍的比较多,网上的 资料也比较多,我就不在多说了,我只简单谈谈DNS欺骗。DNSDomain Name System),即域名服务器, 我们几乎天天都要用到。对于正常的DNS请求,例如在浏览器输入,然后系统先查看Hosts文件,如果有相对应的 IP,就使用这个IP地址访问网站(其实,利用Hosts文件就可以实现DNS欺骗);如果没有,才去请求DNS服务器;DNS服务器在接收到请求之后, 解析出其对应的IP地址,返回给我本地,最后你就可以登陆到黑客防线的网站。而DNS欺骗则是,目标将其DNS请求发送到攻击者这里,然后攻击者伪造 DNS响应,将正确的IP地址替换为其他IP,之后你就登陆了这个攻击者指定的IP,而攻击者早就在这个IP中安排好了恶意网页,可你却在不知不觉中已经 被攻击者下了”……DNS欺骗也可以在广域网中进行,比较常见的有Webrich服务器重定向邮件服务器重定向等等。但不管是ARP欺骗,还是 DNS欺骗,中间人攻击都改变正常的通讯流,它就相当于会话双方之间的一个透明代理,可以得到一切想知道的信息,甚至是利用一些有缺陷的加密协议来实现。
  注射式攻击简介
   这种方式的会话劫持比中间人攻击实现起来简单一些,它不会改变会话双方的通讯流,而是在双方正常的通讯流插入恶意数据。在注射式攻击中,需要实 现两种技术:1IP欺骗,2)预测TCP序列号。如果是UDP协议,只需伪造IP地址,然后发送过去就可以了,因为UDP没有所谓的TCP三次握手,但 基于UDP的应用协议有流控机制,所以也要做一些额外的工作。对于IP欺骗,有两种情况需要用到:1)隐藏自己的IP地址;2)利用两台机器之间的信任关 系实施入侵。在Unix/Linux平台上,可以直接使用Socket构造IP包,在IP头中填上虚假的IP地址,但需要root权限;在Windows 平台上,不能使用Winsock,需要使用Winpacp(也可以使用Libnet)。例如在Linux系统,首先打开一个Raw Socket(原始套接字),然后自己编写IP头及其他数据。可以参考下面的实例代码:

本文发布于:2023-06-22 18:37:00,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/153976.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:连接   攻击   确认   劫持   网络   需要   攻击者   信息
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图