Google Project Zero 成員教你如何入門搞安全

NO IMAGE
翻譯: @Murasaki @愛發呆的sakura @Cytosine
已經有很多人(包括我谷歌的同事, ParisaMichal 已經就這個話題寫過自己的感受, 我建議你仔細閱讀.我知道我寫的這些可能已經有人說過了, 但是每隔一段時間, 我總是會再次遇到這個問題, 於是我決定寫下自己的經驗.
請注意, 我是一個應用安全研究員, 我是從漏洞研究/安全審查/ 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 / netsecHacker News (儘管它除了安全性外還有其他的東西) . 你還可以看看安全會議的演講和錄音 (它們有很多, 但並不都是好的. 重點集中於技術性較強的那些會議) .
打 CTF 是一種很好的學習方式
另一個我給你們的奇怪建議是我自己幾乎從不玩 CTF , 但是還記得我寫的有關難度曲線的內容嗎 ? CTF 可以讓你的學習經歷更加循序漸進, 因為 CTF 的賽題有多種難度級別 (你通常可以通過每個賽題的分數來分辨) , 所以你可以從更簡單的開始, 然後從那裡開始一點點學習. 舉個例子, 在關閉緩解措施之後練習漏洞利用. 知道這兒有一個 bug 或方式來解決它,也是一些安慰.
幾乎每個星期在一個地方都有一個 CTF , 其中大部分都是可以線上解題, 你可以在這裡找到時間安排. 如果你不能解決賽題, 不要忘了他人解題的 WriteUp .
CTF 可以成為一種很有趣的經歷, 但當你學會一些東西之後, 別忘了繼續研究真實世界的目標, 你可能會感到十分驚喜!
但是不要害怕失敗, 哪怕一次又一次.
現在漏洞研究的工作常常是讓人十分沮喪的, 大部分你嘗試的東西都不會成功, 但你必須接受這一點. 但不要因此而洩氣. 這不僅僅是發生在你身上, 對於每一個富有經驗的研究員來說也是如此. 我們往往只能看到別人的成功, 卻不知道背後的代價. 當你失敗的時候, 在繼續前進之前一定要弄明白失敗的原因.
你比你想象的更加聰明(反之亦然: 其他人並不像你想的那樣聰明).
這可能是一個有爭議的觀點, 因為其他人提出了 “你不比開發者更聰明” 的建議. 雖然這是真實的, 對於業內很多人來說, 這是一個很好的建議, 但對許多剛剛入門或正在考慮入門的人來說, 這可能是錯誤的, 事實是, 在看到別的聰明人做什麼之後, 如果自己沒有在這個領域做任何事情, 就很容易懷疑自己的能力. 讓我舉個例子: 現在你可能聽起來很奇怪, 但是當我開始把安全作為一種愛好時, 我認為我從來沒有足夠的能力去發現 Windows 中的漏洞。我從來沒有嘗試過,但是我偶然發現了我的第一個 Windows 漏洞:我 fuzz 了一些蹩腳的影象庫,過了一段時間,我有一些崩潰樣本. 而當我意外地點選 Windows 中的其中一個崩潰樣本時,Windows 資源管理器崩潰了 – 這是 CVE-2008-3013。
另外一個例子: 在對一個軟體進行審查的時候, 你可能會有一個想法, 然後想 “不,這太愚蠢了,開發人員肯定會想到這個”. 事實是, 他們經常沒有. 公平地說, 那不是因為他們愚蠢, 那是因為他們當時想到了其他問題, 但是, 如果“我比他們聰明”的思維方式有助於突破你為自己設定的人為限制.
當你和別人, 特別是開發者交談的時候, 請記住,他們是程式碼方面的專家,但是你是安全方面的專家.
我如何證明自己的能力?
可以從賺錢開始: 很多公司都有 bug bounty program: Google, FB, MS, etc
即使你挖到的漏洞拿不到獎金, 但能幫助到他人, 仍然能夠幫助證明你的實力.
挖漏洞並不是唯一的途徑, 開發安全工具, 做防禦性的研究, 同樣是很有價值的.
還有什麼是我需要知道的?
安全研究員的人生可能並不像你想象的那麼光鮮亮麗, 為了成為一個大牛, 你需要在電腦面前坐到天荒地老. 這是一份有挑戰性的工作, 並且需要花費相當大的精力.
原文地址: http://ifsec.blogspot.jp/2018/02/so-you-want-to-work-in-security-and-for.html