Benchmark)
滲透測試切記紙上談兵,學(xué)習(xí)滲透測試知識的過程中,我們通常需要一個(gè)包含漏洞的測試環(huán)境來進(jìn)行訓(xùn)練。而在非授權(quán)情況下,對于網(wǎng)站進(jìn)行滲透測試攻擊,是觸及法律法規(guī)的,所以我們常常需要自己搭建一個(gè)漏洞靶場,避免直接對公網(wǎng)非授權(quán)目標(biāo)進(jìn)行測試。
漏洞靶場,不僅可以幫助我們鍛煉滲透測試能力、可以幫助我們分析漏洞形成機(jī)理、更可以學(xué)習(xí)如何修復(fù)提高代碼能力,同時(shí)也可以幫助我們檢測各種各樣漏洞掃描器的效果
本次靶場選擇 OWASP Benchmark | OWASP Foundation 靶場。Owasp benchmark 旨在評估安全測試工具的能力(準(zhǔn)確率、覆蓋度、掃描速度等等),量化安全測試工具的掃描能力,從而更好得比較各個(gè)安全工具優(yōu)缺點(diǎn)。
測試用例
目前 v1.2 版本包含了近3000個(gè)漏洞,覆蓋常見的SQL注入、命令注入、路徑遍歷、XSS,以及眾多安全編碼類的問題
每個(gè)漏洞包含多種漏洞場景,對于命令注入來說,可以校驗(yàn)測試工具在:
- 多種注入位置:param/data/form-data/json/mut/header/cookie/
- 多種調(diào)用場景:ProcessBuilder/RuntimeExec
- 不同拼接方式:可控變量作為獨(dú)立的命令拼接、僅作為ls/echo 的參數(shù)
- 復(fù)雜業(yè)務(wù)流程: if/else/switch 導(dǎo)致無法進(jìn)入漏洞位置(假漏洞場景)
等等場景下的表現(xiàn)。
評分標(biāo)準(zhǔn)
Benchmark 可以根據(jù)測試工具的掃描報(bào)告為測試工具進(jìn)行評分。Benchmark靶場的所有漏洞信息儲存在BenchmarkJava/expectedresults-1.2.csv at master · OWASP-Benchmark/BenchmarkJava ,此文件用于標(biāo)識每個(gè)場景下的漏洞信息。Benchmark解析測試工具的掃描報(bào)告再與預(yù)期結(jié)果進(jìn)行對比,從而為每個(gè)工具進(jìn)行打分。
對于測試工具來說,我們期望他能夠
- 發(fā)現(xiàn)所有的真正是問題的漏洞 即 True Positive,TP指數(shù),檢出率盡可能高
- 能夠忽略所有非問題的漏洞 即False Positive,F(xiàn)P指數(shù),誤報(bào)率盡可能低,Benchmark 將以TP,FP為坐標(biāo)軸繪制一張圖,當(dāng)點(diǎn)越靠近左上方時(shí),認(rèn)為測試功能能力更優(yōu)。
Benchmark最后得分參考約登指數(shù)給出,用以下公式計(jì)算分值,得分越靠近 11 表明測試工具能力越強(qiáng)。
Sensitivity+Specificity-1=TP+(1-FP)-1=TP-FP*Sensitivity*+*Specificity*?1=*TP*+(1?*FP*)?1=*TP*?*FP*
掃描報(bào)告解析
Benchmark目前支持大部分主流測試工具,詳見 OWASP Benchmark | OWASP Foundation 頁面。
當(dāng)評估測試工具時(shí),可以自行擴(kuò)展 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方法:用于解析報(bào)告內(nèi)容
- 重寫canRead 方法:用于判斷解析哪種報(bào)告文件
解析報(bào)告中的 url/cwe 等關(guān)鍵信息,實(shí)現(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;
}
}
}
生成評分報(bào)告
$ mvn validate -Pbenchmarkscore -Dexec.args="expectedresults-1.2.csv results"
部署運(yùn)行
$ git clone https://github.com/OWASP-Benchmark/BenchmarkJava
$ cd benchmark
$ mvn compile (This compiles it)
$ runRemoteAccessibleBenchmark.sh/.bat - This compiles and runs it.
runRemoteAccessibleBenchmark 腳本用于開啟可被遠(yuǎn)程訪問的Benchmark Web應(yīng)用。
審核編輯:湯梓紅
-
Web
+關(guān)注
關(guān)注
2文章
1266瀏覽量
69573 -
SQL
+關(guān)注
關(guān)注
1文章
772瀏覽量
44193 -
代碼
+關(guān)注
關(guān)注
30文章
4810瀏覽量
68829
發(fā)布評論請先 登錄
相關(guān)推薦
評論