AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 838002
Accepted
Andrey Fedorov
Andrey Fedorov
Asked: 2017-03-14 07:35:54 +0800 CST2017-03-14 07:35:54 +0800 CST 2017-03-14 07:35:54 +0800 CST

SSLsplit 是拦截和重新加密 wifi 路由器上的 HTTPS 流量的正确工具吗?

  • 772

我希望通过拦截其 HTTPS 流量来对在各种设备上运行的产品进行漏洞研究,但除了安装自定义证书之外,我不想修改这些设备。

似乎SSLsplit做了我想要的,因为它允许“通过网络地址转换引擎透明地拦截连接并重定向到 SSLsplit ”。据我了解,这些 NAT 规则不必在运行 MITM-ed 应用程序的设备上定义,我可以自定义iptables以通过运行Fruity Wifi或OpenWRT的设备上的SSLsplit重定向路由器流量。

SSLsplit与修改后的 iptables 规则是否足够和合理的方式来解决这个问题,或者我是否也必须修改 Linux 网络系统的其他部分?

注意:我正在尝试构建的系统要求设备将证书安装到受信任的根存储以“选择加入”此拦截。我不是想建立一个系统来拦截来自不情愿的设备的任意流量。

https openwrt mitmproxy
  • 3 3 个回答
  • 8852 Views

3 个回答

  • Voted
  1. user356895
    2017-03-20T03:39:44+08:002017-03-20T03:39:44+08:00

    简而言之,是的,它可以是正确的工具,但事实上,如果您使用SSLStrip、SSLSplit、mitmproxy或任何其他可以完成您工作的工具,您应该只注意它的工作方式。

    正如@Quantim 提到的,如果不在路由器后面的设备中安装/拥有自定义证书/CA,这是不可能的,因为它需要自定义 CA 充当 SSL 连接的中间人,并且它需要能够生成和签署受害者信任的证书。因此,受害者必须在其信任库中拥有攻击者的根 CA 证书。解释 CA 的工作原理以及如何使用上述工具实现所需的结果超出了此答案的范围,但取决于客户端的类型 - 桌面浏览器或手机 - 您应该注意安装根证书会有所不同。

    SSLsplit 的工作方式与其他透明 SSL 代理工具非常相似 - 例如 mitmproxy,它具有更多功能且更复杂。它充当客户端和实际服务器之间的中间人。前提是流量被重定向到运行 SSLsplit 的服务器并通过更改默认网关、ARP 欺骗、伪造 DNS 条目或任何其他方式进行侦听。换句话说,正如您可能已经猜到的那样,SSLsplit 以一种伪装成客户端正在连接并愿意与之通信的实际服务器的方式获取 SSL 连接。事实上,它动态生成一个证书,并使用客户端必须 - 将要 - 信任的 CA 证书的私钥对其进行签名。

    因此,要回答您的问题“ SSLsplit 是拦截和重新加密 wifi 路由器上的 HTTPS 流量的正确工具吗? ”,是的,可以,但您是否足够了解这样做?如果是这样,请通过您的研究去赢得大奖。

    并回答“带有修改的 iptables 规则的 SSLsplit 是否足够且合理的方式来解决这个问题,或者我是否也必须修改 Linux 网络系统的其他部分? ”,我应该说,如果你已经正确配置了你的 IPTables规则集和 NAT/DNAT 规则,如果您的客户端可以将 CA 证书视为受信任的,是的,这就足够了 - 使用修改后的 iptables 规则集并将客户端的流量重定向到您要拦截客户端的服务器' 交通,如前所述。顺便说一句,您需要注意计算中的“透明”一词意味着(进程或接口)在用户不知道其存在的情况下运行。

    原始文档的摘录:

    SSLsplit 支持 IPv4 和 IPv6 上的纯 TCP、纯 SSL、HTTP 和 HTTPS 连接。对于 SSL 和 HTTPS 连接,SSLsplit基于原始服务器证书主题 DN 和 subjectAltName 扩展即时生成并签署伪造的 X509v3 证书。SSLsplit 完全支持服务器名称指示 (SNI),并且能够使用 RSA、DSA 和 ECDSA 密钥以及 DHE 和 ECDHE 密码套件。根据 OpenSSL 的版本,SSLsplit 支持 SSL 3.0、TLS 1.0、TLS 1.1 和 TLS 1.2,以及可选的 SSL 2.0。 SSLsplit 还可以使用私钥可用的现有证书,而不是生成伪造的证书. SSLsplit 支持以 NULL 为前缀的 CN 证书,并且可以以通用方式拒绝 OCSP 请求。对于 HTTP 和 HTTPS 连接,SSLsplit 删除 HPKP 的响应标头以防止公钥固定, HSTS 允许用户接受不受信任的证书,以及替代协议以防止切换到 QUIC/SPDY。作为一项实验性功能,SSLsplit 以通用方式支持 STARTTLS 机制。


    重定向

    由于 OP 需要知道如何将请求重定向到 SSLsplit 但不想设置代理 - 如评论中所述 - 我将快速了解这样做,我希望它会有所帮助:

    Scenario 1 : If SSLsplit is on the OpenWRT which you are using - i.e. if SSLsplit is set on the GateWay which victims (clients) are connecting to :
    
    
                            |
             VICTIMS        |       ATTACKER
                            |
            +-------~+      |       (GATEWAY)       If SSLsplit is set on the Gateway users are gonna connect to, you only need to redirect some ports to those SSLsplit is listening on
            |        |      |                       SSLsplit will be running on two ports: 8080 for non-SSL TCP connections and 8443 for SSL connections.
            |        | ---> |
            |        |      |                       sysctl -w net.ipv4.ip_forward=1
            +~~~~~~~~+      |                       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    (HTTPS)
            +-------~+      |  \    +~~~~~~~~+      iptables -t nat -A PREROUTING -p tcp --dport 636 -j REDIRECT --to-ports 8443    (LDAPS)
            |        |      |   \   |        |      iptables -t nat -A PREROUTING -p tcp --dport 587 -j REDIRECT --to-ports 8443    (MSA)      Encryption = StartTLS
            |        | ---> | ===➤  |        |      iptables -t nat -A PREROUTING -p tcp --dport 465 -j REDIRECT --to-ports 8443    (SMTPS)    Encryption = SSL
            |        |      |   /   |        |      iptables -t nat -A PREROUTING -p tcp --dport 993 -j REDIRECT --to-ports 8443    (IMAPS)    Encryption = StartTLS
            +~~~~~~~~+      |  /    +~~~~~~~~+      iptables -t nat -A PREROUTING -p tcp --dport 5222 -j REDIRECT --to-ports 8080   (XMPP)
                            | /                     ...
            +-------~+      |
            |        |      |
            |        | ---> |
            |        |      |
            +~~~~~~~~+      |
                            |
                            |
    
    Scenario 2 : AND IF SSLsplit is not set on the GateWay whic clients are connecting to - You will be in need of setting DNAT as the following :
    
    
    
             VICTIMS        |        GATEWAY
                            |
            +-------~+      |
            |        |      |
            |        | ---> |                                                       IPTables will be like this :
            |        |      |
            +~~~~~~~~+      |                                SSLsplit               iptables -t nat -A PREROUTING -d x.x.x.x/CIDR -p tcp -m tcp --dport 443 -j DNAT --to-destination z.z.z.z:8443
                            | \                                                     iptables -t nat -A PREROUTING -d x.x.x.x/CIDR -p tcp -m tcp --dport 465 -j DNAT --to-destination z.z.z.z:8443
            +-------~+      |  \    +~~~~~~~~+              +~~~~~~~~+              ...
            |        |      |   \   |        |              |        |        
            |        | ---> | ===➤  |        |  --------->  |        |              In this scenario, all packets arriving on the router with a destination of x.x.x.x/CIDR will
            |        |      |   /   |        |              |        |              depart from the router with a destination of z.z.z.z
            +~~~~~~~~+      |  /    +~~~~~~~~+              +~~~~~~~~+
                            | /
            +-------~+      |       Redirects desired connection from somewhere
            |        |      |       to somewhere else to desired ports.
            |        | ---> |
            |        |      |
            +~~~~~~~~+      |
                            |
                            |
    

    注意将 的值设置net.ipv4.ip_forward为 1。我上面使用的命令 usingsysctl -w不是永久的。如果你想永久设置它,你应该编辑文件/etc/sysctl.conf,你可以在其中添加一行包含net.ipv4.ip_forward = 1.

    默认情况下,大多数 Linux 发行版都将禁用 IP 转发。恕我直言,这是一个好主意,因为大多数人不需要使用它,但是由于您正在设置 Linux 路由器/网关 - 对 VPN 服务器(pptp 或 ipsec)也很有用 - 您需要启用转发。正如我向您展示的那样,这可以通过多种方式完成。

    • 5
  2. Quantim
    2017-03-18T13:29:57+08:002017-03-18T13:29:57+08:00

    如果不在路由器后面的设备上安装自定义证书/CA,这是不可能的。在其他情况下,您将能够充当任何网络服务。SSLsplit 仅生成自己的证书或使用您提供私钥的证书

    SSLsplit 还可以使用私钥可用的现有证书,而不是生成伪造的证书。SSLsplit 支持 NULL 前缀 CN 证书,并且可以以通用方式拒绝 OCSP 请求

    资源

    在这两种情况下,没有您的自定义证书/CA 的客户端都会收到无效的证书颁发者错误

    透明拦截意味着,您不需要指定要拦截的每个主机并且可以拦截所有流量,但这仍然是 SSL 上的 MitM 攻击

    • 2
  3. Best Answer
    Tero Kilkanen
    2017-03-21T17:26:55+08:002017-03-21T17:26:55+08:00

    这里有两个部分:作为客户端连接的 Web 服务器的 SSLsplit,以及交换数据包中的目标地址以将它们重定向到 SSLsplit 服务器的 NAT。

    需要在客户端设备使用的路由器上设置 NAT,将数据包的目标地址从实际目标服务器更改为 SSLsplit 服务器。

    然后 SSLsplit 可以获取连接并做它的事情:连接到外部主机(在 TLS 握手中可用)并转发响应。

    因此,从网络角度来看,唯一的事情是您需要确保客户端获得这样的网络选项,即它们的默认网关指向执行 NAT 的路由器。

    • 2

相关问题

  • 为 IIS 7.0 问题创建证书

  • IE6 和更高版本在 HTTPS 处理方面的差异

  • 如何模拟连接到 HTTPS 并记录握手?

  • SSL 错误:ssl_error_bad_mac_read

  • 在实时站点上使用自签名证书有什么好处?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve