精华内容
下载资源
问答
  • 对tcp攻击的方法
    千次阅读
    2022-03-04 09:40:03

    SYN泛洪攻击

    SYN泛洪是一种TCP拒绝服务攻击,在这种攻击中一个或多个恶意的客户端产生一系 列TCP连接尝试(SYN报文段),并将它们发送给一台服务器,它们通常采用“伪造”的 (例如,随机选择)源IP地址。服务器会为每一条连接分配一定数量的连接资源。由于连接 尚未完全建立,服务器为了维护大量的半打开连接会在耗尽自身内存后拒绝为后续的合法连 接请求服务。

    解决方法

    回收最旧的半开TCP连接

    在填充积压后覆盖最旧的半开连接。这种策略要求合法连接可以在比积压可以填充恶意SYN数据包的时间更短的时间内完全建立。当攻击量增加时,或者如果积压大小太小而不实用,则此特定防御失败。

    SYN Cookie

    SYN Cookie 是对 TCP 服务器端的三次握手做一些修改,专门用来防范 SYN Flood 攻击的一种手段。它的原理是,在 TCP 服务器接收到 TCP SYN 包并返回 TCP SYN+ACK 包时,不分配一个专门的数据区,而是根据这个 SYN 包计算出一个 cookie 值。这个 cookie作为将要返回的 SYN ACK 包的初始序列号。当客户端返回一个 ACK 包时,根据包头信息计算 cookie,与返回的确认序列号(初始序列号 + 1)进行对比,如果相同,则是一个正常连接,然后,分配资源,建立连接。

    实现的关键在于cookie的计算,cookie的计算应该包含本次连接的状态信息,使攻击者不能伪造。

    影响路径最大传输单元

    在这种攻击中,攻击者伪造一个 ICMP PTB 消息(需要进行分片但设置了不分片位)。该消息包含了一个非常小的 MTU 值(例如,68字节)。这样就迫使受害的 TCP 尝试采用非常小的数据包来填充数据,从而大大降低了它的性能。

    解决方法

    最强力的攻击方法是简单地禁用主机的路径最大传输单元发现功能。当接收到的 ICMP PTB 消息的下一跳最大传输单元小于 576字节时,其他选项会禁用路径最大传输单元发现功能。Linux 的一个系统的选项,例如:ifconfig ppp0 mtu 288。该选项会保持最小的数据包大小(为了 TCP 的大数据包)。如果该选项被固定为某一数值,那么较大的数据包则不能将 IPv4 的 DF 位置位。这种方法虽然比完全禁用路径最大传输单元发现功能更具攻击性。

    破坏现有的TCP连接

    另一种类型的攻击涉及破坏现有的 TCP 连接,甚至可能将其劫持。这一类攻击通常包含的第一步是使两个之前正在通信的 TCP 节点 "失去同步" 。这样它们将使用不正确的序列号。至少有两种方法能实现上述攻击:在连接建立过程中引发不正确的状态传输,在 ESTABLISHED 状态下产生额外的数据。一旦两端不能再进行通信(但却认为它们间拥有一个打开的连接),攻击者就能够在连接中注入新的流量,而且这些注入的流量会被 TCP 认为是正确的。

    欺骗攻击

    这类攻击所涉及的 TCP 报文段是由攻击者精心定制的,目的在于破坏或改变现有 TCP 连接的行为。攻击者可以生成一个伪造的重置报文段并将其发送给一个 TCP 通信节点。假定与连接相关的 4 元组以及校验和都是正确的,序列号也处在正确的范围。这样就会造成连接的任意一端失败。

    解决方法

    认证每一个报文段(例如,使用 TCP-AO 选项) ;要求重置报文段拥有一个特殊的序列号以代替处于某一范围的序列号;要求时间戳选项具有特定的数值;使用其他形式的 cookie 文件,让非关键的数据依赖于更加准确的连接信息或一个秘密数值。

    更多相关内容
  • TCP攻击监控器 v1.0

    2019-03-15 11:33:03
    一款可监控记录TCP攻击连接的免费软件,该工具界面简洁,使用简单,用户可自由设定需要监控的端口,可自动TCP连接进行统计和排序,不仅可知道哪些IP连接了你的端口,而且还知道每个IP和你的端口建立的连接数量,...
  • TCP序列号攻击的原理及预防方法,对于TCP序列攻击有一定的参考价值
  • TCP攻击

    千次阅读 2021-06-10 10:09:25
    目录TCP协议tcp报文组成TCP协议中的常见计时器TCP三次握手方法建立连接TCP终止连接过程常见TCP攻击 TCP协议 tcp报文组成 源端口号(Source Port,16比特)和目的端口号(Destination Port,16比特):分别表示发送...

    TCP协议

    tcp报文组成

    在这里插入图片描述
    源端口号(Source Port,16比特)和目的端口号(Destination Port,16比特):分别表示发送方和接收方的端口号。
    序号(Sequence Number,32比特):该TCP段中携带的用户数据中第一个字节的编号,编号是以字节为单位的。可以表示4GB数据,足够保证在分组的生命期内不会出现重复的顺序号。
    确认号(Acknowledgment Number,32比特):下一个期望接收的字节的顺序号。即表示对顺序号之前的数据已可靠收到的确认
    数据偏移(Data Offset,4比特):指示TCP数据开始的位置,也即TCP首部长度,以32比特为单位。
    保留(Reserved,6比特)
    控制标志(Control Bits,6比特)
    URG:紧急数据标志,同时紧急指针指出本TCP段中紧急数据的位置。
    ACK:确认字段有效标志,为1,即该报文段包含一个对已被成功接收报文段的确认。如为零,确认字段无效,
    PSH:要求马上发送数据,实现PUSH功能。
    RST:对TCP连接进行复位,当TCP发生故障时,设置本标志,以使通信双方重新实现同步。还用于拒绝非法数据段和连接请求。
    SYN:建立TCP连接,一般SYN=1和ACK=0表示发起/请求建立TCP连接,而 SYN=1和ACK=1表示响应/接收建立TCP连接
    FIN:连接释放,置1表示发送方已经没有数据发送了,但是它仍然可以接收数据。
    窗口大小(Window Size,16比特):指示接收方滑动窗口的大小,用于实现TCP流量控制,表示接收方愿意接收的字节数量。
    校验和(Checksum,16比特):实现对TCP数据的校验。在计算检验和时包括TCP头部、用户数据以及一个TCP伪头部。
    伪头部格式:
    在这里插入图片描述
    紧急指针(Urgent Pointer,16比特):当URG位有效时,紧急指针指示紧急数据的结束位置。相对于当前序列号的字节偏移值。
    选项(Options,变长:0~40字节):提供了相应的扩展机制,用于实现除TCP基本头部指定功能外的扩展功能。
    填充(Padding,变长):总是以0作填充,可确保TCP头部以32比特边界结束。
    数据(Data,变长):数据部分用于传送TCP用户数据。

    TCP协议中的常见计时器

    TCP协议通常包含四种计时器:重传计时器,持续计时器,保活计时器和时间等待计时器。

    重传计时器(Retransmission Timer),该计时器用于整个连接期间,用于处理RTO(重传超时)。当一个报文从发送队列发出去后,就启动该计时器,若在RTO之内收到了该报文的ACK,则停止该重传计时器;若t>=RTO都还没有收到报文的ACK,则重传该报文,并清空该重传计时器。
    注意:若ACK报文捎带其它信息,则不会为该报文设置重传计时器。
    持续计时器(Persistent Timer),用于处理零窗体值的通过,防止"死锁"现象。
    假若接收端的TCP要命令发送端的TCP停止发送报文段时,就向发送方发送TCP发送一个报文段,该报文的窗体大小字段为0,这就是零窗体值。发送端的TCP收到该零值窗体值报文后,就会停止向接收端的TCP发送报文,直到接收端的TCP发送一个窗体大小非0的ACK报文为止。。。
    当接收端向发送端发送ACK应答的时候,假如该应答在传输的路途中丢失了,发送端并没有收到该应答,不再向接收端发送消息;而接收端却认为自己已经做出了回应,一直处在等待的状态中。此时这种情况就是传说中的"死锁"
    为了解决上述的"死锁现象",TCP中存在一个持续计时器。启动后,在未超时期间,若收到了接收端的非0窗体的通知,则停止该计时器;若该持续计时器超时了,则发送TCP就发送一个特殊的探測报文段,该报文段仅包括1B的新数据,该报文不须要确认。探測报文的作用在于提醒对方(目的能够记录在数据部分),重传上次发送方发送的那个ACK报文(即那个非0值窗体的报文)。
    注意:TCP规定,接收窗体的rwnd=0,也必须接收这三种报文段:零窗体探測报文段、确认报文段和携带紧急数据的报文段。

    保活计时器(Keeplive Timer),防止两端的TCP在连接期间长时间处于空暇状态。一般是server设置的计时器,超时通常设置为2h,当server超过了2h还没有收到客户的任何信息,server就向客户发送过一个探測报文段,若连续发送了10个探測报文段(每个75s一个)还没有响应,就觉得客户出了故障,直接终止这个连接。

    时间等待计时器(Time-Wait timer),超时时间=2MSL,max segment lifetime,这个计时器有两个作用:

      1).保证在2MSL时间内,server端可以收到最后一个ACK;
    
      2).可以保证之前某些在网络中滞留非常久的发给server的报文不会在本次连接连接关闭后再去骚扰server。
    

    注意:最后两次挥手期间,启动了两种计时器,server向client发送FIN后启动重传计时器;client收到FIN后,向server发送ACK,同一时间也启动Time-Wait计时器(时间长度为2MSL)

    TCP三次握手方法建立连接

    在这里插入图片描述
    TCP建立连接是一个不对称的过程,一方处于被动方式,一方处于主动方式,主动方式的客户方要求和被动方式的服务方建立一条传输连接。
    1.客户方首先发送一个不包含任何用户数据,只包含一个初始序号x(client-isn), SYN =1 , ACK=0 的SYN报文段
    2.服务方接收到了这个报文段,其TCP实体首先检查是否有进程在目的端口出进行侦听,如果没有,就发送RST标志为1的应答,拒绝连接,否则就发送确认号字段为x+1, ACK=1, SYN =1,序号字段为服务方方选择的初始序号y (sever-isn)的SYNACK报文段。同时服务器为该TCP连接分配缓存和变量。
    3。客户方发送一个TCP报文段,其中SYN=0,ACK=1,序号字段x+1,确认号字段是y+1。客户方为该TCP连接分配缓存和变量。
    建立连接的请求中,标志位SYN都要置为1,在这种请求中会告知MSS段大小,就是本机希望接收TCP包的最大大小。
    发送的数据TCP包都有一个序号。它是这么得来的:最初发送SYN时,有一个初始序号,根据RFC的定义,各个操作系统的实现都是与系统时间相关的。之后,序号的值会不断的增加,比如原来的序号是100,如果这个TCP包的数据有10个字节,那么下次的TCP包序号会变成110。
    滑动窗口用于加速传输,比如发了一个seq=100的包,理应收到这个包的确认ack=101后再继续发下一个包,但有了滑动窗口,只要新包的seq与没有得到确认的最小seq之差小于滑动窗口大小,就可以继续发。

    TCP终止连接过程

    参考原文链接:https://blog.csdn.net/qq_37884273/article/details/82188586
    1、客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
    2、服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
    客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
    3、服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
    客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
    4、服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。
    在这里插入图片描述

    TCP序号猜测

    TCP连接的安全性与随机初始序号有关 (ISNs),如果攻击者知道该序号,就可以伪造数据包
    问题:

    很多操作系统在ISN生成器上的设计过于简单,用当前时间作为种子
    RFC793 – 每4微秒ISN增加1
    Windows NT 4.0 – ISN = ms * 10 % 2^32
    

    攻击者可以测量目标的ISN生成器,发送NTP请求,访问HTTP, FTP, echo等服务

    常见TCP攻击

    SYN Flood(DDos)

    攻击原理

    引用博客:https://blog.csdn.net/qq_34777600/article/details/81946514
    攻击者首先伪造地址对服务器发起SYN请求,服务器会回应一个ACK+SYN(可以+请确认)。而真实的IP会认为,我没有发送请求,不作回应。服务器没有收到回应,会重试3-5次并且等待一个SYN Time(一般30秒-2分钟)后,丢弃这个连接。
    如果攻击者大量发送这种伪造源地址的SYN请求,服务器端将会消耗非常多的资源来处理这种半连接,保存遍历会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。TCP是可靠协议,这时就会重传报文,默认重试次数为5次,重试的间隔时间从1s开始每次都番倍,分别为1s + 2s + 4s + 8s +16s = 31s,第5次发出后还要等32s才知道第5次也超时了,所以一共是31 + 32 = 63s。
    假的syn报文,会占用TCP准备队列63s之久,而半连接队列默认为1024,系统默认不同,可

    cat /proc/sys/net/ipv4/tcp_max_syn_backlog c
    

    查看。也就是说在没有任何防护的情况下,每秒发送200个伪造syn包,就足够撑爆半连接队列,从而使真正的连接无法建立,无法响应正常请求。 最后的结果是服务器无暇理睬正常的连接请求—拒绝服务。
    攻击细节:

    为了提高发送效率在服务端产生更多的SYN等待队列,攻击程序在填充包头时,IP首部和TCP首部都不填充可选的字段,因此IP首部长度恰好是20字节,TCP首部也是20字节,共40字节。

    对于以太网来说,最小的包长度数据段必须达到46字节,而攻击报文只有40字节,因此,网卡在发送时,会做一些处理,在TCP首部的末尾,填充6个0来满足最小包的长度要求。这个时候,整个数据包的长度为14字节的以太网头,20字节的IP头,20字节的TCP头,再加上因为最小包长度要求而填充的6个字节的0,一共是60字节。

    但这还没有结束。以太网在传输数据时,还有CRC检验的要求。网卡会在发送数据之前对数据包进行CRC检验,将4字节的CRC值附加到包头的最后面。这个时候,数据包长度已不再是40字节,而是变成64字节了,这就是常说的SYN小包攻击,数据包结构如下:

    |14字节以太网头部|20字节IP头部|20字节TCP|6字节填充|4字节检验|
     
    |目的MAC|源MAC|协议类型| IP头 |TCP头|以太网填充 | CRC检验 |
    

    到64字节时,SYN数据包已经填充完成,准备开始传输了。攻击数据包很小,远远不够最大传输单元(MTU)的1500字节,因此不会被分片。那么这些数据包就像生产流水线上的罐头一样,一个包连着一个包紧密地挤在一起传输吗?事实上不是这样的。

    以太网在传输时,还有前导码(preamble)和帧间距(inter-frame gap)。其中前导码占8字节(byte),即64比特位。前导码前面的7字节都是10101010,1和0间隔而成。但第八个字节就变成了10101011,当主机监测到连续的两个1时,就知道后面开始是数据了。在网络传输时,数据的结构如下:

    |8字节前导码|6字节目的MAC地址|6字节源MAC地址|2字节上层协议类型|20字节IP头|20字节TCP头|6字节以太网填充|4字节CRC检验|12字节帧间距|
    

    也就是说,一个本来只有40字节的SYN包,在网络上传输时占的带宽,其实是84字节。

    防御策略

    cookie源认证
    原理是syn报文首先由DDOS防护系统来响应syn_ack。带上特定的sequence number (记为cookie)。真实的客户端会返回一个ack 并且Acknowledgment number 为cookie+1。 而伪造的客户端,将不会作出响应。这样我们就可以知道那些IP对应的客户端是真实的,将真实客户端IP加入白名单。下次访问直接通过,而其他伪造的syn报文就被拦截。

    在这里插入图片描述
    reset认证
    Reset认证利用的是TCP协议的可靠性,也是首先由DDOS防护系统来响应syn。防护设备收到syn后响应syn_ack,将Acknowledgement number (确认号)设为特定值(记为cookie)。当真实客户端收到这个报文时,发现确认号不正确,将发送reset报文,并且sequence number 为cookie + 1。 而伪造的源,将不会有任何回应。这样我们就可以将真实的客户端IP加入白名单。
    在这里插入图片描述
    TCP首包丢弃:
    该算法利用了TCP/IP协议的重传特性,来自某个源IP的第一个syn包到达时被直接丢弃并记录状态(五元组),在该源IP的第2个syn包到达时进行验证,然后放行。

    当防御设备接到一个IP地址的SYN报文后:

    第一步:接受到syn报文      -> 简单比对该IP是否存在于白名单中:   存在则转发到后端,否则进行第2步
    第二步:不存在于白名单中 -> 检查是否是该IP在一定时间段内的首次SYN报文: 不是则进行第3步,是则进行第5步
    第三步:不是首次SYN报文 -> 检查是否重传报文: 是重传则转发并加入白名单,不是则丢弃并加入黑名单
    第四步:是首次SYN报文    ->  丢弃并等待一段时间以试图接受该IP的SYN重传报文,等待超时则判定为攻击报文加入黑名单。
    第五步:tcp三次握手建立连接
    

    首包丢弃方案对用户体验会略有影响,因为丢弃首包重传会增大业务的响应时间,有鉴于此发展出了一种更优的TCP Proxy方案。所有的SYN数据报文由清洗设备接受,按照SYN Cookie方案处理。和设备成功建立了TCP三次握手的IP地址被判定为合法用户加入白名单,由设备伪装真实客户端IP地址再与真实服务器完成三次握手,随后转发数据。而指定时间内没有和设备完成三次握手的IP地址,被判定为恶意IP地址屏蔽一定时间。除了SYN Cookie结合TCP Proxy外,清洗设备还具备多种畸形TCP标志位数据包探测的能力,通过对SYN报文返回非预期应答测试客户端反应的方式来鉴别正常访问和恶意行为。

    RST攻击

    RST标志位
    RST表示复位,用来异常的关闭连接,在TCP的设计中它是不可或缺的。就像上面说的一样,发送RST包关闭连接时,不必等缓冲区的包都发出去(不像上面的FIN包),直接就丢弃缓存区的包发送RST包。而接收端收到RST包后,也不必发送ACK包来确认。
    TCP处理程序会在自己认为的异常时刻发送RST包。例如,A向B发起连接,但B之上并未监听相应的端口,这时B操作系统上的TCP处理程序会发RST包。

    攻击原理

    假设现在有一个合法用户(1.1.1.1)已经同服务器建立了正常的连接,攻击者构造攻击的TCP数据,伪装自己的IP为1.1.1.1,并向服务器发送 一个带有RST位的TCP数据段。服务器接收到这样的数据后,认为从1.1.1.1发送的连接有错误,就会清空缓冲区中建立好的连接。这时,如果合法用户 1.1.1.1再发送合法数据,服务器就已经没有这样的连接了,该用户就必须重新开始建立连接。

    一个TCP连接都是四元组,由源IP、源端口、目标IP、目标端口唯一确定一个连接。所以,如果C要伪造A发给B的包,要在上面提到的IP头和TCP头,把源IP、源端口、目标IP、目标端口都填对。这里B作为服务器,IP和端口是公开的,A是我们要下手的目标,IP当然知道,但A的源端口就不清楚了,因为这可能是A随机生成的。当然,如果能够对常见的OS如windows和linux找出生成source port规律的话,还是可以搞定的。

    防御策略

    使用防火墙将进来的包带RST位的包丢弃

    会话劫持

    基本原理

    会话劫就是在一次正常的通信过程中,黑客作为第三方参与到其中,或者是在数据流(例如基于TCP的会话)里注射额外的信息,或者是将双方的通信模式暗中改变,即从直接联系变成有黑客联系。TCP会话劫持的攻击方式可以对基于TCP的任何应用发起攻击,如HTTP、FTP、Telnet等。对于攻击者来说,所必须要做的就是窥探到正在进行TCP通信的两台主机之间传送的报文,这样攻击者就可以得知该报文的源IP、源TCP端口号、目的IP、目的TCP端号,从而可以得知其中一台主机对将要收到的下一个TCP报文段中seq和ackseq值的要求。在该合法主机收到另一台合法主机发送的TCP报文前,攻击者根据所截获的信息向该主机发出一个带有净荷的TCP报文,如果该主机先收到攻击报文,就可以把合法的TCP会话建立在攻击主机与被攻击主机之间。

    两种类型

    中间人攻击(Man In The Middle,简称MITM)是一种“间接”的入侵攻击,这种攻击模式是通过各种技术手段将受入侵者控制的一台计算机虚拟放置在网络连接中的两台通信计算机之间,这台计算机就称为“中间人”。
    在这里插入图片描述
    注射式攻击(Injection)不会改变会话双方的通讯流,而是在双方正常的通讯流插入恶意数据。在注射式攻击中,需要实现两种技术:1)IP欺骗,2)预测TCP序列号。对于IP欺骗,有两种情况需要用到:1)隐藏自己的IP地址;2)利用两台机器之间的信任关系实施入侵。在Unix/Linux平台上,可以直接使用Socket构造IP包,在IP头中填上虚假的IP地址,但需要root权限;在Windows平台上,不能使用Winsock,需要使用Winpacp(也可以使用Libnet)。例如在Linux系统,首先打开一个Raw Socket(原始套接字),然后自己编写IP头及其他数据。

    两种形式

    被动劫持实际上就是在后台监视双方会话的数据流,丛中获得敏感数据
    主动劫持将会话当中的某一台主机“踢”下线,然后由攻击者取代并接管会话,这种攻击方法危害非常大,攻击者可以做很多事情,比如“cat etc/master.passwd”(FreeBSD下的Shadow文件)。

    TCP协议的序列号

    在每一个数据包中,都有两段序列号,它们分别为:
    SEQ:当前数据包中的第一个字节的序号
    ACK:期望收到对方数据包中第一个字节的序号

    双方进行一次正常连接

    服务器(Server)
    S_SEQ:将要发送的下一个字节的序号
    S_ACK:将要接收的下一个字节的序号
    S_WIND:接收窗口
    
    客户端(Client)
    C_SEQ:将要发送的下一个字节的序号
    C_ACK:将要接收的下一个字节的序号
    C_WIND:接收窗口
    

    它们之间必须符合下面的逻辑关系,否则该数据包会被丢弃,并且返回一个ACK包(包含期望的序列号)。

    C_ACK <= C_SEQ <= C_ACK + C_WIND
    S_ACK <= S_SEQ <= S_ACK + S_WIND
    

    如果不符合上边的逻辑关系,就会引申出ACK风暴(Storm)
    ACK风暴(Storm)
    当会话双方接收到一个不期望的数据包后,就会用自己期望的序列号返回ACK包
    而在另一端,这个数据包也不是所期望的,就会再次以自己期望的序列号返回ACK
    于是,就这样来回往返,形成了恶性循环,最终导致ACK风暴。
    解决办法
    先进行ARP欺骗,使双方的数据包“正常”的发送到攻击者这里
    然后设置包转发,最后就可以进行会话劫持了,而且不必担心会有ACK风暴出现。

    TCP会话劫持过程

    假设现在主机A和主机B进行一次TCP会话,C为攻击者,劫持过程如下:

    A向B发送一个数据包
    SEQ (hex): X ACK (hex): Y
    FLAGS: -AP--- Window: ZZZZ,包大小为:60
    
    B回应A一个数据包
    SEQ (hex): Y ACK (hex): X+60
    FLAGS: -AP--- Window: ZZZZ,包大小为:50
    
    A向B回应一个数据包
    SEQ (hex): X+60 ACK (hex): Y+50
    FLAGS: -AP--- Window: ZZZZ,包大小为:40
    
    B向A回应一个数据包
    SEQ (hex): Y+50 ACK (hex): X+100
    FLAGS: -AP--- Window: ZZZZ,包大小为:30
    
    攻击者C冒充主机A给主机B发送一个数据包
    SEQ (hex): X+100 ACK (hex): Y+80
    FLAGS: -AP--- Window: ZZZZ,包大小为:20
    
    B向A回应一个数据包
    SEQ (hex): Y+80 ACK (hex): X+120 
    FLAGS: -AP--- Window: ZZZZ,包大小为:10
    

    现在,主机B执行了攻击者C冒充主机A发送过来的命令,并且返回给主机A一个数据包;但是,主机A并不能识别主机B发送过来的数据包,所以主机A会以期望的序列号返回给主机B一个数据包,随即形成ACK风暴。

    防御策略

    首先应该使用交换式网络替代共享式网络,虽然有工具可以在交换环境中实现会话劫持,但还是应该使用交换式网络替代共享式网络,因为这样可以防范最基本的嗅探攻击。
    然而,最根本的解决办法是采用加密通讯,使用SSH代替Telnet、使用SSL代替HTTP,或者干脆使用IPSec/VPN, 这样会话劫持就无用武之地了。
    其次,监视网络流量,如发现网络中出现大量的ACK包,则有可能已被进行了会话劫持攻击。

    TCP的安全性

    现在的操作系统一般随机选择 ISN,大大增加了猜测难度和off-path会话劫持的难度。
    ISN:

    RFC1948中提出了一个较好的初始化序列号ISN随机生成算法。
    
    ISN = M + F(localhost, localport, remotehost, remoteport).
    
    M是一个计时器,这个计时器每隔4毫秒加1。
    
    F是一个Hash算法,根据源IP、目的IP、源端口、目的端口生成一个随机数值。
    要保证hash算法不能被外部轻易推算得出,用MD5算法是一个比较好的选择。
    

    TCP是否安全?
    On-path攻击者可以看到所有的信息,不需要猜测ISN
    可以任意丢袭、篡改、插入数据包
    如何增强安全性?
    IPSEC、TLS等机制。
    IPSEC:
    链接:https://blog.csdn.net/NEUChords/article/details/92968314
    IPSec(Internet Protocol Security):是一组基于网络层的,应用密码学的安全通信协议族。IPSec不是具体指哪个协议,而是一个开放的协议族。
    IPSec协议的设计目标:是在IPV4和IPV6环境中为网络层流量提供灵活的安全服务
    TLS:
    链接:https://blog.csdn.net/i929664292/article/details/88680518
    在这里插入图片描述

    TLS/SSL 的功能实现主要依赖于三类基本算法:散列函数 Hash、对称加密和非对称加密,其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性。
    在这里插入图片描述
    TLS 的基本工作方式是,客户端使用非对称加密与服务器进行通信,实现身份验证并协商对称加密使用的密钥,然后对称加密算法采用协商密钥对信息以及信息摘要进行加密通信,不同的节点之间采用的对称密钥不同,从而可以保证信息只能通信双方获取。

    例如,在 HTTPS 协议中,客户端发出请求,服务端会将公钥发给客户端,客户端验证过后生成一个密钥再用公钥加密后发送给服务端(非对称加密),双方会在 TLS 握手过程中生成一个协商密钥(对称密钥),成功后建立加密连接。通信过程中客户端将请求数据用协商密钥加密后发送,服务端也用协商密钥解密,响应也用相同的协商密钥。后续的通信使用对称加密是因为对称加解密快,而握手过程中非对称加密可以保证加密的有效性,但是过程复杂,计算量相对来说也大。

    展开全文
  • 利用TCP三路握手原理,通过原始SOCKET实现拒绝服务攻击
  • 模拟网络攻击_ICMP/TCP攻击_大数据包攻击_泛洪攻击

    模拟网络攻击_ICMP/TCP攻击

    1.大数据包攻击

    Snort 规则:

    1. alert icmp any any -> $HOME_NET any (msg:"ICMP pkt is big"; classtype:icmpevent;dsize:>200; sid:10000001; rev:001; GID:1; )
    

    用 Windows10 的终端 ping ubuntu 的地址,设置发送数据包的大小,分
    别发送大于 200 和小于 200 的数据包。当发送的数据包小于 200 时,视为小
    数据包,此时不能检测,不发出报警; 当发送的数据包大于 200 时,被视为
    大数据包,此时电脑检测出来,并发送一个报警。如下图所示:
    在这里插入图片描述在这里插入图片描述接下来,访问浏览器 http://localhost/base,查看基于安全分析引擎(BASE),
    我们可以看到电脑检测到了 ICMP 攻击。

    在这里插入图片描述查看 ICMP 的详细信息, 可以看到 ID,特征,时间戳,来源地址,目标地
    址和第四层协议等信息, 如下图所示:

    在这里插入图片描述

    2.TCP 攻击

    Snort 规则:

    alert tcp $HOME_NET any -> any 80 (msg: "示例警告"; classtype:miscattack;sid: 10000002; rev:001;)
    

    用 Windows10 访问 192.168.59.136 网页,即发送了 TCP 消息,虚拟机
    检测到 TCP,发出一个报警。如下图所示:
    在这里插入图片描述在这里插入图片描述
    接下来,访问浏览器 http://localhost/base,查看基本安全分析引擎(BASE),
    我们可以看到电脑检测到了 TCP 攻击。
    在这里插入图片描述查看 TCP 的详细信息,可以看到 ID,特征,时间戳,来源地址,目标地址
    和第四层协议等信息,如下图所示:
    在这里插入图片描述

    3.泛洪攻击

    Snort 规则:

    alert tcp any any -> $HOME_NET any (msg:"synflood";flags:S; threshold:type both,track by_dst,count
    3,seconds 10;classtype:misc-attack; sid:10000003; rev:001; GID:1; )
    

    用另一个虚拟机进行 syn-flood 攻击, 如果 10 秒内超过 3 个包就发出警
    报。 执行 sudo hping3 -p 22 -S --rand-source --flood 192.168.254.133 命令进行
    攻击。
    在执行上句命令之前,需要先执行 sudo apt install hping3 命令。
    如下图:
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
    在这里插入图片描述检测到 TCP 泛洪攻击,发出一个报警。如下图所示:

    在这里插入图片描述接下来,访问浏览器 http://localhost/base,查看基于安全分析引擎(BASE),
    我们可以看到电脑检测到了 TCP 攻击。
    查看 TCP 的详细信息,可以看到 ID,特征,时间戳,来源地址,目标地址
    和第四层协议等信息,如下图所示:

    在这里插入图片描述

    展开全文
  • 网络游戏-基于软件定义网络的防低速率TCP+DoS攻击方法.zip
  • Wrappers是一个用来分析TCP/IP封包的软件,类似的IP封包软件还有iptables,linux默认都安装了此软件,作为一个安全的系统,Linux本身有两层安全防火墙,通过IP过滤机制的iptables实现第一层防护,iptables防火墙通过...
  • TCP/IP常见攻击手段

    千次阅读 2021-03-10 09:38:06
    这一篇主要和大家一起学习回顾关于TCP/IP的常见攻击,至少有一个基本的认识 前言 前言 1 IP欺骗 IP是什么 在网络中,所有的设备都会分配一个地址。这个地址就仿佛小蓝的家地址「多少号多少室」,这个号...

    以下文章来源于暖蓝笔记 ,作者蓝蓝

    这一篇主要和大家一起学习回顾关于 TCP/IP 的常见攻击,至少有一个基本的认识

    前言

    图片

    前言

    1 IP欺骗

    IP是什么

    在网络中,所有的设备都会分配一个地址。这个地址就仿佛小蓝的家地址「多少号多少室」,这个号就是分配给整个子网的,「」对应的号码即分配给子网中计算机的,这就是网络中的地址。「号」对应的号码为网络号,「」对应的号码为主机号,这个地址的整体就是IP地址

    通过IP地址我们能知道什么?

    通过 IP 地址,我们就可以知道判断访问对象服务器的位置,通过这个 IP 地址就可以判断访问对象服务器的位置,从而将消息发送到服务器。一般发送者发出的消息首先经过子网的集线器,转发到最近的路由器,然后根据路由位置访问下一个路由器的位置,直到重点

    IP头部格式

    图片

    IP头部格式

    IP欺骗技术

    骗呗,拐骗,诱骗!

    IP 欺骗技术就是伪造某台主机的 IP 地址的技术。通过IP 地址的伪装使得某台主机能够伪装另外的一台主机,而这台主机往往具有某种特权或者被另外的主机所信任。

    假设现在有一个合法用户 (1.1.1.1) 已经同服务器建立正常的连接,攻击者构造攻击的 TCP 数据,伪装自己的 IP 为 1.1.1.1,并向服务器发送一个带有 RSI 位的 TCP 数据段。服务器接收到这样的数据后,认为从 1.1.1.1 发送的连接有错误,就会清空缓冲区中建立好的连接。

    这时,如果合法用户 1.1.1.1 再发送合法数据,服务器就已经没有这样的连接了,该用户就必须从新开始建立连接。攻击时,伪造大量的IP地址,向目标发送 RST 数据,使服务器不对合法用户服务。虽然IP地址欺骗攻击有着相当难度,但我们应该清醒地意识到,这种攻击非常广泛,入侵往往从这种攻击开始。


    2 SYN Flooding

    SYN Flooding简介

    拒绝服务攻击(DDoS)从1970 年出现直到今天都依然在作祟,并给全球范围内的各大组织带来了不可估量的损失。SYN Flood是互联网上最经典的DDoS攻击方式之一,最早出现于 1999 年左右,雅虎是当时最著名的受害者。SYN Flood攻击利用了 TCP 三次握手的缺陷,能够以较小代价使目标服务器无法响应,且难以追查。

    SYN  flood 是一种常见的 DOS(denial of service拒绝服务)和DDos (distributed denial of serivce 分布式拒绝服务)攻击方式。这是一种使用TCP协议缺陷,发送大量的伪造的 TCP 连接请求,使得被攻击方 CPU 或内存资源耗尽,最终导致被攻击方无法提供正常的服务。

    TCP SYN Flood攻击原理

    TCP  SYN Flood 攻击利用的是 TCP 的三次握手(SYN -> SYN/ACK -> ACK),假设连接发起方是A,连接接受方是 B,即 B 在某个端口(Port)上监听A发出的连接请求,过程如下图所示,左边是A,右边是B。

    图片

    A 首先发送 SYN(Synchronization)消息给 B,要求 B 做好接收数据的准备;B 收到后反馈 SYN-ACK(Synchronization-Acknowledgement) 消息给A,这个消息的目的有两个:

    • 向 A 确认已做好接收数据的准备,

    • 同时要求 A 也做好接收数据的准备,此时 B 已向 A 确认好接收状态,并等待 A 的确认,连接处于半开状态(Half-Open),顾名思义只开了一半;A 收到后再次发送 ACK(Acknowledgement) 消息给B,向 B 确认也做好了接收数据的准备,至此三次握手完成,「连接」就建立了,

    大家注意到没有,最关键的一点在于双方是否都按对方的要求进入了可以接收消息的状态。而这个状态的确认主要是双方将要使用的消息序号(SquenceNum),TCP 为保证消息按发送顺序抵达接收方的上层应用,需要用消息序号来标记消息的发送先后顺序的。

    TCP是「双工」(Duplex)连接,同时支持双向通信,也就是双方同时可向对方发送消息,其中 SYN 和 SYN-ACK 消息开启了A→B的单向通信通道(B 获知了 A 的消息序号);SYN-ACK 和 ACK 消息开启了B→A单向通信通道(A获知了B的消息序号)。

    上面讨论的是双方在诚实守信,正常情况下的通信。

    但实际情况是,网络可能不稳定会丢包,使握手消息不能抵达对方,也可能是对方故意不按规矩来,故意延迟或不发送握手确认消息。

    假设  B 通过某 TCP 端口提供服务,B 在收到 A 的 SYN 消息时,积极的反馈了 SYN-ACK 消息,使连接进入半开状态,因为 B 不确定自己发给 A 的 SYN-ACK 消息或 A 反馈的 ACK 消息是否会丢在半路,所以会给每个待完成的半开连接都设一个Timer,如果超过时间还没有收到 A 的 ACK 消息,则重新发送一次 SYN-ACK 消息给A,直到重试超过一定次数时才会放弃。

    图片

    B 为帮助 A 能顺利连接,需要分配内核资源维护半开连接,那么当 B 面临海量的连接 A 时,如上图所示,SYN Flood 攻击就形成了。攻击方 A 可以控制肉鸡向 B 发送大量 SYN 消息但不响应 ACK 消息,或者干脆伪造 SYN 消息中的 Source IP,使 B 反馈的 SYN-ACK 消息石沉大海,导致 B 被大量注定不能完成的半开连接占据,直到资源耗尽,停止响应正常的连接请求。


    3 UDP Flooding

    UDP 洪泛是也是一种拒绝服务攻击,将大量的用户数据报协议(UDP)数据包发送到目标服务器,目的是压倒该设备的处理和响应能力。防火墙保护目标服务器也可能因 UDP 泛滥而耗尽,从而导致对合法流量的拒绝服务。

    UDP Flood攻击如何工作?

    UDP Flood 主要通过利用服务器响应发送到其中一个端口的 UDP数据包所采取的步骤。在正常情况下,当服务器在特定端口接收到UDP 数据包时,会经过两个步骤:

    • 服务器首先检查是否正在运行正在侦听指定端口的请求的程序。

    • 如果没有程序在该端口接收数据包,则服务器使用ICMP(ping)数据包进行响应,以通知发送方目的地不可达。

    举个例子。假设今天要联系酒店的小蓝,酒店客服接到电话后先查看房间的列表来确保小蓝在客房内,随后转接给小蓝。

    首先,接待员接收到呼叫者要求连接到特定房间的电话。接待员然后需要查看所有房间的清单,以确保客人在房间中可用,并愿意接听电话。碰巧的是,此时如果突然间所有的电话线同时亮起来,那么他们就会很快就变得不堪重负了。

    当服务器接收到每个新的 UDP 数据包时,它将通过步骤来处理请求,并利用该过程中的服务器资源。发送 UDP 报文时,每个报文将包含源设备的 IP 地址。在这种类型的 DDoS 攻击期间,攻击者通常不会使用自己的真实 IP 地址,而是会欺骗 UDP 数据包的源 IP 地址,从而阻止攻击者的真实位置被暴露并潜在地饱和来自目标的响应数据包服务器。

    由于目标服务器利用资源检查并响应每个接收到的 UDP 数据包的结果,当接收到大量 UDP 数据包时,目标的资源可能会迅速耗尽,导致对正常流量的拒绝服务。

    图片

    如何缓解UDP洪水攻击?

    大多数操作系统部分限制了 ICMP 报文的响应速率,以中断需要 ICMP 响应的 DDoS 攻击。这种缓解的一个缺点是在攻击过程中,合法的数据包也可能被过滤。如果 UDP Flood 的容量足够高以使目标服务器的防火墙的状态表饱和,则在服务器级别发生的任何缓解都将不足以应对目标设备上游的瓶颈。


    4 TCP 重置攻击


    在 TCP 重置攻击中,攻击者通过向通信的一方或双方发送伪造的消息,告诉它们立即断开连接,从而使通信双方连接中断。正常情况下,如果客户端收发现到达的报文段对于相关连接而言是不正确的,TCP就会发送一个重置报文段,从而导致 TCP 连接的快速拆卸。

    TCP 重置攻击利用这一机制,通过向通信方发送伪造的重置报文段,欺骗通信双方提前关闭 TCP 连接。如果伪造的重置报文段完全逼真,接收者就会认为它有效,并关闭 TCP 连接,防止连接被用来进一步交换信息。服务端可以创建一个新的 TCP 连接来恢复通信,但仍然可能会被攻击者重置连接。万幸的是,攻击者需要一定的时间来组装和发送伪造的报文,所以一般情况下这种攻击只对长连接有杀伤力,对于短连接而言,你还没攻击呢,人家已经完成了信息交换。

    从某种意义上来说,伪造 TCP 报文段是很容易的,因为 TCP/IP 都没有任何内置的方法来验证服务端的身份。有些特殊的 IP 扩展协议(例如 IPSec)确实可以验证身份,但并没有被广泛使用。客户端只能接收报文段,并在可能的情况下使用更高级别的协议(如 TLS)来验证服务端的身份。但这个方法对 TCP 重置包并不适用,因为 TCP重置包是 TCP 协议本身的一部分,无法使用更高级别的协议进行验证。

    5. 模拟攻击

    以下实验是在 OSX 系统中完成的,其他系统请自行测试。

    现在来总结一下伪造一个 TCP 重置报文要做哪些事情:

    • 嗅探通信双方的交换信息。

    • 截获一个 ACK 标志位置位 1 的报文段,并读取其 ACK 号。

    • 伪造一个 TCP 重置报文段(RST 标志位置为 1),其序列号等于上面截获的报文的 ACK 号。这只是理想情况下的方案,假设信息交换的速度不是很快。大多数情况下为了增加成功率,可以连续发送序列号不同的重置报文。

    • 将伪造的重置报文发送给通信的一方或双方,时其中断连接。

    为了实验简单,我们可以使用本地计算机通过 localhost 与自己通信,然后对自己进行 TCP 重置攻击。需要以下几个步骤:

    • 在两个终端之间建立一个 TCP 连接。

    • 编写一个能嗅探通信双方数据的攻击程序。

    • 修改攻击程序,伪造并发送重置报文。

    下面正式开始实验。

    建立 TCP 连接

    可以使用 netcat 工具来建立 TCP 连接,这个工很多操作系统都预装了。打开第一个终端窗口,运行以下命令:

    $ nc -nvl 8000
    

    这个命令会启动一个 TCP 服务,监听端口为 8000。接着再打开第二个终端窗口,运行以下命令:

    $ nc 127.0.0.1 8000
    

    该命令会尝试与上面的服务建立连接,在其中一个窗口输入一些字符,就会通过 TCP 连接发送给另一个窗口并打印出来。

    图片

     

    嗅探流量

    编写一个攻击程序,使用 Python 网络库 scapy 来读取两个终端窗口之间交换的数据,并将其打印到终端上。代码比较长,下面为一部份,完整代码后台回复 TCP攻击,代码的核心是调用 scapy 的嗅探方法:

    图片

    这段代码告诉 scapy 在 lo0 网络接口上嗅探数据包,并记录所有 TCP 连接的详细信息。

    • iface : 告诉 scapy 在 lo0(localhost)网络接口上进行监听。

    • lfilter : 这是个过滤器,告诉 scapy 忽略所有不属于指定的 TCP 连接(通信双方皆为 localhost,且端口号为 8000)的数据包。

    • prn : scapy 通过这个函数来操作所有符合 lfilter 规则的数据包。上面的例子只是将数据包打印到终端,下文将会修改函数来伪造重置报文。

    • count : scapy 函数返回之前需要嗅探的数据包数量。

    发送伪造的重置报文

    下面开始修改程序,发送伪造的 TCP 重置报文来进行 TCP 重置攻击。根据上面的解读,只需要修改 prn 函数就行了,让其检查数据包,提取必要参数,并利用这些参数来伪造 TCP 重置报文并发送。

    例如,假设该程序截获了一个从(src_ipsrc_port)发往 (dst_ipdst_port)的报文段,该报文段的 ACK 标志位已置为 1,ACK 号为 100,000。攻击程序接下来要做的是:

    • 由于伪造的数据包是对截获的数据包的响应,所以伪造数据包的源IP/Port 应该是截获数据包的目的 IP/Port,反之亦然。

    • 将伪造数据包的 RST 标志位置为 1,以表示这是一个重置报文。

    • 将伪造数据包的序列号设置为截获数据包的 ACK 号,因为这是发送方期望收到的下一个序列号。

    • 调用 scapy 的 send 方法,将伪造的数据包发送给截获数据包的发送方。

    对于我的程序而言,只需将这一行取消注释,并注释这一行的上面一行,就可以全面攻击了。按照步骤 1 的方法设置 TCP 连接,打开第三个窗口运行攻击程序,然后在 TCP 连接的其中一个终端输入一些字符串,你会发现 TCP 连接被中断了!

    进一步实验

    1. 可以继续使用攻击程序进行实验,将伪造数据包的序列号加减 1 看看会发生什么,是不是确实需要和截获数据包的 ACK 号完全相同。

    2. 打开 Wireshark,监听 lo0 网络接口,并使用过滤器 ip.src == 127.0.0.1 &amp;&amp; ip.dst == 127.0.0.1 &amp;&amp; tcp.port == 8000 来过滤无关数据。你可以看到 TCP 连接的所有细节。

    3. 在连接上更快速地发送数据流,使攻击更难执行。


    6 中间人攻击

    猪八戒要向小蓝表白,于是写了一封信给小蓝,结果第三者小黑拦截到了这封信,把这封信进行了篡改,于是乎在他们之间进行搞破坏行动。这个马文才就是中间人,实施的就是中间人攻击。好我们继续聊聊什么是中间人攻击。

    什么是中间人

    攻击中间人攻击英文名叫 Man-in-the-MiddleAttack,简称「MITM攻击」。指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方 直接对话,但事实上整个会话都被攻击者完全控制。我们画一张图:

    图片

    中间人

    从这张图可以看到,中间人其实就是攻击者。通过这种原理,有很多实现的用途,比如说,你在手机上浏览不健康网站的时候,手机就会提示你,此网站可能含有病毒,是否继续访问还是做其他的操作等等。

    中间人攻击的原理

    举个例子,我和公司签了一个一份劳动合同,一人一份合同。不晓得哪个可能改了合同内容,不知道真假了,怎么搞?只好找专业的机构来鉴定,自然就要花钱。

    在安全领域有句话:我们没有办法杜绝网络犯罪,只好想办法提高网络犯罪的成本。既然没法杜绝这种情况,那我们就想办法提高作案的成本,今天我们就简单了解下基本的网络安全知识,也是面试中的高频面试题了。

    为了避免双方说活不算数的情况,双方引入第三家机构,将合同原文给可信任的第三方机构,只要这个机构不监守自盗,合同就相对安全。

    如果第三方机构内部不严格或容易出现纰漏

    虽然我们将合同原文给第三方机构了,为了防止内部人员的更改,需要采取什么措施呢

    一种可行的办法是引入摘要算法。即合同和摘要一起,为了简单的理解摘要。大家可以想象这个摘要为一个函数,这个函数对原文进行了加密,会产生一个唯一的散列值,一旦原文发生一点点变化,那么这个散列值将会变化。

    有哪些常用的摘要算法呢

    目前比较常用的加密算法有消息摘要算法和安全散列算法(SHA)。MD5 是将任意长度的文章转化为一个128位的散列值,可是在2004年,MD5 被证实了容易发生碰撞,即两篇原文产生相同的摘要。这样的话相当于直接给黑客一个后门,轻松伪造摘要。

    所以在大部分的情况下都会选择SHA算法

    出现内鬼了怎么办?

    看似很安全的场面了,理论上来说杜绝了篡改合同的做法。主要某个员工同时具有修改合同和摘要的权利,那搞事儿就是时间的问题了,毕竟没哪个系统可以完全的杜绝员工接触敏感信息,除非敏感信息都不存在。所以能不能考虑将合同和摘要分开存储呢

    那如何确保员工不会修改合同呢

    这确实蛮难的,不过办法总比困难多。我们将合同放在双方手中,摘要放在第三方机构,篡改难度进一步加大

    那么员工万一和某个用户串通好了呢

    看来放在第三方的机构还是不好使,同样存在不小风险。所以还需要寻找新的方案,这就出现了数字签名和证书

    数字证书和签名

    同样的,举个例子。Sum 和 Mike 两个人签合同。Sum 首先用SHA 算法计算合同的摘要,然后用自己私钥将摘要加密,得到数字签名。Sum 将合同原文、签名,以及公钥三者都交给 Mike

    图片

    如果 Sum 想要证明合同是 Mike 的,那么就要使用 Mike  的公钥,将这个签名解密得到摘要x,然后Mike 计算原文的sha摘要Y,随后对比x和y,如果两者相等,就认为数据没有被篡改

    在这样的过程中,Mike 是不能更改 Sum 的合同,因为要修改合同不仅仅要修改原文还要修改摘要,修改摘要需要提供Mike 的私钥,私钥即 Sum 独有的密码,公钥即 Sum 公布给他人使用的密码

    总之,公钥加密的数据只能私钥可以解密。私钥加密的数据只有公钥可以解密,这就是非对称加密

    对称与非对称加密

    隐私保护?不是吓唬大家,信息是透明的兄die,不过尽量去维护个人的隐私吧,今天学习对称加密和非对称加密。

    大家先读读这个字"钥",是读"yao",我以前也是,其实读"yue"

    对称加密

    对称加密,顾名思义,加密方与解密方使用同一钥匙(秘钥)。具体一些就是,发送方通过使用相应的加密算法和秘钥,对将要发送的信息进行加密;对于接收方而言,使用解密算法和相同的秘钥解锁信息,从而有能力阅读信息。

    图片

    常见的对称加密算法

    • DES

    DES使用的密钥表面上是64位的,然而只有其中的56位被实际用于算法,其余8位可以被用于奇偶校验,并在算法中被丢弃。因此,DES 的有效密钥长度为56位,通常称 DES 的密钥长度为56位。假设秘钥为 56 位,采用暴力破Jie的方式,其秘钥个数为2的56次方,那么每纳秒执行一次解密所需要的时间差不多1年的样子。当然,没人这么干。DES现在已经不是一种安全的加密方法,主要因为它使用的56位密钥过短。

    图片

    • IDEA

    国际数据加密算法(International Data Encryption Algorithm)。秘钥长度128位,优点没有专利的限制。

    • AES

    当DES被破解以后,没过多久推出了 AES 算法,提供了三种长度供选择,128 位、192 位和 256,为了保证性能不受太大的影响,选择128即可。

    • SM1和SM4

    之前几种都是国外的,我们国内自行研究了国密 **SM1 **和 SM4。其中S都属于国家标准,算法公开。优点就是国家的大力支持和认可

    总结下几种

    图片

    非对称算法

    在对称加密中,发送方与接收方使用相同的秘钥。那么在非对称加密中则是发送方与接收方使用的不同的秘钥。其主要解决的问题是防止在秘钥协商的过程中发生泄漏。比如在对称加密中,小蓝将需要发送的消息加密,然后告诉你密码是123balala,ok,对于其他人而言,很容易就能劫持到密码是123balala。那么在非对称的情况下,小蓝告诉所有人密码是123balala,对于中间人而言,拿到也没用,因为没有私钥。所以,非对称密钥其实主要解决了密钥分发的难题。如下图

    图片

    非对称算法

    其实我们经常都在使用非对称加密,比如使用多台服务器搭建大数据平台hadoop,为了方便多台机器设置免密登录,是不是就会涉及到秘钥分发。再比如搭建docker集群也会使用相关非对称加密算法。

    常见的非对称加密

    • RSA(RSA 加密算法,RSA Algorithm)

    优势是性能比较快,如果想要较高的加密难度,需要很长的秘钥。

    • ECC

    基于椭圆曲线提出。是目前加密强度最高的非对称加密算法

    • SM2

    同样基于椭圆曲线问题设计。最大优势就是国家认可和大力支持。

    三种对比

    图片

    散列算法

    这个大家应该更加熟悉了,比如我们平常使用的MD5校验,在很多时候,我并不是拿来进行加密,而是用来获得唯一性ID。在做系统的过程中,存储用户的各种密码信息,通常都会通过散列算法,最终存储其散列值。

    常见的散列

    • MD5

    MD5 可以用来生成一个 128 位的消息摘要,它是目前应用比较普遍的散列算法,具体的应用场景你可以自行  参阅。虽然,因为算法的缺陷,它的唯一性已经被破解了,但是大部分场景下,这并不会构成安全问题。但是,如果不是长度受限(32 个字符),我还是不推荐你继续使用 MD5 的。

    • SHA

    安全散列算法。**SHA **分为 SHA1 和 SH2 两个版本。该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。

    • SM3

    国密算法SM3。加密强度和SHA-256想不多。主要是收到国家的支持。

    总结

    图片

    至此,总结下,大部分情况下使用对称加密,具有比较不错的安全性。如果需要分布式进行秘钥分发,考虑非对称。如果不需要可逆计算则散列算法。因为这段时间有这方面需求,就看了一些这方面的资料,入坑信息安全,就怕以后洗发水都不用买。谢谢大家查看!

    问题还有,此时如果 Sum 否认给过 Mike 的公钥和合同,不久gg了

    所以需要 Sum 过的话做过的事儿需要足够的信誉,这就引入了第三方机构和证书机制。

    证书之所以会有信用,是因为证书的签发方拥有信用。所以如果 Sum 想让 Mike 承认自己的公钥,Sum 不会直接将公钥给 Mike ,而是提供由第三方机构,含有公钥的证书。如果 Mike 也信任这个机构,法律都认可,那ik,信任关系成立

    图片

    如上图所示,Sum 将自己的申请提交给机构,产生证书的原文。机构用自己的私钥签名 Sum 的申请原文(先根据原文内容计算摘要,再用私钥加密),得到带有签名信息的证书。Mike 拿到带签名信息的证书,通过第三方机构的公钥进行解密,获得 Sum 证书的摘要、证书的原文。有了 Sum 证书的摘要和原文,Mike 就可以进行验签。验签通过,Mike 就可以确认 Sum 的证书的确是第三方机构签发的。

    用上面这样一个机制,合同的双方都无法否认合同。这个解决方案的核心在于需要第三方信用服务机构提供信用背书。这里产生了一个最基础的信任链,如果第三方机构的信任崩溃,比如被黑客攻破,那整条信任链条也就断裂了

    为了让这个信任条更加稳固,就需要环环相扣,打造更长的信任链,避免单点信任风险

    图片

    上图中,由信誉最好的根证书机构提供根证书,然后根证书机构去签发二级机构的证书;二级机构去签发三级机构的证书;最后有由三级机构去签发 Sum 证书。

    如果要验证 Sum 证书的合法性,就需要用三级机构证书中的公钥去解密 Sum 证书的数字签名。

    如果要验证三级机构证书的合法性,就需要用二级机构的证书去解密三级机构证书的数字签名。

    如果要验证二级结构证书的合法性,就需要用根证书去解密。

    以上,就构成了一个相对长一些的信任链。如果其中一方想要作弊是非常困难的,除非链条中的所有机构同时联合起来,进行欺诈。

    中间人攻击如何避免?

    既然知道了中间人攻击的原理也知道了他的危险,现在我们看看如何避免。相信我们都遇到过下面这种状况:

    图片

    出现这个界面的很多情况下,都是遇到了中间人攻击的现象,需要对安全证书进行及时地监测。而且大名鼎鼎的github网站,也曾遭遇过中间人攻击:

    想要避免中间人攻击的方法目前主要有两个:

    • 客户端不要轻易相信证书:因为这些证书极有可能是中间人。

    • App 可以提前预埋证书在本地:意思是我们本地提前有一些证书,这样其他证书就不能再起作用了。

    7 DDOS

    通过上面的描述,总之即好多种攻击都是 DDOS 攻击,所以简单总结下这个攻击相关内容。

    其实,像全球互联网各大公司,均遭受过大量的 DDoS

    2018年,GitHub 在一瞬间遭到高达 1.35Tbps 的带宽攻击。这次 DDoS 攻击几乎可以堪称是互联网有史以来规模最大、威力最大的 DDoS 攻击了。在 GitHub 遭到攻击后,仅仅一周后,DDoS 攻击又开始对 Google、亚马逊甚至 Pornhub 等网站进行了 DDoS 攻击。后续的 DDoS 攻击带宽最高也达到了 1Tbps。

    那 DDoS 攻击究竟是什么?

    DDos 全名 Distributed Denial of Service,翻译成中文就是分布式拒绝服务。指的是处于不同位置的多个攻击者同时向一个或数个目标发动攻击,是一种分布的、协同的大规模攻击方式。单一的DoS攻击一般是采用一对一方式的,它利用网络协议和操作系统的一些缺陷,采用欺骗和伪装的策略来进行网络攻击,使网站服务器充斥大量要求回复的信息,消耗网络带宽或系统资源,导致网络或系统不胜负荷以至于瘫痪而停止提供正常的网络服务。

    举个例子

    我开了一家有五十个座位的重庆火锅店,由于用料上等,童叟无欺。平时门庭若市,生意特别红火,而对面二狗家的火锅店却无人问津。二狗为了对付我,想了一个办法,叫了五十个人来我的火锅店坐着却不点菜,让别的客人无法吃饭。

    上面这个例子讲的就是典型的 DDoS 攻击,一般来说是指攻击者利用“肉鸡”对目标网站在较短的时间内发起大量请求,大规模消耗目标网站的主机资源,让它无法正常服务。在线游戏、互联网金融等领域是 DDoS 攻击的高发行业。

    攻击方式很多,比如 ICMP FloodUDP FloodNTP FloodSYN FloodCC 攻击DNS Query Flood等等。

    SYN Flood进行DDoS攻击的实现原理**

    SYN Flood 是一种利用 TCP 协议缺陷,发送大量伪造的 TCP 连接请求,从而使得被攻击方资源耗尽(CPU满负荷或内存不足)的攻击方式。

    一次正常的建立 TCP 连接,需要三次握手:客户端发送 SYN 报文,服务端收到请求并返回报文表示接受,客户端也返回确认,完成连接。

    SYN Flood 就是用户向服务器发送报文后突然死机或掉线,那么服务器在发出应答报文后就无法收到客户端的确认报文(第三次握手无法完成),这时服务器端一般会重试并等待一段时间后再丢弃这个未完成的连接。

    一个用户出现异常导致服务器的一个线程等待一会儿并不是大问题,但恶意攻击者大量模拟这种情况,服务器端为了维护数以万计的半连接而消耗非常多的资源,结果往往是无暇理睬客户的正常请求,甚至崩溃。从正常客户的角度看来,网站失去了响应,无法访问。

    如何应对 DDoS 攻击?

    • 高防服务器

    还是拿开的重庆火锅店举例,高防服务器就是我给重庆火锅店增加了两名保安,这两名保安可以让保护店铺不受流氓骚扰,并且还会定期在店铺周围巡逻防止流氓骚扰。

    高防服务器主要是指能独立硬防御 50Gbps 以上的服务器,能够帮助网站拒绝服务攻击,定期扫描网络主节点等,这东西是不错,就是贵~

    • 黑名单

    面对火锅店里面的流氓,我一怒之下将他们拍照入档,并禁止他们踏入店铺,但是有的时候遇到长得像的人也会禁止他进入店铺。这个就是设置黑名单,此方法秉承的就是“错杀一千,也不放一百”的原则,会封锁正常流量,影响到正常业务。

    • DDoS 清洗

    DDos 清洗,就是我发现客人进店几分钟以后,但是一直不点餐,我就把他踢出店里。

    DDoS 清洗会对用户请求数据进行实时监控,及时发现 **DOS **攻击等异常流量,在不影响正常业务开展的情况下清洗掉这些异常流量。

    • CDN 加速

    CDN 加速,我们可以这么理解:为了减少流氓骚扰,我干脆将火锅店开到了线上,承接外卖服务,这样流氓找不到店在哪里,也耍不来流氓了。

    在现实中,CDN 服务将网站访问流量分配到了各个节点中,这样一方面隐藏网站的真实 IP,另一方面即使遭遇 DDoS 攻击,也可以将流量分散到各个节点中,防止源站崩溃。

    总结

    计算机网络涉及的知识点较多,文中也就算是提了一下,更深此的理解还需要大家去看相应的书籍,感觉看了这一篇,当面试官问 DDOS 或者 TCP 涉及哪些攻击技术知识点的时候,能够回答出来就好了,咋们下一篇再见!

    展开全文
  • DDoS攻击--TCP攻击概述

    万次阅读 多人点赞 2018-08-22 16:14:34
    目前TCP协议占全网的流量达到80%,因此这也成为黑客主要攻击的类别。 TCP报文结构 一个TCP报头的标识(code bits)字段包含6个标志位: SYN:标志位用来建立连接,让连接双方同步序列号。如果SYN=1...
  • TCP Flag异常攻击原理

    千次阅读 2022-04-29 20:06:28
    TCP Flag异常攻击原理
  • TCP SYN泛洪攻击 TCP连接管理协议为经典的DoS攻击即SYN泛洪攻击(SYN flood attack)提供了环境。在这种攻击中,攻击者发送大量的TCP SYN报文段,而不完成第三次握手的步骤。随着这种SYN报文段增加,服务器不断为...
  • TCP之半连接攻击 & 全连接攻击

    千次阅读 2021-03-09 14:50:57
    面经上看到了半连接攻击的问题,跟自己想的差不多,这里简单总结一下。 半连接攻击 在正常情况下,客户端连接服务端需要通过三次握手,首先客户端构造一个SYN连接数据包发送至服务端,自身进入SYN_SEND状态,当...
  • 前言 靶机1:seedubuntu 12.01,IP:192.168.199.137 靶机2:WindowsXP SP2,IP:192.168.199.135 攻击机:Kali-2020.4,IP:...Kali通过ARP欺骗成为中间人,从而通过截获TCP数据包,seedubuntu和WinXP之间的TCP会话
  • TCP欺骗攻击

    千次阅读 2019-03-06 22:10:04
    TCP欺骗攻击 何为TCP欺骗技术 将非法计算机伪装成合法计算机与其他正常计算机进行信息交互,达到不同种目的的一种技术手段。 何为TCP/IP三次握手 TCP/IP存在三次握手机制,故提供了安全可靠的连接技术。 第一次握手...
  • Linux设备TCP连接曝高危漏洞 只要接入网络就可能被攻击.pdf
  • Slowhttptest是依赖HTTP协议的慢速攻击DoS攻击工具,设计的基本原理是服务器在请求完全接收后才会进行处理,如果客户端的发送速度缓慢或者发送不完整,服务端为其保留连接资源池占用,大量此类请求并发将导致DoS。...
  • TCP连接攻击

    千次阅读 2017-08-28 20:08:47
    1. 伪造协议,导致服务器crash. 比如说某条命令的字段长度,协议最大规定是1024,伪造个...4. DDOS攻击,从不同的IP发起大量的连接, 大流量淹没服务器。 5. 攻击集群的授权体系,all or nothing。 6. 报文发送顺序逻
  • TCP劫持攻击

    千次阅读 2020-03-16 18:54:23
    Hacker获取到Client与Server的TCP会话包(ARP毒化、或者MAC洪范攻击等) 观察Server发给Client的最后一个TCP报文 Hacker通过数据包伪造出一个TCP报文,这个报文是Client回给Server的TCP数据包 a.二层的source-mac...
  • TCP三次握手和SYN洪泛攻击

    千次阅读 2022-01-27 22:17:49
    文章目录系列文章目录一、三次握手二、TCP安全性1.SYN洪泛攻击 一、三次握手 第一步:客户端的TCP首先向服务器端的TCP发送一个特殊的TCP报文段。该报文段中不包含应用层数据。但是在报文段的首部中的一个标志位(即...
  • 1. TCP/IP网络协议栈攻击概述 2. 网络层协议攻击 3. 传输层协议攻击 4. TCP/IP网络协议栈攻击防范措施 5. 作业5-TCP/IP协议栈重点
  • 攻击方法3:破坏现有的TCP连接 攻击方法4:欺骗攻击 攻击方法1:SYN 泛洪 SYN 泛洪是一种 TCP 拒绝服务攻击,在这种攻击中一个或多个恶意的客户端产生一系列 TCP 连接尝试( SYN 报文段),并将它们发送给一台...
  • TCP SYN洪泛攻击的原理及防御方法

    万次阅读 多人点赞 2017-12-17 23:47:23
    虽然能有效对抗SYN洪泛的技术已经存在,但是没有对于TCP实现的一个标准的补救方法出现。你可以在如今的操作系统和设备中找到保护应用层和网络层的不同解决方案的不同实现。本篇论文详细描述这种攻击并展望和评估现在...
  • TCP拒绝服务攻击简述与实验

    千次阅读 2021-02-28 14:23:30
    一、TCP拒绝服务攻击简述 拒绝服务(DoS)攻击即是攻击者想办法让目标机器停止提供服务,是黑客常用的攻击手段之一。其实网络带宽进行的消耗性攻击只是拒绝服务攻击的一小部分,只要能够目标造成麻烦,使某些...
  • TCP SYN Flood攻击与防御实验

    千次阅读 2020-11-05 09:35:02
    DoS(拒绝服务攻击) DDoS(分布式拒绝服务攻击) ...TCP-SYN Flood攻击又称半开式连接攻击,每当我们进行一次标准的TCP连接,都会有一个三次握手的过程,而TCP-SYN Flood在它的实现过程中只有前两个步骤。这样,服务
  • DDOS攻击原理与TCP三次握手

    千次阅读 2020-01-02 09:43:20
    TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 第二次握手:服务器收到syn包,必须...
  • TCP劫持攻击与防御

    千次阅读 2020-10-20 22:04:10
    TCP劫持攻击 攻击思路 hacker需要获取client与server的tcp回话信息(arp攻击等获取流量)。 观察server给client的报文信息。 hacker根据观察获得的信息构造一个tcp报文,该报文是client给server的下一个报文...
  • 攻击和利用TCP的拥塞控制

    千次阅读 2022-03-21 22:06:41
    对TCP拥塞控制的攻击有趣,它能带来实际的“效果”和麻烦: 让网络变拥塞。 让用户浪费钱。 … 怎么做呢?不难。 TCP依赖ACK自时钟触发发包,以Linux TCP为例(其它的系统也大同小异),它实现了一个拥塞状态机,我...
  • TCP SYN Flood攻击实验:

    千次阅读 2020-12-17 12:38:50
    攻击对基于TCP的HTTP协议同样生效。 0x02 环境介绍: ​ 攻击机:Kali linux ​ 靶机:ubuntu 20.04 ​ 存在形式:vmware之虚机 ​ 联网方式:NAT ​ IP地址: ​ Gateway:192.168.8.2/24 ​ ...
  • TCP状态和常见攻击方式

    千次阅读 2017-12-14 15:39:17
    一.TCP状态 首先需要了解TCP中有哪些状态每个状态都有什仫意义?下面就来详细的介绍。。。 1).CLOSED:表示初始状态. 2).LISTEN:表示服务器端的某个SOCKET处于监听状态,可以接受连接。 3).SYN_RCVD:这个状态表示...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 131,258
精华内容 52,503
热门标签
关键字:

对tcp攻击的方法