Rapid7 Threat Command CVEs Correlation

This rule is triggered when CVEs collected from the Rapid7 Threat Command Integration have a match against vulnerabilities that were found in the customer environment.

Elastic rule (View on GitHub)

  1[metadata]
  2creation_date = "2024/05/29"
  3integration = ["ti_rapid7_threat_command"]
  4maturity = "production"
  5updated_date = "2024/06/20"
  6
  7[rule]
  8author = ["Elastic"]
  9description = """
 10This rule is triggered when CVEs collected from the Rapid7 Threat Command Integration have a match against
 11vulnerabilities that were found in the customer environment.
 12"""
 13from = "now-35m"
 14index = ["auditbeat-*", "endgame-*", "filebeat-*", "logs-*", "packetbeat-*", "winlogbeat-*"]
 15interval = "30m"
 16language = "kuery"
 17license = "Elastic License v2"
 18max_signals = 10000
 19name = "Rapid7 Threat Command CVEs Correlation"
 20note = """## Triage and Analysis
 21
 22### Investigating Rapid7 Threat Command CVEs Correlation
 23
 24Rapid7 Threat Command CVEs Correlation rule allows matching CVEs from user indices within the vulnerabilities collected from Rapid7 Threat Command integrations.
 25
 26The matches will be based on the latest values of CVEs from the last 180 days. So it's essential to validate the data and review the results by investigating the associated activity to determine if it requires further investigation.
 27
 28If a vulnerability matches a local observation, the following enriched fields will be generated to identify the vulnerability, field, and type matched.
 29
 30- `threat.indicator.matched.atomic` - this identifies the atomic vulnerability that matched the local observation
 31- `threat.indicator.matched.field` - this identifies the vulnerability field that matched the local observation
 32- `threat.indicator.matched.type` - this identifies the vulnerability type that matched the local observation
 33
 34Additional investigation can be done by reviewing the source of the activity and considering the history of the vulnerability that was matched. This can help understand if the activity is related to legitimate behavior.
 35
 36- Investigation can be validated and reviewed based on the data that was matched and by viewing the source of that activity.
 37- Consider the history of the vulnerability that was matched. Has it happened before? Is it happening on multiple machines? These kinds of questions can help understand if the activity is related to legitimate behavior.
 38- Consider the user and their role within the company: is this something related to their job or work function?
 39"""
 40references = [
 41    "https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-module-threatintel.html",
 42    "https://docs.elastic.co/integrations/ti_rapid7_threat_command"]
 43risk_score = 99
 44rule_id = "3a657da0-1df2-11ef-a327-f661ea17fbcc"
 45setup = """
 46
 47## Setup
 48
 49This rule needs threat intelligence indicators to work.
 50Threat intelligence indicators can be collected using an [Elastic Agent integration](https://www.elastic.co/guide/en/security/current/es-threat-intel-integrations.html#agent-ti-integration),
 51the [Threat Intel module](https://www.elastic.co/guide/en/security/current/es-threat-intel-integrations.html#ti-mod-integration),
 52or a [custom integration](https://www.elastic.co/guide/en/security/current/es-threat-intel-integrations.html#custom-ti-integration).
 53
 54More information can be found [here](https://www.elastic.co/guide/en/security/current/es-threat-intel-integrations.html).
 55
 56## Max Signals
 57
 58This rule is configured to generate more **Max alerts per run** than the default 1000 alerts per run set for all rules. This is to ensure that it captures as many alerts as possible.
 59
 60**IMPORTANT:** The rule's **Max alerts per run** setting can be superseded by the `xpack.alerting.rules.run.alerts.max` Kibana config setting, which determines the maximum alerts generated by _any_ rule in the Kibana alerting framework. For example, if `xpack.alerting.rules.run.alerts.max` is set to 1000, this rule will still generate no more than 1000 alerts even if its own **Max alerts per run** is set higher.
 61
 62To make sure this rule can generate as many alerts as it's configured in its own **Max alerts per run** setting, increase the `xpack.alerting.rules.run.alerts.max` system setting accordingly.
 63
 64**NOTE:** Changing `xpack.alerting.rules.run.alerts.max` is not possible in Serverless projects.
 65"""
 66severity = "critical"
 67tags = [
 68    "OS: Windows",
 69    "Data Source: Elastic Endgame",
 70    "Data Source: Windows",
 71    "Data Source: Network",
 72    "Data Source: Rapid7 Threat Command",
 73    "Rule Type: Threat Match",
 74    "Resources: Investigation Guide",
 75    "Use Case: Vulnerability",
 76    "Use Case: Asset Visibility",
 77    "Use Case: Continuous Monitoring",
 78]
 79threat_index = ["logs-ti_rapid7_threat_command_latest.vulnerability"]
 80threat_indicator_path = "rapid7.tc.vulnerability"
 81threat_language = "kuery"
 82threat_query = """
 83@timestamp >= "now-30d/d" and vulnerability.id : * and event.module: ti_rapid7_threat_command
 84"""
 85timestamp_override = "event.ingested"
 86type = "threat_match"
 87
 88query = '''
 89vulnerability.id : *
 90'''
 91
 92
 93[[rule.filters]]
 94
 95[rule.filters."$state"]
 96store = "appState"
 97[rule.filters.meta]
 98disabled = false
 99key = "rapid7.tc.vulnerability.id"
100negate = true
101type = "exists"
102[rule.filters.query.exists]
103field = "rapid7.tc.vulnerability.id"
104[[rule.threat_mapping]]
105
106[[rule.threat_mapping.entries]]
107field = "vulnerability.id"
108type = "mapping"
109value = "vulnerability.id"

Triage and Analysis

Investigating Rapid7 Threat Command CVEs Correlation

Rapid7 Threat Command CVEs Correlation rule allows matching CVEs from user indices within the vulnerabilities collected from Rapid7 Threat Command integrations.

The matches will be based on the latest values of CVEs from the last 180 days. So it's essential to validate the data and review the results by investigating the associated activity to determine if it requires further investigation.

If a vulnerability matches a local observation, the following enriched fields will be generated to identify the vulnerability, field, and type matched.

  • threat.indicator.matched.atomic - this identifies the atomic vulnerability that matched the local observation
  • threat.indicator.matched.field - this identifies the vulnerability field that matched the local observation
  • threat.indicator.matched.type - this identifies the vulnerability type that matched the local observation

Additional investigation can be done by reviewing the source of the activity and considering the history of the vulnerability that was matched. This can help understand if the activity is related to legitimate behavior.

  • Investigation can be validated and reviewed based on the data that was matched and by viewing the source of that activity.
  • Consider the history of the vulnerability that was matched. Has it happened before? Is it happening on multiple machines? These kinds of questions can help understand if the activity is related to legitimate behavior.
  • Consider the user and their role within the company: is this something related to their job or work function?

References

Related rules

to-top