Facebook、SnapChat或Gmail iOS应用程序如何阻止Fiddler解密其https流量?
我试图用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 椭圆曲线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解密HTTPS流量的方式是使用他们自己的证书。但是,当Facebook/Snapchat/Gmail检测到该证书不受系统信任时(在某些情况下会更加严格,并将证书限制在受信任证书内,因此可能会拒绝第三方受信任证书),它将拒绝与证书连接 Fiddler可以为iOS生成证书以接受并安装到系统上,但您首先需要遵循:
但是,他们仍然可以绕过这个问题——只是有点鬼鬼祟祟的方式,但这是在客户端,任何事情都会发生。 < P>你的问题是围绕着防止HTTPS中间人(MITM)攻击IOS应用程序。使用Fiddler或其他HTTPS代理是一种幼稚的MITM攻击,不幸的是,这种攻击通常有效 HTTP建立在称为TLS的安全传输协议(以及在此之前的SSL)之上。使用受信任方之间的公钥和私钥对连接进行加密。这就是事情往往出错的地方。信任的概念是TLS和SSL安全性的核心。应用程序连接到的服务器提供了加密凭据,必须对其进行评估才能建立信任 把它想象成护照或驾驶执照。在大多数情况下,许可证是签出的。然后你会得到一个叫麦克洛文的。如果你不看姓名、出生日期、号码、照片、全息图等,你可能会盲目相信麦克洛文就是他们所说的那个人。然后你就有麻烦了 不要相信麦克洛文。 大多数应用程序信任McLovin:( 为了保护您的应用程序免受此类攻击,您应该实施更严格的信任评估。苹果公司有一份技术说明,详细说明了这一点 一个好的开始是实施。锁定将根据已知值(该证书的全部或部分)检查远程主机的凭据。iOS应用程序具有该证书的某些副本,并且在连接到该主机时,将根据该“已知值”检查主机提供的凭据证书。一些应用程序只检查元信息,其他应用程序尝试对证书进行校验和(AFNetworking会这样做),和其他人使用已知良好证书对凭据执行完全信任评估。Apple在WWDC 2014会话中详细介绍了此过程。如果远程主机未使用预期凭据,则连接将中止。攻击者无法拦截任何流量。如果服务器的证书经常更改,则这可能是一个错误问题-这是它宁愿检查服务器的公钥而不是元信息或哈希的几个原因之一。不幸的是,一些服务器管理员经常更改公钥。一些人认为这样更安全。事实并非如此 现在,显然这要求iOS应用程序具有“良好”证书的副本或部分副本。您可以将证书包含在应用程序中,或实现自己的密钥交换方法。安全密钥交换长期以来一直是密码学研究的主题,不可掉以轻心。 在您的应用程序中包含证书是大多数人使用的解决方案。您可能会决定从可能已泄露或越狱设备的人处保护此证书非常重要。您有许多不同的选项可以这样做。显然,您可以将其作为资源包含,并对其进行加密。您也可以直接包含它在应用程序二进制文件中,攻击者可能更难访问。这可以通过使用
xxd
,作为脚本构建阶段或构建规则来实现。显然,您可以在此基础上实施额外的保护
如果设备被破坏或应用程序被篡改,则可能是“已知货物”凭据已被更改。这是iOS应用程序沙箱对您有利的地方。您可以通过以下方式检测其中许多情况。假设您的应用程序是通过苹果渠道(如iOS应用程序商店)分发的,则在安装时,它包含一个收据。可以验证该收据,并可用于实施篡改-许多常见场景的校对
这些都是可以在客户端实现的保护Common的方法