CRAABS CTI Documentation
Cyber Risk Analysis and Adversary Behavior Surveillance
Community threat intelligence platform built for SOC analysts, researchers, CERT teams and developers.
v2.0
This documentation is maintained in English, the working language of the threat intelligence community. Technical terms (IOC, honeypot, kill chain) are used untranslated across all languages. See the glossary if a term is unfamiliar. The Terms of Use are available in 7 languages.

Overview#

CRAABS is a community threat intelligence platform. It collects, enriches, correlates and shares indicators of compromise (IOCs) among security practitioners, and it operates its own distributed honeypot network that produces first-hand attack telemetry rather than only aggregating third-party feeds.

Three things make the platform distinct:

  • First-hand telemetry. Community honeypots feed real intrusion attempts into the database, not just recycled public lists.
  • Behavioral correlation. Attackers are tracked by behavior, not only by IP, so the same operator can be recognized across different addresses.
  • Integration first. Everything visible in the interface is reachable through an API, an export format or a webhook.
SOURCES Public feeds Feodo / URLhaus / ThreatFox Honeypot nodes Cowrie / OpenCanary / custom Canary tokens document access alerts Analysts manual IOCs, campaigns CRAABS CORE Normalization and dedup Enrichment (VT, OTX, Shodan) ML scoring 0-100 Correlation and fingerprints MITRE mapping, TLP CONSUMERS Web interface dashboard, hunting REST API X-API-Key SIEM feeds Splunk, CEF, STIX Webhooks real-time push Every indicator entering on the left is normalized, enriched, scored and correlated before it is exposed on the right.
Figure 1. Data flow through the platform. Honeypot nodes (highlighted) are what distinguishes CRAABS from a pure feed aggregator: they produce first-hand telemetry.

Creating an account#

  1. Go to /join and fill in your name, email and organization.
  2. Accept the Terms of Use. Read section 5 carefully: it defines what constitutes misuse of the platform's dual-use data.
  3. Submit. Registrations are reviewed manually by an administrator, usually within 24 hours.
  4. On approval you receive an email with a temporary password. Change it on first login from /profile.
Registration is protected against automated signups. If your submission is silently rejected, it usually means an automation-like pattern was detected: fill the form normally in a browser rather than through a script.

Membership plans#

CapabilityCommunityDeveloperPro
Quick CheckYesYesYes
IOC browsing and detailYesYesYes
Threat feedsYesYesYes
MITRE ATT&CK overviewYesYesYes
REST APINoYesYes
Honeypot network (CHP)NoYesYes
Canary URLsNoYesYes
STIX 2.1 exportNoNoYes
SIEM export (CEF / Syslog)NoNoYes
Threat hunting queriesNoNoYes
Playbooks and webhooksNoNoYes
Developer membership is free during the community beta. Pro pricing has not been set; any change will be announced at least 30 days in advance, as stated in the Terms of Use.

Roles and permissions#

Access is governed by role-based access control with 26 granular permissions. Administrators manage roles at /admin/roles and assign them per user at /admin/users.

Permission groupTypical contents
IOCview, add, edit, delete, enrich, add notes
Intelligencehunting, correlation, campaigns, threat actors
Deceptionhoneypot management, canary tokens, dossiers
ExportCSV, STIX, SIEM, API key management
Administrationusers, roles, account requests, audit log
Principle of least privilege: give analysts view_iocs, add_iocs and enrich_iocs, and reserve delete_iocs and administrative permissions for a small group. Every action is written to the audit log at /admin/audit.

Dashboard#

The dashboard is the operational overview. It combines a KPI strip (total IOCs, active, high risk, weekly additions, auto-feed volume) with a customizable widget grid.

Customization

  • Show or hide widgets from the gear menu in the top right.
  • Reorder by dragging a widget from its title bar.
  • Resize with the width button in each widget header, cycling one third, one half, two thirds and full width.
  • Text size can be set to normal, large or extra large for readability on wall displays.

All preferences are stored in your browser, so each analyst keeps a personal layout without any server load. Use Reset layout to return to defaults.

Available widgets

WidgetWhat it shows
Score history30-day trend of average score and daily IOC volume
Score distributionHistogram of IOCs by score range
IOC typesBreakdown by IP, domain, URL and hash
Top countriesSource country ranking with flags
MITRE ATT&CKMini map of covered tactics, clickable
Recent IOCs / Top risksLatest additions and highest scoring indicators, with malicious score and CRAABS Score side by side
Auto feeds / SourcesImported indicators and their provenance
Top tagsMost frequent tags, clickable to filter
Honeypots 24hHourly event histogram, active nodes, unique IPs, top protocol
Threat forecastGlobal risk gauge and trend for the next 24 hours
Top attackersDossiers ranked by community trust score
Canary alertsMost recent canary token triggers
TLP distributionSharing level breakdown and watchlist count

Search & notifications#

Two lightweight controls live in the top navigation bar on every page and require no configuration.

Global search

Type at least two characters in the search field to get a live dropdown of matching IOCs by value, tag or description. The list respects the same visibility rules as the IOC list itself, so a submitted-but-not-yet-approved indicator never leaks to an analyst who could not otherwise see it. Press Enter to jump to the full, filterable results on /iocs.

Notifications

The bell icon shows a live count of noteworthy events from the last 24 hours: newly created critical IOCs (score ≥ 80), indicators awaiting review if you hold that permission, and critical honeypot events. Clicking an entry navigates straight to it.

The badge count is a rolling 24-hour window, not a persisted read/unread state. It clears naturally as events age out rather than requiring you to dismiss each one.

IOC management#

Supported types

TypeExample
ip203.0.113.47 (IPv4 or IPv6)
domainmalware.example.com
urlhttp://example.com/payload.bin
md5 / sha1 / sha256File hashes

Adding indicators

Go to IOCs > Add IOC. The type is detected automatically from the value. You can paste several values, one per line, to create them in a batch. Defanged input such as hxxp://evil[.]com is refanged automatically.

Set comma-separated tags and a TLP level at creation time. Tags drive correlation and hunting later, so a consistent tagging convention matters more than volume: prefer a short controlled vocabulary such as botnet, c2, phishing, ransomware, scanner.

Scoring scale

ScoreSeverityTypical handling
80-100CriticalBlock immediately, investigate
60-79HighBlock or monitor closely
40-59MediumMonitor, correlate before acting
0-39LowContext only

Automatic feeds

Three public sources are imported every six hours: Feodo Tracker (botnet C2 servers), URLhaus (malware distribution URLs) and ThreatFox (mixed indicators). Imported IOCs are flagged auto_feed so they can be filtered, re-scored or archived separately from manual entries.

Auto-feed data is unvalidated third-party intelligence. Always confirm with a second source before blocking in production, especially for domains and URLs where false positives affect legitimate services.

Quick Check#

Quick Check answers one question fast: is this value known as malicious? Paste an IP, domain or hash at /quick-check and you get the score, tags, country, ASN and the sources that reported it. This is the fastest path for triaging an alert without leaving the platform.

cti.craabs.com/quick-check
203.0.113.47
Check
92
KNOWN MALICIOUS
Germany (DE) - AS64512 Example Hosting
Tags: tor botnet ssh_scanner
Sources: Feodo Tracker, 3 honeypot nodes
Sample data. A clean value returns a green panel with score 0 and no sources.
Figure 5. Quick Check on a test indicator. This is the fastest triage path: paste a value from an alert and get a verdict with its provenance.

Enrichment#

Enrichment adds external context to an indicator. Open an IOC and use Enrich, or call the enrichment route programmatically. Configured providers are queried through a dispatcher that handles failures gracefully: if one provider is unavailable, the others still return.

ProviderAdds
VirusTotalMulti-engine detection ratio, file and URL reputation
AbuseIPDBAbuse confidence score, report history
AlienVault OTXPulse membership, community context
URLhausMalware distribution status and payload family
ShodanExposed services, banners, open ports
GeolocationCountry, city, ASN, ISP, coordinates

API keys for third-party providers are configured at /api-settings. Providers without a key are simply skipped.

Positive enrichments raise the ML score. Enriching a batch of unscored IOCs before a re-scoring pass produces noticeably better scores than re-scoring raw imports.

Reporting to AbuseIPDB / VirusTotal#

For IP indicators, the detail page offers a Report this IP panel to contribute a confirmed malicious IP back to the community databases you already query during enrichment.

TargetAction
AbuseIPDBFiles a report with one or more official categories (Brute-Force, DDoS, Port Scan, Phishing, SSH...) and an optional comment
VirusTotalCasts a community vote, malicious or harmless

Every submission requires an explicit confirmation and is permanent: neither service offers a straightforward way to retract a report or vote once sent. The panel shows the reporting history for that IOC (who reported it and when) so you can avoid duplicate submissions.

Report only what your platform directly observed, such as a confirmed honeypot hit. Relaying a verdict copied from another feed without independent confirmation can read as spam to AbuseIPDB and risks your API key being rate-limited or suspended.

ML scoring#

Each IOC receives a 0-100 malicious score from a weighted additive model. The model is deliberately transparent: no black box, no external ML dependency, and every point of the final score can be traced to a named feature.

Feature families

  • Type: hashes and URLs weigh more than bare domains.
  • Geography: high-risk source countries and unknown origin.
  • Source: Feodo, URLhaus and ThreatFox carry different confidence.
  • Tags: ransomware, C2, exploit and botnet are the heaviest.
  • MITRE tactics: impact, exfiltration, C2, initial access.
  • Enrichments: presence and number of positive verdicts.
  • Age: recent indicators score higher, indicators older than 30 days are penalized.
  • Watchlist and ASN: watchlisted values and known bad autonomous systems.

Analyzing a score

At /ml-scoring, enter an IOC value or ID under Analyze an IOC. You get the computed score with a per-feature breakdown showing exactly how many points each feature contributed, plus a comparison with the score currently stored in the database.

cti.craabs.com/ml-scoring
92
203.0.113.47 - type ip
current score in DB: 78 (differs: a re-scoring pass would align it)
Source: Feodo
+25
Tag: C2
+25
Tag: botnet
+22
Type: IP
+15
Age < 24h
+15
Country: Russia
+14
Has enrichments
+10
Age > 30d
-5
Sample data. Green bars are negative contributions that lower the score.
Figure 3. Score breakdown for a test indicator. Every point is traceable to a named feature, so an analyst can challenge a score instead of trusting it blindly. Here the stored score (78) predates the last enrichment.

Re-scoring the database

Re-scoring runs in batches of 500 driven from your browser, so a large database is processed without ever blocking the server. Progress is displayed live and can be interrupted and resumed. The auto-feed only option is enabled by default and preserves scores that analysts set manually.

Tuning weights

Weights can be adjusted with sliders and saved. Changes apply to subsequent scoring; run a re-scoring pass to propagate them to existing indicators. Weight changes are recorded in the audit log, and Reset to defaults restores the calibrated model.

Tune conservatively and one family at a time. Raising several weights at once tends to compress everything toward 100 and destroys the ability to prioritize.

CRAABS Score#

The CRAABS Score is a second, independent 0-100 rating shown alongside the ML score described above. They answer different questions: the ML score reflects the stored, feature-weighted assessment; the CRAABS Score is computed live and blends in first-party evidence — most importantly, whether this exact indicator has actually hit one of your own honeypots — that no external feed or the ML model can know about. Seeing both differ on the same IOC is expected, not a bug.

The score is computed on demand, on every page that shows it, from data already in the platform. Nothing is written back to the IOC record, so there is no synchronization to worry about.

WeightSignal
35%Average of completed external enrichment scores (VirusTotal, AbuseIPDB, Shodan, GreyNoise...)
20%Existing malicious score / analyst baseline
20%Honeypot corroboration — real hits against your own sensors, up to 5 events
10%MITRE ATT&CK mapping completeness
10%Linkage to a known campaign or threat actor
5%Trusted-source bonus (URLhaus, ThreatFox, Feodo, your own YARA scanner...)

The weighted total is then multiplied by the IOC's confidence value (floor 0.5), and discounted up to 15% if the indicator has not been re-checked in over 90 days, since stale infrastructure intelligence loses reliability quickly.

ScoreLabel
80-100Critical — treat as confirmed malicious
60-79High — act on it, review before automated blocking
40-59Medium — worth investigating
20-39Low — weak signal, likely benign
0-19Info — no meaningful signal yet
cti.craabs.com/iocs/8842
CS 84
203.0.113.47
malicious score in DB: 78
External avg (35%)
+32
Baseline score (20%)
+16
Honeypot corroboration (20%)
+20
MITRE mapped (10%)
+10
Campaign linked (10%)
+0
Trusted source (5%)
+5
Sample data. The honeypot corroboration bar is what a pure feed-aggregation tool can never produce.
Figure 9. CRAABS Score breakdown for an IP already hit by 3 of your own honeypots. It reads higher than the stored malicious score (78) specifically because of that first-party evidence.

The badge is visible on the IOC list, the IOC detail page, both dashboard tables, campaign details, threat hunt results and the IOC review queue. Hover any badge for a breakdown tooltip (external average, honeypot hits, staleness).

Threat hunting#

The hunting interface at /hunt accepts a compact query syntax. Operators can be combined and are evaluated together.

OperatorMeaning
TYPE:ipFilter by indicator type
SCORE:>70Score threshold
COUNTRY:RUISO country code
MITRE:TA0011MITRE tactic
ASN:12345Autonomous system number
NOT:feedExclude auto-feed indicators
BEFORE:2026-01-01Created before a date
TYPE:ip SCORE:>80 COUNTRY:CN NOT:whitelist

A useful pattern for weekly review: SCORE:>70 NOT:feed surfaces high-confidence indicators that your own team contributed rather than imported.

Correlation#

Correlation finds indicators related to the one you are investigating, across five dimensions: same /24 subnet, same ASN, same ISP, shared tags, and membership in the same campaign. Subnet correlation is often the fastest way to discover that a single scanning IP is part of a wider block worth blocking as a range.

MITRE ATT&CK and Kill Chain#

Indicators are mapped to MITRE ATT&CK tactics and techniques, automatically where tags allow and manually from the IOC detail page. The /mitre view shows coverage across tactics; the auto-mapping action fills gaps for indicators that have none.

The /killchain view organizes the same data along the seven Lockheed Martin phases: reconnaissance, weaponization, delivery, exploitation, installation, command and control, actions on objectives. Coverage gaps in this view are a useful indication of where your visibility is thin.

Campaigns and threat actors#

Campaigns group indicators that belong to a single operation. Threat actors describe the entity behind them. Linking IOCs to a campaign turns a flat list into an investigation: correlation, exports and dossiers all become campaign-aware.

A practical workflow: create the campaign as soon as you see a second related indicator, attach indicators as they surface, and record attribution in the actor record only when evidence supports it.

Watchlist#

The watchlist holds values you want to be alerted about. When a watchlisted value appears with a score of 50 or higher, an alert is raised. Watchlist membership also adds weight in the ML model, so monitored values naturally rank higher.

YARA scanner#

The scanner at /yara matches uploaded files against your own YARA rule set and, on a match, can automatically create the corresponding hash IOC and send an alert — closing the loop between static file analysis and the rest of the platform.

Scanning a file

Drag a file onto the Scanner tab, or click to browse. The upload progress and the analysis phase are shown separately, since the scan itself is near-instant while the upload can take longer for large files. Results list every matched rule with its tags; a clean file explicitly states no rule matched rather than showing an empty screen.

Uploading a rule set is not the same as testing it. Before trusting a new batch of imported rules, scan the standard EICAR test file against them to confirm the pipeline actually flags a known-bad sample end to end.
cti.craabs.com/yara
1 RULE MATCHED - invoice_2024.exe
sha256:8f14e45f...b9224
Rule: trojan_generic_dropper - tags: dropper persistence
CRAABS Score
87
IOC created automatically - source: YARA Scanner - alert sent
Sample data. A clean file returns "no rule matched" instead of this panel.
Figure 8. A matched file, with the auto-created hash IOC and its CRAABS Score already reflecting the trusted-source bonus for a YARA hit.

Managing rules

ActionDetails
CreatePaste YARA source directly; a meta: block with author and description is picked up automatically and shown in the rule list
ImportDrag one or more .yar/.yara files at once; each is validated independently, so one broken file in a batch does not block the rest
EditLoads the existing source back into the editor; saving re-validates the syntax before overwriting
DownloadRetrieves the original .yar file, unmodified
SearchFilters by name, author or description across paginated results

Every rule tracks who created or last modified it and when, and whether it was typed manually or imported, regardless of what the rule's own meta: block says.

Performance and IOC linkage

Compiled rules are cached in memory and only recompiled when a rule file actually changes, so scanning stays fast even with several hundred rules loaded. On a match, the scanner best-effort creates or updates a sha256 IOC for the file (source YARA Scanner, tagged with the matched rule names) and sends an alert through the existing notification channel. Both steps are wrapped independently: if IOC creation or alerting fails for any reason, the scan result itself is still returned normally.

Where do the rules come from? Curated public sets such as Neo23x0/signature-base or Yara-Rules are good starting points — download, unzip, and import in batches of 50-100 rather than all at once so a bad rule is easy to spot.

Honeypot network#

A honeypot is a decoy service that exists only to be attacked. Every connection attempt is by definition suspicious, which makes honeypot data unusually clean compared to production logs.

Installing a node

curl -sSL https://cti.craabs.com/docs/install_honeypot.sh -o install.sh
sudo bash install.sh

The installer configures either Cowrie (SSH and Telnet emulation, records commands and credentials) or OpenCanary (multi-service: HTTP, FTP, SMB, RDP and more), plus the CRAABS connector and an auto-start service.

Registering the node

  1. Go to SOC > Honeypot Network and register a new honeypot.
  2. Copy the generated key, in the form chp_....
  3. Provide it to the installer, or write it into the connector configuration.
  4. The node appears as active once its first heartbeat is received.
Deploy honeypots on isolated infrastructure only: a separate VPS, a DMZ segment or a dedicated VLAN. Never on a host that holds production data or shares credentials with production systems. A honeypot is designed to be compromised, so treat the machine as expendable and ensure it cannot pivot into anything that matters.

CHP protocol#

The CRAABS Honeypot Protocol lets any custom sensor report to the platform. Authentication uses the node key in the X-Honeypot-Key header.

This section covers what you need to connect a sensor. Writing a connector from scratch? The full CHP reference documents every field constraint, every error code and the implementation best practices.
EndpointPurpose
GET/api/honeypot/pingHeartbeat, every 5 minutes
POST/api/honeypot/eventReport a single event
POST/api/honeypot/events/bulkReport up to 100 events at once
GET/api/honeypot/statusNode statistics
ATTACKER HONEYPOT NODE CRAABS PLATFORM SSH brute force root / 123456 1 Cowrie logs it connector formats JSON 2 POST /api/honeypot/event 201 Geolocation and ASN lookup IOC created, ML score computed Dossier updated at 5+ events Shared with the community heartbeat every 5 min
Figure 2. Lifecycle of a single honeypot event, from the attacker's login attempt to community sharing. The dashed line is the independent heartbeat that keeps the node marked active.

Reporting an event

curl -X POST https://cti.craabs.com/api/honeypot/event \
  -H "X-Honeypot-Key: chp_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "source_ip":     "203.0.113.47",
    "honeypot_type": "ssh",
    "event_type":    "login_attempt",
    "dest_port":     22,
    "username":      "root",
    "password":      "123456",
    "severity":      "medium",
    "tags":          ["brute_force", "ssh"]
  }'
FieldRequiredNotes
source_ipYesAttacker address, IPv4 or IPv6
honeypot_typeYesssh, http, ftp, rdp, smtp, custom
event_typeYeslogin_attempt, scan, exploit, payload
dest_portNoTargeted port
username / passwordNoCredentials tried, stored for pattern analysis
severityNolow, medium, high, critical
tagsNoArray of strings
payloadNoCommand or request body observed
Use the bulk endpoint for anything above a few events per minute. A sensor that batches every 30 seconds is far kinder to both ends than one POST per packet, and no data is lost.

Attacker dossiers#

When an IP generates five or more events, an investigation file is generated automatically at /dossiers. It contains the chronological timeline, credentials tried, commands executed, organization and ASN, other addresses seen in the same /24, a community trust score and a behavioral fingerprint.

Community trust score

A 0-100 confidence value built from how many distinct honeypots saw the address, how many protocols it targeted, how long it stayed active and its total event volume. An address seen by many independent sensors is far more reliable evidence than one seen once.

Behavioral fingerprint#

Each attacker receives a SHA-256 fingerprint computed from typical activity hours, command sequences, normalized credential lists and port targeting order. When two different addresses share a fingerprint, the platform flags them as the same operator.

This is what allows tracking through VPNs, Tor exit rotation and disposable cloud instances: the address changes, the habits do not.

A fingerprint match is strong correlation, not attribution. Shared tooling produces shared behavior, so two operators running the same off-the-shelf script can collide. Treat a match as a lead to investigate, never as proof of identity, and never as grounds for action against a person.
203.0.113.47 Germany - Tor exit Active 02:00-05:00 UTC root, admin, oracle Ports 22 then 2222 uname -a; wget ... 198.51.100.11 Netherlands - VPN Active 02:00-05:00 UTC root, admin, oracle Ports 22 then 2222 uname -a; wget ... SAME FINGERPRINT sha256: 7f3a9c2e... flagged as one operator Different addresses, different countries, identical habits: the IP changes, the behavior does not.
Figure 7. Fingerprint matching across two addresses (sample data). Treat a match as a strong lead, never as proof of identity: shared tooling produces shared behavior.

Canary URLs#

A canary URL is a trap link that silently alerts you when a document is opened. Create one at /canary, then embed it in the file you want to monitor.

<img src="https://cti.craabs.com/c/TOKEN" width="1" height="1">

When the token is fetched, you receive an email alert with the source IP, country, ISP, user agent and referrer. Typical uses are detecting exfiltration of a sensitive report, or identifying which partner leaked a document shared under NDA.

Canary tokens must only be placed in documents you own. Using them to track individuals, deanonymize people or phish is prohibited under section 5 of the Terms of Use and leads to permanent account termination.

Threat forecast#

Using 30 days of honeypot history, the platform projects attack probability per hour for the next 24 hours, the most likely targeted protocols, probable source countries and an overall trend of rising, stable or falling. The forecast is recomputed nightly at 02:30 UTC and surfaced both at /forecast and on the dashboard.

The practical use is scheduling: aligning on-call coverage or maintenance windows with predicted quiet hours.

Live attack heatmap#

A real-time 3D globe of attacks against your honeypots at /heatmap, rendered as an orthographic projection rather than a flat map so the display reads as an actual globe rather than an atlas page. Attack arcs animate from source to destination, refresh every 10 seconds, and are filterable by protocol.

The globe rotates slowly and continuously by default; only one hemisphere is visible at a time, exactly as it would be looking at Earth from space. Rotation is purely client-side rendering and issues no extra network requests. Active attack arcs and dots track the rotation in real time so they stay anchored to their true source and destination instead of drifting as the globe turns under them. Use Pause rotation to freeze the view, for instance to inspect a specific region.

Rotation automatically pauses when the browser tab is not visible, so leaving the heatmap open all day on a SOC wall or in a background tab costs no extra CPU while unattended.

It doubles as a situational display for a SOC wall.

REST API#

The API is available from the Developer plan. Retrieve your key at /api-settings and send it in the X-API-Key header. Keys can be regenerated at any time, which immediately invalidates the previous key.

GET /api/v1/iocs

ParameterDescription
qFree-text search on the indicator value
typeip, domain, url, md5, sha1, sha256
pagePage number, default 1
per_pageResults per page, default 50, maximum 200
curl -H "X-API-Key: YOUR_KEY" \
  "https://cti.craabs.com/api/v1/iocs?type=ip&per_page=100"

Response

{
  "iocs": [
    {
      "id": 1337,
      "value": "203.0.113.47",
      "type": "ip",
      "tags": "tor,botnet,ssh_scanner",
      "source": "feodo",
      "tlp": "WHITE",
      "score": 92,
      "status": "active",
      "country": "Germany",
      "country_code": "DE",
      "city": "Frankfurt",
      "created_at": "2026-05-23T10:00:00",
      "updated_at": "2026-05-24T08:12:00"
    }
  ],
  "total": 1250,
  "page": 1,
  "pages": 13
}

GET /api/v1/iocs/:id

Returns a single indicator with its enrichments.

POST /api/v1/iocs

curl -X POST https://cti.craabs.com/api/v1/iocs \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "value": "evil.example.com",
    "ioc_type": "domain",
    "malicious_score": 75,
    "tlp": "GREEN",
    "tags": "phishing,malware",
    "description": "Phishing domain observed in campaign X"
  }'

Errors

CodeMeaning
401Missing or invalid API key
403Key valid but plan or permission insufficient
404Indicator not found
429Rate limit exceeded, back off and retry
Paginate with per_page=200 and stop when page > pages. For a full daily sync, prefer the Splunk feed endpoints below with updated_since: they are designed for incremental pulls and return far less data.

Splunk integration#

CRAABS exposes native endpoints that feed Splunk Enterprise Security KV Store collections directly.

# 1. Install the add-on
tar -xzf TA-craabs-feed_v1.0

# 2. Configure your API key
nano $SPLUNK_HOME/etc/apps/TA-craabs-feed/local/craabs_feed.conf
# api_key = YOUR_CRAABS_API_KEY

# 3. Restart Splunk
$SPLUNK_HOME/bin/splunk restart

Splunk then pulls every 5 minutes into ip_intel, domain_intel, url_intel and file_intel.

EndpointCollection
GET/api/splunk/threat-intel/ipip_intel
GET/api/splunk/threat-intel/domaindomain_intel
GET/api/splunk/threat-intel/urlurl_intel
GET/api/splunk/threat-intel/hashfile_intel
GET/api/splunk/threat-intel/allComplete feed

Filter parameters

ParameterDefaultPurpose
min_score50Minimum score to include
max_age30Maximum age in days
limit1000Result cap, maximum 10000
formatjsonUse csv for lookup import
tlpallRestrict to a sharing level
updated_sincenoneISO date for incremental sync
CRAABS /api/splunk/ threat-intel/ip min_score=70 5 min TA-craabs-feed scheduled input writes KV Store ip_intel domain_intel url_intel file_intel SPLUNK KV STORE lookup against firewall logs Incremental pulls with updated_since keep transferred volume small even on large databases.
Figure 4. Splunk pipeline. The add-on pulls every 5 minutes into four KV Store collections, which your searches then use as lookups.

Correlating with your traffic

index=firewall OR index=network
| lookup craabs_ip_intel src_ip AS src OUTPUT craabs_score, country, tags
| where isnotnull(craabs_score) AND craabs_score >= 50
| table _time src_ip dest_ip craabs_score country tags
| sort -craabs_score
Start at min_score=70 in production. Importing everything above 50 on day one generates alert volume that teams stop reading within a week, which is worse than no feed at all. Lower the threshold once tuning is stable.

STIX 2.1 export#

Available on the Pro plan at /export/stix. Indicators are emitted as a STIX 2.1 bundle with pattern expressions, suitable for import into MISP, OpenCTI, TAXII servers and most commercial platforms. Filters applied in the interface, including TLP level, are honoured in the generated bundle.

Respect TLP when exporting outward. Exporting AMBER or RED indicators into a platform shared beyond your organization breaks the sharing agreement you accepted when receiving them.

SIEM export (CEF and Syslog)#

At /export/siem, indicators can be exported in ArcSight CEF or Syslog format for platforms without a native connector, including QRadar, LogRhythm and Sentinel via a generic collector. CSV export is also available at /export.csv for spreadsheet analysis and ad hoc lookups.

Webhooks#

Webhooks push events to your own systems as they happen. Configure endpoints at /webhooks, where each one can be enabled, disabled and tested independently. A typical payload notifies your chat platform or ticketing system when a high-score indicator appears.

{
  "event": "ioc.created",
  "ioc": {
    "value": "203.0.113.47",
    "type": "ip",
    "score": 92,
    "tags": "botnet,c2"
  },
  "timestamp": "2026-08-09T14:22:11Z"
}
Point webhooks at a queue or a small relay service rather than directly at a chat channel. A feed refresh can produce a burst of events, and a relay lets you batch, deduplicate and rate-limit before anything reaches a human.
Event occurs IOC score 92 created CRAABS webhook POST your-endpoint Your relay batch, dedupe, rate-limit Slack Ticketing Firewall API The relay is what protects your team from alert bursts during a feed refresh.
Figure 6. Recommended webhook topology. Pointing CRAABS straight at a chat channel works until the first bulk import, then it floods.

Playbooks#

Playbooks at /playbooks chain automated response actions against an indicator: enrich, correlate, add to watchlist, notify. Each execution is recorded with its result, so a playbook run is auditable after the fact. Playbooks are the bridge between detection in CRAABS and action in your own stack.

Third-party enricher configuration#

Add provider API keys at /api-settings. Keys are stored per platform instance and used only for outbound enrichment calls.

ProviderFree tierNotes
VirusTotalYes, rate limitedPublic API allows 4 requests per minute
AbuseIPDBYes1000 checks per day on the free plan
AlienVault OTXYesGenerous limits, good default choice
ShodanPaidQuery credits consumed per lookup
Free-tier rate limits are low. Enriching hundreds of indicators in one pass will exhaust a VirusTotal public key within minutes and return partial results. Enrich selectively, prioritizing indicators you intend to act on.

Administration#

PagePurpose
/admin/usersList accounts, assign roles, delete users
/admin/requestsApprove or reject registrations, bulk-reject spam
/admin/rolesCreate roles and assign the 26 permissions
/admin/auditFull action history
/filesShared project files

Handling registration requests

Pending requests can be reviewed individually, or filtered with Select suspicious requests, which highlights automated signups by name and organization patterns. Review the selection visually before rejecting: the filter is a heuristic, not a verdict. Bulk rejections are silent by design and send no email, since spam registrations typically use spoofed addresses belonging to real people.

Email alerts

AlertTrigger
New requestRegistration submitted
Critical IOCAuto-feed indicator scoring 80 or above
Critical honeypotSuccessful login on a node, or score 90 and above
Watchlist hitMonitored value detected with score 50 or above
Account approved / rejectedSent to the requesting user

Connection security#

The dashboard at /admin/connections surfaces who is attempting to log in, aggregated from the existing audit log — no separate tracking system, so the data is exactly as complete as your audit history for the selected window (24h, 7, 30 or 90 days).

Each distinct IP is listed with attempt counts, successes, failures, account lockouts triggered and the distinct set of email addresses tried from it. An IP is automatically flagged suspicious when it shows any of the following:

  • 10 or more failed logins in the selected window
  • At least one account lockout triggered
  • At least one anti-bot signup block triggered
  • 4 or more distinct accounts attempted from the same IP — a classic sign of credential stuffing
cti.craabs.com/admin/connections
IPTotalFailAccountsStatus
203.0.113.4734317 suspicious
192.0.2.201301 normal
Sample data. The first row would also show lockouts triggered and the list of emails attempted, condensed here to fit.
Figure 10. One IP hammering seven different accounts with a 91% failure rate is flagged automatically; a single legitimate login from another IP is not.

Geolocation is looked up on demand per IP via the Locate button rather than eagerly for the whole list, to avoid burning external API quota on a page that can list hundreds of addresses.

The IP shown here is only accurate if the reverse proxy in front of the application is configured to forward the real client address (X-Forwarded-For) and the app trusts it accordingly. Without that, every entry will show the proxy's own address instead of the visitor's.

Security model#

  • Sessions expire after 30 minutes of inactivity.
  • Lockout after 5 failed logins for 15 minutes, permanent after 10.
  • Anti-timing delay of 280 to 480 ms on authentication, so response time does not reveal whether an account exists.
  • Transport is HTTPS only with HSTS enabled.
  • Content Security Policy is enforced strictly.
  • RBAC with 26 granular permissions.
  • Audit logging of every action, immutable from the interface.
  • Signup protection against automated registration.
Rotate your API key at /api-settings whenever a laptop is lost, a contractor leaves or a key may have been committed to a repository. Regeneration is immediate and does not require administrator involvement.

TLP and sharing#

LevelMeaning
WHITEPublic, unlimited distribution
GREENCommunity, not for public posting
AMBERDirect partners only, need to know
REDNamed recipients only, do not forward

TLP travels with the indicator through exports and API responses. When in doubt, classify one level more restrictively: you can always relax it later, but you cannot recall data that has already been shared.

Data retention and archiving#

ConditionRetentionException
Expired indicatorArchived immediatelyKept if score is 90 or above
Auto-feed, score below 7090 daysNone
Auto-feed, score 70 to 79180 daysNone
Manually added indicatorNever archived automaticallyNone

Archived indicators remain searchable and can be restored at any time. The active table is kept around 50000 indicators for query performance while total storage stays effectively unlimited.

Troubleshooting#

My honeypot does not appear as active

The node is marked active only after its first heartbeat. Check that the connector can reach /api/honeypot/ping outbound on port 443, that the key was pasted without surrounding whitespace, and that the service is running. Regenerate the key if it may have been truncated.

The API returns 401

The header is X-API-Key, not Authorization. Confirm the key at /api-settings and check that it has not been regenerated since your client was configured.

Enrichment returns nothing

The provider key is missing or its rate limit is exhausted. Providers without a configured key are skipped silently by design so that one missing key never blocks the others.

Splunk lookups return no matches

Verify field naming in your lookup definition, and confirm the feed actually contains data at your threshold by opening the endpoint with min_score set lower in a browser.

My account request is still pending

Requests are reviewed within 24 hours. After 48 hours, contact contact@craabs.com.

FAQ#

Is the Community plan really free?

Yes, and it will remain free. Developer access is free during the beta; any future change comes with at least 30 days notice.

Are my manually added indicators ever deleted automatically?

No. Only auto-feed imports are subject to archiving. Manual contributions are kept indefinitely.

Who owns the data I contribute?

You do. Contributing grants the platform a non-exclusive licence to store and redistribute it to the community. You can request removal at any time.

How do I report a false positive?

Open the indicator detail and use Report as false positive. An administrator reviews it.

Can I run my own instance?

The platform is operated as a community service. For self-hosting or research collaboration, contact the team.

Why is this documentation only in English?

Technical documentation changes with every release, and maintaining several translations reliably is not realistic for a community project: an outdated translation causes more harm than an English page. Security tooling and standards such as MITRE ATT&CK are English-first, so the terminology is already familiar to the audience. The Terms of Use, which carry legal weight, are translated into 7 languages.

Glossary#

IOC
Indicator of Compromise. An observable such as an IP, domain, URL or file hash associated with malicious activity.
TLP
Traffic Light Protocol. A four-level convention (white, green, amber, red) that states how widely information may be shared.
Honeypot
A decoy system deployed to be attacked, producing high-signal telemetry about attacker behavior.
CHP
CRAABS Honeypot Protocol. The HTTP interface honeypot nodes use to report events.
C2
Command and Control. Infrastructure an attacker uses to control compromised machines.
ASN
Autonomous System Number. Identifies the network operator responsible for a block of addresses.
MITRE ATT&CK
A knowledge base of adversary tactics and techniques, used as a common vocabulary for describing attacker behavior.
Kill chain
A seven-phase model describing an intrusion from reconnaissance through to actions on objectives.
Enrichment
Adding external context to an indicator from third-party sources.
Behavioral fingerprint
A hash of an attacker's habits, used to recognize the same operator across different addresses.
Canary token
A trap resource that silently reports when accessed, revealing unauthorized document access.
STIX
Structured Threat Information Expression. A standard format for exchanging threat intelligence between platforms.
CEF
Common Event Format. A log format widely accepted by SIEM platforms.
False positive
A benign item incorrectly flagged as malicious.
Defanging
Rewriting an indicator so it cannot be clicked accidentally, as in hxxp://evil[.]com.
Something missing or unclear in this documentation? Community feedback is what keeps it accurate. Write to contact@craabs.com and tell us which section tripped you up.