Google Project Zero 成员教你网络安全入门

已经有很多人(包括我谷歌的同事, Parisa 和 Michal 已经就这个话题写过自己的感受, 我建议你仔细阅读.我知道我写的这些可能已经有人说过了, 但是每隔一段时间, 我总是会再次遇到这个问题, 于是我决定写下自己的经验.

请注意, 我是一个应用安全研究员, 我是从漏洞研究/安全审查/ bug 寻找/黑客攻击等角度来写这篇文章的.在安全领域还有很多其他的道路, 比如安全研发, 恶意软件分析等等, 这些我并不熟悉.

那么, 我是谁?为什么你要在这个话题上信任我呢?嗯, 首先我不是说你应该完全信任我, 因为每个人的经验和每个人的道路都是有所不同的.但如果您对我感到好奇, 我可以告诉您, 我现在是 Google Project Zero 的成员, 我曾经是谷歌安全团队的成员, 是多个安全工具的作者, 如果你在这个博客上滚动足够长的时间, 你会发现我已经从事安全工作十多年了.

我认识的安全研究员来自很多不同的背景, 但是我的背景有所不同, 我有相当强的学术背景, 这在我的同行中是非常不典型的, 当然这并不是进入安全领域的要求.然而, 我所知道的安全研究员中的大多数人都有一些共同点, 这里我们来看第一条:

自己做点东西

对于我所知道的业内大多数人来说, 在从事相关工作之前, 安全只是一项业余爱好.当然, 如果你只是考虑如何学习安全, 在告诉你如何开始之前, 告诉你自己做点东西并不会有什么帮助.继续阅读, 我会在下面提到如何开始. 但是首先, 还有一件事你应该注意 (不要让它阻碍你, 我们将在后面看到如何解决它)

现在开始学习安全, 比十年前困难的多

我怀疑不是每个人都会承认, 但是安全在过去这些年, 确实有了很大提高.是的, 如果你足够深入的话, 你将会发现用十多年前的技术仍然可以运行的软件或者硬件, 例如 Web 浏览器.当我正在研究我的第一个 Windows 漏洞利用(堆溢出)时, 我感到十分沮丧, 因为微软最近引入了新的safe unlink 机制, 所以我读到的一些众所周知的堆漏洞利用技术已经不再有效. 10 年后, 刚开始学习安全的人们不仅需要处理 safe unlink 和 stack cookie , 还需要知道 SafeSEH / SEHOP, DEP, ASLR, CFG, ACG 还有浏览器的 sandbox 等等.并不限于 Web 浏览器, 如果你对比一下十年前和现在的 Web 应用框架, 你会发现在安全技术上已经了显著的不同.

不要害怕上面这一段文字, 那么你应该如何对付日益陡峭的学习曲线呢?

利用好学习资源

一般而言, 刚开始入门的难度比较高, 实际上, 现在的学习资源也比以前要丰富.

但是另一个警告是: 你需要能够走出去并且自主学习, 没有人会牵着你的手, 或者成为你的导师 (可能总是有厉害的师父来帮助学徒, 但是黑客很少这样做) . 如果你喜欢按照预先设定的课程进行 (就像我承认的我的大部分教育所做的那样) , 那么你可能就不会在安全方面走得太远.

在获得正确的学习资源之前, 您需要正确地提问. 谷歌搜索 “如何成为黑客” 和类似的问题, 在现在仍然会得到与以前一样的胡说八道. 相反, 请尝试更加细致的问题, 例如:

  1. 我感兴趣的这个软件/硬件是如何工作的? 它基于什么技术? 有我可以阅读的源代码?教程? 图书吗?
  2. 有人已经设法成功破解了我想要破解的这一软件/硬件吗? 他们发布了 WriteUp 吗?Exp 呢? 会议介绍呢? 我真的明白他们是怎么做的了么?

由此可见, 你自己必须在技术上相当不错, 以了解由别人制作的真实软件或硬件是如何工作的. 虽然编写代码和阅读代码的技能并不完全相同, 但仍存在相当大的重叠, 所以如果您不习惯写代码, 在进一步深入研究安全之前, 您可能需要改进这一点.

不要忘记第二点. 虽然之前我对技术性的东西还算是比较好的, 但是直到我开始阅读其他人发布的漏洞研究和 Exp 后, 我才真正理解安全.

还有另一个警告: 当你遇到你不了解的东西时, 不要放弃. 特别是在刚开始阅读各种资源时, 你遇到的很多问题. 跳过这些部分是简单的方法, 但也是错误的方法. 相反, 想想遇到的每一比特信息都是你不了解的, 把它们作为线索, 想想你还需要学习什么.

虽然我写到没有人会牵着你的手, 但这并不意味着你不应该提问. 事实上, 你应该自在一点. 人们不会为你而放下自己所做的工作, 但如果你卡住了, 他们可能会给你一个正确的方向.

使用推特

拥护一个特定的社交网络看起来很奇怪, 但一个重要事实是很多安全团队都使用 Twitter 来分享新闻, 而且更重要的是那些最近的研究、漏洞、 PoC 、会议演讲和其他类似的链接. 我真的不知道这些是怎么发生的, 也许是短消息的形式让人们更方便地分享资源链接, 而不用受到漫长而不必要的讨论的困扰. 所以, 在 Twitter 上找那些研究或发表你感兴趣东西的人, 然后翻阅他们的推特吧.

除了 Twitter 以外, 你可以找到有趣资源的其他地方是 r / netsec 和 Hacker News (尽管它除了安全性外还有其他的东西) . 你还可以看看安全会议的演讲和录音 (它们有很多, 但并不都是好的. 重点集中于技术性较强的那些会议) .

打 CTF 是一种很好的学习方式

另一个我给你们的奇怪建议是我自己几乎从不玩 CTF , 但是还记得我写的有关难度曲线的内容吗 ? CTF 可以让你的学习经历更加循序渐进, 因为 CTF 的赛题有多种难度级别 (你通常可以通过每个赛题的分数来分辨) , 所以你可以从更简单的开始, 然后从那里开始一点点学习. 举个例子, 在关闭缓解措施之后练习漏洞利用. 知道这儿有一个 bug 或方式来解决它,也是一些安慰.

几乎每个星期在一个地方都有一个 CTF , 其中大部分都是可以在线解题, 你可以在这里找到时间安排. 如果你不能解决赛题, 不要忘了他人解题的 WriteUp .

CTF 可以成为一种很有趣的经历, 但当你学会一些东西之后, 别忘了继续研究真实世界的目标, 你可能会感到十分惊喜!

但是不要害怕失败, 哪怕一次又一次.

现在漏洞研究的工作常常是让人十分沮丧的, 大部分你尝试的东西都不会成功, 但你必须接受这一点. 但不要因此而泄气. 这不仅仅是发生在你身上, 对于每一个富有经验的研究员来说也是如此. 我们往往只能看到别人的成功, 却不知道背后的代价. 当你失败的时候, 在继续前进之前一定要弄明白失败的原因.

你比你想象的更加聪明(反之亦然: 其他人并不像你想的那样聪明).

这可能是一个有争议的观点, 因为其他人提出了 “你不比开发者更聪明” 的建议. 虽然这是真实的, 对于业内很多人来说, 这是一个很好的建议, 但对许多刚刚入门或正在考虑入门的人来说, 这可能是错误的, 事实是, 在看到别的聪明人做什么之后, 如果自己没有在这个领域做任何事情, 就很容易怀疑自己的能力. 让我举个例子: 现在你可能听起来很奇怪, 但是当我开始把安全作为一种爱好时, 我认为我从来没有足够的能力去发现 Windows 中的漏洞。我从来没有尝试过,但是我偶然发现了我的第一个 Windows 漏洞:我 fuzz 了一些蹩脚的图像库,过了一段时间,我有一些崩溃样本. 而当我意外地点击 Windows 中的其中一个崩溃样本时,Windows 资源管理器崩溃了 – 这是 CVE-2008-3013。

另外一个例子: 在对一个软件进行审查的时候, 你可能会有一个想法, 然后想 “不,这太愚蠢了,开发人员肯定会想到这个”. 事实是, 他们经常没有. 公平地说, 那不是因为他们愚蠢, 那是因为他们当时想到了其他问题, 但是, 如果“我比他们聪明”的思维方式有助于突破你为自己设定的人为限制.

当你和别人, 特别是开发者交谈的时候, 请记住,他们是代码方面的专家,但是你是安全方面的专家.

我如何证明自己的能力?

可以从赚钱开始: 很多公司都有 bug bounty program: Google, FB, MS, etc

即使你挖到的漏洞拿不到奖金, 但能帮助到他人, 仍然能够帮助证明你的实力.

挖漏洞并不是唯一的途径, 开发安全工具, 做防御性的研究, 同样是很有价值的.

还有什么是我需要知道的?

安全研究员的人生可能并不像你想象的那么光鲜亮丽, 为了成为一个大牛, 你需要在电脑面前坐到天荒地老. 这是一份有挑战性的工作, 并且需要花费相当大的精力.

上一篇:WPA2 “KRACK” 漏洞简介与重现

下一篇:用一个域名挖出一个团伙