You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/integrations/security-threat-detection/threat-intel-quick-analysis.md
+31-25Lines changed: 31 additions & 25 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -17,7 +17,7 @@ The Threat Intel Quick Analysis app can be used for any type of logs, regardless
17
17
18
18
## Installing the Threat Intel Quick Analysis app
19
19
20
-
This app contains generic regex expressions and thus may not perform well at very large scale. Once you are familiar with Sumo Logic, you can apply performance optimization techniques as described in [Threat Intel Optimization](#threat-intel-optimization). Alternatively, you can run this app on smaller and more specific data streams.
20
+
This app contains generic regex expressions and thus may not perform well at very large scale. Once you are familiar with Sumo Logic, you can apply performance optimization techniques as described in [Threat Intel optimization](#threat-intel-optimization). Alternatively, you can run this app on smaller and more specific data streams.
21
21
22
22
This section provides instructions on how to install the Threat Intel Quick Analysis app, and examples of each of dashboards. The preconfigured searches and dashboards provide easy-to-access visual insights into your data.
Use [Field Extraction Rules (FER)]((/docs/manage/field-extractions/create-field-extraction-rule)) to parse fields from your log messages at the time the messages are ingested, which eliminates the need to parse fields at the query level. Use these parsed fields along with Threat Intel Lookup operator.
@@ -76,12 +76,10 @@ Use [Field Extraction Rules (FER)]((/docs/manage/field-extractions/create-field-
76
76
```
77
77
1. Customize your query so you can use parsed fields from the Field Extraction Rule with the [`threatlookup` search operator](/docs/search/search-query-language/search-operators/threatlookup/), where `src_ip` is the parsed field from the FER. For example:
78
78
```
79
-
| lookup type, actor, raw, threatlevel as malicious_confidence from sumo://threat/cs on threat=src_ip
80
-
| json field=raw "labels[*].name" as label_name
81
-
| replace(label_name, "\\/","->") as label_name
82
-
| replace(label_name, "\""," ") as label_name
83
-
| where type="ip_address" and !isNull(malicious_confidence)
84
-
| if (isEmpty(actor), "Unassigned", actor) as Actor
79
+
| threatlookup singleIndicator src_ip
80
+
| parse regex field=%"_threatlookup.fields" "labels.[^.]+.name\":\"(?<label_name>[^\"]+)\"" multi
81
+
| where (_threatlookup.type="ipv4-addr:value" or _threatlookup.type="ipv6-addr:value") and !isNull(_threatlookup.confidence)
82
+
| if (isEmpty(_threatlookup.actors), "Unassigned", _threatlookup.actors) as Actor
85
83
| count as threat_count by src_ip, malicious_confidence, Actor, _source, label_name
86
84
| sort by threat_count
87
85
```
@@ -92,21 +90,19 @@ Use scheduled views with the threat lookup operator to find threats. Scheduled v
92
90
93
91
1. Create a scheduled view. For example, for Cylance, create a scheduled view, **cylance_threat**:
94
92
```
95
-
_sourceCategory=cylance | lookup type, actor, raw, threatlevel as malicious_confidence from sumo://threat/cs on threat=src_ip
96
-
| json field=raw "labels[*].name" as label_name
97
-
| replace(label_name, "\\/","->") as label_name
98
-
| replace(label_name, "\""," ") as label_name
99
-
| where type="ip_address" and !isNull(malicious_confidence)
100
-
| if (isEmpty(actor), "Unassigned", actor) as Actor
101
-
| lookup latitude, longitude, country_code, country_name, region, city, postal_code, area_code, metro_code from geo://default on ip = src_ip
102
-
| count as threat_count by src_ip, malicious_confidence, Actor, _source, label_name, city, country_name, raw
93
+
_sourceCategory=cylance
94
+
| threatlookup singleIndicator src_ip
95
+
| parse regex field=%"_threatlookup.fields" "labels.[^.]+.name\":\"(?<label_name>[^\"]+)\"" multi
96
+
| where (_threatlookup.type="ipv4-addr:value" or _threatlookup.type="ipv6-addr:value") and !isNull(_threatlookup.confidence)
97
+
| if (isEmpty(_threatlookup.actors), "Unassigned", _threatlookup.actors) as Actor
98
+
| lookup latitude, longitude, country_code, country_name, region, city, postal_code, area_code, metro_code from geo://default on ip = src_ip
99
+
| count as threat_count by src_ip, malicious_confidence, Actor, _source, label_name, city, country_name, raw
103
100
```
104
101
1. Now, you can run your Threat Intel query on top of this view:
105
102
```sql
106
103
_view=cylance_threat
107
104
| count by src_ip
108
105
```
109
-
-->
110
106
111
107
## Threat Intel FAQ
112
108
@@ -132,6 +128,18 @@ No. No results in your dashboards can mean that nothing has been identified as a
132
128
133
129
It could be a case-sensitivity issue. In Sumo Logic, the equal sign (`=`) and the not equal to sign (`!=`) conditions are case-sensitive; when you use them with Sumo Logic operators you may need to convert the string to which the condition is applied to upperorlower case. For more information, see [Using toLowerCase or toUpperCase with an equating condition](/docs/search/search-query-language/search-operators/tolowercase-touppercase).
134
130
131
+
#### I already have parsed fields such as IPs, domain, URL, Email, or File Name. Can I use them with this App, instead of parsing each log line again?
132
+
Yes, you can customize the query with in the App. For example:
133
+
134
+
```
135
+
_sourceCategory= */*/FIREWALL or _sourceCategory=*/*/LB or _sourceCategory=*/*/ROUTER or _sourceCategory=*/*/WINDOWS or _sourceCategory=*/*/SERVER
136
+
| where Your_IP != "0.0.0.0" and Your_IP != "127.0.0.1"
137
+
| threatlookup singleIndicator Your_IP
138
+
| where (_threatlookup.type="ipv4-addr:value" or _threatlookup.type="ipv6-addr:value") and !isNull(_threatlookup.confidence)
139
+
| if (isEmpty(_threatlookup.actors), "Unassigned", _threatlookup.actors) as Actor
140
+
| count by Actor
141
+
```
142
+
135
143
#### Should I use all logs (`*`) with this app or subset of logs?
136
144
137
145
You can use (`*`) to scan all of your ingested logs for threat, but depending on the volume of logs it can impact the performance of the search query and the app.
@@ -140,7 +148,7 @@ For optimal performance, use a subset of the logs. For example:
140
148
```
141
149
_sourceCategory= */*/FIREWALL or _sourceCategory=*/*/LB or _sourceCategory=*/*/ROUTER or _sourceCategory=*/*/WINDOWS or _sourceCategory=*/*/SERVER
142
150
```
143
-
<!--
151
+
144
152
#### I am seeing noisy results in the lookup service, what do I do?
145
153
146
154
* Use filters to remove as much of the noise as possible (for example, use the `NOT` clause before passing tuples to the lookup operator).
@@ -149,19 +157,17 @@ _sourceCategory= */*/FIREWALL or _sourceCategory=*/*/LB or _sourceCategory=*/*/R
| where ip_address != "0.0.0.0" and ip_address != "127.0.0.1"
152
-
| lookup type, actor, raw, threatlevel as malicious_confidence from sumo://threat/cs on threat=ip_address
153
-
| json field=raw "labels[*].name" as label_name
154
-
| replace(label_name, "\\/","->") as label_name
155
-
| replace(label_name, "\""," ") as label_name
156
-
| where type="ip_address" and !isNull(malicious_confidence)
160
+
| threatlookup singleIndicator ip_address
161
+
| parse regex field=%"_threatlookup.fields" "labels.[^.]+.name\":\"(?<label_name>[^\"]+)\"" multi
162
+
| where (_threatlookup.type="ipv4-addr:value" or _threatlookup.type="ipv6-addr:value") and !isNull(_threatlookup.confidence)
157
163
| where !(label_name matches "*TorProxy*")
158
-
| if (isEmpty(actor), "Unassigned", actor) as Actor
164
+
| if (isEmpty(_threatlookup.actors), "Unassigned", _threatlookup.actors) as Actor
165
+
| if (_threatlookup.confidence >= 85, "high", if (_threatlookup.confidence >= 50, "medium", if (_threatlookup.confidence >= 15, "low", if (_threatlookup.confidence >= 0, "unverified", "Unknown")))) as malicious_confidence
159
166
| count by ip_address, malicious_confidence, Actor, _source, label_name
160
167
| sort by _count
161
168
```
162
169
163
170
Threat Intel Quick Analysis app is a good starting point, but you will have to customize the queries powering the app for your own particular use.
164
-
-->
165
171
166
172
#### Can I use Scheduled Search with threat lookup service? If yes, what is the Run Frequency (time) I can use?
| lookup type, actor, raw, threatlevel from sumo://threat/cs on src_ip=threat
389
-
| wherethreatlevel="high"
388
+
| threatlookup singleIndicator threat| if (_threatlookup.confidence>=85, "high", if (_threatlookup.confidence>=50, "medium", if (_threatlookup.confidence>=15, "low", if (_threatlookup.confidence>=0, "unverified", "Unknown")))) as malicious_confidence
0 commit comments