我们可以通过固定密钥而不是证书来防止 SSL 固定绕过吗?

信息安全 tls 安卓 IOS 证书固定
2021-08-25 07:04:30

我在我的 iOS 和 Android 应用程序中实现了证书固定。但是,当应用程序进行渗透测试时,我们从测试人员那里得到报告,称这两个应用程序的 SSL 实现都很薄弱,可以使用 SSL 旁路工具轻松绕过。

对于 iOS,SSL 旁路工具是臭名昭著的SSL Kill Switch 2应用程序。现在据我谷歌搜索,该SSL Kill Switch 2应用程序利用操作系统级别的弱点完全绕过固定检查。

我们的团队正在寻找解决方案以防止或至少检测到绕过。创造的解决方案之一是使用公钥固定而不是证书固定。

现在根据我的理解,由于SSL Kill Switch 2在操作系统级别上工作,我们是否固定证书或公钥(或公钥哈希)并不重要。总会绕过去的。

因此,我希望得到经历过这种情况或具有专业知识的人的建议。如果值得实施公钥(或公钥哈希)固定而不是证书固定。更改后我的应用是否有机会对抗渗透测试?

3个回答

除非您指定即使在越狱/有根机器的情况下您的软件也必须能够防止 TLS 拦截 - 我希望您没有这样做,因为这是不可能的,而且尝试是愚蠢的差事 - 您的渗透测试者......不知道他们在谈论什么,我希望你没有为此付出太多。

SSL Kill Switch 2 不是 SSL 实施中的弱点,也不是一般的漏洞。它是一个工具 - 在完全植根的设备上 - 直接修改您的应用程序对系统库的使用。由于以下原因,它绝不属于应用漏洞:

  • “攻击者”需要已经拥有操作系统的控制权(甚至不是普通的用户控制,而是实际的 root 权限)。不可能保护用户空间应用程序免受恶意操作系统的攻击。
  • 它需要任何攻击的表面受害者(用户,其应用程序登录令牌或任何可能处于风险中的东西)的恶意行为。除非您试图对您的应用程序中的内容保密,即使是越狱手机的用户也不知道 - 这再次表明您的设计中有一些错误的选择,并且在您未来尝试实施不可欺骗的越狱检测和/或浪费了大量时间蛇油代码混淆——钉住是为了保护用户;将他们视为自己秘密的攻击者是不连贯的。
  • 实际的攻击者无法做到这一点。在未越狱的手机上,应用程序根本无法相互修改(或系统库)。即使在越狱的手机上,应用程序仍然可以抵御远程攻击(至少在操作系统通常可以防止远程代码执行的范围内;如果用户使用弱密码启用了 SSH,这是一个漏洞,但它不是t你的脆弱性)。“SSL pinning bypass”意味着攻击者能够让您的应用程序建立不安全的连接,即使越狱也不会这样做,除非攻击者的代码已经在设备上执行。
  • 你的代码没有问题。假设您的应用程序将在系统 TLS API 实际上创建安全连接的环境中运行是非常合理的(并允许您根据其 API 合同固定服务器的证书或密钥)。可以做一些事情,比如捆绑你自己的 OpenSSL 副本并将其用于连接,而不是系统库,但你不需要,它也不会真正有帮助(“pentester”只会修改它) .

不要误会我的意思,实际的渗透测试人员专门在越狱设备上进行测试,以便他们可以执行诸如运行 SSL Kill Switch 和禁用固定(或一般的 TLS)之类的操作。但这并没有作为漏洞出现在报告中。这是一种查找漏洞的方法——例如你的应用程序使用了硬编码的机密,或者容易受到反序列化攻击,或者你的服务器容易受到授权绕过等等——但它本身并不是一个漏洞。说它就像是说一个 Web 应用程序容易受到 XSS 攻击,因为用户可以安装一个将脚本注入页面的扩展程序。这是显而易见的,不可避免的,不是你的错,而且将其标记为问题是完全愚蠢的,除非你以某种方式试图隐藏应用程序用户的秘密。

您无法阻止坚定的逆向工程师绕过您的控制。你可以让它变得更困难,但不能阻止它。在这种情况下,固定密钥对您没有帮助。

流行的 SSL pinning 绕过工具可以轻松禁用流行的 SSL pinning 方法,它们通常需要 root 访问权限。您的应用程序可以检测并拒绝在越狱/root 设备上运行作为额外的防御。(然后有人会说你的检测方法很弱,很容易被绕过)

使 SSL pinning 绕过更加困难的一种方法是实现您的自定义 pinning 代码。如果你这样做,攻击者将不得不反编译应用程序,了解你做了什么并修补它。然而,这通常是不值得的。

我们可以通过固定密钥而不是证书来防止 SSL 固定绕过吗?如果值得实施公钥(或公钥哈希)固定而不是证书固定。

证书是一条签名信息。此信息包含公钥。固定证书时,您还会自动固定公钥,因为它包含在证书中。因此,固定密钥不会也不能在这方面为您提供额外的安全性。

但是,从操作的角度来看,固定密钥而不是证书可能很有用。固定密钥时,您可以在保留相同密钥的同时更改证书。如果您想减少更改 pin 的频率,或者如果您的证书颁发机构 (CA) 受到威胁并且您需要快速切换到另一个 CA,这可能会很有用。