9.2 Burp Scanner 審核階段
掃描的審核階段涉及分析應用程序的流量和行為,以識別安全漏洞和其他問題。Burp掃描儀采用了多種技術,可以對所掃描的應用程序進行高覆蓋率,精確的審計。
審核階段
Burp Scanner執行幾個不同的審核階段。這些分為三個區域:
- 被動階段
- 活動階段
- JavaScript分析階段
在每個區域內執行多個階段,使Burp能夠:
- 有效地發現和利用存儲和返回用戶輸入的功能。
- 通過以最佳方式處理經常發生的問題和插入點來避免重復。
- 并行執行適用的工作,以最有效地利用系統資源。
問題類型
Burp能夠檢測到各種各樣的問題,包括安全漏洞和其他與信息有關的項目。
根據發現問題的審核活動的性質,可以將問題分為不同類型:
- 被動-這些問題可以完全通過檢查應用程序的正常請求和響應來檢測。例如,HTTP消息中的序列化對象。
- 輕度活動-這些問題可以通過發出少量良性附加請求來檢測。例如,信任任意來源的跨域資源共享(CORS)。
- 中等活動-這些問題可以通過發出請求,以使應用程序有理由認為是惡意的而可以檢測到。例如,OS命令注入。
- 主動侵入式-這些問題可以通過發出帶有損壞應用程序或其數據的較高風險的請求來檢測到。例如,SQL注入。
- JavaScript分析-這些問題可以通過分析應用程序在客戶端執行的JavaScript來檢測。例如,基于DOM的跨站點腳本。在運行Burp的計算機上,檢測這些問題通常會占用大量資源。這些問題也可以分為“被動”(對于獨立的基于DOM的問題)或“中等活躍”(對于反映和存儲的變體)。
根據發現問題的級別,也可以將其分為不同類型:
- 主機級別-這些是在應用程序運行所在的主機HTTP服務級別上出現的問題。例如,允許的Flash跨域策略。
- 請求級別-這些是在單個請求級別上出現的問題。例如,跨站點請求偽造。
- 插入點級別-這些是在請求中的插入點級別出現的問題。例如,文件路徑遍歷。
插入點
Burp Scanner使用插入點的概念將有效負載放置在請求內的不同位置。通常,插入點表示請求中的一條數據,可能由服務器端應用程序專門處理。下面的示例顯示了一個請求,突出顯示了一些常見的插入點類型:
Burp Scanner分別審核插入點,然后將有效負載依次發送到每個插入點,以測試應用程序對該輸入的處理。
在插入點內編碼數據
HTTP請求中的不同位置通常需要以不同的方式對其數據進行編碼。Burp Scanner會根據插入點的類型自動對負載進行適當的編碼,以確保原始負載到達相關的應用程序功能。例如,將不同的編碼應用于標準主體參數:
JSON數據中的參數:
以及XML數據中的參數:
Burp Scanner還會檢測應用程序何時使用其他與插入點類型無關的編碼類型,例如Base64:
嵌套插入點
一些應用程序對同一數據應用多層編碼,從而有效地將一種格式嵌套在另一種格式中。Burp Scanner能夠檢測到此行為,并自動將相同的編碼層應用于有效負載:
修改參數位置
某些應用程序將某種輸入放入一種類型的參數中,但是,如果以另一種類型的參數提交該輸入,則實際上將對其進行處理。發生這種情況是因為應用程序用來從請求中檢索輸入的某些平臺API不能確定保存輸入的參數的類型。但是,應用程序周圍的某些保護措施(例如Web應用程序防火墻)可能僅適用于原始參數類型。
Burp可以選擇通過更改插入點的參數類型來利用此行為,以創建可能繞過保護并獲得易受攻擊的應用程序功能的請求。例如,如果有效載荷是在URL查詢字符串參數中提交的,則Burp可能還會在body參數和cookie中提交相應的有效載荷:
自動會話處理
當Burp Scanner的審核從自動爬網繼續進行時,它可以利用爬網結果在審核期間自動維護會話,而用戶的配置為零。
當Burp對單個請求進行審核時,首先要確定從爬網的起始位置到達該請求的最短路徑:
然后,Burp確定在有效會話中重復交付相同請求的最有效方法。為此,它首先重新遍歷該路徑以獲得任何會話令牌的新樣本,然后測試該路徑的各種簡化形式以查看會話是否得到正確維護。
在許多情況下,可以一次又一次地簡單地重新發出最終請求。發生這種情況是因為請求實際上根本不包含任何會話令牌:
或者因為唯一的會話令牌是cookie,通常可以多次使用:
或者,因為盡管請求包含cookie和CSRF令牌,但CSRF令牌仍可以重復使用:
在某些情況下,有必要在發布被審核的請求之前,每次都發布先前的請求。這通常是因為應用程序使用了一次性CSRF令牌。由于令牌是一次性的,因此有必要在每種情況下重新發出先前的請求,以獲得新的令牌。
在極端情況下,請求之間的每次轉換都會受到一次性令牌的保護。這在導航受到嚴格控制的高安全性應用程序中偶爾發生。在這種情況下,重復發出要審核的請求的最可靠方法是始終返回到起始位置并走完整路徑到達該請求:
一旦Burp確定了最有效的方式來重復發出要審核的請求,它將執行審核。在執行各種審核檢查時,Burp會定期監視應用程序的響應,以確保維持有效的會話。如果Burp肯定地確認了會話的有效性,則它將對已完全完成的審核檢查設置檢查點。如果Burp標識該會話不再有效,它將回滾到最新的檢查點并從那里繼續。這種邏輯的執行方式可以最大程度地減少會話管理的開銷,并避免在會話頻繁丟失的情況下出現不確定的循環。例如:
避免重復
Burp Scanner使用各種技術來最大程度地減少重復工作和重復問題的報告。
合并經常發生的被動問題
由于選擇的開發方法或重用的頁面模板(例如,跨站點請求偽造或跨域腳本包括在內),某些被動檢測的問題可能會存在于應用程序中的許多不同位置。由于平臺級的配置,整個應用程序甚至會存在一些問題(例如,未強制執行嚴格的傳輸安全性)。在這種情況下,默認情況下,Burp Scanner將避免聚合重復的問題并在適用的級別報告單個問題,從而避免生成重復的問題,該問題可能是主機的Web根目錄或在其下找到所有問題的特定文件夾。
處理頻繁出現的插入點
某些插入點可能存在于應用程序使用的許多或所有請求中,但可能并不代表有趣的攻擊面。這樣的示例包括cookie(一旦設置后將在每個后續請求中提交)以及cachebuster參數,這些參數將放置在URL查詢字符串中以防止緩存,但不會被服務器端應用程序處理。在每個請求中對這些插入點執行全面審核可能會占用大量冗余工作。在這種情況下,默認情況下,Burp Scanner將識別被證明不感興趣的插入點(頻繁發生而不會產生任何問題),并將轉而對這些插入點執行更輕量級的審核。
JavaScript分析
Burp Scanner會分析應用程序響應中包含的JavaScript,以識別各種基于DOM的漏洞。為此,它結合了靜態和動態分析:
- 靜態分析-解析JavaScript代碼以構造抽象語法樹(AST)。它確定了可能由攻擊者控制的受污染源以及可用于進行攻擊的危險匯。它通過代碼分析可能的數據流,以識別潛在的路徑,通過這些路徑,惡意數據可以從受污染的源傳播到危險的接收器。
- 動態分析-將響應加載到嵌入式無頭瀏覽器中。它將有效負載注入到DOM中可能受到攻擊者控制的位置,并在響應中執行JavaScript。它還通過創建鼠標事件來與頁面交互,以實現盡可能多的代碼覆蓋(在
onclick事件處理程序等中)。它監視可用于執行攻擊的危險匯,以識別到達這些匯的所有注入的有效載荷。
靜態和動態方法具有不同的固有優點和缺點:
靜態分析能夠發現動態分析遺漏的一些漏洞,因為靜態分析可以標識可能在正確的環境中執行但實際上在動態分析期間不執行的代碼路徑。例如,執行中的分支可能由攻擊者控制的許多參數控制。靜態分析能夠識別和分析該分支并在其中找到污染路徑,而動態分析可能由于其使用的參數的實際組合而不會觸發相關的執行。但是,靜態分析天生就容易產生誤報結果,因為它可能會將代碼分支的某些組合視為可執行文件,而實際上卻不是。
動態分析具有相反的特征。它不太容易出現誤報,因為如果在執行過程中實際上觀察到合適的受污染數據正在從源傳播到接收器,則此行為是漏洞的具體證據。但是,在由于應用程序的當前狀態或其他數據的值而注入的受污染數據未到達接收器的情況下,它可能遭受假陰性的攻擊,攻擊者實際上可以控制這兩者。
Burp Scanner充分利用了靜態和動態方法的共同優勢。在可能的情況下,它將兩種技術的結果相關聯,并報告問題以及使用這兩種技術獲得的證據。這些問題可能被認為是堅如磐石的發現,并且可以肯定地報道。如果只有靜態分析可以檢測到潛在問題,則Burp會降低報告該問題的置信度。這種集成的JavaScript分析方法可以極大地幫助正在審查結果的測試人員找到最重要的問題。
處理應用程序錯誤
對Web應用程序執行全面審核可能是一個侵入性過程,并且在掃描過程中經常會遇到諸如連接故障,傳輸超時或后端組件中斷之類的問題。此外,諸如Web應用程序防火墻之類的保護可能會基于特定的有效負載,甚至基于某些參數值中的任何意外值,選擇性地刪除連接。
在審核過程中,Burp盡可能詳細地跟蹤錯誤情況的發生。如果單個動作導致錯誤,則Burp將該動作標記為失敗,然后繼續執行下一個動作。(可選)如果重復的操作在同一活動級別失敗,則將整個級別標記為失敗。因此,Burp將逐步標記為失敗:單獨的審核檢查,然后是單獨的插入點,然后是整個審核的請求,最后是整個掃描。
由于在特定審核請求中經常遇到孤立的錯誤,因此Burp最初將捕獲錯誤的詳細信息并繼續進行掃描。整個審核完成后,Burp可以選擇執行大量后續操作來重試失敗的操作。在特定應用程序組件(例如后端數據庫)遇到部分掃描問題的情況下,這很有用。如果觀察到太多錯誤,Burp還可以選擇暫停或中止掃描,以便用戶可以調查問題,并在應用程序穩定后恢復或重復掃描。
Burp Suite中文使用教程(桌面版)
推薦文章: