在上篇文章《推薦今年C3黑客大會上的幾個議題》中提到”Attacking Chrome IPC“這個議題,我覺得該議題最大的亮點是在前半場,作者nedwill是之前在Hack2Win大賽上因攻破Chrome瀏覽器而一戰成名,他講了如何訓練漏洞研究能力的過程,講述自己這幾年在漏洞研究上的歷程和心得,很勵志,其建議也非常具有可操作性,值得效仿學習。我反覆看了多遍,對其作了一些總結和補充。
1、刻意練習10000小時
這份“雞湯”道理,想必大家都懂,就不解釋了,不懂的自行百度,或者去讀讀《異類》這本經典書籍。
作者建議以月為單位來制定研究目標,他曾連續花了6個月的時間來研究Chrome Sandbox,但最終一無所獲。
所以,有時堅持了不一定能達到目標,但不堅持,就更沒戲了。
2、訓練挖洞的雙技能
(1)看洞:哪裡看?歷史漏洞的git log、bug報告、程式碼質量報告等等。
(2)識洞:就是肉眼看程式碼找漏洞,即程式碼審計,難點也就是在這上面,訓練方法繼續往下看。
3、程式碼審計訓練
(1)根據自己目標定位,尋找相應的歷史漏洞案例進行學習,比如要搞chrome就找chrome的歷史漏洞。
(2)掌握漏洞所在的模組或子系統,但不看完整的漏洞細節描述,嘗試在漏洞版本中找出對應的漏洞。
(3)如果(2)中未能找出漏洞,就去看漏洞細節描述,對比自己的審計過程,看遺漏了哪一步驟。
(4)不斷重複上述訓練,直至相信:挖洞只是體力消耗,而非能力問題。
這第4點說得,非常勵志,因為挖洞挖久了,有時真的容易懷疑自己的能力,目標難度越大,越容易打擊人。
作者第一次訓練的漏洞是j00ru(Project Zero成員)的IDA漏洞:
https://j00ru.vexillium.org/2014/10/secure-2014-slide-deck-and-hex-rays-ida-pro-advisories-published/,2014年的文章了
43~5年的訓練計劃
1~2年:做做 CTF 或 WarGames 題目,網上有很多CTF writeup可以參考學習;
2~3年:簡單點的目標,就是找相對容易挖的產品;
目標的難易程度可以直接參考相應的產品的漏洞獎勵計劃或私有市場的價格,挑選出一份目標清單,按難易程度排序,逐一去實現它。
5、Fuzzing訓練
作者程式碼審計2年後,才開始嘗試Fuzzer開發。
(1)拿已公開的歷史漏洞問自己:如何寫fuzzer挖掘到此漏洞?
(2)如果自己不知道此漏洞,那又能夠挖掘到呢?
(3)不斷重複訓練並改進fuzzer,相信會有更多漏洞被意外發現。
6、努力往往比運氣和天賦更重要
雖然挖洞也需要一定運氣和天賦,但多數你認為的挖洞天才,其實只不過是花了比你多100倍,甚至更多的時間在這項技術研究上而已。
7、進入研究者團隊或社群,互相學習
國外的交流氛圍會比國內的更好一些,也更願意分享。
很多時候自己的交流圈,大多是一些熟識的同行,或者同事,一般可交流的人還是比較少的。
經常在網上看到不少人會問,如何認識xx大牛、黑客,但其實很多時候卻是:
努力提高自己的專業能力,圈子最終會吸納你進去認識更多圈內人。
8、建立自己的漏洞資訊來源
RSS訂閱無疑是自己最好的方式,這個需要依賴平時自己去不斷收集訂閱。
很多漏洞相關的博文,往往曝露出某些軟體新的攻擊面,搶佔先機就顯得尤為重要,比如當年Android stagefirght mp4漏洞、word公式編輯器、adobe圖片轉換器等等,如果能及時關注並嘗試去挖掘,往往可以收穫不少漏洞的。
9、收集和學習開源的漏洞挖掘工具
比如afl、honggfuzz、libfuzzer等很多優秀的漏洞挖掘工具,都是值得好好閱讀程式碼,學習其中的fuzzing思路,可以更好地應用到未來的漏洞挖掘研究上。
10、很多不願搞研究工作的挖洞人,只不過是為了權衡利弊
在《從0到1:開啟商業與未來的祕密》一書中有一章叫做“祕密”,漏洞研究可以當作挖掘祕密,為什麼人們不探索祕密呢?書中提到4種原因,我覺得同樣適用於漏洞研究領域:
(1)漸進主義:把目標定得低一些,更容易取得好成績;
(2)風險規避:人們害怕祕密是因為怕犯錯,除此之外,可能也擔心KPI沒法完成,又或者挖洞拿到的獎金又該如何跟公司“分贓”呢?
(3)自滿:很多時候,某些人可以坐享其成,又何必自己去挖掘祕密;國內研究氛圍又喜歡搞營銷吹牛逼,牛逼吹多了吹大了,有時連自己都信了;
(4)扁平化:任何一個擁有雄心壯志的人,在涉及某一研究領域之前都會問自己一個問題:如果有可能挖掘到漏洞,難道全球人才庫中更加聰明、更加有技術能力的人還沒有發現嗎?這種懷疑的聲音阻止了不少人去探索祕密,從事研究工作,因為身處的世界似乎大到任何個人都無法做出獨特的貢獻。
結語
今年因個人原因,已從安全研究轉向業務安全,深知研究的不易。
相信安全領域有祕密的存在,雖會導致黑產的誕生,但肯定也會因此誕生一些優秀的研究者。
最後以白樺的《船》致敬所有仍在安全研究道路上前進的人,與諸君共勉:
我有過多次這樣的奇遇,
從天堂到地獄只在瞬息之間:
每一朵可愛、溫柔的浪花
都成了突然崛起、隨即傾倒的高山。
每一滴海水都變臉色,
剛剛還是那樣的美麗、蔚藍;
旋渦糾纏著旋渦,
我被拋向高空又投進深淵……
當時我甚至想到過輕生,
眼前一片苦海無邊;
放棄了希望就像放棄了舵柄,
在暴力之下只能沉默和哀嘆。
今天我才有資格嘲笑昨天的自己,
為昨天落葉似的惶恐感到羞慚;
虛度了多少年華,
船身多次被礁石撞穿……
千萬次在大洋裡撒網,
才捕獲到一點點生活的經驗,
才恍然大悟,
啊!道理原是如此淺顯;
你要航行嗎?
必然會有千妖百怪出來阻攔;
暴虐的欺凌是它們的遊戲,
製造滅亡是它們唯一的才幹。
命中註定我要常常和它們相逢,
因為我的名字叫做船;
面對強大於自身千萬倍的對手,
能援救自己的只有清醒和勇敢。
恐懼只能使自己盲目,
盲目只能誇大魔鬼的猙獰嘴臉;
也許我的樣子比它們更可怕,
當我以命相拼,一往無前!
只要我還有一根完整的龍骨,
絕不駛進避風的港灣;
把生命放在征途上,
讓勇敢來決定道路的寬窄、長短。
我完完全全的自由了,
船頭成為埋葬它們的鐵鏟;
我在波浪中有節奏地跳躍,
就像蕩著一個巨大的鞦韆。
即使它們終於把我撕碎,
變成一些殘破的木片,
我不會沉淪,決不!
我還會在浪尖上飛旋。
後來者還會在殘片上認出我,
未來的詩人會唱然長嘆:
“這裡有一個幸福的靈魂,
它曾經是一艘前進著的航船……”
本文經授權轉載自公眾號:漏洞戰爭
作者riusksk
更多閱讀: