Skip to content

Commit 3cad153

Browse files
erezh31meirwah
authored andcommitted
Top malicious ratio indicators (#1750)
* Top malicious ratio indicators * Fix script schema validation * remove script schema validatiom * fix CR * add widget to display script results * add fromversion filter 0 malicious ratio * add widget from version * fix file format
1 parent e0a4f73 commit 3cad153

File tree

2 files changed

+119
-0
lines changed

2 files changed

+119
-0
lines changed
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
commonfields:
2+
id: TopMaliciousRatioIndicators
3+
version: -1
4+
name: TopMaliciousRatioIndicators
5+
fromversion: "4.0.0"
6+
script: |
7+
from datetime import datetime, timedelta
8+
import json, random
9+
10+
def select_indicator_columns(indicator):
11+
display_indicator = {}
12+
display_indicator['ID'] = indicator['id']
13+
display_indicator['Type'] = indicator['indicator_type']
14+
display_indicator['Malicious Ratio'] = '%.2f' % float(indicator['maliciousRatio'])
15+
display_indicator['Value'] = indicator['value']
16+
display_indicator['Last Seen'] = indicator['lastSeen']
17+
return display_indicator
18+
19+
MAX_INDICATORS = int(demisto.args()['maxNumberOfIndicators'])
20+
MIN_NUMBER_OF_INVS = int(demisto.args()['minimumNumberOfInvs'])
21+
MAX_RESULTS = int(demisto.args()['maximumNumberOfResults'])
22+
23+
from_date = demisto.args().get('from', '"30 days ago"')
24+
res = demisto.executeCommand("findIndicators", {'query':'lastSeen:>=%s' % from_date, 'size': MAX_INDICATORS})
25+
indicators = res[0]['Contents']
26+
indicators = [i for i in indicators if len(i.get('investigationIDs') or []) >= MIN_NUMBER_OF_INVS]
27+
indicators_map = {}
28+
for i in indicators:
29+
indicators_map[i['id']] = i
30+
31+
res = demisto.executeCommand("maliciousRatio", {'id': ",".join(indicators_map.keys())})
32+
malicious_ratio_result = res[0]['Contents']
33+
for mr in malicious_ratio_result:
34+
indicators_map[mr['indicatorId']]['maliciousRatio'] = mr['maliciousRatio']
35+
indicators_map[mr['indicatorId']]['from_date'] = from_date
36+
37+
sorted_indicators = sorted(indicators_map.values(), key=lambda x: x['maliciousRatio'], reverse=True)
38+
sorted_indicators = [x for x in sorted_indicators if x['maliciousRatio'] > 0]
39+
sorted_indicators = sorted_indicators[:MAX_RESULTS]
40+
sorted_indicators = map(select_indicator_columns, sorted_indicators)
41+
demisto.results(json.dumps({"total": len(sorted_indicators), "data": sorted_indicators}))
42+
type: python
43+
tags:
44+
- widget
45+
comment: |-
46+
Find the top malicious ratio indicators.
47+
Malicious ratio is defined by the ratio between the number of "bad" incidents divided by the number of total number of incidents that the indicators appears in.
48+
enabled: true
49+
args:
50+
- name: maxNumberOfIndicators
51+
description: Maximum number of indicators for malicious ratio calculation.
52+
defaultValue: "10000"
53+
- name: minimumNumberOfInvs
54+
description: Minimum number of investigation the indicator has to appear in.
55+
defaultValue: "3"
56+
- name: maximumNumberOfResults
57+
description: Maximum number of results to display.
58+
defaultValue: "100"
59+
scripttarget: 0
60+
runonce: false
61+
releaseNotes: "Adding top malicious ratio indicators script"
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
{
2+
"id": "TopMaliciousRatioIndicators",
3+
"fromVersion": "4.0.0",
4+
"version": -1,
5+
"modified": "2018-07-03T14:52:05.828225489+03:00",
6+
"name": "TopMaliciousRatioIndicators",
7+
"dataType": "scripts",
8+
"widgetType": "table",
9+
"query": "TopMaliciousRatioIndicators",
10+
"sort": null,
11+
"isPredefined": false,
12+
"dateRange": {
13+
"fromDate": "0001-01-01T00:00:00Z",
14+
"toDate": "0001-01-01T00:00:00Z",
15+
"period": {
16+
"byTo": "",
17+
"byFrom": "days",
18+
"toValue": null,
19+
"fromValue": 180,
20+
"field": ""
21+
},
22+
"fromDateLicense": "0001-01-01T00:00:00Z"
23+
},
24+
"params": {
25+
"tableColumns": [
26+
{
27+
"displayed": true,
28+
"isDefault": true,
29+
"key": "ID"
30+
},
31+
{
32+
"displayed": true,
33+
"isDefault": true,
34+
"key": "Type"
35+
},
36+
{
37+
"displayed": true,
38+
"isDefault": true,
39+
"key": "Value"
40+
},
41+
{
42+
"displayed": true,
43+
"isDefault": true,
44+
"key": "Malicious Ratio"
45+
},
46+
{
47+
"displayed": true,
48+
"isDefault": true,
49+
"key": "Last Seen"
50+
}
51+
],
52+
"maxNumberOfIndicators": 10000,
53+
"minimumNumberOfInvs": 3,
54+
"maximumNumberOfResults": 50
55+
},
56+
"size": 10,
57+
"category": ""
58+
}

0 commit comments

Comments
 (0)