Skip to content

Detection Engineers

You have just written an analytic that detects some suspicious activity and you would like your Security Operations Center (SOC) to benefit from it. In Howler, an event of interest is called a hit. The term alert is reserved for hits that require triage.

To create a new hit, produce a JSON object in which you have normalized the event data to Elastic Common Schema (ECS). We do this so that triage analysts have a single schema to learn regardless of the source of alerts - this will make their job much easier.

Howler-Specific Fields

Next, you need to populate some fields specific to Howler:

Required Fields

Field Description Notes
howler.analytic The actual product doing detection. Some analytics will run many distinct detections. Must contain only letters and spaces for best practices

Auto-Generated Fields

These fields are automatically populated by Howler if not provided:

Field Description Default Behavior
howler.id A unique identifier for the hit Automatically generated UUID
howler.hash A hash used for deduplicating hits Auto-generated from analytic, detection, and raw data if not provided
event.created Timestamp when the event was created Set to current time if not provided

While not strictly required, these fields are strongly recommended for effective triage:

Field Description Default Notes
howler.detection A short, unique identifier for the specific detection None Should contain only letters and spaces for best practices
howler.outline.threat The identifier that best represents the attacker None Could be an IP, email address, etc.
howler.outline.target The identifier that best represents the victim None An IP, domain, email address, etc.
howler.outline.indicators A free-form list of indicators of compromise (IoC) Empty list Typically IPs, domains, and hashes
howler.outline.summary An executive summary explaining the detected activity None Describe the event assuming the detection is correct
howler.data A list of raw event data before normalization Empty list Makes it easier for analysts to investigate outside of Howler
howler.escalation The escalation level of the hit hit Valid values: miss, hit, alert, evidence
howler.status The current status of the hit open Valid values: open, in-progress, on-hold, resolved
howler.scrutiny Level of scrutiny applied to the hit unseen Valid values: unseen, surveyed, scanned, inspected, investigated

Escalation Levels

Howler uses escalation levels (howler.escalation) to categorise hits:

  • miss - The event is assessed to not be related to detection (false-positive).
  • hit - (default) The event might not be very reliable without additional context.
  • alert - The event should be assessed by a triage analyst.
  • evidence - The event was assessed as related to the detection (true-positive).

You may promote some hits to alert immediately at creation time if the expectation is that all hits will be worth triaging.

Once you have completed the JSON object, use the Howler client to create a new hit. That hit will be immediately available to triage analysts from the Howler UI.

Example: Creating a Hit

First, ensure you have the Howler client installed and some way to authenticate with Howler (see Authentication & Connection for details).

from howler_client import get_client
from hashlib import sha256

# Connect to Howler
client = get_client("https://your-howler-instance.com", apikey=(USERNAME, APIKEY))

# Create a hit
hit = {
    "howler": {
        "analytic": "Suspicious Login Detector",
        "detection": "Spike in Failed Logins",
        "hash": sha256(b"user123-2024-10-22-failed-logins").hexdigest(),
        "escalation": "alert",  # Promote to alert for triage
        "outline": {
            "threat": "203.0.113.42",
            "target": "user123@example.com",
            "indicators": ["203.0.113.42"],
            "summary": "User account experienced 15 failed login attempts from a single IP in 5 minutes",
        },
        "data": [{"raw_event": "original_log_data_here"}],
    },
    "source": {"ip": "203.0.113.42"},
    "user": {"email": "user123@example.com"},
    "event": {"category": ["authentication"], "outcome": "failure"},
}

response = client.hit.create(hit)
print(f"Created hit: {response['valid'][0]['id']}")

For more examples and detailed usage, see the Client Development Guide.

Analytics Page

The Analytics section of the Howler UI provides a support page for analytics and individual detections. It contains useful information for both the author of a analytic or detection as well as the triage analysts who are investigating the hits.

Overview

Here, you are encouraged to provide documentation of your analytic in Markdown. This should provide more details about how the analytic or detection works, what it's looking for and how to validate the hits.

Metrics are automatically generated to give insights on the performance. A very high false-positive rate might be a sign that detection needs improvement. On the other hand, a high true-positive rate might warrant that hits be automatically promoted to alerts.

Comments

In this tab, users can leave feedback about an analytic or detection. Consider this your end-user's line of communication with you.

Hit Comments

From here, you can review all of the comments left on specific hits to better understand what triage analysts are signaling to each other.

Notebooks

If your triage analysts are frequently needing to investigate alerts outside of Howler, you can link to a Jupyter Notebook. That means a button will appear in the Howler UI. When a user clicks the button, they will be taken to JupyterHub with the specified Notebook open and the specific hit loaded, allowing the queries to be pre-populated with relevant values.

Triage Settings

Configure which assessment options are valid for your analytic. For example, if your analytic only detects malicious activity, you might limit assessments to compromise, attempt, or mitigated - excluding options like false-positive or legitimate that don't make sense for your detection logic.

This helps guide analysts toward appropriate assessments and maintains consistency in how hits are triaged.

  • Client Development Guide - Comprehensive guide on using the Howler Python client, including installation, authentication, and advanced hit operations
  • Elastic Common Schema (ECS) - Official Elastic documentation for the ECS field reference and guidelines
  • Hit Schema Reference - View the complete Howler hit schema in your Howler instance under Help → Hit Schema
  • API Documentation - Interactive API documentation for your Howler instance (replace with your actual URL)