概述:本次实验利用Wireshark先对TCP三次握手原理进行分析,解释TCP连接建立的过程,并用“两军问题”解释为什么要进行三次握手;然后分析TCP连接的安全性,概述SYN洪范攻击和SSL,利用Wireshark抓取http登录密码,证明http是明文传输,数据不安全,而https是密文传输,安全可靠;最后对免费WiFi热点的安全性提出自己的一些思考。
一,Wireshark分析TCP三次握手
1,抓取数据包
1.1,打开Wireshark,在过滤栏输入“http”进行抓包过滤。点击开始,进行抓包。
1.2,打开浏览器,输入网址www.csdn.net进行访问。
1.3,打开www.csdn.net的网页源代码,查看响应服务器的域名地址为read.csdn.net
打开cmd,ping 域名地址read.csdn.net的ip,得到响应服务器的ip地址为101.201.170.152。
1.4,在抓取到的数据包找到本机和101.201.170.152的交互信息,并找到协议为HTTP,方法为GET的数据包,如图所示。
右键选择Follow TCP Stream,在弹出的窗口中,可以查看到Host和Referer,证明该数据包确实是来自csdn网站。
2,三次握手分析
2.1在追踪到的TCP流中,可以看到在HTTP之前有三次TCP数据交互,分别是
第1次:本机->csdn服务器 客户端向服务器发送连接请求
第2次:csdn服务器->本机 服务器对客户端的连接请求进行响应,允许请求。
第3次:本机->csdn服务器 客户端接收到服务器的响应后,进行应答。
2.2网上随便一搜,铺天盖地有一堆三次握手的示意图,找一张过来便于对数据包进行分析:
对应着三次握手的示意图,对数据包进行分析。
第一次握手(SYN)
(1)源IP:本机IP 目的IP:服务器IP;表示本机发往服务器的TCP报文段。
(2)源端口3800,目的端口为80(http熟知端口)
(3)Syn=1,Seq=0,Ack=0
Client通过发送一个TCP报文段向服务器发起连接请求,该报文段被称为SYN报文段, 不包含应用数据,Syn的值被置为1,后面可以看到在连接未建立成功时,Syn的值都为1,连接建立成功之后,Syn为0,它表示Client和Server都已经Established,可以进行数据传输。
Seq是Client选择的起始序列号,此处是0。关于序列号的选择也有诸多的研究,因为适当的选择序列号可以避免某些安全性攻击。
Ack值为0。
第二次握手(SYNACK)
(1)源IP: 服务器IP 目的IP:本机IP 表示服务器返回给本机的应答TCP报文段
(2)源端口80,目的端口为3800
(3)Syn=1,Ack=1 , Seq=0
该报文段被称为SYNACK报文段,顾名思义,这是Server对Client发送的SYN报文段进行确认(ACK),示意Client连接被允许。该报文段也不包含应用数据。
SYN被置为1,因为连接还未建立成功。
Ack的值为Client的初始Seq加1,于是Ack=1;
Server端的初始序列号Seq=0
第三次握手(ACK)
(1)源IP:本机IP 目的IP:服务器IP;表示本机发往服务器的确认TCP报文段。
(2)源端口3800,目的端口为80
(3)Syn=0,Ack=1,Seq=0
该报文段被称为ACK报文段,是Client对Server的应答进行确认(ACK),服务器成功收到ACK报文段之后,连接就建立成功了。
此时Syn的值被置为0;
Ack的值为Server的初始Seq加1。
二,为什么是三次握手?
imooc上Tony老师是利用有名的两军问题来进行解释的,课程地址http://www.imooc.com/view/258
在此先感谢老师,然后将课件截图过来和大家分享:
设左边的蓝色部队为A蓝,右边的蓝色部队为B蓝。
(1)第一次握手:A蓝数据成功到达B蓝,B蓝收到A蓝的通知“你准备好攻打红色部队了吗?”
(2)第二次握手:B蓝回复A蓝,“我准备好了!”。
假设回复成功到达A蓝,但是此时B蓝并不知道A蓝是否成功收到了它的回复,因此它并不敢轻举妄动,假设A蓝并没有收到回复,没有出兵,那B蓝岂不是会全军覆没。于是很有必要进行第三次握手。
(3)第三次握手:A蓝回复B蓝,“我知道你准备好了,开打吧!”
当B蓝收到这个确认之后,就可以开始出兵了。
理论上来说,两军的沟通永远停不下来,因为没有办法确认最后一次数据包是否成功到达对方,所以三次握手也并不是绝对的可靠,可以选择四次,甚至多次握手,但是考虑到开销,选择三次握手,能保证足够的可靠性了。
三,初识SYN洪范攻击和SSL
1, SYN洪范攻击(SYN flood attack)
在上述TCP三次握手的过程中,涉及到一个问题,那就是TCP缓存和变量的设置,传统的设置缓存和变量的大致过程如下:
(1)第二次握手时,Server端分配TCP缓存和变量,生成一个半开TCP连接。
(2)第三次握手时,Client端分配TCP缓存和变量,TCP双向连接建立成功。
SYN洪范攻击是指,攻击者利用多个源发出众多的SYN报文段,但是不会发出ACK报文段,如果按照传统的TCP连接方式,Server端每接收到一个SYN报文段就会分配TCP缓存和变量,建立半开TCP连接。于是这种攻击会致使服务器的连接资源消耗殆尽,可怜的服务器此时相当于被攻击者钳制住了,别的合法的Client就无法与Server进行TCP连接了。
由此可以看出,在TCP第三次握手之前进行缓存和变量分配的连接方式,其实是不安全。
2,SSL(Secure Socket Layer)
SSL,即安全套接字层,另外一个类似的名字是TSL,(Transport Layer Security,运输层安全性)是SSL3的修改版本。
SSL子层位于应用层之下,传输层之上,通过SSL套接字接口与应用层对接,通过TCP套接字与传输层对接。
SSL最大的功能就是使得TCP的连接和数据传输变得安全,它运用了加密技术,在数据传送到传输层之前对数据进行加密,具体涉及到的加密算法,和防攻击技术,在此就不具体介绍了(其实是因为我也不是很懂)。
这样一来,数据就是密文传输,而非明文。我们在日常生活中经常听到两个名词,一个是http,另一个是https,这两者的区别在于后者使用了SSL加密技术,数据是加密传输的,一般的网络抓包工具不能截获一些重要信息,比如用户登录密码,而http是明文传输的,很容易用抓包工具抓取用户登录密码。
对安全性要求较高的网站一般会使用https,比如百度,淘宝,京东,以及银行网站等等。而像论坛,博客等网站对安全性要求不是那么高的网站,一般使用http。
三,抓取http登录密码
下面用Wireshark抓取九度Online Judge(http://ac.jobdu.com)的登录密码。
我正好忘记了我的登录密码,但是浏览器保存下了 ,现在用Wireshark抓取,看看我的密码到底是多少,下次清空浏览器记录时就不会忘了。
1,打开Wireshark,开始抓包,登录九度OJ。
2,找到对应的数据包(HTTP协议,POST方法)
3,查看该数据包应用层的内容
四,关于免费WiFi热点的一些思考
免费WiFi热点是极其不安全的,为什么呢?
后台服务器会很容易抓取你的某些用户名和登录密码,即使https抓取不到,也可以抓取一些http的密码,对许多人来说,不管哪个密码被攻破,都不是一件令人愉快的事情,假如对方居心叵测,顺藤摸瓜还可以获取你的更多私人信息。所以说,有些时候免费WiFi其实就是一个鱼饵。
同一个寝室的人也可以利用这种方法获取室友的信息,先伪造一个WiFi热点(这是很简单的),然后吃着零食,慢慢抓包……
感谢原文作者。
原文地址:http://blog.csdn.net/qq_24421591/article/details/50856423