原文:《So you want to work in security?》
译者:Murasaki & 爱发呆的sakura & Cytosine
来源:https://zhuanlan.zhihu.com/p/33678187
已经有很多人(包括我谷歌的同事, Parisa 和 Michal 已经就这个话题写过自己的感受, 我建议你仔细阅读.我知道我写的这些可能已经有人说过了, 但是每隔一段时间, 我总是会再次遇到这个问题, 于是我决定写下自己的经验.
请注意, 我是一个应用安全研究员, 我是从漏洞研究/安全审查/ bug 寻找/黑客攻击等角度来写这篇文章的.在安全领域还有很多其他的道路, 比如安全研发, 恶意软件分析等等, 这些我并不熟悉.
那么, 我是谁?为什么你要在这个话题上信任我呢?嗯, 首先我不是说你应该完全信任我, 因为每个人的经验和每个人的道路都是有所不同的.但如果您对我感到好奇, 我可以告诉您, 我现在是 Google Project Zero 的成员, 我曾经是谷歌安全团队的成员, 是多个安全工具的作者, 如果你在这个博客上滚动足够长的时间, 你会发现我已经从事安全工作十多年了.
我认识的安全研究员来自很多不同的背景, 但是我的背景有所不同, 我有相当强的学术背景, 这在我的同行中是非常不典型的, 当然这并不是进入安全领域的要求.然而, 我所知道的安全研究员中的大多数人都有一些共同点, 这里我们来看第一条:
对于我所知道的业内大多数人来说, 在从事相关工作之前, 安全只是一项业余爱好.当然, 如果你只是考虑如何学习安全, 在告诉你如何开始之前, 告诉你自己做点东西并不会有什么帮助.继续阅读, 我会在下面提到如何开始. 但是首先, 还有一件事你应该注意 (不要让它阻碍你, 我们将在后面看到如何解决它)
我怀疑不是每个人都会承认, 但是安全在过去这些年, 确实有了很大提高.是的, 如果你足够深入的话, 你将会发现用十多年前的技术仍然可以运行的软件或者硬件, 例如 Web 浏览器.当我正在研究我的第一个 Windows 漏洞利用(堆溢出)时, 我感到十分沮丧, 因为微软最近引入了新的safe unlink 机制, 所以我读到的一些众所周知的堆漏洞利用技术已经不再有效. 10 年后, 刚开始学习安全的人们不仅需要处理 safe unlink 和 stack cookie , 还需要知道 SafeSEH / SEHOP, DEP, ASLR, CFG, ACG 还有浏览器的 sandbox 等等.并不限于 Web 浏览器, 如果你对比一下十年前和现在的 Web 应用框架, 你会发现在安全技术上已经了显著的不同.
不要害怕上面这一段文字, 那么你应该如何对付日益陡峭的学习曲线呢?
一般而言, 刚开始入门的难度比较高, 实际上, 现在的学习资源也比以前要丰富.
但是另一个警告是: 你需要能够走出去并且自主学习, 没有人会牵着你的手, 或者成为你的导师 (可能总是有厉害的师父来帮助学徒, 但是黑客很少这样做) . 如果你喜欢按照预先设定的课程进行 (就像我承认的我的大部分教育所做的那样) , 那么你可能就不会在安全方面走得太远.
在获得正确的学习资源之前, 您需要正确地提问. 谷歌搜索 “如何成为黑客” 和类似的问题, 在现在仍然会得到与以前一样的胡说八道. 相反, 请尝试更加细致的问题, 例如:
由此可见, 你自己必须在技术上相当不错, 以了解由别人制作的真实软件或硬件是如何工作的. 虽然编写代码和阅读代码的技能并不完全相同, 但仍存在相当大的重叠, 所以如果您不习惯写代码, 在进一步深入研究安全之前, 您可能需要改进这一点.
不要忘记第二点. 虽然之前我对技术性的东西还算是比较好的, 但是直到我开始阅读其他人发布的漏洞研究和 Exp 后, 我才真正理解安全.
还有另一个警告: 当你遇到你不了解的东西时, 不要放弃. 特别是在刚开始阅读各种资源时, 你遇到的很多问题. 跳过这些部分是简单的方法, 但也是错误的方法. 相反, 想想遇到的每一比特信息都是你不了解的, 把它们作为线索, 想想你还需要学习什么.
虽然我写到没有人会牵着你的手, 但这并不意味着你不应该提问. 事实上, 你应该自在一点. 人们不会为你而放下自己所做的工作, 但如果你卡住了, 他们可能会给你一个正确的方向.
拥护一个特定的社交网络看起来很奇怪, 但一个重要事实是很多安全团队都使用 Twitter 来分享新闻, 而且更重要的是那些最近的研究、漏洞、 PoC 、会议演讲和其他类似的链接. 我真的不知道这些是怎么发生的, 也许是短消息的形式让人们更方便地分享资源链接, 而不用受到漫长而不必要的讨论的困扰. 所以, 在 Twitter 上找那些研究或发表你感兴趣东西的人, 然后翻阅他们的推特吧.
除了 Twitter 以外, 你可以找到有趣资源的其他地方是 r / netsec 和 Hacker News (尽管它除了安全性外还有其他的东西) . 你还可以看看安全会议的演讲和录音 (它们有很多, 但并不都是好的. 重点集中于技术性较强的那些会议) .
另一个我给你们的奇怪建议是我自己几乎从不玩 CTF , 但是还记得我写的有关难度曲线的内容吗 ? CTF 可以让你的学习经历更加循序渐进, 因为 CTF 的赛题有多种难度级别 (你通常可以通过每个赛题的分数来分辨) , 所以你可以从更简单的开始, 然后从那里开始一点点学习. 举个例子, 在关闭缓解措施之后练习漏洞利用. 知道这儿有一个 bug 或方式来解决它,也是一些安慰.
几乎每个星期在一个地方都有一个 CTF , 其中大部分都是可以在线解题, 你可以在这里找到时间安排. 如果你不能解决赛题, 不要忘了他人解题的 WriteUp .
CTF 可以成为一种很有趣的经历, 但当你学会一些东西之后, 别忘了继续研究真实世界的目标, 你可能会感到十分惊喜!
现在漏洞研究的工作常常是让人十分沮丧的, 大部分你尝试的东西都不会成功, 但你必须接受这一点. 但不要因此而泄气. 这不仅仅是发生在你身上, 对于每一个富有经验的研究员来说也是如此. 我们往往只能看到别人的成功, 却不知道背后的代价. 当你失败的时候, 在继续前进之前一定要弄明白失败的原因.
这可能是一个有争议的观点, 因为其他人提出了 “你不比开发者更聪明” 的建议. 虽然这是真实的, 对于业内很多人来说, 这是一个很好的建议, 但对许多刚刚入门或正在考虑入门的人来说, 这可能是错误的, 事实是, 在看到别的聪明人做什么之后, 如果自己没有在这个领域做任何事情, 就很容易怀疑自己的能力. 让我举个例子: 现在你可能听起来很奇怪, 但是当我开始把安全作为一种爱好时, 我认为我从来没有足够的能力去发现 Windows 中的漏洞。我从来没有尝试过,但是我偶然发现了我的第一个 Windows 漏洞:我 fuzz 了一些蹩脚的图像库,过了一段时间,我有一些崩溃样本. 而当我意外地点击 Windows 中的其中一个崩溃样本时,Windows 资源管理器崩溃了 - 这是 CVE-2008-3013。
另外一个例子: 在对一个软件进行审查的时候, 你可能会有一个想法, 然后想 “不,这太愚蠢了,开发人员肯定会想到这个”. 事实是, 他们经常没有. 公平地说, 那不是因为他们愚蠢, 那是因为他们当时想到了其他问题, 但是, 如果“我比他们聪明”的思维方式有助于突破你为自己设定的人为限制.
当你和别人, 特别是开发者交谈的时候, 请记住,他们是代码方面的专家,但是你是安全方面的专家.
可以从赚钱开始: 很多公司都有 bug bounty program: Google, FB, MS, etc
即使你挖到的漏洞拿不到奖金, 但能帮助到他人, 仍然能够帮助证明你的实力.
挖漏洞并不是唯一的途径, 开发安全工具, 做防御性的研究, 同样是很有价值的.
安全研究员的人生可能并不像你想象的那么光鲜亮丽, 为了成为一个大牛, 你需要在电脑面前坐到天荒地老. 这是一份有挑战性的工作, 并且需要花费相当大的精力.