IOC matches - URLs in email |
Details of IOC matches for URLs found in email.
Hide Query Show Query #logtype = "microsoft365"
| #category = "AdvancedHunting-EmailUrlInfo"
| ioc:lookup(["properties.Url"], type="url", strict="true", confidenceThreshold=?threshold)
| $"microsoft/microsoft365:IOC age and confidence presentation"()
| groupBy([properties.Url, properties.NetworkMessageId], function=[selectLast([@timestamp, "Malicious confidence", "IOC age"])])
| join({
#logtype = "microsoft365"
| #category = "AdvancedHunting-EmailEvents"
| properties.DeliveryAction = "Delivered"
| "Any delivery?" := "Yes"
}, field=[properties.NetworkMessageId], include=["Any delivery?"], mode=left)
| default(value="No", field=["Any delivery?"])
| groupBy([properties.Url], function=[
selectLast([@timestamp, "Malicious confidence", "IOC age"]),
count(properties.NetworkMessageId, distinct=true, as="No. of emails"),
{ "Any delivery?" = "Yes" | count() | _count match { 0 => "Any delivery?" := "No"; * => "Any delivery?" := "Yes" } | drop(_count) }
])
| "Any delivery?" = ?anyDelivery
| "Latest email" := formatTime("%b %d %T %Z", field=@timestamp)
| URL := rename(properties.Url)
| table([URL, "Malicious confidence", "No. of emails", "Any delivery?", "Latest email", "IOC age"])
| Table |
Threat trends - sender IP |
Number of IOC matches by confidence threshold over time for
sending SMTP server IP address.
Hide Query Show Query #logtype = "microsoft365"
| #category = "AdvancedHunting-EmailEvents"
| tenantId=?{tenantId=*}
| case {
test(?anyDelivery == "*");
test(?anyDelivery == "Yes") | properties.DeliveryAction = "Delivered";
test(?anyDelivery == "No") | properties.DeliveryAction != "Delivered";
}
| ioc:lookup([properties.SenderIPv4, properties.SenderIPv6], type="ip_address", strict="true", confidenceThreshold=?threshold)
| timechart(ioc[0].malicious_confidence)
| Time Chart |
IOC matches - sender domains |
Details of IOC matches for sender domains used in emails
Hide Query Show Query #logtype = "microsoft365"
| #category = "AdvancedHunting-EmailEvents"
| tenantId=?{tenantId=*}
| ioc:lookup(["properties.SenderFromDomain"], type="domain", strict="true", confidenceThreshold=?threshold)
| groupBy(["properties.SenderFromDomain"], function=[
count(properties.NetworkMessageId, distinct=true, as="No. of emails"),
selectLast([@timestamp, ioc[0].malicious_confidence, ioc[0].last_updated]),
{ properties.DeliveryAction = "Delivered" | count() | _count match { 0 => "Any delivery?" := "No"; * => "Any delivery?" := "Yes" } }
])
| "Any delivery?" = ?anyDelivery
| $"microsoft/microsoft365:IOC age and confidence presentation"()
| "Latest email" := formatTime("%b %d %T %Z", field=@timestamp)
| Domain := rename(properties.SenderFromDomain)
| table(["Domain", "Malicious confidence", "No. of emails", "Any delivery?", "Latest email", "IOC age"])
| Table |
IOC matches - sender IP |
Details of IOC matches for sending SMTP server IP address.
Hide Query Show Query #logtype = "microsoft365"
| #category = "AdvancedHunting-EmailEvents"
| tenantId=?{tenantId=*}
| ioc:lookup([properties.SenderIPv4, properties.SenderIPv6], type="ip_address", strict="true", confidenceThreshold=?threshold)
| case {
properties.SenderIPv4 != "null" | "Sender IP" := properties.SenderIPv4;
"Sender IP" := properties.SenderIPv6
}
| groupBy(["Sender IP"], function=[
count(properties.NetworkMessageId, distinct=true, as="No. of emails"),
selectLast([@timestamp, ioc[0].malicious_confidence, ioc[0].last_updated]),
{ properties.DeliveryAction = "Delivered" | count() | _count match { 0 => "Any delivery?" := "No"; * => "Any delivery?" := "Yes" } }
])
| "Any delivery?" = ?anyDelivery
| $"microsoft/microsoft365:IOC age and confidence presentation"()
| "Latest email" := formatTime("%b %d %T %Z", field=@timestamp)
| table(["Sender IP", "Malicious confidence", "No. of emails", "Any delivery?", "Latest email", "IOC age"])
| Table |
Threat trends - domains of URLs in email |
Number of IOC matches by confidence threshold over time for
domains of URLs found in email.
Hide Query Show Query #logtype = "microsoft365"
| #category = "AdvancedHunting-EmailUrlInfo"
| tenantId=?{tenantId=*}
| ioc:lookup(["properties.UrlDomain"], type="domain", strict="true", confidenceThreshold=?threshold)
| join({
#logtype = "microsoft365"
| #category = "AdvancedHunting-EmailEvents"
| properties.DeliveryAction = "Delivered"
| "Any delivery?" := "Yes"
}, field=[properties.NetworkMessageId], include=["Any delivery?"], mode=left)
| default(value="No", field=["Any delivery?"])
| "Any delivery?" = ?anyDelivery
| timechart(ioc[0].malicious_confidence)
| Time Chart |
Threat trends - sender domains |
Number of IOC matches by confidence threshold over time for sender
domains. This includes only the sender in the SMTP FROM header.
Hide Query Show Query #logtype = "microsoft365"
| #category = "AdvancedHunting-EmailEvents"
| tenantId=?{tenantId=*}
| case {
test(?anyDelivery == "*");
test(?anyDelivery == "Yes") | properties.DeliveryAction = "Delivered";
test(?anyDelivery == "No") | properties.DeliveryAction != "Delivered";
}
| ioc:lookup(["properties.SenderFromDomain"], type="domain", strict="true", confidenceThreshold=?threshold)
| split(ioc)
| timechart(ioc.malicious_confidence)
| Time Chart |
Threat trends - URLs in email |
Number of IOC matches by confidence threshold over time for URLs
found in email.
Hide Query Show Query #logtype = "microsoft365"
| #category = "AdvancedHunting-EmailUrlInfo"
| tenantId=?{tenantId=*}
| ioc:lookup(["properties.Url"], type="url", strict="true", confidenceThreshold=?threshold)
| join({
#logtype = "microsoft365"
| #category = "AdvancedHunting-EmailEvents"
| properties.DeliveryAction = "Delivered"
| "Any delivery?" := "Yes"
}, field=[properties.NetworkMessageId], include=["Any delivery?"], mode=left)
| default(value="No", field=["Any delivery?"])
| "Any delivery?" = ?anyDelivery
| timechart(ioc[0].malicious_confidence)
| Time Chart |
IOC matches - domains of URLs in email |
Details of IOC matches for domains of URLs found in email.
Hide Query Show Query #logtype = "microsoft365"
| #category = "AdvancedHunting-EmailUrlInfo"
| ioc:lookup(["properties.UrlDomain"], type="domain", strict="true", confidenceThreshold=?threshold)
| $"microsoft/microsoft365:IOC age and confidence presentation"()
| groupBy([properties.UrlDomain, properties.NetworkMessageId], function=[selectLast([@timestamp, "Malicious confidence", "IOC age"])])
| join({
#logtype = "microsoft365"
| #category = "AdvancedHunting-EmailEvents"
| properties.DeliveryAction = "Delivered"
| "Any delivery?" := "Yes"
}, field=[properties.NetworkMessageId], include=["Any delivery?"], mode=left)
| default(value="No", field=["Any delivery?"])
| groupBy([properties.UrlDomain], function=[
selectLast([@timestamp, "Malicious confidence", "IOC age"]),
count(properties.NetworkMessageId, distinct=true, as="No. of emails"),
{ "Any delivery?" = "Yes" | count() | _count match { 0 => "Any delivery?" := "No"; * => "Any delivery?" := "Yes" } | drop(_count) }
])
| "Any delivery?" = ?anyDelivery
| "Latest email" := formatTime("%b %d %T %Z", field=@timestamp)
| Domain := rename(properties.UrlDomain)
| table([Domain, "Malicious confidence", "No. of emails", "Any delivery?", "Latest email", "IOC age"])
| Table |
Introduction to Indicators of Compromise (IOC) detections |
Falcon LogScale includes an integration with CrowdStrike's Falcon
Intelligence to provide Falcon LogScale customers with a built-in
database of Indicators of Compromise (IOCs). Customers can search
their logs for matches against the IOC database and see relevant
threat information for each IOC found.
Find
out more. This dashboard checks a number of email
attributes against the IOC database with the
ioc:lookup() function. Click on the ⫶
button on each IOC detection to start investigating on it.
| Note |