已經有很多人(包括我谷歌的同事, 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
即使你挖到的漏洞拿不到獎金, 但能幫助到他人, 仍然能夠幫助證明你的實力.
挖漏洞并不是唯一的途徑, 開發安全工具, 做防御性的研究, 同樣是很有價值的.
安全研究員的人生可能并不像你想象的那么光鮮亮麗, 為了成為一個大牛, 你需要在電腦面前坐到天荒地老. 這是一份有挑戰性的工作, 并且需要花費相當大的精力.
下一篇:用一個域名挖出一個團伙