Facebook、SnapChat或Gmail iOS应用程序如何阻止Fiddler解密其https流量?

Facebook、SnapChat或Gmail iOS应用程序如何阻止Fiddler解密其https流量?,ios,facebook,fiddler,Ios,Facebook,Fiddler,我试图用Fiddler捕捉一些iOS应用程序的流量,例如:Facebook、SnapChat、Gmail和Instagram Instagram没有使用https,因此我可以获得所有流量并查看我发送的cookies,但Fiddler无法解密其他三个应用程序。它只显示如下内容: 发现SSLv3兼容的ClientHello握手。提琴手 参数如下所示。版本:3.3(TLS/1.2)随机:54 3F 49 C4 20 08 09 BC A8 84 24 92 08 BF B4 38 39 C9 BB 1

我试图用Fiddler捕捉一些iOS应用程序的流量,例如:Facebook、SnapChat、Gmail和Instagram

Instagram没有使用https,因此我可以获得所有流量并查看我发送的cookies,但Fiddler无法解密其他三个应用程序。它只显示如下内容:

发现SSLv3兼容的ClientHello握手。提琴手 参数如下所示。版本:3.3(TLS/1.2)随机:54 3F 49 C4 20 08 09 BC A8 84 24 92 08 BF B4 38 39 C9 BB 1C B2 7B 95 6A 39 34 E7 AC FE 0F 62 67会话ID:空扩展名:server_name graph.facebook.com 椭圆曲线


有谁能帮助我了解他们是如何做到这一点的,这样我就可以使用相同的技术来保护我的应用程序。

Fiddler解密HTTPS流量的方式是使用他们自己的证书。但是,当Facebook/Snapchat/Gmail检测到该证书不受系统信任时(在某些情况下会更加严格,并将证书限制在受信任证书内,因此可能会拒绝第三方受信任证书),它将拒绝与证书连接

Fiddler可以为iOS生成证书以接受并安装到系统上,但您首先需要遵循:

  • 安装
  • 从fiddler生成证书,然后它应该在您的桌面上
  • 从Safari浏览器访问证书(仅限Safari,其他浏览器不起作用)
  • 安装证书
  • 由此,您应该能够嗅探来自这些应用程序的流量

    因此,再次回答这个问题,它们并不是在阻止,如果服务器提供不受信任的证书,SSL应用程序通常会拒绝来自服务器的响应。Fiddler所做的是用它的证书欺骗证书的一部分,这样当您通过SSL进行通信时,Fiddler就可以使用它的证书来解密您的流量

    要回答问题的第二部分,请查看。本质上,您可以强制用户使用特定的证书,从而阻止用户使用已安装的证书


    但是,他们仍然可以绕过这个问题——只是有点鬼鬼祟祟的方式,但这是在客户端,任何事情都会发生。

    < P>你的问题是围绕着防止HTTPS中间人(MITM)攻击IOS应用程序。使用Fiddler或其他HTTPS代理是一种幼稚的MITM攻击,不幸的是,这种攻击通常有效

    HTTP建立在称为TLS的安全传输协议(以及在此之前的SSL)之上。使用受信任方之间的公钥和私钥对连接进行加密。这就是事情往往出错的地方。信任的概念是TLS和SSL安全性的核心。应用程序连接到的服务器提供了加密凭据,必须对其进行评估才能建立信任

    把它想象成护照或驾驶执照。在大多数情况下,许可证是签出的。然后你会得到一个叫麦克洛文的。如果你不看姓名、出生日期、号码、照片、全息图等,你可能会盲目相信麦克洛文就是他们所说的那个人。然后你就有麻烦了

    不要相信麦克洛文。

    大多数应用程序信任McLovin:( 为了保护您的应用程序免受此类攻击,您应该实施更严格的信任评估。苹果公司有一份技术说明,详细说明了这一点

    一个好的开始是实施。锁定将根据已知值(该证书的全部或部分)检查远程主机的凭据。iOS应用程序具有该证书的某些副本,并且在连接到该主机时,将根据该“已知值”检查主机提供的凭据证书。一些应用程序只检查元信息,其他应用程序尝试对证书进行校验和(AFNetworking会这样做),和其他人使用已知良好证书对凭据执行完全信任评估。Apple在WWDC 2014会话中详细介绍了此过程。如果远程主机未使用预期凭据,则连接将中止。攻击者无法拦截任何流量。如果服务器的证书经常更改,则这可能是一个错误问题-这是它宁愿检查服务器的公钥而不是元信息或哈希的几个原因之一。不幸的是,一些服务器管理员经常更改公钥。一些人认为这样更安全。事实并非如此

    现在,显然这要求iOS应用程序具有“良好”证书的副本或部分副本。您可以将证书包含在应用程序中,或实现自己的密钥交换方法。安全密钥交换长期以来一直是密码学研究的主题,不可掉以轻心。 在您的应用程序中包含证书是大多数人使用的解决方案。您可能会决定从可能已泄露或越狱设备的人处保护此证书非常重要。您有许多不同的选项可以这样做。显然,您可以将其作为资源包含,并对其进行加密。您也可以直接包含它在应用程序二进制文件中,攻击者可能更难访问。这可以通过使用
    xxd
    ,作为脚本构建阶段或构建规则来实现。显然,您可以在此基础上实施额外的保护

    如果设备被破坏或应用程序被篡改,则可能是“已知货物”凭据已被更改。这是iOS应用程序沙箱对您有利的地方。您可以通过以下方式检测其中许多情况。假设您的应用程序是通过苹果渠道(如iOS应用程序商店)分发的,则在安装时,它包含一个收据。可以验证该收据,并可用于实施篡改-许多常见场景的校对

    这些都是可以在客户端实现的保护Common的方法