SENTINELTI
Sign in →
Complete User Guide

SentinelTI User Guide

Everything you need to know — from first login to SIEM export. No experience required.

Real-time threat feedsML risk scoringMITRE ATT&CKSIEM integrationSHAP explainabilityAlert rules
7+
Threat Feed Sources
5-Stage
Enrichment Pipeline
RF+XGB
Stacking Ensemble
AbuseIPDB
Real Training Data

1. What is SentinelTI?

SentinelTI is a Threat Intelligence Platform (TIP) — a cybersecurity tool that automatically collects, enriches, scores, and presents information about malicious IP addresses and other online threats.

Think of it as a radar for cyber threats. Every day, thousands of malicious IPs are identified and published by security researchers around the world. SentinelTI pulls all of that data into one place, runs it through multiple intelligence sources, applies a machine-learning model to rank the danger level, and shows you a clean, actionable dashboard so your security team can respond fast.

Collect
Pulls malicious IPs from 7 open-source threat feeds (Abuse.ch, OTX, CINS Army, Emerging Threats…)
Enrich
GeoIP · AbuseIPDB · VirusTotal · GreyNoise · URLhaus · Domain intelligence
Score
Random Forest + XGBoost stacking ensemble produces a 0.0–1.0 risk score per IOC
Map
Each IP auto-tagged with MITRE ATT&CK tactics — no manual work needed
Alert
Define rules — fire Slack, Teams, PagerDuty or email when conditions match
Export
Push enriched IOCs to Splunk HEC or Elasticsearch automatically

2. The Name — What Does "Sentinel" Mean?

SENTINEL

“A guard or watchman posted to stand watch and warn of approaching danger.”

From 16th-century Italian sentinella, from sentire — to hear, to perceive.

A sentinel is a soldier stationed at the entrance to a camp or city, watching the horizon and sounding the alarm if an enemy approached. They do not wait for the enemy to arrive — they watch constantly, so that others can act in time.

PartMeaning
SentinelA guard that watches continuously — exactly what this platform does 24/7
TIThreat Intelligence — the domain of cybersecurity this platform operates in

The name is deliberate on three levels:

  • ▸Vigilance — SentinelTI never sleeps. It continuously fetches threat feeds, enriches indicators, and monitors your environment.
  • ▸Warning — Like a sentinel raising the alarm, SentinelTI fires alert webhooks the moment it detects a high-risk IOC matching your rules.
  • ▸Context — A good sentinel doesn't just shout "danger!" — it tells you where the threat is, what it is, and why it's dangerous. SentinelTI does this through ML scoring, SHAP explanations, and MITRE ATT&CK mapping.

3. Getting Started — First Login

▸Step 1 — Register

Go to the SentinelTI URL and click Register. Fill in your email, password (min 8 chars, must differ from your email), full name, and your organisation name. Each organisation gets a fully isolated tenant workspace.

▸Step 2 — Log In

Enter your email and password. You land directly on the Offense Queue dashboard.

▸Step 3 — Fetch Your First Threat Feeds

In the Command Bar at the top, select an IOC count (25–200) and click FETCH. The system pulls from all configured threat feeds and begins enriching in the background. Watch the KPI strip update in real time.

▸Step 4 — Run ML Scoring

After enrichment completes, click SCORE. The ML stacking ensemble (Random Forest + XGBoost) assigns a risk score to every IOC. The ML SCORED counter in the KPI strip will update.

→
First-time fetch takes 30–90 seconds. The status indicator shows ENRICHING while the pipeline runs. You can switch pages and come back — enrichment continues in the background.

4. The Dashboard Layout

Every page shares the same three-layer shell:

layout
┌──────────────────────────────────────────────────────────────┐
│  TOP BAR  — Tenant name · Status dot · UTC+IST clock         │
│             DARK/LIGHT toggle · DOCS button                  │
├──────────────────────────────────────────────────────────────┤
│  KPI STRIP  — TOTAL · HIGH · MEDIUM · LOW · ENRICHED · ML   │
├──────────────────────────────────────────────────────────────┤
│  COMMAND BAR  — IOC limit · FETCH · SCORE · CLEAR ·          │
│                REFRESH · EMAIL REPORT                         │
├──────────┬───────────────────────────────────────────────────┤
│          │                                                    │
│ SIDEBAR  │            PAGE CONTENT                           │
│ Nav menu │         (changes per page)                        │
│          │                                                    │
└──────────┴───────────────────────────────────────────────────┘

▸KPI Strip — Always Visible

MetricWhat It Shows
TOTALTotal IOCs currently in your database
HIGHIOCs with ML score ≥ 0.70 — block immediately
MEDIUMIOCs with ML score 0.30–0.69 — investigate
LOWIOCs with ML score < 0.30 — monitor
ENRICHEDIOCs that completed the full 5-stage pipeline
ML SCOREDIOCs with an ML risk score assigned

▸System Status Dot

StatusMeaning
🟢 OPERATIONALIdle and healthy
🟠 ENRICHINGActively pulling and enriching IOCs
🔵 ML SCORINGRunning the machine-learning pipeline
🔴 DEGRADEDCannot reach the backend — check your connection
→
Smart live updates — the status dot is kept fresh by a background poller that adapts its speed automatically. When a fetch or ML job is active, it checks every 5 seconds so progress feels instant. When everything is idle, it backs off to once every 60 seconds — so the app never hammers the backend unnecessarily.

5. All Pages Explained

Offense Queue/dashboard

Your primary triage workspace. Every morning, start here to see what threats arrived overnight.

  • ·Live UTC + IST clock updated every second
  • ·IOC table with 12 columns: IP, severity, risk score, feed source, domain, domain risk, confidence %, abuse reports, country, ISP, malware family, last seen
  • ·Filter by risk tier (HIGH / MEDIUM / LOW), enrichment status, full-text search, sort order
  • ·HIGH rows highlighted red, MEDIUM rows highlighted orange
  • ·↺ Refresh button reloads the table without re-fetching
ML Risk Engine/scoring

The machine-learning scoring control panel. Shows the full stacking ensemble output and lets you re-run scoring at any time.

  • ·RUN ML SCORING button with live progress bar showing %
  • ·Score distribution histogram — 10 bins from 0.0 to 1.0
  • ·Risk level distribution chart — HIGH / MEDIUM / LOW counts
  • ·High Severity table showing RF probability, XGB probability, and final stacked score per IOC
  • ·Model architecture cards: Random Forest · XGBoost · Logistic Regression meta · 3-Fold CV
SHAP Explainability/shap

Explains every ML prediction — which signals drove the score up or down. No data science background required.

  • ·Global view: mean |SHAP| bar chart — which features matter most overall
  • ·Local view: select any IP and click EXPLAIN → waterfall chart per feature
  • ·Red bars (▲) = feature pushed risk higher; Green bars (▼) = feature pushed risk lower
  • ·Shows base value + each feature's signed contribution → sums to final score
  • ·Useful for explaining to management exactly why an IP was flagged
Analytics/analytics

Visual overview of your entire IOC dataset — no interaction needed, just data.

  • ·Top countries bar chart (horizontal) — where most threats originate
  • ·Feed breakdown bar chart — IOCs per source
  • ·ISP attribution table — top 10 ASNs hosting malicious IPs
  • ·Malware family chart — Feodo C2 botnet strain distribution
  • ·Ingestion timeline — IOC count per hour to track fetch cadence
  • ·Phase 2 coverage strip: MITRE mapped · domain intel · GreyNoise malicious · URLhaus · Feodo C2
MITRE ATT&CK/mitre

Interactive ATT&CK matrix view mapping your current IOCs to real-world adversary tactics and techniques.

  • ·Tactic heatmap — colour intensity shows IOC count per tactic
  • ·Click any tactic to drill down to matching IOCs in a table
  • ·Technique-level breakdown with count and progress bars
  • ·Auto-mapped during enrichment — no manual tagging needed
  • ·Covers: Credential Access · C&C · Reconnaissance · Initial Access · Impact · Discovery · Resource Development
IP Lookup/lookup

On-demand deep intelligence report for any IPv4 address. Works for IPs in your database and any live IP.

  • ·IN DB IPs: full ML score + SHAP breakdown + all enrichment data
  • ·Any IP: live PTR → GreyNoise → URLhaus → VirusTotal Domain
  • ·GreyNoise card: malicious / RIOT (known safe) / noise-scanner / unknown
  • ·URLhaus card: malicious URL count with online/offline status
  • ·VT Domain card: detection count, reputation score, categories
  • ·"Force fresh" toggle bypasses cache for real-time data
Alert Rules/alerts

Rule-based alerting engine. Define conditions and notification channels — rules fire automatically after each enrichment cycle.

  • ·Conditions: min risk score (slider), risk tiers, country codes, MITRE tactic
  • ·Channels: Slack webhook · Teams webhook · PagerDuty routing key · Email
  • ·Rules fire automatically after every enrichment completion
  • ·Active rules list shows fired count and channel badges
  • ·Alert history log: last 10 events with IP · rule · timestamp
SIEM Export/siem

Push enriched IOCs to Splunk or Elasticsearch, automatically or on demand.

  • ·Supported: Splunk HTTP Event Collector (HEC) · Elasticsearch Bulk API
  • ·Configure URL, token/API key, index name, auto-push toggle, min tier
  • ·Test connection before saving
  • ·Manual push: select tier range (HIGH only / HIGH+MEDIUM / All enriched)
  • ·Status panel: last push time, total pushed, connection health
  • ·Field mapping: indicator → src_ip, ml_score → sentinel_risk_score, etc.
Threat Intel/intel

Live cybersecurity news from 6 major publications, last 48 hours only.

  • ·Sources: The Hacker News · BleepingComputer · SANS ISC · Dark Reading · CyberSecurity News · Security Affairs
  • ·Click source filter buttons to focus on specific publications
  • ·Articles show: title, summary, source badge, UTC + IST timestamps, time-ago label
  • ·Click any headline to open the full story in a new tab
  • ·Auto-refreshes — click ↺ Refresh for latest
Integrations/integrations

Three ways to bring your own threat data into SentinelTI.

  • ·File Upload: drag-and-drop CSV or NDJSON from your computer
  • ·S3 Import: pull directly from AWS S3 — bucket, key, region, IAM credentials
  • ·Webhook: unique per-tenant URL — POST IOC JSON from Splunk, QRadar, Sentinel, XSOAR, or any script
  • ·Accepted fields: indicator / ip / ioc / value · sources · risk · country · threat_type · malware_family
  • ·After import: run FETCH (enrichment) then SCORE to process your custom IOCs
Asset Registry/assets

Register your private IP ranges so SentinelTI can tell the difference between your own infrastructure and external attackers.

  • ·Add CIDRs in CIDR notation (e.g. 10.0.0.0/8, 192.168.0.0/16) with a label and type
  • ·Types: Internal · DMZ · Public-owned — each gets a distinct colour in the dashboard
  • ·Registered IPs show a blue INTERNAL badge — suppressed from the external threat view
  • ·If an internal IP appears in external threat feeds with a high score → purple COMPROMISED badge + critical alert
  • ·Common enterprise ranges (RFC 1918) are listed as one-click shortcuts in the registry UI

6. The Command Bar

Visible on every dashboard page. Your primary control panel.

ButtonWhat It DoesWhen to Use
[25/50/100/200]Sets IOC count per fetchMore = broader coverage; fewer = faster
FETCHPull threat feeds + run enrichment in backgroundStart of every shift / when you want fresh data
SCORERun ML scoring on all un-scored IOCsAfter FETCH completes
CLEARDelete all tenant IOCs (confirmation required)Fresh start / testing
REFRESHUpdate KPI strip countsCheck progress without re-fetching
EMAIL REPORTSend HTML threat report to your emailDaily briefing / share with management
EXPORT CSVDownload all current IOCs as a CSV fileOffline analysis / share with non-dashboard users

7. Risk Scores Explained

▸ML Score (0.0000 – 1.0000)

After running SCORE, each IOC gets a precise 4-decimal probability from the stacking ensemble:

Score RangeLevelRecommended Action
≥ 0.70HIGHBlock immediately — multi-source, high AbuseIPDB confidence, VT positive
0.30 – 0.69MEDIUMInvestigate — flagged by 1–2 sources, enrichment suggests malicious
< 0.30LOWMonitor — single low-confidence source or stale report

▸Asset-Aware Badges

If you have registered IP ranges in the Asset Registry, two additional badge types appear:

BadgeMeaningWhat to Do
INTERNALIP is in your registered CIDR range and is not flagged by threat feedsNo action — this is your own infrastructure
COMPROMISEDIP is in your registered CIDR range AND appears in external threat feeds with a high scoreInvestigate immediately — one of your own assets may be compromised or mis-attributed
⚠
A COMPROMISED badge is a critical finding — it means an IP you own is appearing in global malware feeds. This could be a compromised host, a misconfigured server acting as a proxy, or an IP you recently acquired that was previously abused.

▸Why Two Risk Columns on the Table?

ColumnWhat It Is
IP RISK (ml_risk)ML model's assessment of the IP itself based on AbuseIPDB, VT, geo, feeds
DOMAIN RISK (domain_risk)Assessment of the domain associated with this IP — from VT Domain + URLhaus. An IP can have LOW IP risk but HIGH domain risk if its hostname distributes malware.

8. The Enrichment Pipeline

When you click FETCH, each IOC goes through 5 sequential stages automatically:

#1
GeoIP— ipinfo.io
country, city, ISP, ASN, hostname
#2
AbuseIPDB— api.abuseipdb.com
abuse_reports, confidence_score, attack categories, is_tor, last_reported
#3
VirusTotal— virustotal.com/api/v3
vt_detections, vt_total, vt_malicious, vt_suspicious
#4
MITRE Mapping— internal logic
mitre_tactics[], tactic_ids[], techniques[]
#5
Domain Intelligence— PTR · GreyNoise · URLhaus · VT Domain
ptr_hostname, gn_classification, gn_riot, urlhaus_malicious, domain_risk
ℹ
The ENRICHED counter in the KPI strip increments as each IOC completes all 5 stages. Only enriched IOCs can be ML scored.

▸Enrichment API Limits & Costs

SentinelTI uses six external enrichment APIs. All are free-tier or key-optional — here’s what each provides and what paid tiers unlock:

ServiceFree TierWhat You Get FreePaid Tier Unlocks
VirusTotalFree public key4 req/min · 500 req/day · vendor detection counts1,000 req/min · file sandbox · full scan history
AbuseIPDBFree (1,000 req/day)Confidence score · report count · attack categories · countryHigher rate limits · full report history export
GreyNoiseCommunity API (1,000 req/day)noise / riot flags · classification for ~15% of internet IPsFull dataset · intent tags · historical lookups — explains GN Malicious = 0 on free
ipinfoFree (50K req/month)GeoIP · city · org / ISP · hostname · lat/lonMore volume · ASN detail · privacy detection
URLhausAlways freeMalicious URL database · threat labels · online/offline statusNo paid tier — always free
OTX AlienVaultFree API key10 latest threat pulses · IOC listsMSSP: all pulses · historical · private threat groups
⚠
GreyNoise “GN Malicious = 0” is expected on the free Community API. GreyNoise only labels IPs as malicious if they’ve been profiled in their global sensor network. Most botnet-client IPs (e.g. China Unicom hosts) return unknown even though they appear in other feeds. A paid GreyNoise key gives dramatically better classification coverage.

MSSP customers can request BYOK (Bring Your Own Key) enrichment — supply your own VirusTotal or GreyNoise API key for richer enrichment without rate-limit sharing. Contact sohamshahh@gmail.com to enable this.

9. ML Model Deep-Dive

This section explains the full machine-learning pipeline — from raw enrichment data to the score you see on screen.

▸The Architecture

model
Raw IOC features (11 numbers)
        │
        ├─────────────────────────────┐
        ▼                             ▼
Random Forest (50 trees)        XGBoost (50 rounds)
  max_depth = 6                   max_depth = 4, lr = 0.05
  rf_prob = P(malicious)          xgb_prob = P(malicious)
        │                             │
        └──────────┬──────────────────┘
                   ▼
        [rf_prob, xgb_prob] → Logistic Regression (meta)
                   │
                   ▼
        ml_score  (0.0000 – 1.0000)
                   │
        GreyNoise corroboration boost (+0.10 if gn_classification = "malicious")
                   │
                   ▼
        final_score  ≥ 0.70 → HIGH  |  0.30–0.69 → MEDIUM  |  < 0.30 → LOW

▸The 11 Features

#FeatureSourceWhat It Measures
1abuse_reportsAbuseIPDBTotal reports filed — more = more suspicious. Botnet C2s accumulate hundreds.
2recency_hrsAbuseIPDB / feed timestamp / last_seenHours since the most recent real signal — AbuseIPDB’s own report time first, then the source feed’s own first-seen timestamp (ThreatFox, OTX, abuse.ch/Feodo Tracker carry one), falling back to ingestion time only when neither exists. Default 720h (30 days) if unknown.
3confidence_pctAbuseIPDB0–100% confidence from AbuseIPDB based on report quality and diversity.
4vt_detectionsVirusTotalNumber of AV engines that flagged this IP. Even 1–2 is significant.
5vt_totalVirusTotalTotal engines that checked this IP — context for vt_detections.
6multi_sourceInternal1.0 if IP appears in 2+ feeds, 0.0 if single-source. Independent corroboration is key.
7attack_type_countAbuseIPDBNumber of distinct attack categories — multi-vector attackers score higher.
8geo_riskipinfo1.0 if country in high-risk set (CN, RU, KP, IR, NG, RO, BR, UA, IN, VN), else 0.0.
9freshnessDerivedclamp(1 − recency_hrs / 720, 0, 1) — decays linearly over 30 days.
10source_scoreFeed metadataFeed quality score / 10. Feodo = 0.5, CINS Army = 0.2, OTX = 0.4, etc.
11gn_maliciousGreyNoise1.0 if GreyNoise independently classifies this IP as malicious, else 0.0. Cross-source corroboration signal.

▸GreyNoise Corroboration Boost

When both AbuseIPDB and GreyNoise independently flag an IP as malicious, the agreement across two completely separate intelligence networks is a strong signal that should be reflected in the final score.

SentinelTI applies a +0.10 corroboration boost to the raw ML score whenevergn_classification == "malicious". This boost applies to all three output values:ml_score, rf_prob, and xgb_prob. The final score is always clamped to [0.0, 1.0].

scoring
# Example: AbuseIPDB = HIGH confidence + GreyNoise = malicious

Without boost:
  ml_score = 0.82 → HIGH
  gn_classification = "malicious"

With boost applied:
  ml_score = min(0.82 + 0.10, 1.0) = 0.92 → HIGH (stronger)
  gn_corroboration_boost = true  ← returned in API response
→
A trained feature and a post-score boost — deliberately both. gn_malicious is feature #11 above: real GreyNoise lookups now run during training too, so the model learns from cross-source agreement directly rather than never seeing it. SentinelTI still applies the explicit +0.10 post-score boost shown above on top of that — GreyNoise’s free Community API rate-limits mean training-time coverage for this one feature can vary between retrains, while the post-score boost fires deterministically off live enrichment every time, independent of training. The API response always shows gn_corroboration_boost: true/false so you know when it applied. The heuristic fallback (used during model warm-up) also weights gn_malicious at 15% directly.

The boost only fires when GreyNoise actively classifies the IP as malicious — it does not fire for unknown or benign (RIOT) classifications. A GreyNoise 404 or rate-limit response leaves the score unchanged.

▸How Random Forest Works

A Random Forest is an ensemble of 50 decision trees. Each tree is trained on a random subset of the training data and at each split considers only a random subset of the 10 features. The trees vote independently — the RF outputs the fraction of trees that voted "malicious" (rf_prob).

Two sources of randomness (random data subsets + random feature subsets) prevent overfitting and make the ensemble robust to noisy signals. With max_depth=6, each tree can learn complex feature interactions.

Real Example — IP 185.220.101.42 going through all 50 trees
voting
Features:  abuse_reports=142, recency_hrs=2.3, confidence_pct=89.5,
           vt_detections=12, multi_source=1.0, freshness=0.997 …

Tree  1:  "abuse_reports > 20?  YES → vt_detections > 5?   YES → MALICIOUS ✓"
Tree  2:  "multi_source == 1?   YES → confidence_pct > 60?  YES → MALICIOUS ✓"
Tree  3:  "freshness > 0.8?     YES → abuse_reports > 50?   YES → MALICIOUS ✓"
Tree  4:  "recency_hrs < 24?    YES → vt_detections > 3?    YES → MALICIOUS ✓"
Tree  5:  "confidence_pct > 80? YES → multi_source == 1?    YES → MALICIOUS ✓"
  ...  (trees 6–47 each learned different rules, all vote MALICIOUS)  ...
Tree 48:  "abuse_reports > 100? YES → freshness > 0.9?      YES → MALICIOUS ✓"
Tree 49:  "geo_risk == 0?       YES → recency_hrs < 5?      NO  → BENIGN    ✗"
Tree 50:  "vt_detections > 10?  YES → confidence_pct > 70?  YES → MALICIOUS ✓"

Vote tally:  48 MALICIOUS  vs  2 BENIGN
rf_prob = 48 / 50 = 0.96
→Each tree learned different rules from different slices of training data, but 48 out of 50 agree — this IP is malicious.
→Each tree is trained on a random bootstrap sample of the 800 training rows — so each tree sees a slightly different dataset. At every split, only a random subset of the 10 features is considered. This forces the trees to be diverse — they each learn different patterns. That diversity is the whole point: when one tree gets confused by a noisy signal, the other 49 trees outvote it.
→rf_prob = 0.94 (not 0.96) on screen because the trained model's exact tree splits differ — but the meaning is the same: near-unanimous agreement.
→A score of 0.94 = only ~3 trees disagreed. A score of 0.55 = forest nearly split in half — far less confident.

▸How XGBoost Works

XGBoost is a sequential boosting ensemble — unlike RF (parallel trees), it builds 50 trees one after another, each correcting the errors of the previous trees. A low learning rate (0.05) means each tree contributes only 5% of its prediction, preventing any single tree from dominating.

RF and XGBoost make their errors in different places, so combining them through stacking consistently outperforms either model alone.

▸How Stacking (the Meta-Learner) Works

Instead of simple averaging, a Logistic Regression learns the optimal combination of RF and XGBoost outputs using 3-fold cross-validation. It learns weights β₁ and β₂ such that:

formula
ml_score = sigmoid(β₀ + β₁ × rf_prob + β₂ × xgb_prob)

If RF is more reliable on your data → β₁ > β₂ (meta-learner adapts automatically)

▸Training Data — Real AbuseIPDB

The model is trained on real labeled threat data from AbuseIPDB, not synthetic samples. On first startup, SentinelTI fetches up to 400 confirmed malicious IPs from the AbuseIPDB blacklist (confidence ≥ 50%) and verifies a set of known-safe DNS/CDN IPs as the negative class. The resulting dataset is cached for 7 days so training is fast on every restart.

ClassSourceLabel criteria
MaliciousAbuseIPDB /blacklist?confidenceMinimum=50Reported by real security teams worldwide · multi-source corroboration
SafeKnown DNS/CDN IPs (Google 8.8.8.8, Cloudflare 1.1.1.1, etc.) verified via /checkabuseConfidenceScore < 5%
→
Warm-up behaviour — training runs in the background when the server starts. While the model is warming up, scores are calculated instantly using a rule-based heuristic (abuse_reports×0.30 + confidence_pct×0.30 + freshness×0.12 + geo_risk×0.13 + gn_malicious×0.15) so your dashboard is never blocked. The GreyNoise corroboration signal is explicitly weighted in the heuristic, so cross-source agreement is captured even before the ML model finishes training. The model_ready field in the API response tells you which path was used. Once training completes (usually under 60 seconds from a fresh cache), all subsequent scores use the full ML ensemble with the +0.10 post-boost.

▸Example — Full Walkthrough (with GreyNoise Corroboration)

example
IP: 185.220.101.42 (after enrichment)

Features (11):
  abuse_reports     = 142     (from AbuseIPDB)
  recency_hrs       = 2.3     (reported 2.3 hours ago)
  confidence_pct    = 89.5    (89.5% confidence)
  vt_detections     = 12      (12 AV engines flagged it)
  vt_total          = 87      (87 engines checked)
  multi_source      = 1.0     (in Feodo + OTX)
  attack_type_count = 3.0     (SSH + web + port scan)
  geo_risk          = 0.0     (Germany — not in high-risk set)
  freshness         = 0.997   (seen 2.3h ago)
  source_score      = 0.5     (Feodo base score 5 → /10)
  gn_malicious      = 1.0     (GreyNoise: classification = "malicious")

ML Scoring:
  rf_prob  = 0.9400   (47/50 trees voted malicious)
  xgb_prob = 0.9100   (boosted trees strongly agree)
  ml_score = 0.9412   (stacking meta-learner output)

GreyNoise corroboration boost (+0.10, capped at 1.0):
  ml_score → min(0.9412 + 0.10, 1.0) = 1.0000 → HIGH (corroborated)
  gn_corroboration_boost = true

SHAP (why HIGH?):
  Base value:       0.45
  + abuse_reports:  ▲ +0.28   (142 reports — very strong)
  + confidence_pct: ▲ +0.15   (89.5% AbuseIPDB confidence)
  + freshness:      ▲ +0.07   (seen 2.3h ago)
  + vt_detections:  ▲ +0.06   (12 detections)
  + multi_source:   ▲ +0.05   (two independent sources)
  + gn_malicious:   ▲ +0.10   (GreyNoise corroboration boost)
  - geo_risk:       ▼ -0.03   (Germany — slightly reduces score)
                    ──────
  Final:            1.0000 → HIGH (corroborated by GreyNoise)

10. Threat Feed Sources

FeedIOC TypeQualityNotes
Abuse.ch FeodoBotnet C2 IPv4HighEmotet, QakBot, Dridex C2 servers
CINS ArmyBrute-force / scannersMediumLarge volume, lower per-IP confidence
OTX AlienVaultCommunity pulsesHighCrowdsourced; requires free OTX API key
Feodo ExtendedBanking trojansHighMalware family + C2 status per IP
ET SSHSSH scannersMediumProofpoint blocklist
ET MailSpam sourcesMediumProofpoint blocklist
ET WebWeb scannersMediumProofpoint blocklist

11. SIEM Integration

SentinelTI can deliver enriched threat intelligence to your SIEM in two modes — push (SentinelTI sends data to your SIEM after every FETCH) and pull(your SIEM polls SentinelTI's export API on a schedule). Both are available from the SIEM and Integrations pages.

▸11.1 Export API Key — Pull Mode

The pull model is the industry-standard integration pattern. Your SIEM polls SentinelTI's export endpoint on a schedule and retrieves the latest enriched IOCs. No inbound firewall rules needed on your SIEM side.

ℹ
Who can use it: Pro plan and above. Admin users always have access regardless of plan.

Getting your API Key: Go to Integrations in the sidebar → scroll to the Export API Key card → click SHOW → copy. Your pre-built pull URL is shown below the key.

code
https://sentineltibackend-production.up.railway.app/export/iocs?api_key=<YOUR_KEY>&risk=HIGH,MEDIUM&limit=500
ParameterDefaultDescription
api_keyrequiredYour Export API Key from the Integrations page
riskHIGH,MEDIUMComma-separated tiers: HIGH, MEDIUM, LOW
limit500Maximum IOCs returned (capped at 1000)
since—ISO 8601 timestamp — only IOCs seen after this time (incremental pulls)
fmtjsonjson (default) or ndjson (newline-delimited, for log pipelines)

If your key is compromised, click Rotate Key on the Integrations page — the old key stops working immediately.

▸11.2 DNIF Hypercloud — Full Integration Guide

DNIF is the recommended SIEM for SentinelTI. This section covers the complete end-to-end setup — push (SentinelTI → DNIF after every FETCH), pull (DNIF polls SentinelTI on a schedule), and correlation Signal creation. For push credentials only, see the quick-reference in Section 11.3.3.

▸Step 1 — Create the HTTP Connector in DNIF

In DNIF Hypercloud: Connectors → Add Connector → HTTP Connector. Name it SentinelTI. Once created, copy the Collector URL and Bearer Token — you will need these in Step 2.

DNIF FieldWhere to find it
Collector URLDNIF → Connectors → your SentinelTI connector → Collector URL. Format: https://<tenant>.dnif.cloud:2882/{id}/default/{connector-id}/events
Bearer TokenDNIF → Connectors → your SentinelTI connector → Bearer Token (shown once — copy immediately)

▸Step 2 — Configure Push in SentinelTI

In SentinelTI: SIEM page → DNIF tab → paste the Collector URL and Bearer Token → set minimum risk tier (HIGH recommended) → enable Auto-push → click Test → click Save. After every FETCH, HIGH/MEDIUM IOCs are automatically pushed to DNIF.

▸Step 3 — Configure Pull in DNIF

In DNIF, configure the HTTP Connector to also poll SentinelTI's export endpoint every hour. Use the pull URL from the Integrations page:

code
https://sentineltibackend-production.up.railway.app/export/iocs?api_key=<YOUR_KEY>&risk=HIGH,MEDIUM&limit=500

Set polling interval to 3600 seconds (1 hour) to match SentinelTI's enrichment cycle.

▸Step 4 — Create a DNIF Correlation Signal

Once IOCs flow into DNIF, create a Signal that fires whenever a network log matches a SentinelTI HIGH IOC:

Signal fieldValue
NameSentinelTI HIGH IOC Match
StreamYour firewall / proxy / DNS log stream
Conditionsrc_ip IN SentinelTI feed AND sentinel_risk = HIGH
ActionCreate DNIF Case + notify SOC channel
→
Test the full chain: run a FETCH in SentinelTI, wait ~30 seconds, then check DNIF → Events to confirm IOCs are arriving with the sentinel_risk_score field populated.

▸11.3 Push Mode — All 7 SIEMs

SentinelTI can push enriched IOCs directly to seven SIEMs via their native APIs. Go to SIEM in the sidebar, pick the SIEM tab, fill in credentials, test, then save. After every FETCH, HIGH/MEDIUM IOCs are pushed automatically.

▸11.3.1 Splunk HEC

Splunk Web → Settings → Data Inputs → HTTP Event Collector → New Token → name it SentinelTI → copy token.

FieldValue
URLhttps://splunk.company.com:8088 (HEC port — usually 8088)
HEC TokenPaste token — SentinelTI adds the Splunk prefix automatically
Index Namesentinel-ti (create this index in Splunk first)
code
index=sentinel-ti sourcetype=sentinel_ti:ioc severity=HIGH
| table src_ip, sentinel_risk_score, malware_family, geo_country

▸11.3.2 Elasticsearch / Elastic SIEM

Kibana → Stack Management → API Keys → Create API Key with write access to your target index.

FieldValue
URLhttps://your-cluster.es.io:9200 or Elastic Cloud endpoint
API KeyBase64-encoded API key from Kibana
Index Namesentinel-ti-iocs

SentinelTI uses the Elasticsearch Bulk API (/_bulk). Each IOC is a JSON document with @timestamp.

▸11.3.3 DNIF Hypercloud — Push Credentials

ℹ
This section covers push credentials only (the fields SentinelTI needs to push IOCs to DNIF). For the complete setup including pull configuration and DNIF Signal creation, see Section 11.2.
Field in SentinelTI SIEM pageWhere to get it
SIEM TypeSelect "DNIF" from the dropdown
DNIF Collector URLDNIF → Connectors → your HTTP Connector → Collector URL
Bearer TokenDNIF → Connectors → your HTTP Connector → Bearer Token
Minimum TierSet to HIGH (recommended) or MEDIUM to control push volume

▸11.3.4 Microsoft Sentinel

You need a Data Collection Rule (DCR), a Data Collection Endpoint (DCE), and an Azure AD app token.

FieldValue
SIEM TypeMS Sentinel
DCE Ingestion URLhttps://<dce>.eastus.ingest.monitor.azure.com/dataCollectionRules/<dcr-id>/streams/<stream>?api-version=2023-01-01
Bearer TokenAzure AD OAuth2 token (scope: https://monitor.azure.com/.default)
⚠
Azure AD tokens expire in 60 minutes. For production, use a service principal with client credentials flow to auto-refresh.

▸11.3.5 IBM QRadar

QRadar Admin → Authorized Services → Add Authorized Service → name SentinelTI → role Admin → copy the SEC token (UUID).

FieldValue
SIEM TypeQRadar
QRadar Host URLhttps://qradar.company.com (no trailing slash)
SEC TokenUUID from Admin → Authorized Services

▸11.3.6 Sumo Logic

Sumo Logic → Manage Data → Collection → Add Collector → Hosted Collector → Add Source → HTTP Logs & Metrics. The Source URL is both the endpoint and the authentication — no separate token.

FieldValue
SIEM TypeSumo Logic
HTTP Source URLhttps://endpoint1.collection.us2.sumologic.com/receiver/v1/http/<unique-key>
Token fieldHidden automatically — URL contains auth

▸11.3.7 Datadog

Datadog → Organization Settings → API Keys → New Key → name SentinelTI → copy the key. No URL needed — SentinelTI always sends to Datadog's fixed log intake endpoint.

FieldValue
SIEM TypeDatadog
URL fieldHidden — fixed endpoint used automatically
API KeyYour Datadog API key
code
source:SentinelTI @severity:HIGH

▸11.4 Real-Time Alerts to SIEM via Alert Rules

Alert Rules can push a single IOC to DNIF the moment it's detected — without waiting for the next batch push. Go to Alerts → create a rule → add a DNIF channel → enter the Collector URL and Bearer Token. When the rule fires, DNIF receives the event within seconds.

▸11.5 Compatible SIEMs — Quick Reference

SIEMPushPullWhat to configure
DNIF Hypercloud✅ Native✅ HTTP pollSee Section 11.2
Splunk✅ HEC✅ /export/iocsHEC URL + token
Elasticsearch✅ Bulk API✅ /export/iocsES URL + API key
Microsoft Sentinel✅ DCE API✅ Logic AppDCE URL + Azure AD token
IBM QRadar✅ REST API✅ Log SourceSEC token + host URL
Sumo Logic✅ HTTP Source✅ /export/iocsHTTP Source URL (URL = auth)
Datadog✅ Log Intake✅ /export/iocsAPI key only (no URL needed)
Google Chronicle—✅ Feed MgmtGeneric REST → pull URL
Cortex XSOAR—✅ HTTP Poll/export/iocs?api_key=<KEY>

12. Asset Registry

The Asset Registry solves a real problem in threat intelligence: reputation-based scoring breaks for private IP ranges. When SentinelTI sees 192.168.1.100 in a threat feed, it has no way to know if that IP belongs to an attacker or to your own infrastructure — unless you tell it.

▸12.1 The Problem It Solves

ScenarioWithout Asset RegistryWith Asset Registry
Your SWIFT gateway (10.10.5.22) appears in a public blocklistScored HIGH — false positive alert fires, SOC wastes time investigatingMarked INTERNAL — suppressed from external threat view, no alert
Compromised internal host (192.168.1.100) starts beaconingLow score — it's an RFC 1918 address, not in any feedMatched as YOUR asset + in feed with high score → COMPROMISED badge + critical alert

▸12.2 How to Register a Range

Go to Asset Registry in the sidebar.

FieldExampleNotes
CIDR Range10.0.0.0/8Standard CIDR notation — /8 through /32 all accepted
LabelInternal LANHuman-readable name shown in the dashboard ASSET column
TypeInternal / DMZ / Public-ownedControls badge colour — blue (internal), orange (DMZ), purple (public-owned)
→
Click any of the pre-filled RFC 1918 shortcuts at the bottom of the page to auto-populate the CIDR field.

▸12.3 How It Works in the Dashboard

After every FETCH + SCORE cycle, each IP is checked against your registered CIDRs:

ConditionDashboard BadgeAction
IP not in any registered rangeNormal risk badge (HIGH / MEDIUM / LOW)Standard threat workflow
IP in range, not in threat feeds (or low score)INTERNALSuppress — own infrastructure, not an external threat
IP in range AND in threat feeds with score ≥ 0.60COMPROMISEDAuto-alert fires + critical banner on dashboard

▸12.4 Automatic Compromised Asset Alerts

You do not need to create an alert rule for this — SentinelTI fires automatically. Every time FETCH + SCORE completes, the system checks for COMPROMISED IOCs and dispatches to all channels configured across your active alert rules (Slack, Teams, PagerDuty, email).

PropertyValue
TriggerAutomatically after every FETCH + SCORE cycle
ConditionRegistered IP seen in external threat feeds with ML score ≥ 0.60 or multiple feed sources
ChannelsUnion of all channels across all active alert rules for your tenant
Deduplication1-hour window — same IP will not fire again within 1 hour
Alert logAppears in Alert Rules → Recent Alerts with a purple COMPROMISED badge
DashboardPurple warning banner at top of Offense Queue listing affected IPs
⚠
If you have no alert rules configured, the system alert still fires internally and appears in the alert log — but no external notification (Slack/PagerDuty) is sent because there are no channels to dispatch to. Set up at least one alert rule with a Slack or PagerDuty channel to receive external notifications.

▸12.6 Common Enterprise Ranges

CIDRClassTypical Use
10.0.0.0/8Class ALarge enterprise internal networks
172.16.0.0/12Class BMid-range private networks
192.168.0.0/16Class COffice / branch networks
100.64.0.0/10SharedISP CGN / VPN address space

13. Team Management

SentinelTI is built for SOC teams. Each organisation has a single shared workspace (tenant) — all members see the same IOC database, alerts, and SIEM configuration. The admin controls who can access the workspace.

▸12.1 Roles

RoleWho has itKey capabilities
AdminFirst user who registers (the plan owner)Invite/remove members, configure SIEM, access Export API key, upgrade plan, clear database, bypass plan gates
AnalystInvited membersFetch IOCs, run ML scoring, create alert rules, IP Lookup, view analytics
ℹ
Admins always bypass plan gates — they have access to all features regardless of the current plan tier.

▸12.2 Inviting Team Members

Only admins can invite new members. Go to Team in the sidebar → click + Invite Member → enter the work email and select a role → click Send Invite.

SentinelTI emails the invitee with a one-click join link. They set their name and password and automatically join your workspace — no new tenant is created.

⚠
If the email fails (e.g., unverified domain in development), the modal shows a fallback invite URL you can copy and share directly via Slack or email.

▸12.3 The Invite Link

code
https://sentinelti-product.vercel.app/register?invite=<token>

The token is single-use — once accepted it is invalidated. You can revoke a pending invite from the Team page's Pending Invites section at any time before the invitee clicks it.

▸12.4 Removing Members

Go to Team → find the member → click the ✕ next to their name → confirm. Removed members lose access immediately — their JWT tokens fail on the next request. You cannot remove yourself; invite the new admin first, then have them remove you.

▸12.5 Pending Invites

The Team page (admin view only) lists all pending invites with the invitee email, creation date, assigned role, and a Revoke button to cancel before the link is used.

14. Account & Settings

ActionHow
Change passwordSidebar bottom-left → "Change password". Cannot set password = email.
Toggle theme"DARK / LIGHT" button in the top bar. Saved in browser storage.
Sign outSidebar bottom-left → "Sign out"
Email report"EMAIL REPORT" in the Command Bar — sends to your registered email

▸Tenant Isolation — Your Data Stays Yours

SentinelTI is a multi-tenant platform. Every organisation that registers gets a completely isolated workspace — no data is ever shared between accounts.

LayerHow isolation works
RegistrationA unique tenant_id is created for your organisation the moment you register
Data storageEvery IOC fetched is tagged with your tenant_id in the database — other tenants's IOCs are invisible to you
API requestsYour JWT token carries your tenant_id — the backend enforces it on every query, no exceptions
Plan limitsEach tenant has its own quota — 50 IOCs per fetch, 500 stored, and 500 ingested per UTC day on the Free plan — independent of all other accounts
CLEAR commandDeletes only your tenant's IOCs — never touches another organisation's data
ℹ
If User A fetches 50 IOCs and User B (different organisation) logs in, User B sees zeroof User A's IOCs. When User B runs their own fetch, they get their own independent set of 50 IOCs. The isolation is enforced server-side on every request — it cannot be bypassed from the frontend.

15. Plans & Pricing

SentinelTI offers three plans. Every account starts on Free (Starter) automatically — no credit card required. Upgrade any time to unlock higher IOC limits, more users, and advanced features.

Starter
Free
Forever free · No card needed
  • ✓50 IOCs / fetch
  • ✓500 IOCs stored
  • ✓500 IOCs / day ingest
  • ✓1 user
  • ✓ML scoring + SHAP
  • ✓IP Lookup & MITRE
  • ✓Community support
Most Popular
Pro
$79/mo
Billed monthly · Cancel anytime
  • ✓500 IOCs / fetch
  • ✓25,000 IOCs stored
  • ✓25,000 IOCs / day ingest
  • ✓Up to 5 users
  • ✓Export API Key (SIEM pull)
  • ✓HTML email reports
  • ✓Priority enrichment
MSSP
$299/mo
Per organisation · Annual billing available
  • ✓Unlimited IOCs stored
  • ✓Manage unlimited client workspaces
  • ✓Per-client branded PDF reports
  • ✓SIEM push (all 7 connectors)
  • ✓Cross-client risk rollup
  • ✓BYOK enrichment keys
FeatureFreeProMSSP
IOCs per fetch50500Unlimited
IOCs stored (total)50025,000Unlimited
Users per org1Up to 5Unlimited
ML risk scoring✓✓✓
SHAP explainability✓✓✓
MITRE ATT&CK✓✓✓
IP Lookup✓✓✓
Custom feeds—✓✓
Suppression list—✓✓
Email reports—✓✓
Export API Key—✓✓
Alert rules—✓✓
SIEM push (7 types)——✓
Auto-push on enrichment——✓
Client workspace management——✓
IOC TTL90 days90 days365 days
Support response72 business hrs24 business hrsSame business day
Support channelCommunity emailPriority + AI chatPriority email + AI chat
BYOK enrichment keys——✓ (on request)
PriceFree$79/mo$299/mo
ℹ
Fetch limits are enforced server-side. Free accounts requesting more than 50 IOCs in one fetch receive a 403, and exceeding 500 ingested IOCs in a single UTC day returns a 429 — both with an upgrade prompt. The daily ceiling exists because every ingested indicator is enriched against VirusTotal, AbuseIPDB, GreyNoise and OTX before the storage cap prunes it. Storage caps are enforced after each fetch: the oldest LOW-risk IOCs are pruned first, then MEDIUM, then HIGH-risk as a last resort only if the cap is still exceeded.

▸Support SLA

Every plan includes support, with response times that scale by plan level. See Support & SLA below for the full table.

16. Frequently Asked Questions

Q.I clicked FETCH but the table is empty — what happened?
A.Enrichment runs in the background (30–90 seconds). Watch the status dot — when it returns to OPERATIONAL the data is ready. Click REFRESH to update the KPI counts.
Q.Why do some IOCs not have an ML score?
A.ML scoring is a separate step. Click SCORE after fetching. Only enriched IOCs (with AbuseIPDB + VT data) can be ML scored.
Q.What is "PENDING" in the status filter?
A.The IOC was fetched but hasn't completed the 5-stage enrichment pipeline yet. Domain risk, GreyNoise, and MITRE tags won't appear until enrichment finishes.
Q.IP Lookup shows "LIVE LOOKUP" not "IN DB" — why?
A.Only IPs fetched via your threat feeds or imported via Integrations are "IN DB". Any other IP gets a fresh live query from GreyNoise, URLhaus, and VT Domain — but no ML score.
Q.How do I add my own IP watchlist?
A.Use the Integrations page — upload a CSV, pull from S3, or use the webhook. After import, run FETCH (enrichment) and SCORE to process them.
Q.SHAP shows near-zero importance for all features — why?
A.ML scoring hasn't run yet, or IOCs lack enrichment data. Make sure: (1) FETCH completed, (2) SCORE was run, (3) your AbuseIPDB and VirusTotal API keys are configured in the backend.
Q.SIEM push shows 0 IOCs pushed — why?
A.Check: (1) you have enriched IOCs in your database, (2) your minimum tier setting matches — if set to HIGH only but you have no HIGH IOCs nothing pushes, (3) the test connection passes.
Q.How often should I click FETCH?
A.For a production SOC: every 4–6 hours keeps data fresh. For monitoring only: once or twice a day is enough.

17. Support & SLA

SentinelTI includes AI-powered support for all plans, with guaranteed human response SLAs that scale with your plan. Visit /support to access the chatbot or submit a request.

▸AI Support Chatbot

The AI assistant at /support is powered by Groq (openai/gpt-oss-120b) and has full context about SentinelTI — features, troubleshooting, SIEM integration, enrichment, plans, and pricing. It provides instant answers 24/7, free for all plans.

If the AI cannot resolve your issue, you can escalate to human support via the “Escalate” button on the support page.

▸Response SLA by Plan

PlanResponse TimeAvailabilityChannels
Free72 business hoursBusiness hoursEmail · AI chatbot
Pro24 business hoursMon–FriPriority email · AI chatbot
MSSPSame business dayMon–FriPriority email · AI chatbot · BYOK setup calls

▸Contacting Support

For all enquiries: sohamshahh@gmail.com. Include your tenant name, plan, and a description of the issue. MSSP customers should mark urgent issues with [URGENT] in the subject line for priority handling.

ℹ
The AI chatbot logs all conversations for quality improvement. No PII is used for model training. Conversations are stored per-tenant and accessible only to SentinelTI admins.
SENTINEL THREAT INTELLIGENCE
v3.0.0||Explainable Threat Intelligence