网站出现不能正常访问的原因是多种多样的,问题可能发生在网站服务器端,也可能是互联网出口,或是受到网管限制等等。但种种原因中,网站遭受攻击从而导致无法正常访问的原因与预防手段是最为复杂和难以判定的。攻击者利用网站漏洞或特定攻击手法,往往隐蔽难以察觉,这就需要网站管理人员或安全分析人员针对特定事件进行分析,做到快速响应,定位根源与迅速恢复网站的正常访问。本案例详细分析了攻击者利用数据传输过程中TCP零窗口的特点,使得某网站遭受拒绝服务攻击的案例。
2.1 问题描述
某日上午,某部官网突然出现不能访问的情况,维护人员于12点20分左右重启应用,网站访问恢复正常,但在几分钟后又重复出现不能访问的情况。从流量上观察,并未发现流量异常突发的情况,具体问题需要进一步分析。事发期间的流量,如下图所示。
2.2 分析过程
2.2.1 对12点20分左右出现的异常现象进行分析
可疑互联网IP X.X.1.132在2分30秒左右内,请求下载了13.rar、14.rar、15.rar等文件共计273次,这些文件的大小均在200MB左右。从12点18分16秒第一次请求开始,到12点19分35秒服务器出现无响应的情况,再到12点20分13秒服务器出现HTTP 502报错,本次攻击只花费不到2分钟的时间就达到了拒绝服务的攻击效果。
查看X.X.1.132与网站的TCP会话,发现这些会话的持续时间都很长,因为发现攻击后,服务器在两分钟后进行了重启,所以看似持续时间只有2分多钟,但如果不重启会话会一直持续。
深入分析这些会话内容,可以看到从传输开始,客户端宣告的TCP窗口大小为64860。
在客户端接收了一些数据后,在该会话的第57个包时,客户端宣告的TCP窗口大小减小到17316。
到此会话第66个包时,客户端宣告的TCP窗口为756。
直到第68个包时,客户端宣告的TCP窗口变为0,说明客户端已经不能再接收任何数据。随后服务器将需要继续传输的数据放在发送缓存中,等待客户端窗口恢复正常后再继续发送。
网站服务器不断的发送ACK数据包去进行TCP窗口探测,每次探测时间为双倍的探测计时器时间,但每次探测的结果均为客户端TCP窗口为0,如下图所示。
2.2.2 对14点30分左右出现的异常现象进行分析
该部网站在14点30分又受到来自X.X.23.250发起的攻击,攻击方式与12点20分发生的攻击行为一致,最后看到探测器时间一直保持在120秒探测一次,而会话的时间达到了十几分钟甚至更长。
2.3 分析结论及建议
攻击者利用官方网站现有的大文件,向服务器发送下载请求,但在传输过程中利用TCP零窗口的特点,只接收少量文件后便不再继续接受文件,从而导致大文件一直积压在服务器的发送缓存中,造成服务性能消耗,进而造成官网不能访问的现象。
处置建议:
◇ 在负载均衡设备上设置TCP零窗口超时时间;
◇ 将大文件单独放在另外一台服务器中,将官网链接指向到此文件服务器。
2.4 价值
网站正常运行涉及的元素十分繁杂,当遭受黑客的攻击后,维护人员往往很难做到快速响应,使网站恢复正常访问,更难以确定对方是利用的何种手段或漏洞发起的攻击。在本案例中我们通过网络流量分析技术,实现了对网络攻击的可视化,精准监控网络数据流向,进而第一时间将攻击行为梳理出来,大幅缩短了解决问题的时间。