TCP的FIN、ACK、SYN、URG、PSH及攻击方式

From: http://www.hackbase.com/tech/2009-10-08/56746.html


三次握手Three-way Handshake  一个虚拟连接的建立是通过三次握手来实现的  1. (B) –> [SYN] –> (A)  假如服务器A和客户机B通讯. 当A要和B通信时,B首先向A发一个SYN (Synchronize) 标记的包 ...

  三次握手Three-way Handshake

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

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

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

  注意: 一个 SYN包就是仅SYN标记设为1的TCP包(参见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 标记设为1的TCP包. 需要注意的是当三此握手完成、连接建立以后,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标记的包不是合法的包,并且通常被认为是恶意的

  连接复位Resetting a connection

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

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

  无效的TCP标记Invalid TCP Flags

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

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

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

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

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

  UDP (用户数据包协议User Datagram Protocol)

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

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

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

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

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

  ICMP (网间控制消息协议Internet Control Message Protocol)

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

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

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

  Redirect (5), Alternate Host Address (6), Router Advertisement (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),能够把此包发往目的的唯一方法是把此包分片。由于包分片是正常的,它可以被利用来做恶意的攻击。

  因为分片的包的第一个分片包含一个包头,若没有包分片的重组功能,包过滤器不可能检测附加的包分片。典型的攻击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。包分片能作为 DOS 攻击的一部分,它可以crash older IP stacks 或涨死CPU连接能力。

  Netfilter/Iptables中的连接跟踪代码能自动做分片重组。它仍有弱点,可能受到饱和连接攻击,可以把CPU资源耗光。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404579.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT Openssl no OPENSSL_Applink 解决

QT5.15.2安装时候选择了openssl1.1.1库&#xff0c;在开发过程中出现OPENSSL_Applink。 解决办法&#xff1a;将openssl include文件下的applink.c 添加到工程中&#xff0c;即可。

Java学习----运算符与表达式

一.运算符 1.算术运算符 - * / % -- public class Test7 {public static void main(String[] args) {int x 10;int y 3;float f 3.5f;System.out.println(x/y); // 3System.out.println(x%y); // 1System.out.println(x/f); // 2.857143 x隐式转换成floatSystem…

Tomcat 6 数据源配置

近来换了TOMCAT6&#xff0c;配置MYSQL数据库的数据源&#xff0c;在网上查找相关解决方案&#xff0c;后调试解决如下&#xff1a; 修改$CATALINA_HOME/conf/context.xml文件&#xff0c;加入如下代码&#xff1a;<Context reloadable"true"> <Watche…

OpenSSL签发证书时编码UTF8STRING PRINTABLESTRING不匹配

问题如下&#xff1a; Check that the request matches the signature Signature ok The countryName field is different between CA certificate (CN) and the request (CN) 可以看出&#xff0c;CA和REQ的DN内容是一致的&#xff0c;依旧报错。其实是编码的问题。 使用以下…

[react] 请说说react中Portal是什么?

[react] 请说说react中Portal是什么&#xff1f; 核心API是ReactDOM.createPortal(ReactNode, DOMContainer)&#xff0c;返回值是一个ReactNode。返回的ReactNode需要在组件的render函数(函数式组件的返回值)中进行渲染&#xff0c;createPortal接受的ReactNode将会挂载到DOM…

在Windows下编译zlib1.2.5

zlib1.2.5下载地址 &#xff1a; http://www.winimage.com/zLibDll/zlib125.zip 下载后解压到&#xff1a;E:\software\OpenSource\zlib-1.2.5src 参考文章&#xff1a;http://demon.tw/software/compile-zlib-on-windows.html 编译方法总结如下&#xff1a; 方法一&#…

Solr学习总结(一)Solr介绍

最近一直在搞Solr的问题&#xff0c;研究Solr 的优化&#xff0c;搜索引擎的bug修改等&#xff0c;这几天终于有时间&#xff0c;闲下来总结分享&#xff0c;以便大家参考&#xff0c;与大家一起来共同学习。 Solr是一个基于Lucene的全文搜索引擎&#xff0c;同时对其进行了扩展…

SSL 多线程通信 linux openSSL C API编程

一、环境 需要提前准备好服务端和客户端的证书和私钥&#xff0c;以及CA的证书。 OpenSSL 1.1.1f 31 Mar 2020 built on: Wed Nov 24 13:20:48 2021 UTC platform: debian-amd64 options: bn(64,64) rc4(16x,int) des(int) blowfish(ptr) Thread model: posix gcc version …

分享一个CSS3和jQuery实现的模糊显示效果 - 帮助你的访问用户更好的阅读内容

为什么80%的码农都做不了架构师&#xff1f;>>> 日期&#xff1a;2011/12/20 来源&#xff1a;GBin1.com 在线演示 本地下载 这 个教程将实现一个页面部分内容突出显示效果&#xff0c; 大家可能经常见到一些页面组成内容比较多&#xff0c;可能会分散用户的…

[react] 说说你是怎么理解react的业务组件和技术组件的?

[react] 说说你是怎么理解react的业务组件和技术组件的&#xff1f; 业务组件即代码逻辑紧贴业务&#xff0c;如ajax请求&#xff0c;一些特定的需求特性等&#xff1b; 技术组件即使比较通用性的组件&#xff0c;如对loading的处理、ajax的hoc等 个人简介 我是歌谣&#xf…

查看静态库(.lib)和动态库(.dll)的导出函数的信息

From&#xff1a; http://blog.csdn.net/sunliangyuan/article/details/8075808 一般情况下&#xff0c;我们需要查看一个DLL或EXE中的包含的函数或是依赖的函数之类的信息&#xff0c;可以使用VS自带的工具dumpbin&#xff1b; 可以直接在命令行下输入dumpbin就可以查看他的…

Cracked me --1--Acid_burn

结合ida和od结合效果最好。 打开程序&#xff0c;首先是一个nag窗口&#xff08;去除nag&#xff09; 常用方法&#xff0c;一寻找字符串&#xff0c;发现和以往的 不同&#xff0c;不是对话框句柄的形式。只能第二种方法&#xff0c;单步找到对话框出现的位置。0042fd97-->…

QT 开发openSSL CSR证书请求工具

1、环境 QT 5.15.2 MinGW8.1.0 64Bit OpenSSL 1.1.1f 31 Mar 2020 built on: Wed Nov 24 13:20:48 2021 UTC platform: debian-amd64 options: bn(64,64) rc4(16x,int) des(int) blowfish(ptr) 本机的OpenSSL是随QT安装的。 2、QT使用openSSL 2.1 项目文件添加以下依赖 …

Twitter Storm 序列化

序列化这篇文章是关于序列化方法在storm 0.6.0版及之前版本中是如何工作的。0.6.0版之前&#xff0c;storm使用一种不同的序列化方法&#xff0c;参见 Serialization (prior to 0.6.0)。 元组可由任何一种类型的对象组成。由于storm是一个分布式系统&#xff0c;当对象在任务之…

VC 打开目录对话框

From: http://blog.sina.com.cn/s/blog_790bb7190100yxm7.html 对于文件选择对话框和目录选择对话框。在VC中打开文件选择对话框比较简单&#xff0c;使用CFileDialog就可以。打开目录选择对话框就稍微麻烦一些。需要使用API函数SHBrowseForFolder来实现。 该函数原型为: …

[react] 说说你对Error Boundaries的理解

[react] 说说你对Error Boundaries的理解 错误边界是React16新推出的一种错误处理的方式&#xff0c;在v16之前&#xff0c;React的抛错会导致页面显示的错误&#xff0c;v16修改这种方式成了组件如果产生了错误&#xff0c;那么从这个组件到根组件都会因为错误而崩溃掉&#…

pwd命令

Linux中用 pwd 命令来查看”当前工作目录“的完整路径。 简单得说&#xff0c;每当你在终端进行操作时&#xff0c;你都会有一个当前工作目录。 在不太确定当前位置时&#xff0c;就会使用pwd来判定当前目录在文件系统内的确切位置。 1&#xff0e;命令格式&#xff1a; pwd […

raspberry OS buster InRelease: The following signatures couldn‘t be verified

系统换源后更新&#xff0c;出现以下问题&#xff1a; Get:1 http://mirror.tuna.tsinghua.edu.cn/raspberrypi buster InRelease [32.6 kB] Get:2 http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian buster InRelease [15.0 kB] Get:3 http://mirror.tuna.tsinghua.edu…

Windos下用setx.exe命令行模式下永久设置系统环境变量

From: http://www.cnblogs.com/soli/archive/2007/08/30/876283.html setx.exe不是系统默认自带的命令&#xff0c;但可以从微软的网站(2K,XP)上下载到&#xff0c;是官方的咚咚&#xff0c;所以可以放心使用。这里是我从2K里的安装文件中抽取出来的exe文件&#xff0c;不想…

[react] props.children.map和js的map有什么区别?为什么优先选择react的?

[react] props.children.map和js的map有什么区别&#xff1f;为什么优先选择react的&#xff1f; React.Children.map 能够处理未知数据类型&#xff0c;即使 React.children 是 null 和 undefined 也能够正确处理。 React.Children.forEach 一样的原理。 个人简介 我是歌谣…