@remnux/mcp-server 0.1.54 → 0.1.56
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -1
- package/data/osint-resources.json +546 -0
- package/dist/analysis/behavior-prerequisites.d.ts +65 -0
- package/dist/analysis/behavior-prerequisites.d.ts.map +1 -0
- package/dist/analysis/behavior-prerequisites.js +186 -0
- package/dist/analysis/behavior-prerequisites.js.map +1 -0
- package/dist/analysis/file-diff.d.ts +59 -0
- package/dist/analysis/file-diff.d.ts.map +1 -0
- package/dist/analysis/file-diff.js +55 -0
- package/dist/analysis/file-diff.js.map +1 -0
- package/dist/analysis/index.d.ts +1 -1
- package/dist/analysis/index.d.ts.map +1 -1
- package/dist/analysis/index.js +1 -1
- package/dist/analysis/index.js.map +1 -1
- package/dist/analysis/string-usage.d.ts +74 -0
- package/dist/analysis/string-usage.d.ts.map +1 -0
- package/dist/analysis/string-usage.js +124 -0
- package/dist/analysis/string-usage.js.map +1 -0
- package/dist/analysis/summarizer.d.ts +22 -0
- package/dist/analysis/summarizer.d.ts.map +1 -1
- package/dist/analysis/summarizer.js +41 -0
- package/dist/analysis/summarizer.js.map +1 -1
- package/dist/connectors/docker.d.ts +1 -0
- package/dist/connectors/docker.d.ts.map +1 -1
- package/dist/connectors/docker.js +39 -5
- package/dist/connectors/docker.js.map +1 -1
- package/dist/handlers/analyze-file.d.ts.map +1 -1
- package/dist/handlers/analyze-file.js +19 -2
- package/dist/handlers/analyze-file.js.map +1 -1
- package/dist/handlers/check-behavior-prerequisites.d.ts +16 -0
- package/dist/handlers/check-behavior-prerequisites.d.ts.map +1 -0
- package/dist/handlers/check-behavior-prerequisites.js +132 -0
- package/dist/handlers/check-behavior-prerequisites.js.map +1 -0
- package/dist/handlers/compare-files.d.ts +10 -0
- package/dist/handlers/compare-files.d.ts.map +1 -0
- package/dist/handlers/compare-files.js +147 -0
- package/dist/handlers/compare-files.js.map +1 -0
- package/dist/handlers/extract-iocs.d.ts.map +1 -1
- package/dist/handlers/extract-iocs.js +6 -0
- package/dist/handlers/extract-iocs.js.map +1 -1
- package/dist/handlers/get-tool-help.d.ts.map +1 -1
- package/dist/handlers/get-tool-help.js +11 -0
- package/dist/handlers/get-tool-help.js.map +1 -1
- package/dist/handlers/osint.d.ts +10 -0
- package/dist/handlers/osint.d.ts.map +1 -0
- package/dist/handlers/osint.js +72 -0
- package/dist/handlers/osint.js.map +1 -0
- package/dist/handlers/report.d.ts.map +1 -1
- package/dist/handlers/report.js +11 -0
- package/dist/handlers/report.js.map +1 -1
- package/dist/handlers/verify-string-usage.d.ts +10 -0
- package/dist/handlers/verify-string-usage.d.ts.map +1 -0
- package/dist/handlers/verify-string-usage.js +173 -0
- package/dist/handlers/verify-string-usage.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +55 -8
- package/dist/index.js.map +1 -1
- package/dist/osint/guidance.d.ts +125 -0
- package/dist/osint/guidance.d.ts.map +1 -0
- package/dist/osint/guidance.js +217 -0
- package/dist/osint/guidance.js.map +1 -0
- package/dist/osint/index.d.ts +61 -0
- package/dist/osint/index.d.ts.map +1 -0
- package/dist/osint/index.js +64 -0
- package/dist/osint/index.js.map +1 -0
- package/dist/parsers/capa.d.ts +8 -1
- package/dist/parsers/capa.d.ts.map +1 -1
- package/dist/parsers/capa.js +145 -0
- package/dist/parsers/capa.js.map +1 -1
- package/dist/parsers/imports.d.ts +36 -0
- package/dist/parsers/imports.d.ts.map +1 -0
- package/dist/parsers/imports.js +67 -0
- package/dist/parsers/imports.js.map +1 -0
- package/dist/parsers/r2.d.ts +73 -0
- package/dist/parsers/r2.d.ts.map +1 -0
- package/dist/parsers/r2.js +161 -0
- package/dist/parsers/r2.js.map +1 -0
- package/dist/parsers/types.d.ts +19 -0
- package/dist/parsers/types.d.ts.map +1 -1
- package/dist/report/triage-discipline.d.ts +28 -0
- package/dist/report/triage-discipline.d.ts.map +1 -0
- package/dist/report/triage-discipline.js +49 -0
- package/dist/report/triage-discipline.js.map +1 -0
- package/dist/schemas/tools.d.ts +56 -3
- package/dist/schemas/tools.d.ts.map +1 -1
- package/dist/schemas/tools.js +44 -2
- package/dist/schemas/tools.js.map +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -15,6 +15,7 @@ Beyond raw command execution, the server encodes malware analysis domain experti
|
|
|
15
15
|
- Recommends the right tools for each file type (`suggest_tools`) and retrieves usage flags for any installed tool (`get_tool_help`)
|
|
16
16
|
- Runs appropriate tool chains automatically (`analyze_file`) with structured output and IOC extraction
|
|
17
17
|
- Uses neutral language to counteract confirmation bias in AI-generated verdicts
|
|
18
|
+
- Separates static artifacts from executed behavior — tags capa matches by evidence type, gates behavioral claims on the actual import surface (`check_behavior_prerequisites`), and checks whether an embedded string is referenced by code or vestigial (`verify_string_usage`)
|
|
18
19
|
|
|
19
20
|
For additional tool documentation, you can optionally enable the [REMnux docs MCP server](https://docs.remnux.org/~gitbook/mcp).
|
|
20
21
|
|
|
@@ -260,11 +261,15 @@ claude mcp add remnux --transport http http://REMNUX_IP:3000/mcp \
|
|
|
260
261
|
| `download_file` | Download a file from the output directory to the host (password-protected archive by default; password: `infected`) |
|
|
261
262
|
| `analyze_file` | Auto-select and run REMnux tools based on detected file type |
|
|
262
263
|
| `extract_iocs` | Extract IOCs (IPs, domains, URLs, hashes, registry keys, etc.) from text with confidence scoring |
|
|
264
|
+
| `check_behavior_prerequisites` | For a Windows PE, report per-behavior `static_capability` (clipboard, HTTP/WinHTTP C2, injection, persistence, etc.) from the import table; packed/.NET binaries return `analysis_incomplete`, not a false negative |
|
|
265
|
+
| `verify_string_usage` | Check whether an embedded string is referenced by code (`referenced_from_code`) or vestigial (`no_code_xrefs_detected`) using radare2 — never claims a string is "unused"; degraded analysis returns `unknown` |
|
|
266
|
+
| `compare_files` | Structured diff of two related samples (loader vs payload): size/entropy, architecture, compiler, packer, imports, capabilities, and sections added/removed |
|
|
263
267
|
| `suggest_tools` | Detect file type and return recommended tools with analysis hints (no execution) |
|
|
264
268
|
| `get_tool_help` | Get usage help (`--help` output) for any installed REMnux tool |
|
|
265
269
|
| `check_tools` | Check which REMnux analysis tools are installed and available |
|
|
266
270
|
| `get_report_template` | Return a bundled malware analysis report template (CC BY 4.0, by Lenny Zeltser) for drafting a report offline |
|
|
267
|
-
| `get_report_guidance` | Return bundled report writing guidelines (sections, confidence, capabilities, IOC tiering, anti-patterns); `topic` narrows the digest |
|
|
271
|
+
| `get_report_guidance` | Return bundled report writing guidelines (sections, confidence, capabilities, IOC tiering, anti-patterns); `topic` narrows the digest, or `topic='triage_checklist'` returns the pre-claim artifact-vs-behavior triage discipline checklist |
|
|
272
|
+
| `get_osint_guidance` | Return bundled, offline OSINT triage guidance for malware indicators. Enrichment tradecraft (hash-first, disclosure-aware, do-not-tip-off-the-adversary, leads-not-verdicts) plus a curated, PR-maintained catalog of free and freemium lookup services. `topic` selects the guidance slice, `ioc_type` narrows the catalog. Makes no network calls and holds no API keys |
|
|
268
273
|
|
|
269
274
|
### Key Behaviors
|
|
270
275
|
|
|
@@ -274,6 +279,8 @@ claude mcp add remnux --transport http http://REMNUX_IP:3000/mcp \
|
|
|
274
279
|
|
|
275
280
|
**Tool advisories:** `analyze_file` includes per-tool `advisory` messages that frame findings in neutral language, prompting the AI to consider benign explanations before concluding malicious intent. When cross-tool conditions indicate follow-up is needed, an `action_required` array appears with prioritized remediation steps.
|
|
276
281
|
|
|
282
|
+
**Artifact vs behavior:** capa findings are tagged with `evidence_types` (`artifact`/`behavior`/`structural`/`linking`), derived from the feature nodes that *actually matched* — so a rule that fired only on strings is not mistaken for one backed by code. `analyze_file` rolls this up into a `capability_evidence` field that separates `behavior_capable` (matched on API calls or instructions — the code is present, though static analysis alone doesn't confirm it runs) from `artifact_only` (matched only on data/strings/imports/structure — present, but not evidence the behavior executes). This keeps the distinction between "the data is in the file" and "the binary does this" structural rather than left to prose. See `get_report_guidance` `topic='triage_checklist'` for the corresponding pre-claim discipline.
|
|
283
|
+
|
|
277
284
|
**Auto-summarization:** When total tool output exceeds ~32KB, `analyze_file` automatically switches to summary mode to prevent LLM context overflow — key findings per tool, full IOC extraction, and paths to saved full outputs for drill-down via `download_file`.
|
|
278
285
|
|
|
279
286
|
**Preprocessing:** Before analysis, `analyze_file` checks for conditions that prevent effective analysis (encrypted Office docs, bloated PEs, PyInstaller bundles) and applies automatic fixes. Results appear in the `preprocessing` field.
|
|
@@ -508,6 +515,14 @@ Analysis produces findings; a report turns them into something a reader can act
|
|
|
508
515
|
|
|
509
516
|
The bundled copy is a point-in-time snapshot, refreshed from the canonical public source via `pnpm run sync:report-guidance`. The continuously updated source is the [zeltser-website MCP server](https://zeltser.com/malware-analysis-report) and the article [Writing a Malware Analysis Report](https://zeltser.com/malware-analysis-report), which also offer interactive review and scoring; `analyze_file` points there as optional enrichment when online. Both report tools return only static bundled text — they never read sample content or tool output, so they add no new prompt-injection surface.
|
|
510
517
|
|
|
518
|
+
### Why bundle an OSINT triage catalog?
|
|
519
|
+
|
|
520
|
+
Analysis produces IOCs, and triage decides what to do with them. After `extract_iocs`, an AI agent left to improvise might upload a confidential sample to a public multiscanner, or actively probe live C2 and tip off the adversary. `get_osint_guidance` encodes the OPSEC tradecraft for that enrichment step (hash-first, disclosure-aware, do-not-tip-off-the-adversary, leads-not-verdicts) alongside a curated catalog of free and freemium lookup services.
|
|
521
|
+
|
|
522
|
+
Like the report tools, it returns only static bundled text. It makes no network calls, holds no API keys, reads no sample content, and adds no prompt-injection surface. The server returns guidance, and the AI runs the lookups with its own tools. This keeps the offline, no-secrets stance intact while giving malware-specific OSINT a consistent, in-context home, distinct from a general-purpose OSINT tool.
|
|
523
|
+
|
|
524
|
+
The service catalog lives in `data/osint-resources.json`, a contributor-editable data file. Every listed service offers a usable free tier (no account, free account, or freemium), so the guidance can default to free-first. Each entry is also tagged for AI-friendliness (`ai_access`: keyless JSON API, key-gated API, or web-only), and the guidance lists keyless APIs first, so an agent with no keys is steered to the services it can use right now (Shodan InternetDB, GreyNoise, ipinfo, DShield, urlscan, crt.sh, RDAP, Team Cymru MHR). Propose additions or access-tier corrections by pull request. A CI test (`src/__tests__/osint-resources.test.ts`) validates structure (required fields, enums, https URLs, `last_verified`, and no duplicates) on every PR, but it cannot judge whether a service is legitimate or still reliable, so reviewers vet new entries for that. Curation favors stable, freely available services, with the backbone drawn from Lenny Zeltser's lists of [automated analysis services](https://zeltser.com/automated-malware-analysis), [malicious-website lookups](https://zeltser.com/lookup-malicious-websites), and [IP/URL blocklists](https://zeltser.com/malicious-ip-blocklists).
|
|
525
|
+
|
|
511
526
|
## Related Projects
|
|
512
527
|
|
|
513
528
|
- [REMnux](https://remnux.org) - Linux toolkit for malware analysis
|
|
@@ -0,0 +1,546 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "1.0.0",
|
|
3
|
+
"updated": "2026-06-30",
|
|
4
|
+
"resources": [
|
|
5
|
+
{
|
|
6
|
+
"name": "VirusTotal",
|
|
7
|
+
"url": "https://www.virustotal.com/",
|
|
8
|
+
"categories": ["multiscanner", "url_web", "infrastructure"],
|
|
9
|
+
"ioc_types": ["hash", "url", "domain", "ip", "host_artifact"],
|
|
10
|
+
"access": "freemium",
|
|
11
|
+
"ai_access": "api_key",
|
|
12
|
+
"query_disclosing": "vendor",
|
|
13
|
+
"content_disclosing": "public",
|
|
14
|
+
"best_use": "Multi-engine reputation for a hash, URL, domain, or IP, plus related-sample and relationship pivots.",
|
|
15
|
+
"caveats": "Hash/URL/IP lookups are non-content-disclosing, but the query itself reveals the indicator to the vendor. Uploading a FILE shares it with the VirusTotal community (downloadable by paid/enterprise users), so do not upload confidential samples without authorization.",
|
|
16
|
+
"stability": "Long-established, industry-standard, stable free tier.",
|
|
17
|
+
"last_verified": "2026-06-30",
|
|
18
|
+
"source_list": ["lookup-malicious-websites", "automated-malware-analysis"]
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"name": "Team Cymru Malware Hash Registry",
|
|
22
|
+
"url": "https://www.team-cymru.com/mhr",
|
|
23
|
+
"categories": ["multiscanner"],
|
|
24
|
+
"ioc_types": ["hash"],
|
|
25
|
+
"access": "free",
|
|
26
|
+
"ai_access": "api_nokey",
|
|
27
|
+
"query_disclosing": "vendor",
|
|
28
|
+
"content_disclosing": "none",
|
|
29
|
+
"best_use": "Keyless hash reputation. A DNS TXT lookup of <md5-or-sha1>.malware.hash.cymru.com returns the last-seen time and an antivirus detection percentage when the hash is known. SHA-256 is supported over the HTTPS interface.",
|
|
30
|
+
"caveats": "No key, agent-friendly. MD5 and SHA-1 work over the DNS interface. A SHA-256 is too long for a DNS label, so use the HTTPS interface for SHA-256 (get_file_info and analyze_file report both MD5 and SHA-256). Returns NXDOMAIN for unknown hashes. Non-commercial use only, do not enumerate, and notify Team Cymru before high-volume or automated queries. A non-zero detection percentage is a lead to corroborate, not a verdict.",
|
|
31
|
+
"stability": "Long-running Team Cymru community service.",
|
|
32
|
+
"last_verified": "2026-06-30",
|
|
33
|
+
"source_list": []
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"name": "MalwareBazaar",
|
|
37
|
+
"url": "https://bazaar.abuse.ch/",
|
|
38
|
+
"categories": ["file_repo"],
|
|
39
|
+
"ioc_types": ["hash"],
|
|
40
|
+
"access": "free_account",
|
|
41
|
+
"ai_access": "api_key",
|
|
42
|
+
"query_disclosing": "vendor",
|
|
43
|
+
"content_disclosing": "public",
|
|
44
|
+
"best_use": "Is this hash known, and what related samples exist (by SHA256, imphash, TLSH, tag, or family).",
|
|
45
|
+
"caveats": "A public malware sample exchange. Hash lookups are non-content-disclosing, but the query reveals the hash to abuse.ch. Samples you upload are shared with the community. A free abuse.ch Auth-Key is required for API access.",
|
|
46
|
+
"stability": "Well-established abuse.ch (Spamhaus) platform, widely used.",
|
|
47
|
+
"last_verified": "2026-06-30",
|
|
48
|
+
"source_list": []
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"name": "Hybrid Analysis",
|
|
52
|
+
"url": "https://www.hybrid-analysis.com/",
|
|
53
|
+
"categories": ["sandbox", "multiscanner"],
|
|
54
|
+
"ioc_types": ["hash", "url"],
|
|
55
|
+
"access": "free_account",
|
|
56
|
+
"ai_access": "api_key",
|
|
57
|
+
"query_disclosing": "vendor",
|
|
58
|
+
"content_disclosing": "public",
|
|
59
|
+
"best_use": "Behavioral sandbox reports and reputation for a hash or URL; search existing reports before submitting.",
|
|
60
|
+
"caveats": "Public submissions are searchable by others. Choose a non-public submission setting where available. A free account is required for full access.",
|
|
61
|
+
"stability": "Long-running CrowdStrike-operated service.",
|
|
62
|
+
"last_verified": "2026-06-30",
|
|
63
|
+
"source_list": ["automated-malware-analysis"]
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"name": "Intezer Analyze",
|
|
67
|
+
"url": "https://analyze.intezer.com/",
|
|
68
|
+
"categories": ["code_similarity", "multiscanner"],
|
|
69
|
+
"ioc_types": ["hash"],
|
|
70
|
+
"access": "freemium",
|
|
71
|
+
"ai_access": "api_key",
|
|
72
|
+
"query_disclosing": "vendor",
|
|
73
|
+
"content_disclosing": "vendor",
|
|
74
|
+
"best_use": "Code-reuse and genetic similarity to known malware families; anchors corroboration on sample-intrinsic code, not network IOCs.",
|
|
75
|
+
"caveats": "Free tier has a limited number of scans. Uploaded files are shared with Intezer.",
|
|
76
|
+
"stability": "Established commercial service with a persistent free tier.",
|
|
77
|
+
"last_verified": "2026-06-30",
|
|
78
|
+
"source_list": ["automated-malware-analysis"]
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"name": "ANY.RUN",
|
|
82
|
+
"url": "https://any.run/",
|
|
83
|
+
"categories": ["sandbox"],
|
|
84
|
+
"ioc_types": ["hash", "url"],
|
|
85
|
+
"access": "freemium",
|
|
86
|
+
"ai_access": "web",
|
|
87
|
+
"query_disclosing": "vendor",
|
|
88
|
+
"content_disclosing": "public",
|
|
89
|
+
"best_use": "Interactive cloud sandbox with real-time observation; also search existing public submissions by hash or IOC.",
|
|
90
|
+
"caveats": "Free-tier interactive tasks are PUBLIC. Do not detonate confidential samples on the free tier.",
|
|
91
|
+
"stability": "Widely used interactive sandbox, stable free tier.",
|
|
92
|
+
"last_verified": "2026-06-30",
|
|
93
|
+
"source_list": ["automated-malware-analysis"]
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"name": "Joe Sandbox Cloud Basic",
|
|
97
|
+
"url": "https://www.joesandbox.com/",
|
|
98
|
+
"categories": ["sandbox"],
|
|
99
|
+
"ioc_types": ["hash", "url"],
|
|
100
|
+
"access": "freemium",
|
|
101
|
+
"ai_access": "web",
|
|
102
|
+
"query_disclosing": "vendor",
|
|
103
|
+
"content_disclosing": "public",
|
|
104
|
+
"best_use": "Detailed behavioral reports for a submitted sample or URL.",
|
|
105
|
+
"caveats": "Cloud Basic submissions are public. Use a paid or private tier for sensitive samples.",
|
|
106
|
+
"stability": "Established sandbox vendor with a free Basic tier.",
|
|
107
|
+
"last_verified": "2026-06-30",
|
|
108
|
+
"source_list": ["automated-malware-analysis"]
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"name": "Recorded Future Triage",
|
|
112
|
+
"url": "https://tria.ge/",
|
|
113
|
+
"categories": ["sandbox"],
|
|
114
|
+
"ioc_types": ["hash", "url"],
|
|
115
|
+
"access": "free_account",
|
|
116
|
+
"ai_access": "api_key",
|
|
117
|
+
"query_disclosing": "vendor",
|
|
118
|
+
"content_disclosing": "public",
|
|
119
|
+
"best_use": "Sandbox detonation with configuration extraction; search existing public reports by hash.",
|
|
120
|
+
"caveats": "Free research accounts default to public samples. Mark submissions unlisted or private for sensitive material.",
|
|
121
|
+
"stability": "Widely used (tria.ge), stable researcher tier.",
|
|
122
|
+
"last_verified": "2026-06-30",
|
|
123
|
+
"source_list": ["automated-malware-analysis"]
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"name": "CAPE Sandbox",
|
|
127
|
+
"url": "https://capesandbox.com/",
|
|
128
|
+
"categories": ["sandbox"],
|
|
129
|
+
"ioc_types": ["hash", "url"],
|
|
130
|
+
"access": "free",
|
|
131
|
+
"ai_access": "web",
|
|
132
|
+
"query_disclosing": "vendor",
|
|
133
|
+
"content_disclosing": "public",
|
|
134
|
+
"best_use": "Detonation with payload and configuration extraction for many families.",
|
|
135
|
+
"caveats": "The community instance is public; submissions, configs, and results are visible. Run a private CAPE for sensitive work.",
|
|
136
|
+
"stability": "Open-source, community instance long available.",
|
|
137
|
+
"last_verified": "2026-06-30",
|
|
138
|
+
"source_list": ["automated-malware-analysis"]
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
"name": "Malpedia",
|
|
142
|
+
"url": "https://malpedia.caad.fkie.fraunhofer.de/",
|
|
143
|
+
"categories": ["family_yara"],
|
|
144
|
+
"ioc_types": ["family", "hash"],
|
|
145
|
+
"access": "free_account",
|
|
146
|
+
"ai_access": "api_key",
|
|
147
|
+
"query_disclosing": "vendor",
|
|
148
|
+
"content_disclosing": "none",
|
|
149
|
+
"best_use": "Normalize family names and aliases across vendors; family references, descriptions, and YARA.",
|
|
150
|
+
"caveats": "A reference resource, not a submission engine. Some samples and non-public YARA require an account or invite.",
|
|
151
|
+
"stability": "Fraunhofer FKIE academic resource, stable.",
|
|
152
|
+
"last_verified": "2026-06-30",
|
|
153
|
+
"source_list": []
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
"name": "YARAify",
|
|
157
|
+
"url": "https://yaraify.abuse.ch/",
|
|
158
|
+
"categories": ["family_yara"],
|
|
159
|
+
"ioc_types": ["hash"],
|
|
160
|
+
"access": "free_account",
|
|
161
|
+
"ai_access": "api_key",
|
|
162
|
+
"query_disclosing": "vendor",
|
|
163
|
+
"content_disclosing": "vendor",
|
|
164
|
+
"best_use": "Match a file or hash against public YARA and ClamAV rules when vendor naming is weak.",
|
|
165
|
+
"caveats": "Scanning a file submits it. A free abuse.ch Auth-Key is required for API access.",
|
|
166
|
+
"stability": "abuse.ch platform, stable.",
|
|
167
|
+
"last_verified": "2026-06-30",
|
|
168
|
+
"source_list": []
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"name": "ThreatFox",
|
|
172
|
+
"url": "https://threatfox.abuse.ch/",
|
|
173
|
+
"categories": ["community_intel"],
|
|
174
|
+
"ioc_types": ["hash", "domain", "ip", "url", "family", "host_artifact"],
|
|
175
|
+
"access": "free_account",
|
|
176
|
+
"ai_access": "api_key",
|
|
177
|
+
"query_disclosing": "vendor",
|
|
178
|
+
"content_disclosing": "none",
|
|
179
|
+
"best_use": "Pivot from a malware family to its current C2 and payload infrastructure, and vice versa.",
|
|
180
|
+
"caveats": "Community-submitted IOCs are leads, not ground truth, and can be poisoned. Corroborate. A free abuse.ch Auth-Key is required for API access.",
|
|
181
|
+
"stability": "abuse.ch platform, widely used.",
|
|
182
|
+
"last_verified": "2026-06-30",
|
|
183
|
+
"source_list": []
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"name": "urlscan.io",
|
|
187
|
+
"url": "https://urlscan.io/",
|
|
188
|
+
"categories": ["url_web", "infrastructure"],
|
|
189
|
+
"ioc_types": ["url", "domain", "ip"],
|
|
190
|
+
"access": "freemium",
|
|
191
|
+
"ai_access": "api_nokey",
|
|
192
|
+
"query_disclosing": "public",
|
|
193
|
+
"content_disclosing": "public",
|
|
194
|
+
"best_use": "Live URL and page analysis (screenshot, DOM, JavaScript, request chain) and search of existing public scans by domain, IP, ASN, or hash.",
|
|
195
|
+
"caveats": "The keyless path is searching existing public scans; submitting a new scan needs an account. Public scans are searchable by anyone, so use unlisted or private visibility for sensitive URLs. Submitting an attacker URL fetches their infrastructure and may alert them.",
|
|
196
|
+
"stability": "Widely used, stable free tier.",
|
|
197
|
+
"last_verified": "2026-06-30",
|
|
198
|
+
"source_list": ["lookup-malicious-websites"]
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
"name": "URLhaus",
|
|
202
|
+
"url": "https://urlhaus.abuse.ch/",
|
|
203
|
+
"categories": ["community_intel", "blocklist"],
|
|
204
|
+
"ioc_types": ["url", "domain", "ip"],
|
|
205
|
+
"access": "free_account",
|
|
206
|
+
"ai_access": "api_key",
|
|
207
|
+
"query_disclosing": "vendor",
|
|
208
|
+
"content_disclosing": "none",
|
|
209
|
+
"best_use": "Look up a malware-distribution URL, host, or IP, and pivot to related payloads.",
|
|
210
|
+
"caveats": "A free abuse.ch Auth-Key is required for API access.",
|
|
211
|
+
"stability": "abuse.ch platform, widely used.",
|
|
212
|
+
"last_verified": "2026-06-30",
|
|
213
|
+
"source_list": ["malicious-ip-blocklists"]
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
"name": "Sucuri SiteCheck",
|
|
217
|
+
"url": "https://sitecheck.sucuri.net/",
|
|
218
|
+
"categories": ["url_web"],
|
|
219
|
+
"ioc_types": ["url", "domain"],
|
|
220
|
+
"access": "free",
|
|
221
|
+
"ai_access": "web",
|
|
222
|
+
"query_disclosing": "vendor",
|
|
223
|
+
"content_disclosing": "vendor",
|
|
224
|
+
"best_use": "Live remote scan of a site for malware and blocklist status.",
|
|
225
|
+
"caveats": "The scan fetches the URL live from Sucuri infrastructure (not yours). It does not connect from your environment, but it still touches attacker infrastructure, which can tip off an adversary watching their server, so avoid it for sensitive live URLs.",
|
|
226
|
+
"stability": "Long-running free scanner.",
|
|
227
|
+
"last_verified": "2026-06-30",
|
|
228
|
+
"source_list": ["lookup-malicious-websites"]
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
"name": "Google Safe Browsing",
|
|
232
|
+
"url": "https://transparencyreport.google.com/safe-browsing/search",
|
|
233
|
+
"categories": ["url_web", "blocklist"],
|
|
234
|
+
"ioc_types": ["url", "domain"],
|
|
235
|
+
"access": "free",
|
|
236
|
+
"ai_access": "web",
|
|
237
|
+
"query_disclosing": "vendor",
|
|
238
|
+
"content_disclosing": "none",
|
|
239
|
+
"best_use": "Check a site's current Safe Browsing status.",
|
|
240
|
+
"caveats": "Status lookup only. The Safe Browsing API (for automation) requires a key.",
|
|
241
|
+
"stability": "Google service, stable.",
|
|
242
|
+
"last_verified": "2026-06-30",
|
|
243
|
+
"source_list": ["lookup-malicious-websites", "malicious-ip-blocklists"]
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
"name": "GreyNoise",
|
|
247
|
+
"url": "https://www.greynoise.io/",
|
|
248
|
+
"categories": ["infrastructure"],
|
|
249
|
+
"ioc_types": ["ip"],
|
|
250
|
+
"access": "freemium",
|
|
251
|
+
"ai_access": "api_nokey",
|
|
252
|
+
"query_disclosing": "vendor",
|
|
253
|
+
"content_disclosing": "none",
|
|
254
|
+
"best_use": "Decide whether an IP is opportunistic internet background noise or worth deeper investigation.",
|
|
255
|
+
"caveats": "The free community lookup works without an API key and classifies an IP as noise or not. Richer data and higher limits are paid.",
|
|
256
|
+
"stability": "Established, widely used for IP triage.",
|
|
257
|
+
"last_verified": "2026-06-30",
|
|
258
|
+
"source_list": []
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
"name": "Shodan InternetDB",
|
|
262
|
+
"url": "https://internetdb.shodan.io/",
|
|
263
|
+
"categories": ["infrastructure"],
|
|
264
|
+
"ioc_types": ["ip"],
|
|
265
|
+
"access": "free",
|
|
266
|
+
"ai_access": "api_nokey",
|
|
267
|
+
"query_disclosing": "vendor",
|
|
268
|
+
"content_disclosing": "none",
|
|
269
|
+
"best_use": "Fast IP lookup for open ports, hostnames, CPEs, tags, and known vulnerabilities.",
|
|
270
|
+
"caveats": "Unauthenticated and free for non-commercial use. Full Shodan (banners, history, search) needs an account and API key.",
|
|
271
|
+
"stability": "Shodan service, stable.",
|
|
272
|
+
"last_verified": "2026-06-30",
|
|
273
|
+
"source_list": []
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
"name": "Censys Search",
|
|
277
|
+
"url": "https://search.censys.io/",
|
|
278
|
+
"categories": ["infrastructure", "cert_transparency"],
|
|
279
|
+
"ioc_types": ["ip", "domain"],
|
|
280
|
+
"access": "freemium",
|
|
281
|
+
"ai_access": "api_key",
|
|
282
|
+
"query_disclosing": "vendor",
|
|
283
|
+
"content_disclosing": "none",
|
|
284
|
+
"best_use": "Map exposed infrastructure and pivot on hosts, services, banners, and certificates.",
|
|
285
|
+
"caveats": "Free tier requires an account and is rate-limited.",
|
|
286
|
+
"stability": "Established internet-scan platform.",
|
|
287
|
+
"last_verified": "2026-06-30",
|
|
288
|
+
"source_list": []
|
|
289
|
+
},
|
|
290
|
+
{
|
|
291
|
+
"name": "AbuseIPDB",
|
|
292
|
+
"url": "https://www.abuseipdb.com/",
|
|
293
|
+
"categories": ["infrastructure"],
|
|
294
|
+
"ioc_types": ["ip"],
|
|
295
|
+
"access": "free_account",
|
|
296
|
+
"ai_access": "api_key",
|
|
297
|
+
"query_disclosing": "vendor",
|
|
298
|
+
"content_disclosing": "none",
|
|
299
|
+
"best_use": "Community reputation and abuse reports for an IP or hostname.",
|
|
300
|
+
"caveats": "Community reports are leads, not ground truth. A free account and API key are needed for the API.",
|
|
301
|
+
"stability": "Widely used IP reputation service.",
|
|
302
|
+
"last_verified": "2026-06-30",
|
|
303
|
+
"source_list": ["lookup-malicious-websites"]
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
"name": "Cisco Talos Reputation Center",
|
|
307
|
+
"url": "https://talosintelligence.com/reputation_center",
|
|
308
|
+
"categories": ["infrastructure"],
|
|
309
|
+
"ioc_types": ["ip", "domain"],
|
|
310
|
+
"access": "free",
|
|
311
|
+
"ai_access": "web",
|
|
312
|
+
"query_disclosing": "vendor",
|
|
313
|
+
"content_disclosing": "none",
|
|
314
|
+
"best_use": "Independent IP, domain, and email reputation cross-check, useful for network and email infrastructure.",
|
|
315
|
+
"caveats": "Reputation snapshot; corroborate with other sources.",
|
|
316
|
+
"stability": "Cisco-operated, stable.",
|
|
317
|
+
"last_verified": "2026-06-30",
|
|
318
|
+
"source_list": ["lookup-malicious-websites"]
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
"name": "ipinfo",
|
|
322
|
+
"url": "https://ipinfo.io/",
|
|
323
|
+
"categories": ["infrastructure"],
|
|
324
|
+
"ioc_types": ["ip"],
|
|
325
|
+
"access": "freemium",
|
|
326
|
+
"ai_access": "api_nokey",
|
|
327
|
+
"query_disclosing": "vendor",
|
|
328
|
+
"content_disclosing": "none",
|
|
329
|
+
"best_use": "Geolocation, ASN, and owner baseline for an IP.",
|
|
330
|
+
"caveats": "Free tier with an account is rate-limited; richer data is paid.",
|
|
331
|
+
"stability": "Established IP-data provider.",
|
|
332
|
+
"last_verified": "2026-06-30",
|
|
333
|
+
"source_list": []
|
|
334
|
+
},
|
|
335
|
+
{
|
|
336
|
+
"name": "crt.sh",
|
|
337
|
+
"url": "https://crt.sh/",
|
|
338
|
+
"categories": ["cert_transparency"],
|
|
339
|
+
"ioc_types": ["domain"],
|
|
340
|
+
"access": "free",
|
|
341
|
+
"ai_access": "api_nokey",
|
|
342
|
+
"query_disclosing": "vendor",
|
|
343
|
+
"content_disclosing": "none",
|
|
344
|
+
"best_use": "Certificate Transparency search to pivot on domains, organization names, and certificate fingerprints.",
|
|
345
|
+
"caveats": "Passive lookup against public CT logs. The service can be slow or briefly unavailable under load, so retry or fall back to another CT source if it times out.",
|
|
346
|
+
"stability": "Long-running free CT search.",
|
|
347
|
+
"last_verified": "2026-06-30",
|
|
348
|
+
"source_list": []
|
|
349
|
+
},
|
|
350
|
+
{
|
|
351
|
+
"name": "DNSDumpster",
|
|
352
|
+
"url": "https://dnsdumpster.com/",
|
|
353
|
+
"categories": ["passive_dns"],
|
|
354
|
+
"ioc_types": ["domain"],
|
|
355
|
+
"access": "free",
|
|
356
|
+
"ai_access": "web",
|
|
357
|
+
"query_disclosing": "vendor",
|
|
358
|
+
"content_disclosing": "none",
|
|
359
|
+
"best_use": "Passive DNS, subdomain, and host discovery for a domain.",
|
|
360
|
+
"caveats": "Free and rate-limited.",
|
|
361
|
+
"stability": "Long-running free recon tool.",
|
|
362
|
+
"last_verified": "2026-06-30",
|
|
363
|
+
"source_list": []
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
"name": "SecurityTrails",
|
|
367
|
+
"url": "https://securitytrails.com/",
|
|
368
|
+
"categories": ["passive_dns", "infrastructure"],
|
|
369
|
+
"ioc_types": ["domain", "ip"],
|
|
370
|
+
"access": "freemium",
|
|
371
|
+
"ai_access": "api_key",
|
|
372
|
+
"query_disclosing": "vendor",
|
|
373
|
+
"content_disclosing": "none",
|
|
374
|
+
"best_use": "Passive DNS, DNS history, subdomain discovery, and domain-to-IP infrastructure pivots.",
|
|
375
|
+
"caveats": "Free tier with an account; paid for volume.",
|
|
376
|
+
"stability": "Established passive-DNS provider.",
|
|
377
|
+
"last_verified": "2026-06-30",
|
|
378
|
+
"source_list": ["lookup-malicious-websites"]
|
|
379
|
+
},
|
|
380
|
+
{
|
|
381
|
+
"name": "Validin",
|
|
382
|
+
"url": "https://app.validin.com/",
|
|
383
|
+
"categories": ["passive_dns", "infrastructure"],
|
|
384
|
+
"ioc_types": ["domain", "ip"],
|
|
385
|
+
"access": "freemium",
|
|
386
|
+
"ai_access": "api_key",
|
|
387
|
+
"query_disclosing": "vendor",
|
|
388
|
+
"content_disclosing": "none",
|
|
389
|
+
"best_use": "DNS and threat-infrastructure enrichment, mapping artifacts to malware-family and attacker profiles.",
|
|
390
|
+
"caveats": "Free community tier with an account.",
|
|
391
|
+
"stability": "Newer but actively maintained; reassess at re-verification.",
|
|
392
|
+
"last_verified": "2026-06-30",
|
|
393
|
+
"source_list": []
|
|
394
|
+
},
|
|
395
|
+
{
|
|
396
|
+
"name": "CyberGordon",
|
|
397
|
+
"url": "https://cybergordon.com/",
|
|
398
|
+
"categories": ["aggregator"],
|
|
399
|
+
"ioc_types": ["ip", "domain", "url", "hash"],
|
|
400
|
+
"access": "free",
|
|
401
|
+
"ai_access": "web",
|
|
402
|
+
"query_disclosing": "vendor",
|
|
403
|
+
"content_disclosing": "none",
|
|
404
|
+
"best_use": "Run one observable across many reputation services at once for a fast first corroboration pass.",
|
|
405
|
+
"caveats": "Aggregates third-party services, so each underlying source carries its own caveats.",
|
|
406
|
+
"stability": "Stable free aggregator.",
|
|
407
|
+
"last_verified": "2026-06-30",
|
|
408
|
+
"source_list": ["lookup-malicious-websites"]
|
|
409
|
+
},
|
|
410
|
+
{
|
|
411
|
+
"name": "Pulsedive",
|
|
412
|
+
"url": "https://pulsedive.com/",
|
|
413
|
+
"categories": ["aggregator", "community_intel"],
|
|
414
|
+
"ioc_types": ["ip", "domain", "url", "hash", "host_artifact"],
|
|
415
|
+
"access": "freemium",
|
|
416
|
+
"ai_access": "api_key",
|
|
417
|
+
"query_disclosing": "vendor",
|
|
418
|
+
"content_disclosing": "none",
|
|
419
|
+
"best_use": "Enrich an IP, domain, URL, or hash from OSINT feeds, with passive and active scan options.",
|
|
420
|
+
"caveats": "Free tier with an account. Treat feed-sourced data as leads.",
|
|
421
|
+
"stability": "Established threat-intel platform.",
|
|
422
|
+
"last_verified": "2026-06-30",
|
|
423
|
+
"source_list": ["lookup-malicious-websites"]
|
|
424
|
+
},
|
|
425
|
+
{
|
|
426
|
+
"name": "IBM X-Force Exchange",
|
|
427
|
+
"url": "https://exchange.xforce.ibmcloud.com/",
|
|
428
|
+
"categories": ["aggregator"],
|
|
429
|
+
"ioc_types": ["ip", "domain", "url", "hash"],
|
|
430
|
+
"access": "free_account",
|
|
431
|
+
"ai_access": "api_key",
|
|
432
|
+
"query_disclosing": "vendor",
|
|
433
|
+
"content_disclosing": "none",
|
|
434
|
+
"best_use": "Independent reputation and context for an IP, URL, or hash to corroborate other sources.",
|
|
435
|
+
"caveats": "A free account is required.",
|
|
436
|
+
"stability": "IBM-operated, stable.",
|
|
437
|
+
"last_verified": "2026-06-30",
|
|
438
|
+
"source_list": ["lookup-malicious-websites"]
|
|
439
|
+
},
|
|
440
|
+
{
|
|
441
|
+
"name": "AlienVault OTX",
|
|
442
|
+
"url": "https://otx.alienvault.com/",
|
|
443
|
+
"categories": ["community_intel"],
|
|
444
|
+
"ioc_types": ["ip", "domain", "url", "hash", "family", "host_artifact"],
|
|
445
|
+
"access": "free_account",
|
|
446
|
+
"ai_access": "api_key",
|
|
447
|
+
"query_disclosing": "vendor",
|
|
448
|
+
"content_disclosing": "none",
|
|
449
|
+
"best_use": "Check whether an IOC appears in community pulses and campaign context.",
|
|
450
|
+
"caveats": "Lead generation, not ground truth. Community pulses can be poisoned; corroborate. Now operated as LevelBlue OTX. A free account is required.",
|
|
451
|
+
"stability": "Large community threat-intel platform.",
|
|
452
|
+
"last_verified": "2026-06-30",
|
|
453
|
+
"source_list": ["lookup-malicious-websites"]
|
|
454
|
+
},
|
|
455
|
+
{
|
|
456
|
+
"name": "OpenPhish",
|
|
457
|
+
"url": "https://openphish.com/",
|
|
458
|
+
"categories": ["blocklist"],
|
|
459
|
+
"ioc_types": ["url"],
|
|
460
|
+
"access": "free",
|
|
461
|
+
"ai_access": "api_nokey",
|
|
462
|
+
"query_disclosing": "none",
|
|
463
|
+
"content_disclosing": "none",
|
|
464
|
+
"best_use": "Check a URL or domain against a phishing feed.",
|
|
465
|
+
"caveats": "Free for non-commercial use.",
|
|
466
|
+
"stability": "Long-running phishing feed.",
|
|
467
|
+
"last_verified": "2026-06-30",
|
|
468
|
+
"source_list": ["malicious-ip-blocklists"]
|
|
469
|
+
},
|
|
470
|
+
{
|
|
471
|
+
"name": "DShield (SANS ISC)",
|
|
472
|
+
"url": "https://www.dshield.org/",
|
|
473
|
+
"categories": ["blocklist", "infrastructure"],
|
|
474
|
+
"ioc_types": ["ip"],
|
|
475
|
+
"access": "free",
|
|
476
|
+
"ai_access": "api_nokey",
|
|
477
|
+
"query_disclosing": "none",
|
|
478
|
+
"content_disclosing": "none",
|
|
479
|
+
"best_use": "Check an IP against suspicious-source blocklists and attack telemetry from the SANS Internet Storm Center.",
|
|
480
|
+
"caveats": "Aggregated telemetry; read the list methodology before acting.",
|
|
481
|
+
"stability": "SANS ISC, long-running.",
|
|
482
|
+
"last_verified": "2026-06-30",
|
|
483
|
+
"source_list": ["malicious-ip-blocklists"]
|
|
484
|
+
},
|
|
485
|
+
{
|
|
486
|
+
"name": "UnpacMe",
|
|
487
|
+
"url": "https://www.unpac.me/",
|
|
488
|
+
"categories": ["unpacking"],
|
|
489
|
+
"ioc_types": ["hash"],
|
|
490
|
+
"access": "freemium",
|
|
491
|
+
"ai_access": "api_key",
|
|
492
|
+
"query_disclosing": "vendor",
|
|
493
|
+
"content_disclosing": "public",
|
|
494
|
+
"best_use": "Automated unpacking and payload or configuration extraction when triage stalls on a packed sample.",
|
|
495
|
+
"caveats": "Not pure OSINT; submission is disclosing. Free-tier results are public.",
|
|
496
|
+
"stability": "Established automated unpacker.",
|
|
497
|
+
"last_verified": "2026-06-30",
|
|
498
|
+
"source_list": []
|
|
499
|
+
},
|
|
500
|
+
{
|
|
501
|
+
"name": "RDAP (rdap.org)",
|
|
502
|
+
"url": "https://rdap.org/",
|
|
503
|
+
"categories": ["registration", "infrastructure"],
|
|
504
|
+
"ioc_types": ["domain", "ip"],
|
|
505
|
+
"access": "free",
|
|
506
|
+
"ai_access": "api_nokey",
|
|
507
|
+
"query_disclosing": "vendor",
|
|
508
|
+
"content_disclosing": "none",
|
|
509
|
+
"best_use": "Registration data (RDAP, the JSON successor to WHOIS) for a domain or IP via a single no-key request, for registrar, network-owner, and allocation pivots.",
|
|
510
|
+
"caveats": "rdap.org redirects to the authoritative registry or RIR and returns clean JSON with no key, so it is agent-friendly. Domain coverage depends on the TLD supporting RDAP.",
|
|
511
|
+
"stability": "IETF-standard protocol with a stable bootstrap redirector.",
|
|
512
|
+
"last_verified": "2026-06-30",
|
|
513
|
+
"source_list": []
|
|
514
|
+
},
|
|
515
|
+
{
|
|
516
|
+
"name": "Silent Push Community Edition",
|
|
517
|
+
"url": "https://www.silentpush.com/community-edition/",
|
|
518
|
+
"categories": ["infrastructure", "passive_dns"],
|
|
519
|
+
"ioc_types": ["domain", "ip"],
|
|
520
|
+
"access": "freemium",
|
|
521
|
+
"ai_access": "api_key",
|
|
522
|
+
"query_disclosing": "vendor",
|
|
523
|
+
"content_disclosing": "none",
|
|
524
|
+
"best_use": "Infrastructure hunting across DNS, WHOIS, certificates, and web-content fingerprints to map related attacker infrastructure.",
|
|
525
|
+
"caveats": "The free Community Edition allows 250 queries per month (GUI and API) for DNS, IP, domain, and WHOIS-history lookups. Advanced features and intelligence feeds are paid.",
|
|
526
|
+
"stability": "Established platform with a free Community Edition.",
|
|
527
|
+
"last_verified": "2026-06-30",
|
|
528
|
+
"source_list": []
|
|
529
|
+
},
|
|
530
|
+
{
|
|
531
|
+
"name": "Maltego Community Edition",
|
|
532
|
+
"url": "https://www.maltego.com/products/maltego-community-edition/",
|
|
533
|
+
"categories": ["aggregator"],
|
|
534
|
+
"ioc_types": ["domain", "ip", "hash", "url"],
|
|
535
|
+
"access": "freemium",
|
|
536
|
+
"ai_access": "web",
|
|
537
|
+
"query_disclosing": "vendor",
|
|
538
|
+
"content_disclosing": "none",
|
|
539
|
+
"best_use": "Link-analysis and graph pivoting across many data sources via transforms.",
|
|
540
|
+
"caveats": "The free Community Edition (requires a Maltego ID) includes about 50 transforms, 200 credits per month, and up to 24 results per transform, with per-provider monthly caps. Breach data and higher limits are paid.",
|
|
541
|
+
"stability": "Long-established link-analysis platform with a free Community Edition.",
|
|
542
|
+
"last_verified": "2026-06-30",
|
|
543
|
+
"source_list": []
|
|
544
|
+
}
|
|
545
|
+
]
|
|
546
|
+
}
|