算力赋能安全:从密码学到威胁建模的深度思考
大家好,我是h1kari。Katie邀请我在BlueHat博客上写一篇客座文章,所以我想就密码学最佳实践如何与其他安全领域相关的一些想法发表一点看法,这些领域可能更贴近大家的实际工作。我目前的兴趣在于寻找那些如果能够运行得更快就会更有用的计算领域,因此我想听听大家的经验,以及是什么占用了你们处理器的所有空闲时间。请就这些想法给我反馈,让我知道这些想法是有用的还是一堆废话。
计算可行性
许多熟悉密码学的人都知道,密码的强度是按比特强度来评级的。这是一个简单的指标,用于确定哪些算法适合保护你要保护的数据。在许多方面,其他威胁建模领域也采用类似的方法,估算你要保护的东西的价值、攻击者的成本,并在安全性和功能性之间找到平衡。
当涉及到密码学时,只有两种方法可以破解密码系统:
- 找到捷径
- 尝试每一个可能的密钥
好的密码系统强制你只能使用后一种方法,并确保有足够的可能性,使得攻击者在数据不再重要之前尝试所有密钥的可能性很小。然而,这是通过数据应保密的时间和数据对攻击者的感知价值来衡量的。
在密码学中,根据摩尔定律,计算能力每18个月翻一番,而数据的价值通常随着时间的推移而减少。这是一个许多人依赖但并未真正意识到的标准安全模型。依赖这种模型的系统存在的一些问题是:
- 他们甚至没有意识到自己在使用这种模型
- 他们没有采用足够高的比特强度来阻止攻击者
以下是一些例子:
模糊测试
许多软件应用程序每天都在进行模糊测试,许多应用程序能够经受住模糊测试,只是因为攻击者只运行他们的模糊器几天就放弃了。偶尔,攻击者会随机发现一个漏洞,但在整个过程中有多少漏洞被遗漏了?如今,随着更智能的模糊器使用约束求解和跟踪来获得良好的代码覆盖率,你通常需要应用许多规则来限制你正在测试的程序状态的范围。对于许多应用程序来说,在合理的时间内获得100%的覆盖率几乎是不可能的。
如果你能够获得所有可能程序状态的全面覆盖,会发现更多漏洞吗?如果攻击者能够做到这一点,这会突然成为一种威胁吗?此外,如果你进入一个不确定是否可利用的状态,如果你能解决它是否可利用呢?如果我们有几乎无限的计算能力,我们能否数学上证明应用程序的安全性或不安全性?
IDS/病毒检测
大多数IDS市场由需要更新签名列表的软件组成,以查看有效载荷是否看起来像已知的漏洞利用。一些公司已经尝试过解决方案,模拟有效载荷针对目标运行,并使用智能启发式方法来确定有效载荷是否行为恶意。大多数有效的解决方案在这两个极端之间使用一定量的处理,试图检测已知的静态、动态或多态和/或0day有效载荷。通常,对于大型企业级网络,你能做的最好的事情是运行基于签名的IDS系统,以跟上网络速度的需求。
如果我们能够彻底分析进入网络的所有有效载荷,攻击者是否仍然能够利用我们的系统?如果我们有足够的计算能力,能否100%实时证明有效载荷是否恶意?如果我们解决了第一个模糊测试问题并将其应用于我们所有暴露于网络的软件,IDS还会存在吗?
逆向工程
通常,逆向工程比工程需要更多的计算。许多使用混淆的应用程序需要大量分析才能确定内部实际发生的情况。这也适用于硬件,芯片被认为安全是因为逆向工程芯片很困难。然而,如今许多公司正在使用图像处理技术来逆向工程甚至最先进的芯片的晶圆和电路。
大多数反逆向工程措施严重依赖于通过 obscurity 的安全,这早已被证明是一种糟糕的对策,主要依赖于攻击者缺乏决心的假设,而不是使用实际的计算度量。许多产品的反逆向工程措施失败,因为一个有决心的攻击者只需几个小时就能弄清楚混淆技术并破解整个系统。
你希望你的IP保持安全多久?如果你的IP被逆向工程,你的公司会损失多少?一个单一有决心的攻击者逆向工程它需要多长时间?攻击者需要什么样的预算?
结论
在使用所有安全模型时,存在一个固有的权衡,即你认为攻击者会付出什么来打破你的安全与他们实际能付出什么。当你将我们今天拥有的许多安全场景抽象为仅评估它们的计算可行性时,它们会落在传统的比特强度测量的哪个位置?与今天使用的密码算法相比如何?当普通攻击者拥有计算能力优势时,你的任务关键软件预计运行五年、十年甚至二十年的情况会如何?如果你的对手投入比测试你的系统更多的计算资源来击败它,他们能否找到你未发现的问题?
此外,在密码学中,你可以通过简单地增加密钥长度来轻松增加一个好算法的安全性,这会导致攻击密钥所需的时间呈指数级增加。这使得通过选择足够长的密钥来击败摩尔定律变得微不足道。对于这些其他系统,是否也那么容易指数级增加攻击者破解它们的计算要求?
就像密码学一样,应该分析许多这些安全系统的捷径,但最终,如果它是一个弱密码,如果你有足够的处理能力,是否有捷径并不重要。
-h1kari