Skip to content

Commit 8e05d1b

Browse files
committed
xmirror
1 parent 803364d commit 8e05d1b

File tree

4 files changed

+359
-0
lines changed

4 files changed

+359
-0
lines changed
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
package com.iast.astbenchmark.analyser.factory.stategy;
2+
3+
import cn.hutool.core.io.FileUtil;
4+
import cn.hutool.core.util.StrUtil;
5+
import cn.hutool.json.JSONArray;
6+
import cn.hutool.json.JSONObject;
7+
import cn.hutool.json.JSONUtil;
8+
import com.google.common.collect.Lists;
9+
import com.google.common.collect.Maps;
10+
import com.iast.astbenchmark.analyser.bean.BaseOriginalDataBean;
11+
import com.iast.astbenchmark.analyser.bean.CaseDataCollectResultBean;
12+
import com.iast.astbenchmark.analyser.bean.consts.VendorEnum;
13+
import com.iast.astbenchmark.analyser.factory.CaseDataTransfer;
14+
import com.iast.astbenchmark.analyser.factory.stategy.dongtai.DongResultBean;
15+
import com.iast.astbenchmark.analyser.factory.stategy.dongtai.DongTaintItemBean;
16+
import com.iast.astbenchmark.analyser.factory.stategy.xmirror.XmirrorRecord;
17+
import com.iast.astbenchmark.analyser.factory.stategy.xmirror.XmirrorRootBean;
18+
import com.iast.astbenchmark.analyser.service.ConfigService;
19+
import com.iast.astbenchmark.analyser.util.CaseResultutils;
20+
import org.springframework.beans.factory.annotation.Autowired;
21+
import org.springframework.stereotype.Component;
22+
import org.springframework.util.CollectionUtils;
23+
24+
import java.nio.charset.Charset;
25+
import java.util.List;
26+
import java.util.Map;
27+
import java.util.stream.Collectors;
28+
29+
@Component
30+
public class XmirrorCaseDataTransfer implements CaseDataTransfer {
31+
@Autowired
32+
private ConfigService configService;
33+
34+
@Override
35+
public VendorEnum vendor() {
36+
return VendorEnum.XMIRROR;
37+
}
38+
39+
@Override
40+
public CaseDataCollectResultBean doOperation() {
41+
Long time = System.currentTimeMillis();
42+
CaseDataCollectResultBean resultBean = new CaseDataCollectResultBean();
43+
resultBean.setVendor(vendor());
44+
resultBean.setReportId(this.vendor().getDescription() + "@" + time);
45+
resultBean.setCaseTime(time);
46+
/**
47+
* Step1 ->获取检出结果并解析;
48+
* 指定检测结果目录 以及检测标记
49+
*/
50+
List<XmirrorRecord> taintItemBeans = getReportLogArray(configService.getDetection(this.vendor()));
51+
/**
52+
* Step2 -> 抽取Tag
53+
* 默认使用MethedName作为Case的tag进行标记
54+
*/
55+
Map<String, BaseOriginalDataBean> tagMap = convertToTagMap(taintItemBeans);
56+
resultBean.setCaseDetectionItems(CaseResultutils.caseAnalyse(tagMap));
57+
return resultBean;
58+
}
59+
60+
private Map<String, BaseOriginalDataBean> convertToTagMap(List<XmirrorRecord> logsBeans) {
61+
if (CollectionUtils.isEmpty(logsBeans)) {
62+
return Maps.newHashMap();
63+
}
64+
return logsBeans.stream().filter(e -> e.getSecurityLevelId()>=2
65+
&& StrUtil.isNotEmpty(e.getIastParam()) && StrUtil.isNotEmpty(e.getVulUrl()))
66+
.collect(Collectors.toMap(e1 -> getTagKey(e1), e2 -> e2, (k1, k2) -> k1));
67+
}
68+
69+
private String getTagKey(XmirrorRecord baseData) {
70+
String url = baseData.getVulUrl();
71+
if (url.contains("case00")) {
72+
url = url.split("\\?")[0];
73+
String tag = "aTaintCase00" + url.split("case00")[1].split("/")[0];
74+
if (url.endsWith("/2")) {
75+
tag = tag + "_2";
76+
} else if (url.endsWith("/1")) {
77+
tag = tag + "_1";
78+
} else if (url.endsWith("/3")) {
79+
tag = tag + "_3";
80+
} else if (url.endsWith("/4")) {
81+
tag = tag + "_4";
82+
} else if (url.endsWith("/5")) {
83+
tag = tag + "_5";
84+
} else if (url.endsWith("/6")) {
85+
tag = tag + "_6";
86+
} else if (url.endsWith("/7")) {
87+
tag = tag + "_7";
88+
}
89+
return tag;
90+
}
91+
return "";
92+
}
93+
94+
private List<XmirrorRecord> getReportLogArray(String path) {
95+
List<XmirrorRecord> itemBeans = Lists.newArrayList();
96+
JSONArray jsonArray =JSONUtil.readJSONArray(FileUtil.file(path), Charset.forName("utf-8"));
97+
for (Object o : jsonArray) {
98+
XmirrorRootBean resultBean = JSONUtil.toBean(JSONUtil.toJsonStr(o), XmirrorRootBean.class);
99+
itemBeans.addAll(resultBean.getData().getRecords());
100+
}
101+
return itemBeans;
102+
}
103+
}
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
package com.iast.astbenchmark.analyser.factory.stategy.xmirror;
2+
3+
import java.util.List;
4+
5+
public class XmirrorData {
6+
7+
private List<XmirrorRecord> records;
8+
private int total;
9+
private int size;
10+
private int current;
11+
private List<String> orders;
12+
private boolean optimizeCountSql;
13+
private boolean searchCount;
14+
private String countId;
15+
private String maxLimit;
16+
private int pages;
17+
public void setRecords(List<XmirrorRecord> records) {
18+
this.records = records;
19+
}
20+
public List<XmirrorRecord> getRecords() {
21+
return records;
22+
}
23+
24+
public void setTotal(int total) {
25+
this.total = total;
26+
}
27+
public int getTotal() {
28+
return total;
29+
}
30+
31+
public void setSize(int size) {
32+
this.size = size;
33+
}
34+
public int getSize() {
35+
return size;
36+
}
37+
38+
public void setCurrent(int current) {
39+
this.current = current;
40+
}
41+
public int getCurrent() {
42+
return current;
43+
}
44+
45+
public void setOrders(List<String> orders) {
46+
this.orders = orders;
47+
}
48+
public List<String> getOrders() {
49+
return orders;
50+
}
51+
52+
public void setOptimizeCountSql(boolean optimizeCountSql) {
53+
this.optimizeCountSql = optimizeCountSql;
54+
}
55+
public boolean getOptimizeCountSql() {
56+
return optimizeCountSql;
57+
}
58+
59+
public void setSearchCount(boolean searchCount) {
60+
this.searchCount = searchCount;
61+
}
62+
public boolean getSearchCount() {
63+
return searchCount;
64+
}
65+
66+
public void setCountId(String countId) {
67+
this.countId = countId;
68+
}
69+
public String getCountId() {
70+
return countId;
71+
}
72+
73+
public void setMaxLimit(String maxLimit) {
74+
this.maxLimit = maxLimit;
75+
}
76+
public String getMaxLimit() {
77+
return maxLimit;
78+
}
79+
80+
public void setPages(int pages) {
81+
this.pages = pages;
82+
}
83+
public int getPages() {
84+
return pages;
85+
}
86+
87+
}
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
package com.iast.astbenchmark.analyser.factory.stategy.xmirror;
2+
3+
import com.iast.astbenchmark.analyser.bean.BaseDetectedDataBean;
4+
import com.iast.astbenchmark.analyser.bean.BaseOriginalDataBean;
5+
6+
import java.util.Date;
7+
8+
public class XmirrorRecord extends BaseOriginalDataBean {
9+
10+
private String vulResultId;
11+
private int securityLevelId;
12+
private String vulName;
13+
private String vulSerial;
14+
private String vulUrl;
15+
private String vulMidTypeId;
16+
private String iastParam;
17+
private int detectEngineId;
18+
private int status;
19+
private String iastActiveVerify;
20+
private Date createDate;
21+
private Date firstCreateDate;
22+
private String mergeCount;
23+
private String assignUserId;
24+
private int mergeVulCount;
25+
public void setVulResultId(String vulResultId) {
26+
this.vulResultId = vulResultId;
27+
}
28+
public String getVulResultId() {
29+
return vulResultId;
30+
}
31+
32+
public void setSecurityLevelId(int securityLevelId) {
33+
this.securityLevelId = securityLevelId;
34+
}
35+
public int getSecurityLevelId() {
36+
return securityLevelId;
37+
}
38+
39+
public void setVulName(String vulName) {
40+
this.vulName = vulName;
41+
}
42+
public String getVulName() {
43+
return vulName;
44+
}
45+
46+
public void setVulSerial(String vulSerial) {
47+
this.vulSerial = vulSerial;
48+
}
49+
public String getVulSerial() {
50+
return vulSerial;
51+
}
52+
53+
public void setVulUrl(String vulUrl) {
54+
this.vulUrl = vulUrl;
55+
}
56+
public String getVulUrl() {
57+
return vulUrl;
58+
}
59+
60+
public void setVulMidTypeId(String vulMidTypeId) {
61+
this.vulMidTypeId = vulMidTypeId;
62+
}
63+
public String getVulMidTypeId() {
64+
return vulMidTypeId;
65+
}
66+
67+
public void setIastParam(String iastParam) {
68+
this.iastParam = iastParam;
69+
}
70+
public String getIastParam() {
71+
return iastParam;
72+
}
73+
74+
public void setDetectEngineId(int detectEngineId) {
75+
this.detectEngineId = detectEngineId;
76+
}
77+
public int getDetectEngineId() {
78+
return detectEngineId;
79+
}
80+
81+
public void setStatus(int status) {
82+
this.status = status;
83+
}
84+
public int getStatus() {
85+
return status;
86+
}
87+
88+
public void setIastActiveVerify(String iastActiveVerify) {
89+
this.iastActiveVerify = iastActiveVerify;
90+
}
91+
public String getIastActiveVerify() {
92+
return iastActiveVerify;
93+
}
94+
95+
public void setCreateDate(Date createDate) {
96+
this.createDate = createDate;
97+
}
98+
public Date getCreateDate() {
99+
return createDate;
100+
}
101+
102+
public void setFirstCreateDate(Date firstCreateDate) {
103+
this.firstCreateDate = firstCreateDate;
104+
}
105+
public Date getFirstCreateDate() {
106+
return firstCreateDate;
107+
}
108+
109+
public void setMergeCount(String mergeCount) {
110+
this.mergeCount = mergeCount;
111+
}
112+
public String getMergeCount() {
113+
return mergeCount;
114+
}
115+
116+
public void setAssignUserId(String assignUserId) {
117+
this.assignUserId = assignUserId;
118+
}
119+
public String getAssignUserId() {
120+
return assignUserId;
121+
}
122+
123+
public void setMergeVulCount(int mergeVulCount) {
124+
this.mergeVulCount = mergeVulCount;
125+
}
126+
public int getMergeVulCount() {
127+
return mergeVulCount;
128+
}
129+
130+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.iast.astbenchmark.analyser.factory.stategy.xmirror;
2+
3+
import com.iast.astbenchmark.analyser.bean.BaseOriginalDataBean;
4+
5+
public class XmirrorRootBean extends BaseOriginalDataBean {
6+
7+
private int code;
8+
private String message;
9+
private XmirrorData data;
10+
private boolean success;
11+
public void setCode(int code) {
12+
this.code = code;
13+
}
14+
public int getCode() {
15+
return code;
16+
}
17+
18+
public void setMessage(String message) {
19+
this.message = message;
20+
}
21+
public String getMessage() {
22+
return message;
23+
}
24+
25+
public void setData(XmirrorData data) {
26+
this.data = data;
27+
}
28+
public XmirrorData getData() {
29+
return data;
30+
}
31+
32+
public void setSuccess(boolean success) {
33+
this.success = success;
34+
}
35+
public boolean getSuccess() {
36+
return success;
37+
}
38+
39+
}

0 commit comments

Comments
 (0)