作者:Shubham Shah,澳大利亞安全研究人員,專注于程序開發(fā)、滲透測(cè)試和黑客技術(shù)。2016年初被安全媒體評(píng)為10大著名“漏洞賞金獵人”之一。本文原名《高效漏洞挖掘:120天120個(gè)漏洞》
2016年初,我就給自己設(shè)定了一個(gè)目標(biāo):在這一年中,平均每天挖掘出一個(gè)漏洞。這個(gè)決定完全是一種自我挑戰(zhàn)。我想回到過去在Atlassian公司時(shí)候的狀態(tài),當(dāng)時(shí),我曾經(jīng)在一個(gè)月內(nèi)每天都發(fā)現(xiàn)了一個(gè)漏洞,這些漏洞涉及Atlassian公司所有外部程序。
1 挖洞計(jì)劃介紹&動(dòng)機(jī)
1月初,我就積極準(zhǔn)備進(jìn)行我的高效漏洞挖掘計(jì)劃,剛開始,我曾在一天之內(nèi)發(fā)現(xiàn)了多個(gè)漏洞,然而,隨著時(shí)間的推進(jìn),我覺得在一天之內(nèi)找到多個(gè)漏洞是件非常耗費(fèi)腦細(xì)胞的事,而且在挖洞過程中,我經(jīng)常感到身心疲憊。
最終,經(jīng)過120天之后,我結(jié)束了這種“日均一洞”的計(jì)劃。但是,我對(duì)自己在漏洞挖掘方面多少有了些體會(huì):
(1)尋找一些新的意想不到的技術(shù)方式去拿下目標(biāo)
(2)把關(guān)注重點(diǎn)放在那些自己感興趣的漏洞上面
(3)通過漏洞獎(jiǎng)勵(lì)平臺(tái)結(jié)交從事安全研究的朋友或同齡群體
2 我發(fā)現(xiàn)的漏洞
以下就是我在120天之內(nèi)挖掘的121個(gè)漏洞列表一覽:(全部漏洞請(qǐng)參看博客 Table1)
3 分析
以下統(tǒng)計(jì)表是對(duì)我發(fā)現(xiàn)的121個(gè)漏洞的大致分類,另外,還有一些雜項(xiàng)漏洞沒有包含在內(nèi)
出于漏洞獎(jiǎng)勵(lì)平臺(tái)的工作機(jī)制,很多提交漏洞可能還處于緩解開發(fā)或保密階段。待所有漏洞被修復(fù)公開之后,我會(huì)繼續(xù)更新這些信息。
4 方法論
圍繞信息系統(tǒng)實(shí)體進(jìn)行漏洞挖掘
“資產(chǎn)”實(shí)體可以定義為信息系統(tǒng)的所有組成項(xiàng),包括:應(yīng)用程序、目錄、文件、文件夾、可執(zhí)行程序或服務(wù)器。當(dāng)然,也包含大多數(shù)云平臺(tái)服務(wù),如VoIP、文件共享、網(wǎng)絡(luò)會(huì)議等。
對(duì)“資產(chǎn)”實(shí)體的信息收集,是一個(gè)非常有趣的過程。例如,當(dāng)我正對(duì)一家公司使用的軟件開發(fā)組件進(jìn)行信息收集時(shí),碰巧,該公司的某位開發(fā)人員在1 小時(shí)之前就不小心把這些組件都上傳到網(wǎng)上了,哎呀,對(duì)我來(lái)說,這是多么美妙的事情啊!
編寫自己的漏洞挖掘工具
為了保持每天挖掘一個(gè)漏洞的節(jié)奏,我需要更好的信息系統(tǒng)識(shí)別工具,畢竟,想要在一些漏洞獎(jiǎng)勵(lì)項(xiàng)目中發(fā)現(xiàn)漏洞已經(jīng)變得越來(lái)越難了,想要獲得高額獎(jiǎng)勵(lì)更是難上加難。
為此,我和朋友Nathan Wakelam就信息系統(tǒng)的識(shí)別方法進(jìn)行了一些討論。最終,我們一起編寫了三個(gè)相關(guān)工具:
Altdns: 通過域名前綴序列變化和排列發(fā)現(xiàn)子域名的工具
Assetnote: 通過監(jiān)視跟蹤被動(dòng)API數(shù)據(jù)發(fā)現(xiàn)子域名
Bugbounty Dash: 顯示漏洞獎(jiǎng)勵(lì)項(xiàng)目當(dāng)前的狀態(tài)信息
目前,Altdns已經(jīng)獲得了同行的一些認(rèn)可。
與值得信任的安全研究人員一起工作
我覺得有效的漏洞挖掘還需要一些外部氛圍,如果條件允許,可以與那些值得信任的安全研究人員或漏洞挖掘者一起工作。畢竟,擁有一個(gè)同路的伙伴會(huì)讓你覺得有動(dòng)力。我非常有幸加入了一群出色的漏洞挖掘者當(dāng)中,他們有我的同事和好朋友。當(dāng)我處于挖洞瓶頸期的時(shí)候,我身邊參與漏洞項(xiàng)目的朋友會(huì)和我分享他們的新方法和新思路,這能讓我繼續(xù)充滿信心。當(dāng)其它人發(fā)現(xiàn)了一些我所不能發(fā)現(xiàn)的漏洞,我都把這當(dāng)成是一種激發(fā)自己學(xué)習(xí)的動(dòng)力。還有就是,不要把共同參與漏洞獎(jiǎng)勵(lì)項(xiàng)目的同事和朋友當(dāng)做競(jìng)爭(zhēng)對(duì)手,否則,你永遠(yuǎn)都得不到進(jìn)步。
提高漏洞發(fā)現(xiàn)視角
有時(shí)候,應(yīng)該學(xué)著把漏洞發(fā)現(xiàn)視角提高到更高、更廣的水平。我知道有一些研究人員就是這樣做的,如@phwd,他甚至通過參加FACEBOOK的產(chǎn)品發(fā)布會(huì),以了解更多關(guān)于FACEBOOK的信息。@phwd在參與FACEBOOK漏洞獎(jiǎng)勵(lì)項(xiàng)目中的成功,是我所不能及的,這也決非偶然。
找到在漏洞挖掘之外可以釋放壓力的方法或愛好
我覺得,應(yīng)該在信息安全或漏洞挖掘之外,找到一個(gè)可以釋放壓力的方法或愛好。對(duì)我自己來(lái)說,漏洞挖掘是一個(gè)極度深入內(nèi)心的愛好,每當(dāng)我忽略了生活中的一些重要部分之后,我就發(fā)現(xiàn)自己并不開心。因?yàn)闊釔圻^度,陷入太深,有時(shí)候我覺得自己已經(jīng)走火入魔了,如果能有一些東西能讓我暫時(shí)脫離漏洞挖掘工作,即便是一種簡(jiǎn)單的愛好或者曾經(jīng)的美好時(shí)光,我也愿意。
5 建議
計(jì)劃一個(gè)切實(shí)可行的目標(biāo)
我是從2016年1月開始我的“高效挖洞計(jì)劃”的,在堅(jiān)持了兩個(gè)月左右的“一天一洞”節(jié)奏后,我遇到了第一個(gè)倦怠期。我犯的最大錯(cuò)誤是沒有完全理解漏洞發(fā)現(xiàn)過程的波動(dòng)性,從黑盒測(cè)試的角度來(lái)看,未被發(fā)現(xiàn)的漏洞是不可量化的,而我自己也不能很好的判斷發(fā)現(xiàn)漏洞的可能性。在120天的時(shí)間里,我曾三次到達(dá)了瓶頸期。我每天如果不能按計(jì)劃發(fā)現(xiàn)一個(gè)漏洞,情況就會(huì)變得更糟;如果在10天之內(nèi),我還沒有發(fā)現(xiàn)一個(gè)漏洞,就意味著我必須在一天之內(nèi)找到10個(gè)漏洞。這個(gè)計(jì)劃讓我放棄的主要原因在于不斷累積的壓力。
我支持你嘗試這樣的高效漏洞挖掘計(jì)劃,只是不要和我犯同樣的錯(cuò)誤–“每天發(fā)現(xiàn)一個(gè)漏洞”。請(qǐng)你放輕松,制訂一個(gè)切實(shí)可行的目標(biāo),而不是陷入惡性循環(huán)。
保持心態(tài)平和
當(dāng)你在提交了漏洞之后,你就沒有了真正的漏洞處置權(quán)。因?yàn)椋瑢?duì)于漏洞獎(jiǎng)勵(lì)平臺(tái)來(lái)說,這就是一個(gè)買方市場(chǎng)。如果一個(gè)項(xiàng)目沒有達(dá)到你所期望的漏洞獎(jiǎng)勵(lì),就不要參與這個(gè)項(xiàng)目。另外,請(qǐng)記住,沒有什么神人愿意出高價(jià)來(lái)收買你的漏洞,或者讓你成為黑客新聞?lì)^條,也沒有什么所謂的“漏洞賞金獵人”聯(lián)盟或黑市愿意為你的漏洞買單?;驹瓌t是,我們只是付出有效腦力勞動(dòng)去獲取該得報(bào)酬的合同工而已,我們的委托公司客戶可能是偉大牛逼的,也可能是極不友好的,這就是漏洞獎(jiǎng)勵(lì)平臺(tái)和商業(yè)市場(chǎng)的本質(zhì)。
如果在參與漏洞獎(jiǎng)勵(lì)項(xiàng)目中,你認(rèn)為沒有得到你該得的報(bào)酬,并且和你提交漏洞的公司有一些內(nèi)部分歧。我建議你看看這兩篇關(guān)于漏洞獎(jiǎng)勵(lì)的博文《我是如何成為一個(gè)成功的漏洞賞金獵手》、《5年漏洞獎(jiǎng)勵(lì)平臺(tái)記錄和感想》,或許你可以從中得到一些新的觀點(diǎn)和想法。
加入那些友好而熱情的漏洞獎(jiǎng)勵(lì)項(xiàng)目
找到并加入那些對(duì)待漏洞研究者非常友好的項(xiàng)目,這些項(xiàng)目把漏洞研究人員當(dāng)成他們自己安全團(tuán)隊(duì)的一部份。他們給你的回復(fù)很及時(shí),報(bào)酬很慷慨,并且互相之間很尊重。
以上就是我對(duì)自己“高效漏洞挖掘”計(jì)劃的一些觀點(diǎn),很樂意和大家分享,也希望大家提出一些意見或建議。
6 值得關(guān)注的漏洞1:二級(jí)域名/網(wǎng)頁(yè)劫持
根據(jù)漏洞獎(jiǎng)勵(lì)平臺(tái)上的一部分漏洞為樣本,我發(fā)現(xiàn)子域名接管或劫持漏洞的獎(jiǎng)勵(lì)范圍比較大,可以從 $100 到 $7,500不等。這雖然不可思議,但可能是一些公司在漏洞嚴(yán)重程度上有著很大的不同對(duì)比。幸運(yùn)的是,我曾在一個(gè)邀請(qǐng)的漏洞眾測(cè)項(xiàng)目發(fā)現(xiàn)過子域名劫持漏洞,并且獲得了高達(dá)$7,500的獎(jiǎng)勵(lì)。這個(gè)項(xiàng)目為大多數(shù)有效漏洞支付了高額的獎(jiǎng)金,他們努力修復(fù)漏洞并給予子域名漏洞提交者慷慨的獎(jiǎng)勵(lì)。因此,在六個(gè)月之后,想找出其子域名劫持漏洞已經(jīng)變得很難。這就是漏洞獎(jiǎng)勵(lì)平臺(tái)的作用。
然而,作為一名安全研究者,當(dāng)你不能找到一種方式來(lái)對(duì)子域名進(jìn)行劫持時(shí),你會(huì)怎么做?這就是二級(jí)子域名劫持該發(fā)揮作用的時(shí)候了。Web應(yīng)用程序非常復(fù)雜,它可以加載10多個(gè)主機(jī)發(fā)起的應(yīng)用和不計(jì)其數(shù)的請(qǐng)求內(nèi)容。例如,我們可以在wufoo.com類型中嵌入框架或者在Amazon S3 中嵌入JavaScript。有更多關(guān)于動(dòng)態(tài)內(nèi)容通過網(wǎng)頁(yè)嵌入第三方源的例子,我的大多數(shù)子域名劫持漏洞的成功發(fā)現(xiàn)都是與wufoo和S3形式相關(guān)。
(Wufoo是一個(gè)網(wǎng)站應(yīng)用程序。Wufoo主要幫助人們創(chuàng)建獨(dú)特的在線表格。 在使用這個(gè)Wufoo應(yīng)用程序設(shè)計(jì)表格的時(shí)候,它會(huì)自動(dòng)生成數(shù)據(jù)庫(kù),后端和腳本,以便用戶收集和輕松地理解數(shù)據(jù)。)
假想一下導(dǎo)致二級(jí)域名被劫持的情況:假如你在X公司工作,這家公司已經(jīng)成立了10多年,并且最近開始了一項(xiàng)漏洞獎(jiǎng)勵(lì)項(xiàng)目。隨著X公司各方面不斷的發(fā)展壯大,在過去的10多年間,其相關(guān)網(wǎng)站的CMS系統(tǒng)也創(chuàng)建了大量網(wǎng)頁(yè)。如果這家公司的網(wǎng)站曾經(jīng)通過第三方URL的 <script> , <iframe>,
這里有一個(gè)快速判斷方法:
(1)創(chuàng)建你的目標(biāo)網(wǎng)站URL列表(保證盡可能的全覆蓋,可以用爬蟲方法遍歷所有子域名);
(2) 對(duì)每個(gè)URL發(fā)起請(qǐng)求,并尋找<script>, <iframe>,
(3) 確保在上面元素標(biāo)簽中找到的所有鏈接仍然有效。如果存在任何無(wú)效或過期的資源,請(qǐng)嘗試注冊(cè)并運(yùn)用它們。
在另外一個(gè)漏洞獎(jiǎng)勵(lì)項(xiàng)目中,我發(fā)現(xiàn)了很多內(nèi)嵌框架類似
6 值得關(guān)注的漏洞2:DOM Based XSS via subtitle tracks
在另外一個(gè)邀請(qǐng)的漏洞眾測(cè)項(xiàng)目中,其中的一個(gè)宣傳功能是允許用戶為一個(gè)預(yù)先設(shè)置好的視頻自行制作字幕。它位于以下鏈接當(dāng)中
http://subdomain.privatebounty.com/en/event/community.html
當(dāng)訪問這個(gè)鏈接,會(huì)顯示很多輸入框。在這些輸入框中,用戶可以插入他們自己的字幕信息。一旦用戶輸入完字幕,點(diǎn)擊執(zhí)行按鈕,字幕文件就被發(fā)送至位于遠(yuǎn)端云平臺(tái)上的 API中。
由客戶端發(fā)起的發(fā)送字幕文件到API接口的請(qǐng)求如下:
遠(yuǎn)端云平臺(tái)API對(duì)以上請(qǐng)求的回應(yīng)如下:
通過流量觀察,我嘗試去發(fā)現(xiàn)“”user-generated”視頻請(qǐng)求信息:
后經(jīng)發(fā)現(xiàn),API對(duì)字幕文件的回應(yīng)是明文信息。雖然不能通過終端獲得持久XSS漏洞,但可以在輸入的字幕文件中插入任意代碼文件。例如,對(duì)于下面的URL請(qǐng)求,在返回字幕信息中可以包含任意JavaScript執(zhí)行代碼:
http://apisubdomain.privatebounty.com/api/v1/usersubs/60d499118de429510449.srt
一旦這個(gè)SRT字幕文件已經(jīng)由API生成,我們可以訪問下面這個(gè)鏈接觀看由用戶自定義字幕的視頻:
http://subdomain.privatebounty.com/event/community.html?slug=60d499118de429510449
上面鏈接中存在一個(gè)JavaScript腳本:
http://subdomain.privatebounty.com/events/scripts/shared-app.js
它在網(wǎng)頁(yè)運(yùn)行中通過slug ID標(biāo)識(shí)為網(wǎng)頁(yè)多媒體播放器獲取并設(shè)置字幕文件。負(fù)責(zé)設(shè)置字幕的代碼可以在下面找到:
所以,一旦在字幕文件中插入惡意代碼,通過上面JavaScript腳本的運(yùn)行,惡意字幕文件就可以從以下鏈接加載并注入到受害者的DOM模型中。
http://apisubdomain.privatebounty.com/api/v1/usersubs/60d499118de429510449.srt
由于字幕文件通過SRT文件格式工作,在將它們添加到DOM之前,多媒體播放器默認(rèn)情況下不會(huì)對(duì)它們進(jìn)行審查。這意味著,每一行字幕文件都可以被添加到DOM中(包括攻擊者腳本)。雖然HTML在此表現(xiàn)出了重要的可用性,但也帶來(lái)了安全問題。
當(dāng)視頻播放時(shí),SRT文件中的JavaScript代碼就會(huì)執(zhí)行:
我認(rèn)為有兩種方式可以修復(fù)這個(gè)漏洞:
(1) 審查所有的用戶的字幕文件輸入,不只是API的響應(yīng)數(shù)據(jù);
(2) 確保多媒體播放器不被插入HTML DOM的惡意字幕文件。參照
該漏洞在每個(gè)支持HTML5
最終,我的高效挖洞計(jì)劃算是成功的嗎?我想應(yīng)該是的,至少我賺了錢,得到了樂趣,提高了技術(shù)能力,還加入了優(yōu)秀的技術(shù)團(tuán)隊(duì)。雖然最終我輸給了身心疲憊,但我總算了解了自己的極限。
*本文譯者:clouds,參考來(lái)源:shubs.io ,轉(zhuǎn)載須注明來(lái)自FreeBuf.COM
</script>