iOS网络问题。TLS会话缓存漏洞

6
我正在面临一个iOS应用程序的安全问题。我对所有网络调用使用HTTPS,使用的公共证书来自可信任的机构,并打包在应用程序中,以防止中间人攻击(参考资料:中间人攻击 - Wiki)。我在Android上进行了SSL Pinning(在每个网络调用之前/之中验证服务器的证书),它运行得非常完美,但是在iOS中,有一个TLS会话缓存,该缓存会在第一次网络调用后缓存证书有效性。

对于第一次网络调用,证书验证部分正常工作,而对于第二次调用,操作系统使用缓存,我无法进行证书验证。我的QA团队可以轻松攻击并获取第2次及连续网络调用的所有数据。这里是TLS Session Cache iOS文档 的引用。似乎没有办法通过编程方式清除缓存,参考:AdvancedURLConnections

更改查询参数没有帮助,我已经尝试过了。请提供iOS特定的解决方案。出于业务原因,我无法对我的数据进行加密。

编辑: 我正在使用下面介绍的方法来验证我的证书。对于第一次网络调用,操作系统会调用此方法,而对于连续调用,此方法不会被调用。

willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge

我的QA团队针对每次网络调用都进行了中间人攻击,他们尝试使用自己的证书,如果我没有验证证书,他们就可以轻松地读取数据。由于缓存的原因,我无法验证我的证书。


1
我不明白在每次网络调用之前验证服务器证书如何增加安全性,也不明白TLS会话缓存如何防止您验证证书或危及安全。我想看看您的QA团队如何发起中间人攻击的详细信息。也许@Bruno对这些话题有一些补充? - user207421
1
@Husyn - 和EJP一样,我想听听有关攻击缓存导致MitM的更多信息。这是三次握手攻击吗?还是它的变体? - jww
1个回答

0

这个问题的答案是,如果你切换网络,此方法将会被再次调用。认证的响应或结果对于一个会话来说是持久的,并且只要会话有效,连接就是安全的。所以只需依赖框架的方法并保持通信安全 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接