为什么服务器突然回复RST——小心网络中的安全设备
RST产生原因
一般情况下导致TCP发送RST报文的原因有如下3种:
1、 SYN数据段指定的目的端口处没有接收进程在等待。
2、TCP想放弃一个已经存在的连接。
3、TCP接收到一个数据段,但是这个数据段所标识的连接不存在。
对于第一种情况,常见的例子是终端访问服务器未开放的端口,服务器回复RST报文。比如,访问Web服务器的21端口(FTP),如果该端口服务器未开放或者阻断了到该端口的请求报文,则服务器很可能会给终端SYN报文回应一个RST报文。因此,服务器对终端的SYN报文响应RST报文在很多时候可以作为端口扫描器判断目标端口未开放的一个可靠依据。当然,在大多数场景下,服务器对到达自身未监听端口的报文进行丢弃而不响应是一种更为安全的实现。
第二种情况比较好理解,正常拆除一个已有TCP连接的方式是发送FIN,FIN报文会在所有排队数据都发出后才会发送,正常情况下不会有数据丢失,因此,这也被称为是有序释放。另外一种拆除已有TCP连接的方式就是发送RST,这种方式的优点在于无需等待数据传输完毕,可以立即终结连接,这种通过RST拆除连接的方式被称为异常释放。大多数时候服务器需要针对两种不同的拆链方式提供不同的处理方法,也有很多服务器无法识别RST方式的拆链,这时候就需要格外小心,因为一旦出现这种情况,尤其是大量终端使用RST方式拆链,可能会导致服务器侧连接无法得到有效释放,影响其正常业务侧处理能力。
最后一种情况,TCP通过4元组(源目IP,源目端口)唯一的标识一个连接,由于TCP状态机的存在,触发TCP连接建立的第一个报文标志位一定是SYN置位,因此,当服务器接收到一个新四元组(服务器本地没有这个连接)的非SYN首包就会丢弃该报文并向终端响应一个RST报文。最后一种情况,TCP通过4元组(源目IP,源目端口)唯一的标识一个连接,由于TCP状态机的存在,触发TCP连接建立的第一个报文标志位一定是SYN置位,因此,当服务器接收到一个新四元组(服务器本地没有这个连接)的非SYN首包就会丢弃该报文并向终端响应一个RST报文。
问题现象
通过终端登录Web,输入用户名密码后Web页面显示连接被重置。抓包报文如下:
终端10.153.47.104访问服务器10.153.42.65的8051端口,三次握手建立完成后,终端向服务器发送认证请求,提交用户名和密码,而后服务器立即回应RST拆除已有连接。
问题分析
通过对比前述3种情况,发现只能匹配上原因2,但从原因2来看也只是说明服务器在这个位置确实可以回复RST报文,无法解释为什么服务器要回复RST。
这个时候我们需要考虑一个问题:这个RST报文是不是真的是服务器回复的?从RST报文的seq来看确实可以和前序报文对应得上(由于SYN标志位在逻辑上占用1字节序号,所以RST报文的序号是第二个报文的序号加1)。一个很好的判断一条流是否是同一个服务器发送的方法是对比同一个方向的报文的IP头中的TTL值。由于TCP对乱序非常敏感,而网络设备逐包转发数据会引入更严重的乱序,因此网络中的设备一般都是逐流转发(按五元组,源目IP、源目端口、协议),所以,大部分情况下,在捕获的数据流中,同一条流的同一个方向的报文总是有相同的TTL值,我们基于这个判断来看一下上方截图中的第二个和第五个报文的TTL值:
第二个报文的TTL值为251:
第五个报文的TTL为122:
因此,基本可以判断RST报文为中间传输设备发出。排查流量路径上的安全设备,在IPS中找到对应的日志:
由于用户名和密码都是admin且明文传输,因此触发了Web用户登录弱口令的防御规则,连接被重置,IPS冒充服务器向终端发送RST报文拆链,如果在IPS设备抓包,可以看到IPS也同时冒充终端发送了RST给服务器。
在很多环境中,中间安全设备通过RST拦截报文时初始TTL一般是64、128、255,这时候根据终端抓包的TTL就能反推出进行拦截的安全设备所处的位置。当然也有一些安全设备进行拦截的时候TTL初始值无迹可寻,这时候只能逐跳排查了。
为什么服务器突然回复RST——小心网络中的安全设备的更多相关文章
- 阿里云VPC服务器通过ClassicLink访问经典网络服务器
VPC中的服务器名称是 vpc-ecs1 , 经典网络中的服务器名称是 classic-ecs2 ,要实现 vpc-ecs1 通过内网访问 classic-ecs2 . VPC 网段是 10.0.0. ...
- 通过python基于netconf协议获取网络中网元的配置数据,助力企业网络控制自动化轻松实现!
摘要:在当今信息化时代,大多数企业都需要网络支撑企业的ICT运行,提升企业运行效率,针对企业网络中的网元设备(包括交换机,路由器,防火墙等),很多企业希望根据自身的业务特点定制网络管理,比如可以实现网 ...
- 客户也可以申请它使用的最后一个IP地址。如果该客户所在的网络中此IP仍然可用,服务器就可以准许该申请。
http://baike.baidu.com/item/IP地址 公有地址 公有地址(Public address)由Inter NIC(Internet Network Information Ce ...
- DDos攻击的一些领域知识——(流量模型针对稳定业务比较有效)不稳定业务采用流量成本的检测算法,攻击发生的时候网络中各个协议的占比发生了明显的变化
在过去,很多防火墙对于DDoS攻击的检测一般是基于一个预先设定的流量阈值,超过一定的阈值,则会产生告警事件,做的细一些的可能会针对不同的流量特征设置不同的告警曲线,这样当某种攻击突然出现的时候,比如S ...
- Android 从网络中获取数据时 产生部分数据乱码的解决
产生部分数据乱码的解决 标签: android部分中文乱码 2014-04-12 23:24 12366人阅读 评论(10) 收藏 举报 分类: [Android 基础](15) 版权声明:本文为博主 ...
- 网络中两台主机的通信过程(TCP)
两台主机通信有两种情况:1.在同一网段中 2.不在同一网段中 (1.)在同一网段的通信过程 主机在应用层上的操作: TCP/IP协议上tcp的端口对应的各种应用程序,客户机要访问某个应用程序就会要求打 ...
- http报文在网络中是明文传输的,所以不安全。HTtp必然来临
HTTP数据在网络中裸奔 HTTP明文协议的缺陷,是导致数据泄露.数据篡改.流量劫持.钓鱼攻击等安全问题的重要原因.HTTP协议无法加密数据,所有通信数据都在网络中明文“裸奔”.通过网络的嗅探设备及一 ...
- Sun开发的JINI技术在网络中的应用
一.概述 Sun公司开发的Jini系统是一种创新技术,听说它的人很多但较少被人理解.Jini系统可利用Java扩展网络计算的范围,并有可能成为最佳解决方案. Jini是Sun公司的研究与开发项目,它能 ...
- Windows Azure 虚拟网络中虚拟机的网络隔离选项
最近我们发布了一份<Windows网络安全白皮书>(单击此处下载),文中深入说明了客户可以如何利用该平台的本地功能,为他们的信息资产提供最好的保护. 由首席顾问Walter Myer ...
随机推荐
- Linux下安装db2V9.7
vi /etc/hosts(127.0.0.1 localhost192.168.1.53 linux-wmv8) vi /etc/services db2inst1 50000/tcp(加在最后) ...
- Python网络爬虫之cookie处理、验证码识别、代理ip、基于线程池的数据爬去
本文概要 session处理cookie proxies参数设置请求代理ip 基于线程池的数据爬取 引入 有些时候,我们在使用爬虫程序去爬取一些用户相关信息的数据(爬取张三“人人网”个人主页数据)时, ...
- MacOS 系统 文件夹解析
Mac OS X,基于UNIX核心的系统,增强了系统的稳定性.性能以及响应能力. 通过对称多处理技术充分发挥双处理器的优势,提供无与伦比的2D.3D和多媒体图形性能以及广泛的字体支持和集成的PDA功能 ...
- ProvisionedAppxPackage VS AppxPackage
正文 先来说说问题的由来. 在 Preinstall 的 component 中,有一支 component 叫做 MS_StartApp,这个 component 的行为是在预安装时为目标机器装入一 ...
- python基础-字典dict
字典-dict 用途: 定义方法:通过{} 来存储数据,通过key:value (键值对)来存储数据,每个键值对通过逗号分隔.在键值对中,key 是不可变的数据类型,value 是任意数据类型 def ...
- Web for pentester_writeup之SQL injections篇
Web for pentester_writeup之SQL injections篇 SQL injections(SQL注入) Example 1 测试参数,添加 and '1'='1, 'and ' ...
- pymssql默认关闭自动模式开启事务行为浅析
使用Python采集SQL Server数据库服务器磁盘信息时,遇到了一个错误"CONFIG statement cannot be used inside a user transacti ...
- 第六篇 视觉slam中的优化问题梳理及雅克比推导
优化问题定义以及求解 通用定义 解决问题的开始一定是定义清楚问题.这里引用g2o的定义. \[ \begin{aligned} \mathbf{F}(\mathbf{x})&=\sum_{k\ ...
- Pandas文本数据处理
先初始化数据 import pandas as pd import numpy as np index = pd.Index(data=["Tom", "Bob" ...
- WeihanLi.Npoi 近期更新
WeihanLi.Npoi 近期更新 Intro 最近对我的 NPOI 扩展做了一些改变,一方面提高性能,一方面修复bug,增加一些新的功能来让它更加好用,前几天发布了 1.5.0 版本,下面来介绍一 ...