[轉載] 漏洞挖掘小白入坑指南

文章轉載來源 [FreeBuf]: http://www.freebuf.com/articl...
文章轉載來源 [Source]: http://gynvael.coldwind.pl/?l...

clipboard.png

寫在前面的話

在此以前,不少朋友都曾經過電子郵件在我直播的時候問過我有關漏洞挖掘方面的問題,並且不少時候不一樣的人問的都是相同的問題。所以,我決定寫一篇文章來回答一下朋友們問得最多的問題,即如何去發現一個安全漏洞。不過我要聲明的是,問題的答案也許並不具備權威性,由於這些都是我根據本身的經驗、知識、以及我對事物的見解來回答的。若是你有任何新的觀點或者見解的話,歡迎你們在文章下方積極留言,不少聰明的人對相同的問題也會有不一樣的看法。php

注:本人還會按期更新本身的博客並給你們介紹更多的漏洞挖掘方法,感興趣的朋友能夠關注一下【博客地址】。html

問題:怎樣發現漏洞?

首先,你可能已經發現了這個問題實際上是一個「高度抽象的」的問題。由於漏洞挖掘不只涉及到不少有趣的技術,並且更重要的是,你所討論的漏洞指的是通常人在網絡滲透測試過程當中所要尋找的一個系統漏洞,仍是說在一個應用程序、服務、驅動程序、內核模塊、操做系統或固件中發現一個以前從未被人發現過的漏洞?對於我我的而言,與滲透測試相比我對漏洞研究更加的感興趣,因此我在本文中將主要討論後面這種狀況。程序員

就我我的的理論體系而言,主要有如下三種類型的漏洞挖掘方法:編程

  1. 代碼審查(有可能涉及到代碼的逆向工程分析);
  2. 黑盒測試(包括使用掃描器和模糊測試工具等軟件);
  3. 文檔研究;

上面這三種方法都有其各自的前提條件以及相應的限制,而且還有各自的適用場景,由於沒有什麼方法是通用的,咱們須要根據本身的目標來選擇相應的測試方法。通常來講,我在對一個目標進行安全測試的時候都會同時使用上面這三種方法。安全

clipboard.png

1. 代碼審查網絡

要求:工具

-熟悉常見的漏洞類型;

-熟悉逆向工程技術;測試

用處:spa

-可以找到十分複雜的安全漏洞;

限制:操作系統

-須要花費不少的時間和精力;

概述:

漏洞類型指的是一種安全漏洞所屬的大類,它們都是安全從業人員耳熟能詳的一些基本漏洞類型,例如基於棧的緩衝區溢出漏洞、反射型XSS漏洞或SQL注入漏洞。對於這些漏洞類型,目前不只有已知的緩解方案,並且網上也有不少可以檢測相應漏洞的模式、方法和工具。

某些狀況下,一個安全漏洞是由多個問題共同產生的,例如整形溢出漏洞將有可能致使緩衝區溢出漏洞等等。不過也有不少漏洞並無被歸類,好比說你可能會在某些特定應用或技術中發現Bug,但這些Bug並無被歸爲常見漏洞類別中。若是你想了解更多的漏洞類型,請參考下面這三份資料:

(a) Common Weakness Enumeration (MITRE)

(b) AdversarialTactics, Techniques & Common Knowledge (MITRE)

(c) OWASPPeriodic Table of Vulnerabilities
在這種方法中,咱們須要對代碼進行分析,而後嘗試識別出代碼中存在的邏輯錯誤並對漏洞進行分類。可是這種方法對研究人員的基本素質要求很是高,由於若是你沒法瞭解代碼的具體功能(代碼審查只是一帶而過),或者說你對常見的安全漏洞都不夠了解的話,那麼你就沒法發現其中的漏洞了。

除此以外,這種方法並不適用於大規模的項目。由於項目越小,咱們就越容易對目標進行完整的代碼審查。可是項目很是大的話,咱們就只能對其中的關鍵部分或者比較有意思的部分進行代碼審查了。

2. 黑盒測試

要求:

-熟悉常見的漏洞類型;

-【自動化黑盒測試】瞭解黑盒測試工具的運行機制以及使用和配置方法;

用處:

-【自動化黑盒測試】測試規模和範圍很是大;

-【手動黑盒測試】若是你觸發了一個漏洞,那麼你就找到了一個漏洞,這種場景下的假陽性會比較低;

限制:

-【自動化黑盒測試】掃描器/模糊測試器都是很是好的工具,並且也有不少現成的工具可使用,可是不少複雜的漏洞它們是發現不了的;

-【手動黑盒測試】這種方法比代碼審計要節省時間,可是測試規模和範圍會受到限制。除此以外,測試效果還會受到研究人員的經驗以及想象力的限制;

概述:

這是一種在不考慮代碼自己的狀況下尋找程序漏洞的方法,它最主要是側重於跟應用程序的交互方面。在這種方法中,咱們須要從程序的用戶接口/界面發動攻擊,並觀察該程序的響應狀況,而無需分析應用程序的內部結構或代碼。而手動黑盒測試通常是我在拿到一個待測Web應用時最早採用的測試方法,由於這種方法能夠幫助我迅速對測試目標的總體狀況有一個大概的認識。

自動化黑盒測試的測試規模和範圍通常來講都比較合適。通常來講,咱們在進行其餘測試方法(例如手動測試)的過程當中,咱們能夠設置一個模糊測試器/掃描器並讓它們在後臺自動進行漏洞掃描。不過在漏洞報告生成以後,別忘了對掃描結果進行檢查和分析以免假陽性或漏洞重複率太高,不過具體狀況還得取決於你所使用的技術和工具。

3. 文檔研究

要求:

-熟悉常見的漏洞類型;

-曾經當過程序員,或者瞭解程序員得思惟方式;

用處:

-有可能在同一個目標中發現多個相同的安全漏洞; 限制:

-測試效果會受到研究人員的經驗以及想象力的限制;

-每每針對的是系統中的單個協議、格式或某個部分;

概述:

在這種方法中,咱們須要經過瀏覽待測目標的文檔、規範或引用手冊來定位某些編程實現方面的錯誤。與代碼審計和黑盒測試不一樣的是,這種方法一開始並不須要與待測目標進行交互。

在某些狀況下,咱們甚至還能夠經過自動化的方式完成文檔的瀏覽,具體詳見【參考資料1】【參考資料2

clipboard.png

總結

對於新手而言,我建議你們先從你最感興趣的漏洞下手,瞭解與這個漏洞類型相關的技術以及工具,而後經過本文介紹的方法來嘗試尋找一下這種漏洞。一開始你可能會花不少時間卻收穫甚少,不過別擔憂,哪怕是最頂尖的安全研究專家也有可能努力了好幾個月也一無所得,你可別期望只花幾個小時就找到一個驚世駭俗的安全漏洞。

相關文章
相關標籤/搜索