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

“冰弓”的Logo直接用的是“破甲弓”,感覺是不是很酷……
再說說方法論,這詞雖有點虛,但其實本質上就是一種技術方法的總結而已。
比如,滲透測試的時候,總有些人每次都能搞到RCE,無論啥網站,完全擺脫“隨機挖洞”的命運。多數情況下,他們都會有一套自己測試方法,或者將一些經驗轉換成工具,測試時就拿自己的工具和以往總結的方法論開搞。
比如,STRIDE威脅建模本身就是一套方法論,一套簡單的風險助記符,當然我這里不是說安全研究要用它,只是舉個方法論的例子而已,它也沒有那么萬能。
寫這么多,總結起來就一句話:多總結,多沉淀!
12、漏洞研究風向標:安全公告
如果大家有關注四大廠商(Google、Microsoft、Apple、Adobe)的安全公告的話,會發現有段時間會出現很多類似漏洞的公告,因為每次出現一個新的攻擊面之后,一幫研究人員就蜂捅而上狂刷一波。
這種情況一向是先下手為強,而上文提到的工具和方法論就更顯得尤為重要了,否則最后都只能撿剩的。
比如本周 Microsoft 安全公告出來后,我仔細分析了下,然后下班回家寫了個Fuzzer,掛著跑了一天,出來個Crash,再用幾分鐘成功構造出PoC,實現IE瀏覽器的遠程代碼執行,可見也是個品相極佳的神洞:

但不幸的是,我打了1月的補丁后,發現修復了,成功“撞洞”,真的是欲哭無淚……
但至少證明,通過安全公告尋找新的攻擊面,然后挖掘一些類似漏洞,一直是一種高效的漏洞研究方式。
13、老一輩研究者都去哪兒了?

最近騰訊AILab張潼離職的事傳得很火,還有之前各大廠聘請的AI科學家陸續辭職,回歸學術界,很多人因此唱起科學家之于科技公司的無用論,主要有以下幾點原因:
-
研究成果無法落地為產品:做安全研究也是如此,很多事情是無法落地的,圈內很多研究團隊都是拿漏洞來打比賽賺影響力,真正能實現為公司營利的(打比賽賺獎金的忽略不計,因為那些都不夠給研究者們的工資),我只知道有1個研究團隊/實驗室今年營利了。
-
長期無產出,KPI壓力大:研究了很長時間,最后仍一無所獲,那KPI咋辦、PPT怎么寫、晉級怎么答辯。安全行業有句老話來形容安全研究工作,叫“三年不開鍋,開鍋吃三年”,但多數個人和企業都等不到三年。之前同事說王小云為何能破解出MD5,是因為她在學校里很長時間沒搞出東西的時候,領導沒找她麻煩,沒有KPI壓力,以致能夠長期專注于此。具體原因我不確定,但學術界自然是沒有企業有這般KPI壓力。
-
業務數據不共享:業務部門的產品數據基本不太可能共享給實驗室作研究的,一般都是實驗室以SDK的形式提供給業務用,數據由業務自主控制。這種情況對于安全研究的影響相對較少一些。
頭兩點是多數安全研究者的困境,也跟圈內同行討論過,下面聊聊這幫老一代“知青”最后都去哪兒了?這里我主要總結一些圈內人的應對方法(其實多數都是轉型),具體不作點評,總結為主,也歡迎私信討論(新注冊的公眾號已不允許留言)。
-
堅持研究:這幫人主要還是那些研究能力較強的,且有一定研究成果的人,圍觀下各大實驗室就知道個大概了,不多說;
-
轉型安全產品開發與運營:有產品就能解決落地問題,幫助企業解決實際問題,有不少人走這條道,去做威脅情報系統、漏洞掃描器、WAF、云安全產品等等;
-
轉型業務安全:跟研究工作差異較大,因為業務安全的主要問題很多時候并非漏洞,而是跟業務產品相關的黑灰產對抗等等;
-
自由研究者:國外很多此類研究者,靠拿漏洞賞金過活,俗稱“賞金獵人”,國內相對少一些,也有一些國內自由研究者后來又進企業做研究的,這里講的幾種轉型都可以來回轉換,有些人就干過。
-
創業:這里包括安全行業內的創業,也包括那些開淘寶店、奶茶店、服裝生意、賣水果的……
14、個人終究干不過團隊
有時想搞的研究太多了,但發現一個人根本搞不過來,需要多人協作才可能完成。但需要多人在研究領域上有交集,否則拉在一塊也是各搞各的。
前篇第7點講到“進入研究者團隊或社區,互相學習”,也是一大影響因素,互相學習也是一種提高效率和產出的方式。
算了,不多說了!
結語
這次真的結束了,沒有續篇了。
思考了很多,總結了很多,有些也是寫了刪,刪了寫。
安全研究領域一直也沒人寫過這些,出來嘮叨幾句,也歡迎大家私信討論。
最后奉一首酒桌上的《苦行僧》結束本話題,聽過這首歌很多個版本,包括原唱,但終究還是覺得視頻里這位老哥唱得更具江湖氣、更具情感、更具感染力……旁邊一老哥聽著聽著都偷偷抹淚了!
之所以點這首歌,是因為:每一個研究者都是獨立自行的苦行僧!
本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/789/
暫無評論