已經(jīng)有很多人(包括我谷歌的同事, Parisa 和 Michal 已經(jīng)就這個(gè)話題寫過自己的感受, 我建議你仔細(xì)閱讀.我知道我寫的這些可能已經(jīng)有人說過了, 但是每隔一段時(shí)間, 我總是會(huì)再次遇到這個(gè)問題, 于是我決定寫下自己的經(jīng)驗(yàn).
請(qǐng)注意, 我是一個(gè)應(yīng)用安全研究員, 我是從漏洞研究/安全審查/ bug 尋找/黑客攻擊等角度來寫這篇文章的.在安全領(lǐng)域還有很多其他的道路, 比如安全研發(fā), 惡意軟件分析等等, 這些我并不熟悉.
那么, 我是誰?為什么你要在這個(gè)話題上信任我呢?嗯, 首先我不是說你應(yīng)該完全信任我, 因?yàn)槊總€(gè)人的經(jīng)驗(yàn)和每個(gè)人的道路都是有所不同的.但如果您對(duì)我感到好奇, 我可以告訴您, 我現(xiàn)在是 Google Project Zero 的成員, 我曾經(jīng)是谷歌安全團(tuán)隊(duì)的成員, 是多個(gè)安全工具的作者, 如果你在這個(gè)博客上滾動(dòng)足夠長(zhǎng)的時(shí)間, 你會(huì)發(fā)現(xiàn)我已經(jīng)從事安全工作十多年了.
我認(rèn)識(shí)的安全研究員來自很多不同的背景, 但是我的背景有所不同, 我有相當(dāng)強(qiáng)的學(xué)術(shù)背景, 這在我的同行中是非常不典型的, 當(dāng)然這并不是進(jìn)入安全領(lǐng)域的要求.然而, 我所知道的安全研究員中的大多數(shù)人都有一些共同點(diǎn), 這里我們來看第一條:
對(duì)于我所知道的業(yè)內(nèi)大多數(shù)人來說, 在從事相關(guān)工作之前, 安全只是一項(xiàng)業(yè)余愛好.當(dāng)然, 如果你只是考慮如何學(xué)習(xí)安全, 在告訴你如何開始之前, 告訴你自己做點(diǎn)東西并不會(huì)有什么幫助.繼續(xù)閱讀, 我會(huì)在下面提到如何開始. 但是首先, 還有一件事你應(yīng)該注意 (不要讓它阻礙你, 我們將在后面看到如何解決它)
我懷疑不是每個(gè)人都會(huì)承認(rèn), 但是安全在過去這些年, 確實(shí)有了很大提高.是的, 如果你足夠深入的話, 你將會(huì)發(fā)現(xiàn)用十多年前的技術(shù)仍然可以運(yùn)行的軟件或者硬件, 例如 Web 瀏覽器.當(dāng)我正在研究我的第一個(gè) Windows 漏洞利用(堆溢出)時(shí), 我感到十分沮喪, 因?yàn)槲④涀罱肓诵碌膕afe unlink 機(jī)制, 所以我讀到的一些眾所周知的堆漏洞利用技術(shù)已經(jīng)不再有效. 10 年后, 剛開始學(xué)習(xí)安全的人們不僅需要處理 safe unlink 和 stack cookie , 還需要知道 SafeSEH / SEHOP, DEP, ASLR, CFG, ACG 還有瀏覽器的 sandbox 等等.并不限于 Web 瀏覽器, 如果你對(duì)比一下十年前和現(xiàn)在的 Web 應(yīng)用框架, 你會(huì)發(fā)現(xiàn)在安全技術(shù)上已經(jīng)了顯著的不同.
不要害怕上面這一段文字, 那么你應(yīng)該如何對(duì)付日益陡峭的學(xué)習(xí)曲線呢?
一般而言, 剛開始入門的難度比較高, 實(shí)際上, 現(xiàn)在的學(xué)習(xí)資源也比以前要豐富.
但是另一個(gè)警告是: 你需要能夠走出去并且自主學(xué)習(xí), 沒有人會(huì)牽著你的手, 或者成為你的導(dǎo)師 (可能總是有厲害的師父來幫助學(xué)徒, 但是黑客很少這樣做) . 如果你喜歡按照預(yù)先設(shè)定的課程進(jìn)行 (就像我承認(rèn)的我的大部分教育所做的那樣) , 那么你可能就不會(huì)在安全方面走得太遠(yuǎn).
在獲得正確的學(xué)習(xí)資源之前, 您需要正確地提問. 谷歌搜索 “如何成為黑客” 和類似的問題, 在現(xiàn)在仍然會(huì)得到與以前一樣的胡說八道. 相反, 請(qǐng)嘗試更加細(xì)致的問題, 例如:
由此可見, 你自己必須在技術(shù)上相當(dāng)不錯(cuò), 以了解由別人制作的真實(shí)軟件或硬件是如何工作的. 雖然編寫代碼和閱讀代碼的技能并不完全相同, 但仍存在相當(dāng)大的重疊, 所以如果您不習(xí)慣寫代碼, 在進(jìn)一步深入研究安全之前, 您可能需要改進(jìn)這一點(diǎn).
不要忘記第二點(diǎn). 雖然之前我對(duì)技術(shù)性的東西還算是比較好的, 但是直到我開始閱讀其他人發(fā)布的漏洞研究和 Exp 后, 我才真正理解安全.
還有另一個(gè)警告: 當(dāng)你遇到你不了解的東西時(shí), 不要放棄. 特別是在剛開始閱讀各種資源時(shí), 你遇到的很多問題. 跳過這些部分是簡(jiǎn)單的方法, 但也是錯(cuò)誤的方法. 相反, 想想遇到的每一比特信息都是你不了解的, 把它們作為線索, 想想你還需要學(xué)習(xí)什么.
雖然我寫到?jīng)]有人會(huì)牽著你的手, 但這并不意味著你不應(yīng)該提問. 事實(shí)上, 你應(yīng)該自在一點(diǎn). 人們不會(huì)為你而放下自己所做的工作, 但如果你卡住了, 他們可能會(huì)給你一個(gè)正確的方向.
擁護(hù)一個(gè)特定的社交網(wǎng)絡(luò)看起來很奇怪, 但一個(gè)重要事實(shí)是很多安全團(tuán)隊(duì)都使用 Twitter 來分享新聞, 而且更重要的是那些最近的研究、漏洞、 PoC 、會(huì)議演講和其他類似的鏈接. 我真的不知道這些是怎么發(fā)生的, 也許是短消息的形式讓人們更方便地分享資源鏈接, 而不用受到漫長(zhǎng)而不必要的討論的困擾. 所以, 在 Twitter 上找那些研究或發(fā)表你感興趣東西的人, 然后翻閱他們的推特吧.
除了 Twitter 以外, 你可以找到有趣資源的其他地方是 r / netsec 和 Hacker News (盡管它除了安全性外還有其他的東西) . 你還可以看看安全會(huì)議的演講和錄音 (它們有很多, 但并不都是好的. 重點(diǎn)集中于技術(shù)性較強(qiáng)的那些會(huì)議) .
另一個(gè)我給你們的奇怪建議是我自己幾乎從不玩 CTF , 但是還記得我寫的有關(guān)難度曲線的內(nèi)容嗎 ? CTF 可以讓你的學(xué)習(xí)經(jīng)歷更加循序漸進(jìn), 因?yàn)?CTF 的賽題有多種難度級(jí)別 (你通常可以通過每個(gè)賽題的分?jǐn)?shù)來分辨) , 所以你可以從更簡(jiǎn)單的開始, 然后從那里開始一點(diǎn)點(diǎn)學(xué)習(xí). 舉個(gè)例子, 在關(guān)閉緩解措施之后練習(xí)漏洞利用. 知道這兒有一個(gè) bug 或方式來解決它,也是一些安慰.
幾乎每個(gè)星期在一個(gè)地方都有一個(gè) CTF , 其中大部分都是可以在線解題, 你可以在這里找到時(shí)間安排. 如果你不能解決賽題, 不要忘了他人解題的 WriteUp .
CTF 可以成為一種很有趣的經(jīng)歷, 但當(dāng)你學(xué)會(huì)一些東西之后, 別忘了繼續(xù)研究真實(shí)世界的目標(biāo), 你可能會(huì)感到十分驚喜!
現(xiàn)在漏洞研究的工作常常是讓人十分沮喪的, 大部分你嘗試的東西都不會(huì)成功, 但你必須接受這一點(diǎn). 但不要因此而泄氣. 這不僅僅是發(fā)生在你身上, 對(duì)于每一個(gè)富有經(jīng)驗(yàn)的研究員來說也是如此. 我們往往只能看到別人的成功, 卻不知道背后的代價(jià). 當(dāng)你失敗的時(shí)候, 在繼續(xù)前進(jìn)之前一定要弄明白失敗的原因.
這可能是一個(gè)有爭(zhēng)議的觀點(diǎn), 因?yàn)槠渌颂岢隽?“你不比開發(fā)者更聰明” 的建議. 雖然這是真實(shí)的, 對(duì)于業(yè)內(nèi)很多人來說, 這是一個(gè)很好的建議, 但對(duì)許多剛剛?cè)腴T或正在考慮入門的人來說, 這可能是錯(cuò)誤的, 事實(shí)是, 在看到別的聰明人做什么之后, 如果自己沒有在這個(gè)領(lǐng)域做任何事情, 就很容易懷疑自己的能力. 讓我舉個(gè)例子: 現(xiàn)在你可能聽起來很奇怪, 但是當(dāng)我開始把安全作為一種愛好時(shí), 我認(rèn)為我從來沒有足夠的能力去發(fā)現(xiàn) Windows 中的漏洞。我從來沒有嘗試過,但是我偶然發(fā)現(xiàn)了我的第一個(gè) Windows 漏洞:我 fuzz 了一些蹩腳的圖像庫,過了一段時(shí)間,我有一些崩潰樣本. 而當(dāng)我意外地點(diǎn)擊 Windows 中的其中一個(gè)崩潰樣本時(shí),Windows 資源管理器崩潰了 – 這是 CVE-2008-3013。
另外一個(gè)例子: 在對(duì)一個(gè)軟件進(jìn)行審查的時(shí)候, 你可能會(huì)有一個(gè)想法, 然后想 “不,這太愚蠢了,開發(fā)人員肯定會(huì)想到這個(gè)”. 事實(shí)是, 他們經(jīng)常沒有. 公平地說, 那不是因?yàn)樗麄冇薮? 那是因?yàn)樗麄儺?dāng)時(shí)想到了其他問題, 但是, 如果“我比他們聰明”的思維方式有助于突破你為自己設(shè)定的人為限制.
當(dāng)你和別人, 特別是開發(fā)者交談的時(shí)候, 請(qǐng)記住,他們是代碼方面的專家,但是你是安全方面的專家.
可以從賺錢開始: 很多公司都有 bug bounty program: Google, FB, MS, etc
即使你挖到的漏洞拿不到獎(jiǎng)金, 但能幫助到他人, 仍然能夠幫助證明你的實(shí)力.
挖漏洞并不是唯一的途徑, 開發(fā)安全工具, 做防御性的研究, 同樣是很有價(jià)值的.
安全研究員的人生可能并不像你想象的那么光鮮亮麗, 為了成為一個(gè)大牛, 你需要在電腦面前坐到天荒地老. 這是一份有挑戰(zhàn)性的工作, 并且需要花費(fèi)相當(dāng)大的精力.