Observable Extraction Rules
The ‘Observable Extraction Rules’ are responsible for handling incoming alert data from the payload and extract key observables and it’s relations, which are essential data points like IP addresses
, URLs
, usernames
, file hashes
, and hostnames
. These observables are critical for understanding the context and impact of an alert, enabling subsequent enrichment, triage, and response actions.
Tip: Consider the Following Questions
Tip: Consider the Following Questions
When reviewing the sample alert payload and the vendor associated with, consider the following questions:
- Are the field names and structures consistent across different alert types from this vendor?
- Does the context or content of the alerts vary significantly between types?
- Can you reasonably estimate how many alerts will be generated by the rules you are creating?
Your answers will help determine the best rule configuration strategy. In some cases, it may be appropriate to create specific rules tailored to each alert type. In others, a single generic rule may suffice. You can also combine both approaches—define specific rules for well-understood alert types and use a generic rule as a fallback.
In this setup, the system will prioritize specific rules. The generic rule will only be applied when no specific rule matches the alert, effectively serving as a catch-all fallback.
How to Create an Observable Extraction Rule
Navigate to Case Management Settings
Navigate to Case Management Settings and click on the ‘Observable Extraction Rules’ tab under the General Settings section.
Click 'New Rule' button located in the top-right corner of the page.
Fill out the following parameters:
Parameter | Description |
---|---|
Rule Name | The name of the “Extract Observable Rule” |
Description | Provide a brief description of the observable extraction rule |
Vendors | The vendor source of the alert. You can select one or multiple vendors. If no vendors are selected, all vendors from the list will be included by default. |
Alert Name | The name of the alert name helps identify which rule will be applied |
Use Regex | Use regex to indicate matching criteria in the alert name. |
Case Type: | The case type defines the classification or category assigned to the case. Specify the case type based on the selected vendor and alert name. |
Extract Observable Mapping
Parameter | Description |
---|---|
Alert Key | The ‘Alert Key’ is the location within the alert payload where the observable can be found. The path follows a dotted notation, starting from the root of the JSON object and navigating to the value you want to extract. |
The Observable Type | Field of interest extracted from incoming alert’s payload. Examples include IP address, file hash, DNS, Users or Email. |
Optional- The Observable Relation | Observable relations define the contextual relationship and significance of an observable (e.g., an email address, IP address, file hash) within a case or alert. |
Observable Extraction Logic
The observable extraction mechanism in Blink supports parsing complex alert payloads to automatically extract relevant data points (observables) based on a defined key path. This enables observables such as email addresses, file names, and URLs to be dynamically identified from deeply nested structures.
The system supports two main extraction behaviors:
1. Extracting Observables from a List at the Final Path Segment
When the last field in the key path is a list, the system will extract each item in that list as a separate observable.
View Full Payload Example
View Full Payload Example
Focusing on this section within the alert structure:
Using the key path:
alerts
- is a list of alerts.entities
- is a list within each alert.threatDetectionMethods
- is a list of strings inside an entity.
Extracted observables:
"UserReported"
"Phishing"
"SpoofedSender"
Each string in the list is treated as an independent observable.
2. Dot-Walking Through Lists in the Key Path
When any intermediate field in the key path is a list, the system will walk through each item in the list and check whether the next field in the path exists, continuing recursively. If the key exists, its value is extracted and if not, that item is skipped.
For Example:
Using the key path:
The system will:
- Loop over each
alert
inalerts
- Then over each
entity
inentities
- Then over each
attachment
inattachments
- Extract the
fileName
field from each attachment
Extracted observables:
"invoice.html"
"report.docx"
Each value is extracted independently and returned as a separate observable.
Observable Types and Relations
An observable refers to a discrete piece of content—such as an email address
, IP address
, or file hash
—that can be analyzed, enriched, and tracked across alerts. Each observable can only be assigned one observable type. For example, an email address like johndoe@gmail.com
will always have the observable type Email Address.
While the observable type is fixed, the role or context in which the observable appears can vary across alerts. These contextual roles are expressed using relations.
Use Case Example: Email Address in Multiple Different Roles
Use Case Example: Email Address in Multiple Different Roles
Consider the observable johndoe@gmail.com
, typed as Email Address
. This observable might appear in different roles depending on the alert:
- In one alert, it is the
recipient
of a phishing email. - In another alert, it is the
sender
of a suspicious message.
Rather than creating new observable types such as “Sender Email” or “Recipient Email,” the observable retains its type (Email Address) and the roles are captured using relations. This approach preserves consistency while supporting flexible contextual representation.
Use Case Example: IP Address in Multiple Different Roles
Use Case Example: IP Address in Multiple Different Roles
Similarly, take the observable 192.168.1.100
with the type IP Address. In different alerts, the same IP address may appear in distinct roles:
- As the source IP in a port scanning attempt.
- As the destination IP in an unauthorized outbound connection.
Instead of defining separate observable types like “Source IP” or “Destination IP,” these roles are modeled as relations associated with the same observable.
Benefits of Using Relations
Benefits of Using Relations
- Consistent enrichment: Observables are enriched once, regardless of the roles they take on.
- Improved correlation: All related activity tied to a specific observable can be traced across alerts, independent of its role.
- Flexible investigations: Analysts can filter, pivot, and investigate based on relations without duplicating observables.
This provides a clean separation between what the observable is (its type) and how it is involved in each alert (its relation), enabling more powerful and efficient threat investigation workflows.
Alert Name Syntax Rules
-
If the ‘Alert Name’ input is left blank, the ‘Extract Observable Rules’ will be applied to all alerts.
-
When matching alert names, the system prioritizes the longest matching string. Exact matches take precedence over regular expression (regex) patterns.
-
The Alert Name field in ‘Extract Observable Rule’ supports Regular Expressions (Regex), allowing you to define flexible matching patterns. This enables dynamic grouping and processing of similar alerts — even when alert names contain varying formats, dynamic elements like timestamps or IDs, or share common prefixes or suffixes.
Example of Using Regex in an Alert Name
Example of Using Regex in an Alert Name
If we want to match all alert names that start with “Critical Alert” followed by a series of numbers.
Regex Use Case Example
Explanation:
^
matches the beginning of the alert name.Critical Alert
matches the literal text.[0-9]+
matches one or more digits.$
matches the end of the alert name. This would match:Critical Alert 123
Critical Alert 4567
But not:
Critical Alert
(no numbers)Info Alert 123
(doesn’t start with “Critical Alert”)
Understand the Alert Payload Structure
Before creating an Extraction Observable Rule, you need to understand the alert payload. The payload contains important information, like the sender’s email address or device details, which can be extracted as observables.
Here’s an example of an alert payload:
Define the Observable Type
First, decide what type of observable you are extracting. In this example, we want to extract an email address, so the observable type will be User Email.
Identify the Observable and its Relation (if applicable)
Next, find the specific piece of information to extract and check if there’s a relation. In this case, we are extracting the email address (frodo@middleearth.com
) and storing it as an observable of type Email Address.
- The relation here could be that the email is associated with the sender, so the observable relation would be Sender.
If there’s no relation, you can skip this step. But if there is, make sure to define the relation type (e.g., Sender)
Identify the Path
The path is the location of the observable in the payload, written in dotted notation. The path to the email address is:
Create the Extraction Rule
Now that you know the observable, its type, and its path, you can create the rule to extract it.
Apply the Rule for Other Observables
You can repeat this process for other observables in the payload. For example, if you wanted to extract the sender’s name, the path would be "sender.emailAddress.name"
, and the type could be User Name. If the name has a relation, like being associated with the sender, the relation could be Sender.
Test the Template
Once your template is ready, test it using the Extract Observables Action to make sure the system correctly extracts the observables based on your defined paths, types, and relations.
Unmapped Alerts
In the “Alert Processed” widget within Case Management, if you receive a notification about “unmapped alerts,” it indicates that certain alerts need to be manually mapped. To resolve this, follow the steps outlined above to create custom templates based on the alert payloads.