如何防御超级蠕虫?
当其他平台遭受蠕虫攻击时,Linux 管理员会看到日志文件中充满了失败的攻击尝试。 愚蠢的蠕虫可能是一种滋扰,浪费带宽。但是,如果蠕虫在攻击哪些主机、何时攻击以及使用什么漏洞方面更聪明一点呢? 如果蠕虫开发者可以在运行时使用新的漏洞更新所有正在运行的蠕虫呢?
在 South By Southwest,我们与 Tristero 项目的协调员 Brandon Wiley 讨论了这种“超级蠕虫”的威胁以及可以采取哪些措施来防御它。 对于那些没有参加 South By Southwest 的人,我们再次询问了他。
构建超级蠕虫会比今天的愚蠢蠕虫困难得多吗?还是说超级蠕虫只是一个普通的蠕虫加上一个伪随机数生成器?
构建超级蠕虫不需要比构建普通蠕虫花费更多的技巧。区别在于设计的巧妙程度。 普通蠕虫的设计没有策略考虑。 每个蠕虫都追求立即尽可能多地复制自身的有限策略,而没有其他考虑因素。另一方面,超级蠕虫的设计考虑了策略,即使这意味着限制本地传播,策略也能实现全球范围内的最大传播。 这类似于亚当·斯密与约翰·纳什提出的不同经济模型。 从代码的角度来看,编写一个具有博弈论智能和实现最佳结果的全局视角的蠕虫并没有困难多少,但需要更仔细地考虑设计。
随机化是处理许多蠕虫实例之间分工的一种方法。 如果您掷硬币来决定是传播还是休眠一回合,那么蠕虫至少不会全速传播。 然而,随机化不能很好地扩展。 理想情况下,您希望每个蠕虫的传播概率与考虑攻击特定机器的蠕虫数量成反比。 随着网络被蠕虫饱和,竞争蠕虫的数量增加。 因此,理想情况下,您希望降低攻击概率。 不幸的是,这需要您知道竞争蠕虫的数量,这意味着蠕虫需要相互协调。
随机化的替代方法是根据类似于分布式哈希表 (DHT) 系统的原则来划分和征服网络。 例如,如果蠕虫形成 Achord 网络,则每个蠕虫只需要了解大约 log2 (253^4) 个其他蠕虫,并且每个蠕虫都有其专门负责破坏的网络部分。 随着新蠕虫加入网络,责任会被重新划分。 这样,只有一个蠕虫会攻击特定的机器,并且蠕虫之间的协调量最少。
超级蠕虫可以使用的传播策略是否已在公开文献中出现?
维护 DHT 的技术已广泛发布。 第一届国际点对点研讨会 (IPTPS) 在 MIT 的会议记录即将发布,其中包含有关 DHT 的大量信息。 我有一篇关于基于 DHT 的超级蠕虫的文章,名为 Curious Yellow,将在几天内在 http://blanu.net/curious_yellow.html 上提供。 一些非常好的超级蠕虫优化也已作为思想实验发布。
Warhol 蠕虫设计建议预先扫描网络以查找易受攻击的主机并编译一个大型命中列表。 命中列表由初始蠕虫携带,并随着蠕虫划分和征服网络而进行分区。 这个预编译的命中列表允许蠕虫实现初始的临界传播质量,然后可以用作启动大规模攻击的平台。
Flash 蠕虫设计通过编译几乎完整的易受攻击服务器列表(而不仅仅是种子列表)并将其托管在快速、连接良好的服务器上,而不是随蠕虫一起传输,从而在 Warhol 的基础上进一步优化。
对超级蠕虫使互联网无法使用所需时间的最佳预测是什么? 几天? 几小时?
Warhol 论文中提到的估计是 15 分钟,Flash 论文中提到的估计是大约 30 秒感染所有已知的易受攻击主机。 然而,在我看来,这只是用于网络的初始播种。 在初始感染期间,可能有很多主机无法访问,要么是因为它们已断开连接,要么是因为它们位于防火墙之后,要么是因为它们不容易受到蠕虫可用的攻击。 一个真正高级的蠕虫会将这种初始感染作为跳板,以到达以前无法访问的主机,并等待代码更新,从而允许感染以前不受攻击的系统。 这种第二阶段的感染可能会无限期地持续下去,直到世界上所有主机都被感染。 这需要多长时间取决于为各种平台找到可用漏洞的频率。
许多 Linux 用户表示,即使发现了漏洞,Linux 系统上软件和配置的多样性也使其相对安全,免受蠕虫攻击。 超级蠕虫的传播是否足够智能,能够找到罕见的易受攻击的配置或守护进程?
虽然主机的总体多样性有助于防止蠕虫,但单个 Linux 系统中发现的多样性通常无助于防止蠕虫。 虽然 Linux 系统是高度定制的,但蠕虫使用的漏洞通常位于具有同构代码库的广泛使用的软件包中,例如 sshd、fingerd 或 ftpd。 虽然现在有几个版本的 finger 和 ftp 守护进程可用,但一个守护进程实现通常具有最大的市场份额,因此充当大多数 Linux 系统的传播媒介。 例如,很少有人运行 GNOME 或 KDE 守护进程的自定义实现。 系统要容易受到攻击,只需要运行一个具有已发布漏洞的服务即可。
超级蠕虫是否会对管理良好的 Linux 系统构成威胁? 超级蠕虫能跑赢其使用的漏洞的新闻吗?
最有效的超级蠕虫将使用即插即用的 0 day 漏洞进行传播。 可以使用 Warhol/Flash 风格的预扫描命中列表来播种网络。 当发现新的漏洞时,可以将其发送到已部署的蠕虫。 这意味着管理员可以加强其系统以防御蠕虫的时间窗口是在漏洞被发现和蠕虫作者编写代码利用它之间。 用于修复漏洞的补丁分发网络通常比蠕虫漏洞分发网络慢,后者可以在 30 秒内将补丁传播到所有蠕虫。 因此,完全防止蠕虫的唯一方法是安装与蠕虫本身非常相似的软件,该软件可以快速分发安全补丁。 届时,这将变成漏洞利用代码的作者和安全补丁的作者之间的竞赛。
由于超级蠕虫可以通过 DoS 提供蠕虫对抗软件和补丁的站点来帮助自身永久存在,那么想要帮助人们对抗蠕虫但可能会被蠕虫消音的站点,在攻击来临时可以做些什么来帮助其用户? 我们是否应该将超级蠕虫数学应用于紧急超级蠕虫警告系统?
由于蠕虫网络已经比补丁分发和警告系统移动得更快,因此 DoS 补丁站点是不值得的。 事实上,这将是一种责任,因为安全站点将能够记录受感染节点的 IP。 然而,如果蠕虫网络受到威胁,作者将能够在 30 秒内协调所有蠕虫采取任意行动,如发送到整个网络的补丁中所编码的那样。 虽然这可以用来 DoS 五角大楼或 CNN.com,但它最有可能主要用于关闭 Slashdot 和 EFnet。
对抗设计良好的超级蠕虫的唯一有效攻击是拥有一个分散的安全补丁传播网络,该网络可以在漏洞被分发之前分发补丁。 这将是一项有用的通用服务,因为它将使所有参与系统及时更新最新的安全修复程序,从而使它们不仅对超级蠕虫免疫,而且对较小的蠕虫和基于已发布漏洞的黑客攻击尝试也免疫。 节点网络还可以充当分布式入侵检测系统,监控进度并充当针对黑客攻击尝试、蠕虫感染和拒绝服务攻击的早期预警系统。 如果能够为该项目的开发和部署找到资金,这将是一个极好的公共服务事业。 我所知道的该领域的唯一项目是位于奥斯汀的公司 Invisisoft,我在 SXSW 的超级蠕虫小组讨论会后与他们进行了交谈。 但是,我不知道该项目的状态如何。
电子邮件:dmarti@ssc.com