如何计算远程攻击的蛮力时间/可行性以包括并行性?

信息安全 蛮力
2021-09-09 14:25:05

这纯粹是一个思想练习。

假设一个服务器没有对失败的尝试实施限制或锁定。服务器接受用户名/密码请求并返回是/否响应。响应时间为 10 秒。您正试图在服务器上暴力破解密码。我试图弄清楚暴力说出一个 5 位数字 PIN 需要多少时间。

PIN 的熵为 10 5 = 100000 因此蛮力所需的时间为 100000/10 = 10000 秒。

但是,您可以让多线程程序并行发送请求。或同时运行的多个程序进行暴力破解。所以我天真的计算是不正确的。

假设攻击者的机器是当今典型的笔记本电脑(i7,16 GB RAM),我如何计算暴力破解所需的时间 - 是否有任何经验法则?

3个回答

在现实世界中,主要瓶颈是连接数。大多数服务器实现,尤其是网络服务器,都会对此进行速率限制,这不仅是出于安全原因(以对抗您的确切情况),而且也是出于公平资源共享和限制失控客户端的原因。

即使他们不限制它,服务器也只能处理有限数量的并发连接。

例如,apache2 的默认配置设置为 150 个并发连接。这是攻击者的硬性限制,在现实情况下,至少有一些连接会忙于处理合法用户。

因此, n的正确答案首先取决于您的服务器实现,其次取决于其他因素。对于像您这样的简单场景,编写一个可以用请求使服务器饱和的客户端是微不足道的,客户端不会成为任何中途攻击者的瓶颈,服务器将是。

假设它是一个神奇的服务器:

时间:每次尝试的时间

1 线程平均时间:组合 * 时间/2

n 线程平均时间:组合 * 时间 /(2 * n)

通常,确定适当值的方法n是确定每个攻击线程需要多少计算资源,然后将其划分为攻击者可能获得的资源。传统上,这意味着查看标准台式机,但如今,即使对于个人攻击者而言,通过 AWS 和类似来源提供的计算机租赁服务也可以轻松快速且廉价地获得相当多的计算能力。如果您担心民族国家,那么您为机器分配的预算会更高——但这只是一个估计。

那么,一旦您选择了硬件,您如何确定可以并行运行多少次攻击呢?最简单的答案是对其进行基准测试-获取该硬件(或其中的一部分)并查看吞吐量是多少。并确保记录你的设置(什么硬件,具体来说,什么操作系统,重要库的版本,你使用的编译标志),以便审阅者可以就如何提高攻击过程的效率提出建议。