如果年轻的黑客可以检测到它们,为什么安全分析师不能获取并修补它们?
此外,我梦想在 IE 或 Chrome 等主要软件中找到漏洞。这简单吗?是系统的还是随机的?我需要阅读哪些书才能在适当的时候发现它们?
我现在知道如何用 C/C++/Java 编程。我可以很容易地学习汇编。
如果年轻的黑客可以检测到它们,为什么安全分析师不能获取并修补它们?
此外,我梦想在 IE 或 Chrome 等主要软件中找到漏洞。这简单吗?是系统的还是随机的?我需要阅读哪些书才能在适当的时候发现它们?
我现在知道如何用 C/C++/Java 编程。我可以很容易地学习汇编。
这是想要修复漏洞的人和想要利用漏洞的人之间的竞赛。发现漏洞很困难——编写正确的代码比编写几乎正确的代码要困难得多。
假设(凭空得出的数字)已发布产品中 99% 的安全缺陷是由作者自己发现和修复的,或者私下向作者报告。这意味着 1% 的安全缺陷通过漏洞利用(零日漏洞)公开。你只听到公开的漏洞,而不是那些悄悄修复的漏洞——所以你听到的只有 1%。作者和分析师必须修复每一个漏洞才能制作出完全安全的产品;“黑客”只需要找到一个未修复的漏洞。
但实际上比这更糟糕:即使在 99% 的情况下,当作者发布新版本时,也不是每个人都会立即升级。还有另一场竞赛:剥削和修补之间的竞赛。一旦升级可用,破解者可以研究与以前版本的差异,并为人们仍在运行的旧版本构建漏洞利用程序。这留下了很多暴露的机器。
有许多技术可以用来寻找漏洞,双方都使用。Fuzzing就是其中之一:尝试向程序提供随机数据,看看它是否以有趣的方式做出反应。例如,如果程序崩溃(这本身通常是拒绝服务),请仔细研究它崩溃的方式;通常制作输入数据然后让您升级为执行任意代码。另一种方法是静态分析:对源代码或编译代码运行自动分析,以查找可疑模式(例如查找未经检查的数组访问)或验证不存在某些不良行为(例如证明所有数组访问都未经检查)。静态分析可以通过人工审查来补充,以寻找自动化工具不足以捕捉的方面(例如审查所有临时文件是否安全创建)。当然,经验会有所帮助——有时有人会想“嘿,这是一个难题,我想知道开发人员是否正确地解决了这个问题”。
我建议阅读OpenBSD 审计过程的介绍并进一步了解 OpenBSD 项目。这是一个开源项目,有公开讨论,他们把安全放在首位。我不知道他们的安全审计过程的更全面的介绍;您可以通过搜索他们的邮件列表了解更多信息。
更一般地,查看开源软件(例如 Linux 发行版)的安全公告。发布安全补丁时,请查看漏洞描述、原始来源和补丁。尝试了解哪些模式可能存在问题、它们是如何被发现的(漏洞公告通常包含指向更详细文章的链接)以及它们是如何修复的。
让我尝试解决您问题的“修补”部分:发现问题 - 至少在软件中 - 比修复问题要容易得多。考虑要克服的障碍的最短列表:
0)它是错误还是功能?
1)这是实际的缺陷,还是只是更深层次问题的表现?
2) 问题是否严重到需要修复?
3)这甚至可以修复吗?(例如,如果您的程序是在假设2038 年之后的支持日期毫无意义或没有人需要大于 4 GB 的文件的情况下编写的,则可能需要完全重写)
4)如果我们解决这个问题,无论取决于行为会中断 - 这是可以接受的,我们是否需要设计解决方法,这些解决方法有自己的错误的几率是多少?
5) “修复一个错误总是会引入至少两个新错误”
6) 是否有(时间和金钱)预算用于修复错误、测试和部署修复?
而这一切都发生在公司政治开始之前——毕竟,众所周知,有些公司拒绝承认错误报告并装死(无论出于何种原因)。
还有一些想法:
如果年轻的黑客可以检测到它们,为什么安全分析师不能获取并修补它们?
记住
对于任何给定的产品,都有固定数量的人创建和修复产品,并且几乎无限数量的人可以破坏或利用产品。试图破坏产品的人数大致与产品的受欢迎程度、流行程度以及它处理或保护的信息的性质有关。所以 - 很多人都在尝试破解 IE(非常流行)、网上银行软件(高价值),而没有多少人试图破解为不知名的目的而创建的利基产品。
“年轻的黑客发现产品中的大错误”是一个很好的标题。当似乎只有年轻人在寻找错误时,请考虑您的消息来源。“硬皮老家伙在做生意的过程中破坏产品”不会出售任何在线论文。年轻的黑客正在寻找漏洞并成为头条新闻。老黑客通常被称为“安全分析师”,他们中的许多人的工作涉及悄悄地寻找漏洞(只是面颊上的大舌头)。
修复一个错误并不是那么难。修复一个错误而不破坏其他任何东西通常是相当困难的。更糟糕的是,由于滥用而导致的错误根本无法修复。
此外,我梦想在 IE 或 Chrome 等主要软件中找到漏洞。这简单吗?是系统的还是随机的?我需要阅读哪些书才能在适当的时候发现它们?
如果您对 Web 浏览器特别感兴趣,我建议您非常熟悉 Web 周围的技术——HTML 渲染、Java Script、Active X、AJAX、SSL、DNS、CSS——任何传递给并由网页浏览器。深入了解这些技术以及浏览器的工作原理是该领域的关键。
没有一本书。甚至没有阅读清单。这个领域变化很快 - 对主要浏览器的新修复非常频繁地发布,新技术和新浏览器每年都会出现。这个领域的开发周期实际上比电子书以外的任何东西的出版周期都要快。您可以阅读我提到的技术的一些不错的背景资料,但很快您就会想要阅读实际的 WWW 标准(如 www.w3c.org),以便了解这些技术的最新细节。
黑客攻击既是系统的又是随机的。您需要对您正在入侵的域有足够的了解,以便能够对尝试什么以找到漏洞利用做出合理的猜测。几乎任何现代产品都可能过于复杂,以至于您绝对会尝试每一个输入和输出,因此需要进行一定程度的良好猜测才能对可能的漏洞区域进行测试。我所知道的最好的分析是那些将系统视为一个整体,并且能够快速深入到大多数领域并了解联合环境因素如何导致产品易受攻击的人。
我现在知道如何用 C/C++/Java 编程。我可以很容易地学习汇编。
老实说,我看不出大会将如何帮助您。有时,如果您可以访问它,了解产品代码库的语言会有所帮助。但更重要的是知道产品应该做什么,并且能够有效地分析它,以找出它在哪里没有做它应该做的事情,或者它正在做的事情在哪里产生了不良结果。
这里的答案很棒。这是另一种思考方式。
所有软件都有错误。标准缺陷率是每千行代码有 2-10 个缺陷;其中一部分将是与安全相关的缺陷(严重程度不同)。浏览器有数百万行代码。因此,据我们所知,一个典型的浏览器很可能潜伏着成百上千的安全缺陷,等待被发现。
假设浏览器中有 500 个未知安全漏洞尚未被发现。假设您投入 500 小时的工作(模糊测试、设计审查、代码审查等),您会发现一个漏洞——从 500 个漏洞池中随机抽取一个漏洞。
攻击者需要多长时间才能找到他的第一个以前未知的漏洞?500 小时 = 3 人月。
防御者需要多长时间才能找到所有漏洞,以便修复它们?至少 500*500 = 250,000 小时 = 125 人年。事实上,这是一个低估。由于称为优惠券收集者问题的数学现象,实际数字更多约为 500*log(500)*500 = 150 万小时 = 776 人年。这甚至没有考虑到修复问题后的工作量,测试修复,将它们推送给用户——或者修复的一部分可能会引入新问题的可能性。在实践中,防守者的困境比这可能暗示的还要糟糕。
所以你可以看到攻击者比防守者有巨大的优势。只需一点点努力,攻击者就可以找到一个漏洞(因为攻击者不在乎他找到了哪个漏洞;任何人都可以);而防守者需要付出巨大的努力才能找到并修复它们。因为防御者必须找到所有漏洞,而攻击者只需要找到一个,因此攻击者具有巨大的优势。
这就是为什么人们说“你不能事后安全”或“你不能测试安全”的原因之一。如果您使用低于标准的安全实践构建了软件,那么没有合理数量的事后测试可能就足够了。