skills-ws
Version:
87 agent skills for AI coding assistants — marketing, growth, web3, dev, design & operations. Built for OpenClaw, Claude Code, Cursor, and Codex.
97 lines (78 loc) • 4.84 kB
Markdown
## Contents
- 6. Threat Intelligence Lookups
- IOC Enrichment
- Threat Intelligence Decision (calibrated, not a naive sum)
- Output Templates (evidence, source, timestamp, uncertainty — always)
## 6. Threat Intelligence Lookups
### IOC Enrichment
```bash
# AbuseIPDB — check IP reputation (use a placeholder IP; never hardcode a real target)
curl -s "https://api.abuseipdb.com/api/v2/check?ipAddress=203.0.113.10&maxAgeInDays=90" \
-H "Key: $ABUSEIPDB_API_KEY" \
-H "Accept: application/json"
# OpenPhish — current phishing-URL feed (PhishTank's public API is deprecated; see §9).
# Free community feed, no key; refreshed frequently. Match the target against the feed.
curl -s "https://openphish.com/feed.txt" | grep -Fxq "https://suspicious.example.com" \
&& echo "OPENPHISH: listed (high-confidence phishing)" || echo "OPENPHISH: not listed"
# OTX AlienVault — threat indicators (free, key required)
curl -s "https://otx.alienvault.com/api/v1/indicators/domain/example.com/general" \
-H "X-OTX-API-KEY: $OTX_API_KEY"
```
### Threat Intelligence Decision (calibrated, not a naive sum)
Summing heterogeneous vendor weights and blocking at a fixed threshold produces
false blocks (e.g. a year-old AbuseIPDB note + a 0.5 OTX prior would "block" a clean
target). Use this ordered decision procedure instead. Run it AFTER the allowlist gate.
```
STEP 0 — Known-good gate (prevents the worst false positives):
- Target is an org-maintained allowlist entry (your own domains/contracts)? → CLEAN, stop.
- Domain on a major reputable list (e.g. Tranco/Cisco-Umbrella top ~10k) AND not
flagged by any AUTHORITATIVE source below? → CLEAN, lower the weight of weak signals.
STEP 1 — Authoritative override (any ONE ⇒ verdict immediately):
- Google Safe Browsing v5 match (MALWARE / SOCIAL_ENGINEERING / UNWANTED) → MALICIOUS.
- OpenPhish / verified Chainabuse (checked|trustedReporter) listing → MALICIOUS.
- OFAC/SDN sanctioned address → MALICIOUS (legal, not heuristic).
- VirusTotal ≥ 5 engines flagging, OR ≥ 3 reputable engines agreeing → MALICIOUS.
These are high-precision; a single hit is sufficient. Do NOT average them away.
STEP 2 — Corroboration tier (needs ≥ 2 independent signals OR 1 strong + recency):
Score each source, then require AGREEMENT rather than a raw sum:
VirusTotal = engines_flagging / total_engines (1–4 engines = weak)
AbuseIPDB = abuseConfidenceScore/100, ×0.5 if newest report > 90d old
OTX pulses = 0.4 (prior/context only — never decisive alone)
Chainabuse = 0.8 if checked|trusted else 0.3 (unverified)
Domain age = +0.3 if eTLD+1 < 30d (see §5 — age alone is NOT proof)
Typosquat hit = skeleton match 0.9 / edit-distance 0.5 (see §1)
- ≥ 2 independent sources each ≥ 0.4 → SUSPICIOUS (warn, show every source).
- 1 source ≥ 0.4 AND report age < 7d → SUSPICIOUS (fresh single-vendor signal).
- exactly 1 weak source (< 0.4) → LOW-CONFIDENCE note, proceed with caution.
- 0 signals → CLEAN.
STEP 3 — Target-category weighting:
- Money-moving target (wallet, contract, "connect wallet"/login page) → escalate one
band on uncertainty (SUSPICIOUS→treat as block-worthy until confirmed).
- Internal/private host (RFC-1918, .internal, corp CA) → DOWN-weight TLS/age/self-signed
heuristics; private PKI and fresh certs are normal there.
STEP 4 — False-positive escalation (before blocking anything high-impact):
- Conflict (authoritative CLEAN vs heuristic MALICIOUS)? Surface BOTH, do not auto-block;
ask the user or require a second authoritative source.
- Always record: source name, exact verdict field, report timestamp, and your confidence.
New threats often start with one vendor — log uncertainty, never fabricate corroboration.
```
### Output Templates (evidence, source, timestamp, uncertainty — always)
```
CLEAN
✅ <target> — no threats found.
Checked: VirusTotal (0/72), Google Safe Browsing v5 (no match), Chainabuse (0 reports).
Sources current as of <ISO-8601 ts>. Absence of reports ≠ proof of safety.
SUSPICIOUS
⚠️ <target> — proceed with caution. Confidence: MEDIUM.
Evidence:
• VirusTotal: 3/72 engines (Fortinet, Sophos, Kaspersky) flag "phishing" [scanned <ts>]
• Domain age: registered 5 days ago (eTLD+1 <reg-domain>)
No authoritative source confirms. Recommend not entering credentials/funds until verified.
MALICIOUS
🛑 <target> — BLOCKED. Confidence: HIGH.
Authoritative match:
• Google Safe Browsing v5: SOCIAL_ENGINEERING [<ts>]
• Chainabuse: 4 reports, category RUG_PULL, moderator-checked [oldest <ts>]
Action taken: <blocked tx / blocked navigation>. Alternative: <safe path>.
```
---