華為云計算 云知識 Web漏洞靶場搭建(OWASP Benchmark)
Web漏洞靶場搭建(OWASP Benchmark)

【摘要】 漏洞靶場,不僅可以幫助我們鍛煉滲透測試能力、可以幫助我們分析漏洞形成機理、更可以學習如何修復提高代碼能力,同時也可以幫助我們檢測各種各樣 漏洞掃描 器的效果。

Web漏洞靶場搭建(OWASP Benchmark)

滲透測試切記紙上談兵,學習滲透測試知識的過程中,我們通常需要一個包含漏洞的測試環(huán)境來進行訓練。而在非授權情況下,對于網(wǎng)站進行滲透測試攻擊,是觸及法律法規(guī)的,所以我們常常需要自己搭建一個漏洞靶場,避免直接對公網(wǎng)非授權目標進行測試。
漏洞靶場,不僅可以幫助我們鍛煉滲透測試能力、可以幫助我們分析漏洞形成機理、更可以學習如何修復提高代碼能力,同時也可以幫助我們檢測各種各樣漏洞掃描器的效果。


本次靶場選擇 OWASP Benchmark | OWASP Foundation 靶場。Owasp benchmark 旨在評估安全測試工具的能力(準確率、覆蓋度、掃描速度等等),量化安全測試工具的掃描能力,從而更好得比較各個安全工具優(yōu)缺點。

測試用例

目前 v1.2 版本包含了近3000個漏洞,覆蓋常見的SQL注入、命令注入、路徑遍歷、XSS,以及眾多安全編碼類的問題

每個漏洞包含多種漏洞場景,對于命令注入來說,可以校驗測試工具在:

● 多種注入位置:param/data/form-data/json/mut/header/cookie/

多種調(diào)用場景:ProcessBuilder/RuntimeExec

不同拼接方式:可控變量作為獨立的命令拼接、僅作為ls/echo 的參數(shù)

● 復雜業(yè)務流程: if/else/switch 導致無法進入漏洞位置(假漏洞場景)

等等場景下的表現(xiàn)。

評分標準

Benchmark 可以根據(jù)測試工具的掃描報告為測試工具進行評分。Benchmark靶場的所有漏洞信息儲存在BenchmarkJava/expectedresults-1.2.csv at master · OWASP-Benchmark/BenchmarkJava ,此文件用于標識每個場景下的漏洞信息。Benchmark解析測試工具的掃描報告再與預期結(jié)果進行對比,從而為每個工具進行打分。
對于測試工具來說,我們期望他能夠

● 發(fā)現(xiàn)所有的真正是問題的漏洞 即 True Positive,TP指數(shù),檢出率盡可能高

● 能夠忽略所有非問題的漏洞 即False Positive,F(xiàn)P指數(shù),誤報率盡可能低

Benchmark 將以TP,FP為坐標軸繪制一張圖,當點越靠近左上方時,認為測試功能能力更優(yōu)。

Benchmark最后得分參考約登指數(shù)給出,用以下公式計算分值,得分越靠近 1 表明測試工具能力越強。

Sensitivity+Specificity-1=TP+(1-FP)-1=TP-FP

掃描報告解析

Benchmark目前支持大部分主流測試工具,詳見 OWASP Benchmark | OWASP Foundation 頁面。
當評估測試工具時,可以自行擴展 OWASP-Benchmark/BenchmarkUtils: OWASP Benchmark Project Utilities - Provides scorecard generation and crawling tools for Benchmark style test suites. 中的 org.owasp.benchmarkutils.score.parsers.Reader 類

● 重寫 parse方法:用于解析報告內(nèi)容

● 重寫canRead 方法:用于判斷解析哪種報告文件

解析報告中的 url/cwe 等關鍵信息,實現(xiàn)自動打分。

Demo

package org.owasp.benchmark.score.parsers;  
  
import org.dom4j.Document;  
import org.dom4j.Element;  
import org.dom4j.io.SAXReader;  
  
import java.io.File;  
import java.util.List;  
import java.util.regex.Matcher;  
import java.util.regex.Pattern;  
  
public class SecScanReader extends Reader {  
    private static final String NUMBER_PATTERN = "BenchmarkTest(\\d+)";  
    private static Pattern pattern;  
  
    public SecScanReader() {  
        pattern = Pattern.compile(NUMBER_PATTERN);  
    }  

	public boolean canRead(ResultFile resultFile) {
		return resultFile.filename().endsWith(".xml") && resultFile.xmlRootNodeName().equals("XXXXXX");
	}

    public TestResults parse(File file) throws Exception {  
        TestResults tr = new TestResults("XXXXXX", true, TestResults.ToolType.DAST);  
        for (Object obj : issues) {  
			// .....
			TestCaseResult tcr = new TestCaseResult();  
			tcr.setCategory("XSS");  
			tcr.setCWE(cweLookup(13));
			tcr.setNumber(0001);
            tr.put(tcr);  
        }  
        return tr;  
    }  
  
    public static int cweLookup(String pluginId) {  
        switch (pluginId) {  
            default: return 0;  
        }  
    }  

}

生成評分報告
$  mvn validate -Pbenchmarkscore -Dexec.args="expectedresults-1.2.csv results"

部署運行
$ git clone https://github.com/OWASP-Benchmark/BenchmarkJava
$ cd benchmark
$ mvn compile   (This compiles it)
$ runRemoteAccessibleBenchmark.sh/.bat - This compiles and runs it.

runRemoteAccessibleBenchmark 腳本用于開啟可被遠程訪問的Benchmark Web應用。


Refernece

● OWASP Benchmark | OWASP Foundation


文末福利:華為云 漏洞掃描服務 VSS 基礎版限時 免費體驗 >>>