TEDS Reference
The TEDS reference documentation establishes a standardized data schema aimed at creating a unified framework to support seamless collaboration between security teams and tools. It promotes consistent data formats and schemas, particularly within Swimlane's products, enhancing the detection, analysis, and response capabilities for security incidents. This standardization also simplifies the integration process for various cybersecurity tools, reducing complexity and minimizing integration effort.
Where TEDS Is Used
TEDS schemas are integrated throughout Swimlane Turbine in several key areas:
SOC Solutions Bundle
The SOC Solutions Bundle uses TEDS schemas extensively for security operations workflows:
- Alert Triage Solution: Processes alerts from SIEM, XDR, and EDR systems using the Alert object schema. Alerts are ingested via webhooks or API requests and transformed into standardized Alert objects following TEDS conventions.
- Phishing Triage Solution: Processes suspected phishing emails using the Email and Phishing Email Report object schemas. Email data is extracted and structured according to TEDS standards for consistent processing and analysis.
- Threat Intelligence Solution: Uses Observable and Enrichment object schemas to standardize threat intelligence data from various providers, ensuring consistent enrichment results across different sources.
Turbine Solutions Interfaces
TEDS schemas are implemented through Turbine Solutions Interfaces, which provide standardized input and output formats for components. When building components in Turbine Canvas, you can apply interfaces that use TEDS schemas, such as:
- Alert to None: Processes Alert objects without transformation
- Phishing Email Report to None: Processes Phishing Email Report objects
- Simple Observable to Enrichment: Transforms observables into enriched data
- Array of Alert to None: Processes multiple alerts in batch
These interfaces ensure components can work together seamlessly because they all use the same TEDS-based data structures.
Application Field Naming
When building applications in Swimlane Turbine, you can follow TEDS naming conventions for your field keys to ensure compatibility with TEDS-based workflows and integrations. This is especially important when:
- Creating applications that will receive data from TEDS-compliant sources
- Building custom solutions that integrate with SOC Solutions Bundle
- Ensuring data consistency across multiple systems and integrations
Playbook Actions
TEDS schemas can be applied to playbook actions through Input Schema References. When configuring record actions (Create, Update/Create, Search), you can reference TEDS-based schemas to ensure your playbooks accept and process data in standardized formats.
Business Use Case
For customers who prefer to develop their own solutions, data management can present a significant challenge. Standard data fields and naming conventions become essential for maintaining consistency and avoiding data loss or errors.
For instance, in scenarios where customers use a database like MongoDB Atlas Event Manager, even though Swimlane doesn't provide a direct solution for this specific database, the data still needs to be accurately saved to the database or application. A schema with consistent naming conventions is crucial; mismatches between field names can lead to lost or mishandled records. For customers unfamiliar with TEDS references, it's important to ensure that their applications adhere to correct naming conventions to avoid any data errors and ensure reliable data management across systems.
How to Use TEDS in Your Workflows
Using TEDS in Applications
When building applications that will work with TEDS-based data:
- Follow TEDS Naming Conventions: Use the field keys defined in this reference document when creating application fields. For example, if creating an Alert application, use alert_uid as the field key for the unique identifier, not alertId or alert-id.
- Match Field Types: Ensure your application field types match the TEDS schema types. For example:
- Use String fields for alert_title, alert_description
- Use Date & Time fields for alert_created_timestamp, alert_start_timestamp
- Use Multi-Select or Array fields for alert_categories, alert_impacted_hostnames
- Use Reference fields for nested objects like observables or alert_rules
- Required vs Optional Fields: Mark fields as required based on the TEDS schema requirements. Fields marked as "Required" in TEDS should be required in your application, while "Recommended" and "Optional" fields can be optional.
Using TEDS in Playbooks
When building playbooks that process TEDS-formatted data:
- Apply TEDS Interfaces: Use Turbine Solutions Interfaces that implement TEDS schemas. These interfaces automatically configure your component's input and output schemas to match TEDS standards.
- Reference TEDS Schemas: When configuring record actions, you can reference TEDS-based input schemas to ensure your playbooks accept data in the correct format.
- Data Transformation: Use transformation functions to map incoming data to TEDS field names if your source data uses different naming conventions.
Example Workflow
Here's an example of how TEDS is used in an Alert Triage workflow:
- Alert Ingestion: A webhook receives an alert from a SIEM system
- Schema Application: The alert data is validated against the Alert TEDS schema
- Observable Extraction: Observables (IPs, URLs, file hashes) are extracted and structured using the Observable TEDS schema
- Enrichment: Each observable is enriched using threat intelligence providers, with results following the Enrichment TEDS schema
- Case Creation: A case is created in the Case and Incident Management application using TEDS field names
- Analysis: The case is analyzed using Hero AI or manual review, with all data following TEDS conventions
This standardized approach ensures that data flows seamlessly between different components and systems, regardless of the underlying technology or vendor.
Schema Examples
The following examples show real-world TEDS-formatted data structures used in the SOC Solutions Bundle. These examples demonstrate how TEDS schemas are implemented in practice.
Alert Object Example
Here's a complete Alert object following TEDS conventions:
{
"alert_uid": "splunk-alert-20250115-001234",
"alert_title": "Suspicious PowerShell Execution Detected",
"alert_description": "PowerShell script executed with encoded commands on host WORKSTATION-01",
"alert_severity": "High",
"alert_created_timestamp": "2025-01-15T10:30:00Z",
"alert_start_timestamp": "2025-01-15T10:28:15Z",
"alert_end_timestamp": "2025-01-15T10:30:00Z",
"alert_ingested_timestamp": "2025-01-15T10:30:05Z",
"alert_provider": "Splunk Enterprise",
"alert_organization": "Acme Corporation",
"alert_categories": ["Malware", "Execution"],
"alert_impacted_hostnames": ["WORKSTATION-01"],
"alert_impacted_ip_addresses": ["192.168.1.100"],
"alert_impacted_usernames": ["jdoe"],
"alert_risk_score": 85,
"alert_permalink": "https://splunk.example.com/alerts/001234",
"alert_rules": [
{
"rule_id": "SPL-ALERT-001",
"rule_name": "Suspicious PowerShell Execution",
"rule_description": "Detects PowerShell execution with base64 encoded commands",
"rule_type": "correlation"
}
],
"alert_mitre_attack_tactic_technique": [
{
"tactics": [
{
"uid": "TA0002",
"name": "Execution"
}
],
"technique": {
"uid": "T1059.001",
"name": "PowerShell"
},
"version": "14.1"
}
],
"observables": [
{
"observable_type": "sha256",
"observable_value": "a3b5c7d9e1f2a3b5c7d9e1f2a3b5c7d9e1f2a3b5c7d9e1f2a3b5c7d9e1f2a3b5",
"observable_primary_provider": "VirusTotal",
"observable_primary_verdict": "Malicious",
"observable_primary_timestamp": "2025-01-15T10:31:00Z",
"observable_enrichments": [
{
"enrichment_type": "reputation",
"enrichment_provider": "VirusTotal",
"enrichment_verdict": "Malicious",
"enrichment_timestamp": "2025-01-15T10:31:00Z",
"enrichment_permalink": "https://www.virustotal.com/gui/file/a3b5c7d9..."
}
]
},
{
"observable_type": "ipv4_public",
"observable_value": "203.0.113.45",
"observable_primary_provider": "Recorded Future",
"observable_primary_verdict": "Suspicious"
}
],
"alert_originating_files": [
{
"file_name": "suspicious.ps1",
"file_hashes": [
{
"hash_algorithm": "sha256",
"hash_value": "a3b5c7d9e1f2a3b5c7d9e1f2a3b5c7d9e1f2a3b5c7d9e1f2a3b5c7d9e1f2a3b5"
}
],
"mime_type": "text/plain"
}
],
"raw_alert": {
"splunk_sid": "1234567890.12345",
"index": "security",
"source": "powershell",
"sourcetype": "WinEventLog:Microsoft-Windows-PowerShell/Operational"
}
}Email Object Example
Here's a complete Email object following TEDS conventions:
{
"email_message_id": "<[email protected]>",
"email_from_address": "[email protected]",
"email_to_addresses": ["[email protected]"],
"email_cc_addresses": [],
"email_bcc_addresses": [],
"email_reply_to_addresses": ["[email protected]"],
"email_subject": "Urgent: Action Required on Your Account",
"email_body": "<html><body>Click here to verify your account...</body></html>",
"email_html_body": "<html><body>Click here to verify your account...</body></html>",
"email_text_body": "Click here to verify your account: http://phishing-site.com/verify",
"email_origination_timestamp": "2025-01-15T09:00:00Z",
"email_delivery_timestamp": "2025-01-15T09:00:15Z",
"email_organization": "Example Corp",
"email_headers": [
{
"header_key": "Received",
"header_value": "from mail.malicious-domain.com ([203.0.113.1])"
},
{
"header_key": "X-Mailer",
"header_value": "Phishing Tool v1.0"
}
],
"email_mime_parts": [
{
"mime_type": "text/html",
"is_attachment": false,
"content": {
"base64": "PGh0bWw+..."
}
},
{
"mime_type": "application/pdf",
"is_attachment": true,
"file_name": "invoice.pdf",
"content": {
"base64": "JVBERi0xLjQKJeLjz9MK..."
}
}
],
"observables": [
{
"observable_type": "url",
"observable_value": "http://phishing-site.com/verify",
"observable_primary_provider": "URLHaus",
"observable_primary_verdict": "Malicious",
"observable_primary_timestamp": "2025-01-15T09:05:00Z"
},
{
"observable_type": "ipv4_public",
"observable_value": "203.0.113.1",
"observable_primary_provider": "Recorded Future",
"observable_primary_verdict": "Suspicious"
}
],
"raw_email": "Return-Path: <[email protected]>..."
}Observable Object Example
Here's a complete Observable object with enrichment data:
{
"observable_type": "sha256",
"observable_value": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"observable_metadata": {
"file_name": "malware.exe",
"file_size": 524288,
"mime_type": "application/x-msdownload"
},
"observable_primary_provider": "VirusTotal",
"observable_primary_verdict": "Malicious",
"observable_primary_timestamp": "2025-01-15T10:00:00Z",
"observable_primary_permalink": "https://www.virustotal.com/gui/file/e3b0c442...",
"observable_primary_context": "File hash analysis",
"observable_enrichments": [
{
"enrichment_type": "reputation",
"enrichment_provider": "VirusTotal",
"enrichment_verdict": "Malicious",
"enrichment_timestamp": "2025-01-15T10:00:00Z",
"enrichment_permalink": "https://www.virustotal.com/gui/file/e3b0c442...",
"enrichment_raw_data": "{\"detections\": 45, \"total\": 70}"
},
{
"enrichment_type": "reputation",
"enrichment_provider": "Recorded Future",
"enrichment_verdict": "Malicious",
"enrichment_timestamp": "2025-01-15T10:01:00Z",
"enrichment_context": "Threat intelligence feed"
}
]
}Transformation Example: Raw SIEM Alert to TEDS Alert
This example shows how raw data from a SIEM system is transformed into TEDS format:
Raw Splunk Alert:
{
"_time": "2025-01-15T10:30:00Z",
"sid": "1234567890.12345",
"search_name": "Suspicious PowerShell Execution",
"severity": "high",
"host": "WORKSTATION-01",
"user": "jdoe",
"src_ip": "192.168.1.100",
"file_hash": "a3b5c7d9e1f2a3b5c7d9e1f2a3b5c7d9e1f2a3b5c7d9e1f2a3b5c7d9e1f2a3b5",
"results_link": "https://splunk.example.com/alerts/001234"
}Transformed to TEDS Alert:
{
"alert_uid": "splunk-1234567890.12345",
"alert_title": "Suspicious PowerShell Execution",
"alert_severity": "High",
"alert_created_timestamp": "2025-01-15T10:30:00Z",
"alert_start_timestamp": "2025-01-15T10:30:00Z",
"alert_provider": "Splunk Enterprise",
"alert_impacted_hostnames": ["WORKSTATION-01"],
"alert_impacted_usernames": ["jdoe"],
"alert_impacted_ip_addresses": ["192.168.1.100"],
"alert_permalink": "https://splunk.example.com/alerts/001234",
"observables": [
{
"observable_type": "sha256",
"observable_value": "a3b5c7d9e1f2a3b5c7d9e1f2a3b5c7d9e1f2a3b5c7d9e1f2a3b5c7d9e1f2a3b5"
}
],
"raw_alert": {
"_time": "2025-01-15T10:30:00Z",
"sid": "1234567890.12345",
"search_name": "Suspicious PowerShell Execution",
"severity": "high",
"host": "WORKSTATION-01",
"user": "jdoe",
"src_ip": "192.168.1.100",
"file_hash": "a3b5c7d9e1f2a3b5c7d9e1f2a3b5c7d9e1f2a3b5c7d9e1f2a3b5c7d9e1f2a3b5",
"results_link": "https://splunk.example.com/alerts/001234"
}
}Key Transformation Steps:
- Map sid → alert_uid (with prefix for uniqueness)
- Map search_name → alert_title
- Normalize severity → alert_severity (lowercase to title case)
- Map _time → alert_created_timestamp and alert_start_timestamp
- Extract file_hash → create Observable object in observables array
- Map host, user, src_ip → respective alert_impacted_* arrays
- Preserve original data in raw_alert field
Best Practices
Field Naming Consistency
- Always use lowercase: Field keys must be lowercase (e.g., alert_uid, not Alert_UID or alertUid)
- Use underscores: Separate words with underscores (e.g., alert_created_timestamp, not alertCreatedTimestamp or alert-created-timestamp)
- Follow TEDS conventions: Use the exact field keys defined in this reference document to ensure compatibility
- Avoid abbreviations: Unless they're commonly recognized (e.g., ip, os, geo), spell out full words
Schema Compliance
- Validate against schemas: When building custom solutions, validate your data structures against TEDS schemas before deployment
- Handle optional fields: Design your workflows to handle missing optional fields gracefully
- Required fields: Always include required fields; missing required fields will cause validation errors
- Type matching: Ensure data types match the schema definitions (e.g., arrays for multi-value fields, datetime for timestamps)
Integration Tips
- Start with SOC Solutions: If you're new to TEDS, start by using the SOC Solutions Bundle, which already implements TEDS schemas correctly
- Use Interfaces: Apply Turbine Solutions Interfaces to your components to automatically get TEDS-compliant schemas
- Test transformations: When mapping data from external sources to TEDS format, test your transformations thoroughly
- Document deviations: If you need to extend TEDS schemas, document your extensions clearly
Common Anti-Patterns
Understanding what not to do is just as important as following best practices. The following examples show common mistakes and how to correct them.
❌ Anti-Pattern: Incorrect Field Naming
Problem: Using camelCase or mixed case instead of snake_case.
❌ WRONG:
{
"alertUid": "alert-12345",
"alertCreatedTimestamp": "2025-01-15T10:30:00Z",
"alertImpactedHostnames": ["host1", "host2"]
}✅ CORRECT:
{
"alert_uid": "alert-12345",
"alert_created_timestamp": "2025-01-15T10:30:00Z",
"alert_impacted_hostnames": ["host1", "host2"]
}Why it fails: Field names are case-sensitive. Components expecting alert_uid will not find alertUid, causing data to be lost or validation errors.
❌ Anti-Pattern: Wrong Field Types
Problem: Using strings for array fields or incorrect data types.
❌ WRONG:
{
"alert_categories": "Phishing, Malware",
"alert_impacted_hostnames": "WORKSTATION-01",
"alert_risk_score": "85"
}✅ CORRECT:
{
"alert_categories": ["Phishing", "Malware"],
"alert_impacted_hostnames": ["WORKSTATION-01"],
"alert_risk_score": 85
}Why it fails: Array fields must be arrays, not comma-separated strings. Integer fields must be numbers, not strings. Type mismatches cause validation errors and prevent proper data processing.
❌ Anti-Pattern: Missing Required Fields
Problem: Omitting required fields from TEDS objects.
❌ WRONG:
{
"alert_title": "Suspicious Activity",
"alert_severity": "High"
}✅ CORRECT:
{
"alert_uid": "alert-12345",
"alert_title": "Suspicious Activity",
"alert_severity": "High",
"raw_alert": {}
}Why it fails: Required fields (alert_uid and raw_alert for Alert objects) must always be present. Missing required fields cause schema validation failures and prevent data ingestion.
❌ Anti-Pattern: Incorrect Nested Object Structure
Problem: Not following the correct structure for nested objects like observables or enrichments.
❌ WRONG:
{
"observables": {
"observable_type": "ipv4_public",
"observable_value": "203.0.113.1"
}
}✅ CORRECT:
{
"observables": [
{
"observable_type": "ipv4_public",
"observable_value": "203.0.113.1"
}
]
}Why it fails: observables must be an array, even for a single observable. Using an object instead of an array causes type validation errors.
❌ Anti-Pattern: Incorrect Observable Type Values
Problem: Using invalid values for observable_type field.
❌ WRONG:
{
"observable_type": "IP",
"observable_value": "203.0.113.1"
}✅ CORRECT:
{
"observable_type": "ipv4_public",
"observable_value": "203.0.113.1"
}Why it fails: observable_type must use exact TEDS values: ipv4_public, ipv4_private, ipv6_public, ipv6_private, url, domain, email, sha256, sha1, md5, or file. Invalid types cause validation errors and prevent observable processing.
❌ Anti-Pattern: Date Format Inconsistencies
Problem: Using incorrect date/time formats.
❌ WRONG:
{
"alert_created_timestamp": "2025-01-15 10:30:00",
"alert_start_timestamp": "Jan 15, 2025 10:30 AM"
}✅ CORRECT:
{
"alert_created_timestamp": "2025-01-15T10:30:00Z",
"alert_start_timestamp": "2025-01-15T10:28:15Z"
}Why it fails: All datetime fields must use ISO 8601 format with UTC timezone (Z suffix). Incorrect formats cause parsing errors and time-based queries to fail.
❌ Anti-Pattern: Mixing Naming Conventions
Problem: Inconsistent naming within the same object.
❌ WRONG:
{
"alert_uid": "alert-12345",
"alertTitle": "Suspicious Activity",
"alert-created-timestamp": "2025-01-15T10:30:00Z"
}✅ CORRECT:
{
"alert_uid": "alert-12345",
"alert_title": "Suspicious Activity",
"alert_created_timestamp": "2025-01-15T10:30:00Z"
}Why it fails: All fields must consistently use snake_case. Mixing conventions causes some fields to be unrecognized and data to be lost.
Troubleshooting Common Issues
Data Not Appearing in Applications
Problem: Data ingested via TEDS schemas isn't appearing in your application records.
Solutions:
- Verify field keys match TEDS conventions exactly (case-sensitive, underscore-separated)
- Check that field types match the TEDS schema (e.g., array fields for multi-value data)
- Ensure required fields are present in your data
- Validate your data structure against the TEDS schema before ingestion
Schema Validation Errors
Problem: Playbook actions fail with schema validation errors.
Solutions:
- Review the error message to identify which field is causing the issue
- Compare your data structure to the TEDS schema definition
- Check for typos in field names (e.g., alert_uid vs alert_ui)
- Ensure nested objects follow the correct structure (e.g., Observable objects within arrays)
Integration Compatibility Issues
Problem: Components or connectors aren't working together as expected.
Solutions:
- Verify all components use the same TEDS interface version
- Check that input/output schemas match between connected components
- Review the Turbine Solutions Interfaces documentation to ensure you're using compatible interfaces
- Test components individually before integrating them into larger workflows
Observable Enrichment Failures
Problem: Observable enrichments are not being applied or are missing from results.
Solutions:
- Verify observable_type uses valid TEDS values (e.g., ipv4_public, not IP or ip)
- Ensure observable_value is properly formatted (e.g., valid IP address, URL, or hash)
- Check that enrichment provider components are correctly configured
- Verify enrichment results follow the Enrichment schema structure:
{
"enrichment_type": "reputation",
"enrichment_provider": "VirusTotal",
"enrichment_verdict": "Malicious",
"enrichment_timestamp": "2025-01-15T10:00:00Z"
}- Review playbook execution logs to identify which enrichment step failed
Date/Time Format Issues
Problem: Timestamp fields are not being recognized or parsed correctly.
Solutions:
- Ensure all datetime fields use ISO 8601 format: YYYY-MM-DDTHH:mm:ssZ
- ✅ Correct: "2025-01-15T10:30:00Z"
- ❌ Incorrect: "2025-01-15 10:30:00" or "Jan 15, 2025 10:30 AM"
- Verify timezone is specified (use Z for UTC or +HH:mm for other timezones)
- Check that datetime fields are strings, not Date objects in JSON
- For relative times (e.g., "4 hours ago"), ensure your transformation logic converts them to absolute timestamps before storing
Array vs Single Value Confusion
Problem: Data appears as a single value when it should be an array, or vice versa.
Solutions:
- Always use arrays for multi-value fields, even when there's only one value:
{
"alert_categories": ["Phishing"], // ✅ Array with one item
"alert_impacted_hostnames": ["host1", "host2"] // ✅ Array with multiple items
}- Never use comma-separated strings:
{
"alert_categories": "Phishing, Malware" // ❌ Wrong - should be array
}- Check field definitions in your application to ensure array fields are configured as Multi-Select or Array types
- Use transformation functions to convert comma-separated strings to arrays if needed
Nested Object Structure Problems
Problem: Nested objects like observables, enrichments, or detection rules are not structured correctly.
Solutions:
- Verify nested arrays contain objects, not primitives:
{
"observables": [
{
"observable_type": "ipv4_public", // ✅ Object in array
"observable_value": "203.0.113.1"
}
]
}- Ensure required fields are present in nested objects (e.g., observable_type and observable_value for Observable objects)
- Check that nested object structures match the TEDS schema exactly (field names, types, nesting levels)
- Use the SOC Solutions Bundle interfaces as reference implementations
Field Name Typos and Case Sensitivity
Problem: Fields are not being recognized due to typos or case mismatches.
Solutions:
- Double-check field names against the TEDS Reference document (field names are case-sensitive)
- Common typos to avoid:
- alert_uid vs alert_ui (missing 'd')
- observable_type vs observableType (wrong case)
- email_from_address vs email_from (missing '_address')
- Use IDE autocomplete or schema validation tools to catch typos early
- Compare your field names character-by-character with the schema definitions
Missing Raw Data Fields
Problem: The raw_alert or raw_email field is missing or incorrectly formatted.
Solutions:
- Always include raw_alert (for Alert objects) or raw_email (for Email objects) as required fields
- Store the complete original payload in the raw field:
{
"alert_uid": "alert-12345",
"raw_alert": {
"original_siem_data": {...},
"ingestion_metadata": {...}
}
}- Ensure raw_alert is a JSON object, not a string (unless your system requires string serialization)
- Preserve all original data to enable forensic analysis and debugging
Guidelines for Attribute Names
- Attribute names must be valid UTF-8 sequences.
- Use lowercase for all attribute names.
- Separate words with underscores.
- Use underscores as special characters.
- Apply present tense unless the attribute refers to historical information.
- Use singular or plural forms appropriately to match the field content.
- Example: Use "events_per_sec" instead of "event_per_sec."
- If an attribute represents multiple entities, use a pluralized name and set the value type as an array.
- Example: "process.loaded_modules" stores a list of module names.
- Avoid word repetition.
- Example: Instead of "host.host_ip," use "host.ip."
- Minimize abbreviations, with exceptions for commonly recognized terms (for example, "ip," "os," "geo").
Attribute Levels
The event schema categorizes attributes into three levels: Core, Optional, and Reserved.
- Core Attributes
- Core attributes are common across all use cases and are designated as either Required or Recommended.
- Optional Attributes
- Optional attributes are relevant to more specific use cases or allow flexibility based on the context. These are marked as Optional.
- Reserved Attributes
- Reserved attributes are managed by the logging system and should not be used in event data. They are labeled as Reserved.
Extending the Schema
The Open Cybersecurity Schema Framework allows for extensions through additional attributes, objects, and event classes.
To extend the schema:
- Create a new directory mirroring the top-level schema directory structure.
- This directory can include the following files and subdirectories:
- categories.json: Defines a new event category and reserves a range of class IDs.
- dictionary.json: Defines new attributes.
- events/: Contains definitions for new event classes.
- objects/: Holds definitions for new objects.
Inputs for different objects
Here is a list of objects and their corresponding inputs:
Alert: SIEM/XDR Alert
A SIEM (Security Information and Event Management) or XDR (Extended Detection and Response) alert serves as an early warning system for potential security incidents within an organization's IT environment. By aggregating and analyzing log data, network activity, endpoint behaviors, and user actions, a SIEM or XDR platform can detect suspicious or malicious activities and generate alerts for security teams to investigate and respond.
Name | Type | Key | Requirement | Description |
|---|---|---|---|---|
Description | String | alert_description | Recommended | Provides a brief summary of the alert's purpose, detailing the nature of the alert and the significance of the event or activity it highlights. |
MITRE Attack Tactic/Technique | Array | alert_mitre_attack_tactic_technique | Optional | Specifies MITRE ATT&CK tactics and techniques associated with the alert, giving context to the type of threat involved. This can help analysts map the attack to known adversary behaviors. |
Title | String | alert_title | Recommended | Name or title of the alert |
Category | String Array | alert_categories | Optional | Defines the category or classification of the alert, such as “Phishing,” “Malware,” or “Unauthorized Access,” to group alerts for streamlined analysis. |
Created Timestamp | Datetime | alert_created_timestamp | Recommended | Indicates the date and time when the alert was first generated, providing the origin of the alert timeline. |
End Timestamp | Datetime | alert_end_timestamp | Recommended | Specifies when the alert’s triggering activity ended, helping define the duration and scope of the security event. |
Impacted Hostnames | String Array | alert_impacted_hostnames | Optional | Lists hostnames of devices affected by the alert, which helps identify which systems need review or remediation. |
Impacted IP Addresses | IP Address Array | alert_impacted_ip_addresses | Optional | Lists IP addresses associated with impacted devices, aiding in network-level investigation and isolation efforts. |
Impacted Usernames | String Array | alert_impacted_usernames | Optional | Provides usernames of users impacted by the alert, helping analysts understand who may be at risk or targeted. |
Ingested Timestamp | Datetime | alert_ingested_timestamp | Recommended | Indicates when the alert was ingested into the system, useful for tracking alert flow within security monitoring tools. |
Organization | String | alert_organization | Optional | Identifies the organization impacted, important for multi-tenant or MSSP setups. |
Originating Files | File Array | alert_originating_files | Optional | References files involved in the alert, helping analysts pinpoint malicious files or artifacts for review. |
Permalink | URL String | alert_permalink | Optional | Provides a direct link to the alert source for quick access to detailed information. |
Provider | String | alert_provider | Optional | Identifies the tool or service that generated the alert, helping analysts understand the source’s reliability and capabilities. |
Risk Score | Integer | alert_risk_score | Optional | Reflects the alert’s risk score as determined by the alerting system, aiding in prioritization based on perceived threat level. |
Detection Rules | Detection Rule Array | alert_rules | Recommended | Lists detection rules that triggered the alert, providing insight into the criteria met for the alert generation. |
Severity | String | alert_severity | Recommended | Describes the alert’s severity, helping analysts prioritize alerts based on potential impact (example, High, Medium, Low). |
Start Timestamp | Datetime | alert_start_timestamp | Recommended | Indicates when the activity that triggered the alert began, setting the start point of the incident timeline. |
Alert UID | String | alert_uid | Required | Provides a unique identifier for the alert, essential for tracking, referencing, and correlating alerts. |
Observables | Observable Array | observables | Recommended | Contains indicators of compromise (IOCs) such as hashes, URLs, or IPs linked to the alert, vital for further investigation. |
Raw Alert | JSON | raw_alert | Required | Raw JSON format of the alert |
Alert Triage Ingestion
This solution is designed to ingest alerts from various alerting tools, such as SIEM, EDR, and AV systems. It enriches the alerts with data from third-party services like VirusTotal, URLHaus, and Recorded Future, then creates cases for analysts to review, collaborate on, and resolve. The goal is to automate the SOC team's handling of the constant stream of alerts, driving incidents to remediation or closing invalid ones. This results in faster remediation, reduced costs in human resources, and an overall more secure environment.
Name | Type | Key | Requirement | Description |
|---|---|---|---|---|
organization | String | organization solutions | Optional | The organization impacted by the alert |
start_time | Datetime | start_time solutions | Optional | The starting point for searching alerts (example, 4 hours ago, -30 minutes) |
Attack
The attack object defines the specific techniques and corresponding tactics involved in an attack. It provides detailed information about the methods used and references the relevant version of the ATT&CK Matrix™
Monitor the network data for uncommon data flows. Processes utilizing the network do not normally have network communication or have never been seen before are suspicious.
Name | Type | Key | Requirement | Description |
|---|---|---|---|---|
tactics | Tactic Array | Tactics | Recommended | A list of tactic IDs/names linked to the attack technique, as defined by the ATT&CK Matrix™. |
technique | String Array | Technique | Recommended | The specific attack technique used. |
version | String | Version | Recommended | The version of the ATT&CK Matrix™ framework used. |
Cloud Storage Query Input
Cloud Storage Query Input is a feature that enables users to perform customized searches for files within a cloud storage provider's system. By inputting specific parameters or keywords, users can filter files based on attributes like file name, type, date, and other metadata. This query input functionality is essential for quickly locating files within vast repositories, optimizing access times, and improving data management efficiency, especially in enterprise environments such as TEDS
Name | Type | Key | Requirement | Description |
|---|---|---|---|---|
cloud_storage_query | String | cloud_storage_query | Recommended | A query string for searching files within a cloud storage provider's system. |
Content
File-like content, attachment, or bytearray
Caption | Name | Requirement | Type | Description |
|---|---|---|---|---|
base64 | base64 | Optional | Byte String | The content encoded in base64 format. |
turbine_attachment | turbine_attachment | Optional | Turbine Attachment | The content formatted as a Turbine attachment. |
Detection Rule
Detection Rule is a configurable rule designed to trigger alerts when specific conditions or anomalies are detected within a system. It includes attributes such as a unique ID, name, description, and type, allowing organizations to categorize and describe the rule’s purpose and scope, enabling more effective monitoring and response to potential threats.
Caption | Name | Requirement | Type | Description |
|---|---|---|---|---|
rule_description | rule_description | Optional | String | The description of the detection rule |
rule_id | rule_id | Recommended | String | An unique ID for the detection rule |
rule_name | rule_name | Recommended | String | The name of the detection rule |
rule_type | rule_type | Optional | String | The type of detection rule |
The Email object represents essential metadata related to an email, including details about the sender, recipients, and email's direction. It contains fields for tracking various email components such as BCC, CC, subject, body, timestamps, headers, and observables, enabling comprehensive analysis and record-keeping of email communications.
Caption | Name | Requirement | Type | Description |
|---|---|---|---|---|
email_bcc_address | email_bcc_addresses | Optional | Email Address Array | Lists the BCC recipients in the email |
email_body | email_body | Recommended | String | Contains the email body, showing the HTML version if available or the text version otherwise |
email_cc_address | email_cc_addresses | Optional | Email Address Array | Lists the CC recipients in the email |
email_delivery_timestamp | email_delivery_timestamp | Optional | Datetime | Records the delivery time of the email |
email_from_address | email_from_address | Required | Email Address | Shows the email address in the From header |
email_headers | email_headers | Optional | Header Array | Provides all email headers as key/value pairs |
email_html_body | email_html_body | Optional | String | Contains the HTML part of the email, as displayed in an email client |
email_message_id | email_message_id | Required | String | Shows the Message-ID header |
email_mime_parts | email_mime_parts | Optional | MIME Part Array | Lists the non-multipart MIME parts of the email, excluding any part identified as the body |
email_organization | email_organization | Optional | String | Identifies the recipient organization |
email_origination_timestamp | email_origination_timestamp | Required | Datetime | Records the time from the Date header when the email was sent |
email_reply_to_address | email_reply_to_addresses | Optional | Email Address Array | Lists the Reply-To addresses |
email_subject | email_subject | Recommended | String | Displays the Subject header |
email_text_body | email_text_body | Optional | String | Contains the plain text part of the email, as displayed in an email client |
email_to_address | email_to_addresses | Required | Email Address Array | Lists the email recipients in the To header |
observables | observables | Recommended | Observable Array | Identifies any possible indicators of compromise within the email |
raw_email | raw_email | Recommended | String | Displays the raw email content as it was received by the server |
Enrichment
The Enrichment object adds valuable context to event attributes, providing metadata such as the provider, type, timestamp, raw data, and a link to the original source. It also includes a reputation verdict (example, benign, malicious, suspicious, or unknown) to quickly assess the nature of the enriched data and aid in detailed event analysis.
Caption | Name | Requirement | Type | Description |
|---|---|---|---|---|
enrichment_context | enrichment_context | Optional | String | enrichment_context |
enrichment_permalink | enrichment_permalink | Optional | URL String | A link to the original enrichment source |
enrichment_provider | enrichment_provider | Recommended | String | The enrichment data provider name. |
enrichment_raw-data | enrichment_raw_data | Optional | String | The raw enrichment as returned from the enrichment source |
enrichment_timestamp | enrichment_timestamp | Recommended | Datetime | Datetime the enrichment was retrieved |
enrichment_type | enrichment_type | Required | String | The enrichment type (only one used currently) * reputation |
enrichment_verdict | enrichment_verdict | Optional | String | The reputation verdict * Benign * Malicious * Suspicious * Unknown |
Error
The Error object captures details about errors encountered during processing, including essential information to aid in troubleshooting. It includes fields like the error provider, which specifies the tool, service, or software source of the error; error result, offering a description of the error; and error status, indicating the current status of the error, allowing for efficient identification and resolution of issues.
Caption | Name | Requirement | Type | Description |
|---|---|---|---|---|
error_provider | error_provider | Optional | String | The name of the tool, service, or software that generated the error |
error_result | error_result | Optional | String | The description of the error |
error_status | error_status | Optional | String | The error status |
File
The File object provides comprehensive details about files, folders, links, and mounts, including relevant metadata and potential reputation information for security analysis. Key attributes include the file's content, access times (created, accessed, and modified), file name and encoding, unique file hashes for identification, MIME type, file size, and any observable indicators of compromise, supporting robust file tracking and management across systems.
Caption | Name | Requirement | Type | Description |
|---|---|---|---|---|
content | content | Recommended | Content | Provides the actual content of the file |
file_accessed | file_accessed | Optional | Datetime | Records when the file was last accessed |
file_created | file_created | Optional | Datetime | Records when the file was created |
file_hashes | file_hashes | Recommended | File Hash Array | Identifies the file with unique hashes/fingerprints |
file_modified | file_modified | Optional | Datetime | Records when the file was last modified |
file_name | file_name | Recommended | String | Displays the file name |
file_name_enc | file_name_enc | Optional | String | Indicates the text encoding of the file name (example, utf-8, cp-1252) |
file_size | file_size | Optional | Integer | Shows the file size in bytes |
mime_type | mime_type | Recommended | String | Specifies the MIME type of the file |
observables | observables | Optional | Observable Array | Lists any possible indicators of compromise in the file |
File Hash
The File Hash object provides a unique digital fingerprint for a file, allowing verification of its integrity and authenticity. It includes the hash algorithm name, specifying which hashing method (example, MD5, SHA-256) was used, and the hash value, which is the unique code generated by the hash function, ensuring files can be consistently identified and monitored for changes.
Caption | Name | Requirement | Type | Description |
|---|---|---|---|---|
Algorithm Name | hash_algorithm | Required | String | Specifies the name of the hashing algorithm |
Hash Value | hash_value | Required | File Hash | Provides the unique value returned from the hash function |
Header
The Header object represents key-value pairs within HTTP or Email headers, containing essential metadata for communication protocols. It includes the header key, which specifies the name of the header (example, "Content-Type" for HTTP or "Subject" for Email), and the header value, which holds the corresponding information, such as the content type, sender, or other protocol-specific data, facilitating structured data transmission and analysis.
Caption | Name | Requirement | Type | Description |
|---|---|---|---|---|
SMTP/HTTP Header value | header_value | Required | String | Shows the value of the header |
SMTP/HTTP header key | header_key | Required | String | Specifies the name of the header |
MIME Part
The MIME Part object represents a single, non-multipart section of a MIME-encoded email, containing data such as text, images, or attachments. It includes fields like content, which stores the actual data of the MIME part; file name, which is derived from the content-disposition if available; is attachment, indicating whether the MIME part is an attachment or inline content; and mime type, defining the media type (example, "text/plain" or "image/jpeg") for proper handling by email clients.
Caption | Name | Requirement | Type | Description |
|---|---|---|---|---|
content | content | Required | Content | Contains the actual contents of the MIME part |
file_name | file_name | Optional | String | Extracts the file name from content-disposition if present |
is attachment | is_attachment | Optional | Boolean | Indicates whether the MIME part is an attachment or inline content based on content-disposition |
mime_type | mime_type | Required | String | Defines the MIME type of the part |
Observable
The Observable object serves as a key reference element, capturing related data that appears across multiple points in an event, making it central for linking information and context. Key fields include observable enrichments, which is an array of enrichment data applied to the observable; observable metadata, used if the observable is composite (example, a file); primary context details from the main enrichment source, such as provider name, timestamp, and reputation verdict; observable type, defining the kind (example, URL, file, email); and observable value, which contains either a simple identifier (example, IP address) or a unique string for complex observables (example, SHA256 hash for files).
Caption | Name | Requirement | Type | Description |
|---|---|---|---|---|
observable_enrichments | observable_enrichments | Optional | Enrichment Array | Lists any enrichments that have been applied to the observable |
observable_metadata | observable_metadata | Optional | JSON | Populates information if the observable is a composite type, like a file |
observable_primary_context | observable_primary_context | Optional | String | Identifies the enrichment context from the primary enrichment source |
observable_primary_permalink | observable_primary_permalink | Optional | URL String | Provides a link to the original enrichment source identified as primary |
observable_primary_provider | observable_primary_provider | Optional | String | Names the enrichment source identified as primary |
observable_primary_timestamp | observable_primary_timestamp | Optional | Datetime | Records when the enrichment was retrieved from the primary enrichment source |
observable_primary_verdict | observable_primary_verdict | Optional | String | States the verdict provided by the primary enrichment source |
observable_type | observable_type | Required | String | Specifies the type of observable domain * email * file * ipv4_private * ipv4_public * ipv6_private * ipv6_public * md5 * sha1 * sha256 * url |
observable_value | observable_value | Required | String | Contains the value of the observable for simple types or a unique identifier for composite types (eg. the IP address). For a composite types, a unique string that identifies the observable (eg. SHA256 hash for file observables) |
Phishing Email Report
The Phishing Email Report object captures comprehensive details about a suspected phishing email, providing critical information for investigation and security response. It includes fields like report description for incident details, reporter information, and essential email components such as sender, recipients (To, CC, BCC), delivery timestamp, subject, and content (both HTML and text), along with observables for any compromise indicators, and raw email data as received by the server to support thorough analysis.
Caption | Name | Requirement | Type | Description |
|---|---|---|---|---|
Report Description | report_description | Optional | String | Describes the reported phishing incident |
Reporter | reporter | Optional | User | Identifies the user who submitted the report |
email_bcc_address | email_bcc_addresses | Optional | Email Address Array | Lists the recipients in the BCC header |
email_body | email_body | Recommended | String | Contains the email body (displays the HTML body if present, otherwise the text body) |
email_cc_address | email_cc_addresses | Optional | Email Address Array | Lists the CC recipients |
email_delivery_timestamp | email_delivery_timestamp | Optional | Datetime | Records the delivery time of the email |
email_from_address | email_from_address | Required | Email Address | Shows the email address in the From header |
email_html_body | email_html_body | Optional | String | Contains the HTML part of the email, as displayed in an email client |
email_message_id | email_message_id | Required | String | Shows the Message-ID header |
email_mime_parts | email_mime_parts | Optional | MIME Part Array | Lists the non-multipart MIME parts of the email, excluding the main body |
email_organization | email_organization | Optional | String | Identifies the recipient organization |
email_origination_timestamp | email_origination_timestamp | Required | Datetime | Shows the time from the Date header indicating when the email was sent |
email_reply_to_address | email_reply_to_addresses | Optional | Email Address Array | Lists the Reply-To addresses |
email_subject | email_subject | Recommended | String | Shows the Subject header |
email_text_body | email_text_body | Optional | String | Contains the plain text part of the email, as displayed in an email client |
email_to_address | email_to_addresses | Required | Email Address Array | Lists the email recipients as shown in the To header |
observables | observables | Recommended | Observable Array | Identifies any possible indicators of compromise within the email |
raw_email | raw_email | Recommended | String | Displays the raw email as it was received by the server |
Phishing Triage Email Ingestion
The Phishing Triage Email Ingestion process defines the parameters for processing and assessing incoming phishing emails, supporting proactive threat response. Key inputs include the organization field, specifying the affected organization, and start time, which determines how far back to search for relevant phishing reports, allowing for focused and time-sensitive analysis of potential phishing threats.
Caption | Name | Requirement | Type | Description |
|---|---|---|---|---|
organization solutions | organization | Optional | String | Specifies the organization affected by the alert |
start_time solutions | start_time | Optional | Datetime | Sets how far back to search for phishing email reports (example, 4 hours ago, -4 hours, -30 minutes) |
Simple Observable
The Simple Observable object acts as a key reference point within an event, containing data that is often repeated across multiple parts of the event. It includes fields such as observable metadata, populated when the observable is a complex type (like a file), observable type, which defines the kind of data (example, domain, email, IP), and observable value, which provides a unique identifier or value, like an IP address for simple observables or a SHA256 hash for composite ones.
Caption | Name | Requirement | Type | Description |
|---|---|---|---|---|
observable_metadata | observable_metadata | Optional | JSON | Populates with data if the observable is a composite type, such as a file |
observable_type | observable_type | Required | String | Specifies the type of observable such as: * domain * email * file * ipv4_private * ipv4_public * ipv6_private * ipv6_public * md5 * sha1 * sha256 * url |
observable_value | observable_value | Required | String | Provides the value of the observable for simple types or a unique identifier for composite types. |
Status
The Status object provides detailed information about the current state of a tool, software, or service, capturing both the outcome and descriptive details for troubleshooting or logging. Key fields include status messages, an array of log-like messages, status provider, identifying the source of the status, status raw, containing the unprocessed status in JSON format, status description, which summarizes the status, and status success, indicating whether the status reflects success or an error.
Caption | Name | Requirement | Type | Description |
|---|---|---|---|---|
status_messages | status_messages | Optional | String Array | Lists message strings, similar to log entries |
status_provider | status_provider | Recommended | String | Identifies the tool, software, or service returning the status |
status_raw | status_raw | Optional | JSON | Contains the raw status data as received from the provider |
status_description | status_description | Recommended | String | Summarizes the status |
status_success | status_success | Required | Boolean | Indicates if the status reflects a successful return or an error |
Tactic
The Tactic object identifies specific tactics linked to an attack technique, as outlined by the ATT&CK Matrix™, providing a standardized approach to describing adversarial behaviors. It includes the name of the tactic, giving a descriptive label, and a unique ID (UID), which serves as a standardized identifier for the tactic, enabling precise tracking and categorization of tactics used in cybersecurity threat analysis.
Caption | Name | Requirement | Type | Description |
|---|---|---|---|---|
Name | name | Optional | String | |
Unique ID | uid | Required | String |
Technique
The Technique object represents a specific ATT&CK Matrix™ technique used in an attack, detailing how adversaries may achieve certain objectives. It includes fields like name, which gives the descriptive label of the technique (example, "Drive-by Compromise"), and unique ID (UID), a standardized identifier (example, "T1189"), which allows for consistent referencing and analysis of attack methods.
Caption | Name | Requirement | Type | Description |
|---|---|---|---|---|
Name | name | Optional | String | |
Unique ID | uid | Required | String |
User
The User object represents a user account with identifying information for secure and personalized interactions within a system. It includes key attributes such as user email address, providing the user’s email for contact and identification, user ID, a unique identifier for distinguishing each user account, and user name, the username associated with the account, supporting authentication and user-specific activity tracking.
Caption | Name | Requirement | Type | Description |
|---|---|---|---|---|
email_address | user_email_address | Recommended | Email Address | Provides the user’s email address |
user_id | user_id | Recommended | String | Assigns a unique ID to the user |
user_name | user_name | Recommended | String | Specifies the username associated with the account |