您是否有志於推進Web安全技術的發展,並與信息安全社區分享相關知識呢?在這篇文章中,我將爲讀者分享與Web安全研究有關的各類建議,固然,這些建議一方面是來自某些成功經驗,而另外一些則是來自於曾經踩過的坑,但願對你們有所幫助。php
大部分研究都是在現有的技術的基礎之上,百尺竿頭更進一步的,因此,研究工做的第一步就是熟悉當前的技術水平。爲了實現這一目標,最快的方法是找一份相關的工做,這樣就能夠有大量時間來接觸網絡黑客技術了。另外,由於已經有不少大牛分享過「入坑」安全行業的詳細建議,因此,這裏只是簡要提一下。html
我建議有興趣的讀者採用以實踐爲中心的研究方法,首先從OWASP Broken Web應用程序開始下手,繼而轉向更具實戰性的安全挑戰活動,好比hackxor.net,這樣的話,就能夠經過HackerOne和BugCrowd上難度和回報相對較低的挑戰來練手,待學有所長以後,最終參加各類高賞金的計劃。一旦你發現並公開披露的幾個有影響的漏洞以後,加入安全諮詢公司將不成問題,這樣就能夠成天跟黑客技術打交道了。mysql
固然,網絡上面也有大量免費的在線資源,包括咱們站點提供的The Burp Methodology 系列文章,HackerOne站點的Hacker101系列文章,以及OWASP測試指南。至於書籍,我推薦讀者閱讀《WebApp Hacker's Handbook》和《The Tangled Web》。web
一旦開始全職黑客工做,天然能學到不少東西,但一段時間以後,您的專業技能就會停滯不前,除非努力的勁頭一直保持不減。sql
爲了避免被小夥伴甩在後面,全部業內人士都會密切關注行業專家、新聞聚合和安全會議來跟蹤行業的最新動向。然而,若是一門心思追逐最新技術的話,每每會遺忘和忽視大量的研究寶藏。api
每當讀到優質博客文章時,請細心通讀整篇文章。這樣作的話,每每可以找到一些寶貴的、被遺忘的信息花絮。例如,這裏有一篇關於DNS重綁定的文章,是RSnake於2009年撰寫的。DNS重綁定可以繞過基於IP/防火牆的網站訪問控制,惟一有效的緩解方法就是採用相關的白名單技術。以後不久,人們就認爲瀏覽器已經解決了這個問題,遺憾的是,9年之後,這個被遺忘的漏洞又重出江湖了。瀏覽器
此外,仔細閱讀文檔還能夠幫助您避免浪費時間來重複其餘人已經完成的工做,例如十年後從新發明CSS攻擊。換句話說,一些研究文獻真的很難找到,因此偶爾的「重蹈覆轍」是不可避免的。我曾與一位研究人員在某技術上面發生過「撞車」現象,戲劇性的是,後來咱們兩人都發現,早在5年以前,kuza55就發表過該技術了。因此,咱們一方面要盡最大努力避免重複研究,可是,即便出現這種狀況,也沒必要太驚訝——這是在所不免的。緩存
要想把各類線索串起來並找出別人錯過的機會的話,收集不一樣來源的信息是相當重要的。首先,不要只閱讀安全方面的內容——您很快就會發現,文檔手冊也能夠做爲漏洞利用的指南。其次,咱們還能夠利用谷歌搜索來解決問題,還能夠經過Twitter/Reddit/StackOverflow與同行和同事交流。最後,還有大量的知識是在社區內部傳播的,換句話說,這些還沒有公開發表。安全
除此以外,還要努力使本身的經歷多樣化。網絡
在進行安全諮詢黑盒測試的過程當中,能夠接觸到各類各樣的外部和內部Web應用程序,而這些應用程序則是在漏洞獎勵計劃中很難遇到的。可是,因爲時間限制的緣故,你很難有機會深刻理解一個應用程序,而對於漏洞賞金獵人來講,要想捕獲特定目標中的漏洞,一般須要花費幾個月的時間來熟悉它。儘管一般速度緩慢且受到各類限制,但白盒源碼審計卻能夠提供不可替代的視角,便於發現黑盒測試人員永遠都想不到的攻擊方法。爲了培養研究能力,最好將三種經歷合理組合一下。此外,諸如參加CTF比賽和編寫Web應用程序等經驗,對於拓寬視野也是很是有幫助的。
最糟糕的陷阱之一,就是僅僅認爲某想法行不通就不去嘗試,例如,以爲某些想法「別人確定早就想到了」或「這想法太蠢了,確定不行」。實際上,我就曾經爲此付出過沉重的代價——拜它所賜,一項研究成果在兩年後才姍姍來遲。不管是經過重複嘗試使用相同密碼登陸來繞過身份驗證,仍是經過從筆記本電腦切換到手機攻入Google管理頁面,踏上下一個重大漏洞的發現之路以前,可能首先須要一個很是愚蠢的想法。
最簡單的入門方法是找一些有前途的研究成果,經過混合其餘技術構建新方法,而後將其用於某些實際目標,看看是否有什麼有趣的事情發生。
例如,這篇關於CORS配置錯誤的文章指出了一種有趣的行爲,而且表示這種行爲很廣泛,但並無探討它對我的網站的影響狀況。
因而,我把這個概念應用到了漏洞賞金網站,由於我能夠在這些網站上合法地探索它的影響,而且設法繞過各類可能的緩解措施。在此過程當中,我以常見的開放重定向漏洞技術爲助攻,隨後在閱讀CORS規範時發現了「空源」技術(the ‘null’ origin technique),並探索了緩存中毒的可能性。
在這個過程當中,根本無需藉助於高不可攀的頓悟或卓爾不凡的技術知識,然而,由此產生的演示文稿和博客文章仍然很容易被你們所接受——畢竟,我付出的努力是你們有目共睹的。
雖然對他人的工做進行迭代不失爲一個好方法,但現實是,好像任何一個角落均可能發掘出相應的研究寶藏,不管是相對路徑覆蓋仍是Web緩存欺騙。個人觀點是,我的經驗在這些發現過程當中提供了重要的線索。我將這些經驗稱爲導向器或「麪包屑」,由於它們的做用機制每每是很是神祕的,並且,許多重大的發現,都是在一系列的經驗的指引下找到的。
例如,2011年,我試圖破解addons.mozilla.org使用的CSRF保護機制。儘管我能夠繞過令牌檢查,但這顯然是不夠的——他們採用的安全機制還會驗證Referer頭部中的主機與當前站點的匹配狀況。因而,我在sla.ckers論壇上發帖求助,後來'barbarianbob'指出,Django是經過查看HTTP Host頭部來肯定當前網站的主機的,而這個頭部剛好能夠經過X-Forwarded-Host頭部來覆蓋掉。換句話說,將其與Flash頭部注入漏洞相結合的話,就有可能繞過CSRF檢查,但更重要的是,這是咱們的第一個「麪包屑」——它暗示着應用程序多是經過Host頭部來了解其當前位置的。
以後,經過閱讀Piwik的密碼重置函數的源代碼,發現了以下所示的一行代碼:
$passwordResetLink = getCurrentUrlWithoutQueryString() + $secretToken
咱們能夠看出,Piwik使用的是PHP語言,衆所周知,該語言的路徑處理方式是很是搞笑的:若是經過http://piwik.com/reset.php/foo;http://evil.com 請求重置密碼,就會生成一個包含兩個連接的電子郵件,而且祕密令牌將被髮送到evil.com。這個想法果真是有效的,爲此,我不只得到了一筆賞金,而且還爲後來的發現奠基了基礎。
第三個也是最後一個「麪包屑」就是Piwik修補這個漏洞的方式——他們用getCurrentUrlWithoutFileName()替換了getCurrentUrlWithoutQueryString()函數。這意味着,我沒法再使用該路徑進行攻擊。因爲以前就跟Django打過交道,因此我決定深刻研究相關代碼,以瞭解Piwik是如何肯定當前的主機名的,經研究後發現,像Django同樣,Piwik也是使用的HTTP Host頭部,也就是說,我能夠輕鬆生成惡意的密碼重置電子郵件。事實證實,這項技術一樣適用於addons.mozilla.org、Gallery、Symfony、Drupal以及其餘一些網站,便可以經過HTTP Host頭部發動有效的攻擊。
我之因此囉裏囉嗦地闡述上面的發現過程,是但願可以幫助讀者揭開安全研究的神祕面紗:許多研究成果,並不是從天而降,憑空產生的。從這個角度來看,核心技能(超越了既有的知識和經驗的廣度)彷佛在於如何識別這些麪包屑並堅持不懈地追逐它們上面。我還不太清楚如何作到這一點,但我知道,幫助人們發現重大研究成果的線索,偏偏正是那些原覺得「毫無心義」的事物。
最後,與社區分享您的研究也是相當重要的。這將有助於提升您的知名度,並可能說服僱主爲本身分配更多的研究時間。除此以外,它還能幫助您避免浪費時間,並促進進一步的研究——評論者很是善於指出您以前不知道的工做,並且沒有什麼比看到其餘研究人員在您的想法基礎上再接再礪更有成就感了。
請不要僅僅由於沒有突破性的發現、兩個徽標和一個演示文稿就認爲一個技術或想法不值得分享——不要太過苛求,有啥就發佈啥好了(固然,理想狀況下是發表到博客上,而不只僅是發表到相似Twitter這樣不便於搜索引擎收錄索引的平臺上面)。
在共享研究時,至少應展現一個應用於實際應用程序的技術示例。不然的話,一方面不利於人們的理解,另外一方面,容易讓人懷疑它是否具備實際價值。
最後,演講對於吸引更多觀衆來講很是有用,不過須要注意的是,不要把太多的時間花在重複過去的演講上面。
關於安全研究,我本身還有不少東西要學,因此,我但願能在幾年後從新回顧這個話題,並提供更多的線索。另外,我但願其餘研究人員提供不一樣的觀點,並期待從他們的分享中學習新的看法。
最後,對於正在尋找安全研究的入門讀物的讀者,我已經準備好了一份博客清單——多年來,我一直從中汲取養分。祝您好運,玩得開心!