Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Intelligence Overview

Arbitraitor’s intelligence system matches artifacts and indicators against threat intelligence feeds to improve detection accuracy.

How intelligence works

Artifact or indicator
       │
       ▼
┌──────────────────┐
│ Intelligence      │
│ Pipeline          │
│                   │
│ 1. Extract        │
│    indicators     │
│    (URLs, IPs,    │
│    hashes, etc.)  │
│                   │
│ 2. Query feeds    │
│    in parallel    │
│                   │
│ 3. Aggregate      │
│    matches        │
│                   │
│ 4. Apply to       │
│    findings       │
└──────────────────┘
       │
       ▼
   Findings with
   TI enrichment

Supported indicator types

TypeDescription
URLFull URL with path
DomainDomain name (exact or substring)
IP AddressIPv4 or IPv6 address
SHA-256File digest
EmailEmail address

Feed types

Built-in feeds

FeedTypeDescription
URLhausMalware URLAbuse.ch malware URL database
CommunityIndicatorsArbSec community submissions

Custom feeds

Arbitraitor supports any feed that exposes a JSON or CSV API:

[intel.feeds.my-feed]
enabled = true
url = "https://feeds.example.com/indicators.json"
type = "json"  # json | csv
api-key = "secret://env/MY_FEED_API_KEY"
refresh-interval = "1h"
cache-ttl = "24h"

[intel.feeds.my-feed.format]
indicator-field = "indicator"
type-field = "type"
tags-field = "tags"
confidence-field = "confidence"

Matching engine

The matching engine processes indicators in stages:

Stage 1: Extraction

Extracts indicators from the artifact:

  • URLs from shell scripts, HTML, JavaScript
  • Domain names from URLs
  • IP addresses from network-related content
  • File hashes from referenced files (if accessible)

Stage 2: Feed queries

Each extracted indicator is queried against enabled feeds in parallel:

#![allow(unused)]
fn main() {
let results = feed_lookup(indicator).await;
// Returns Vec<IndicatorMatch>
}

Stage 3: Aggregation

Matches from multiple feeds are aggregated:

  • Deduplicated by indicator + source
  • Confidence scores normalized
  • Tags merged

Stage 4: Finding enrichment

Enriched indicators are added to findings:

{
  "id": "network:curl",
  "severity": "high",
  "title": "Downloads content via curl",
  "intel": [
    {
      "indicator": "https://evil.example.com/payload.exe",
      "source": "urlhaus",
      "confidence": "high",
      "tags": ["malware", "payload"]
    }
  ]
}

Indicator matching

URL matching

URLs match if:

  • Exact match: https://evil.example.com/malware.exe
  • Domain match: any path under evil.example.com
  • Pattern match: configurable wildcard patterns

Hash matching

SHA-256 hashes match exactly:

  • Artifact digest matches a known malware hash
  • Referenced file digests match known malware

Confidence levels

LevelMeaning
LowSingle source, unverified
MediumMultiple sources or recent report
HighActive campaign, multiple reports

High-confidence intelligence matches can escalate findings even if the static analysis alone would not.

Feed freshness

Feeds are refreshed on a configured interval:

[intel.feeds.urlhaus]
refresh-interval = "1h"  # Check for updates every hour
cache-ttl = "24h"        # Stale after 24 hours

If a feed is stale (last refresh > TTL), its matches are downgraded:

High confidence -> Medium
Medium confidence -> Low
Low confidence -> Ignored

Configuring intelligence

See Configuration for the full [intel] section reference.