fingerprint-mcp 0.1.0
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/LICENSE +663 -0
- package/README.ar.md +767 -0
- package/README.bn.md +767 -0
- package/README.bs.md +767 -0
- package/README.da.md +767 -0
- package/README.de.md +770 -0
- package/README.el.md +767 -0
- package/README.es.md +769 -0
- package/README.fr.md +769 -0
- package/README.hi.md +767 -0
- package/README.it.md +767 -0
- package/README.ja.md +767 -0
- package/README.ko.md +772 -0
- package/README.md +767 -0
- package/README.no.md +767 -0
- package/README.pl.md +767 -0
- package/README.pt-BR.md +767 -0
- package/README.ru.md +767 -0
- package/README.th.md +767 -0
- package/README.tr.md +767 -0
- package/README.uk.md +767 -0
- package/README.vi.md +767 -0
- package/README.zh-TW.md +768 -0
- package/README.zh.md +768 -0
- package/dist/app/index.d.ts +3 -0
- package/dist/app/index.d.ts.map +1 -0
- package/dist/app/index.js +614 -0
- package/dist/app/index.js.map +1 -0
- package/dist/composite/analyze.d.ts +3 -0
- package/dist/composite/analyze.d.ts.map +1 -0
- package/dist/composite/analyze.js +59 -0
- package/dist/composite/analyze.js.map +1 -0
- package/dist/composite/correlate.d.ts +3 -0
- package/dist/composite/correlate.d.ts.map +1 -0
- package/dist/composite/correlate.js +184 -0
- package/dist/composite/correlate.js.map +1 -0
- package/dist/composite/enumerate.d.ts +3 -0
- package/dist/composite/enumerate.d.ts.map +1 -0
- package/dist/composite/enumerate.js +94 -0
- package/dist/composite/enumerate.js.map +1 -0
- package/dist/composite/helpers.d.ts +22 -0
- package/dist/composite/helpers.d.ts.map +1 -0
- package/dist/composite/helpers.js +111 -0
- package/dist/composite/helpers.js.map +1 -0
- package/dist/composite/index.d.ts +3 -0
- package/dist/composite/index.d.ts.map +1 -0
- package/dist/composite/index.js +29 -0
- package/dist/composite/index.js.map +1 -0
- package/dist/composite/meta.d.ts +3 -0
- package/dist/composite/meta.d.ts.map +1 -0
- package/dist/composite/meta.js +23 -0
- package/dist/composite/meta.js.map +1 -0
- package/dist/composite/osint.d.ts +3 -0
- package/dist/composite/osint.d.ts.map +1 -0
- package/dist/composite/osint.js +40 -0
- package/dist/composite/osint.js.map +1 -0
- package/dist/composite/recon.d.ts +3 -0
- package/dist/composite/recon.d.ts.map +1 -0
- package/dist/composite/recon.js +131 -0
- package/dist/composite/recon.js.map +1 -0
- package/dist/composite/scan-dns.d.ts +3 -0
- package/dist/composite/scan-dns.d.ts.map +1 -0
- package/dist/composite/scan-dns.js +44 -0
- package/dist/composite/scan-dns.js.map +1 -0
- package/dist/composite/scan-http.d.ts +3 -0
- package/dist/composite/scan-http.d.ts.map +1 -0
- package/dist/composite/scan-http.js +68 -0
- package/dist/composite/scan-http.js.map +1 -0
- package/dist/composite/scan-paths.d.ts +3 -0
- package/dist/composite/scan-paths.d.ts.map +1 -0
- package/dist/composite/scan-paths.js +32 -0
- package/dist/composite/scan-paths.js.map +1 -0
- package/dist/composite/scan-ports.d.ts +3 -0
- package/dist/composite/scan-ports.d.ts.map +1 -0
- package/dist/composite/scan-ports.js +79 -0
- package/dist/composite/scan-ports.js.map +1 -0
- package/dist/composite/scan-services.d.ts +3 -0
- package/dist/composite/scan-services.d.ts.map +1 -0
- package/dist/composite/scan-services.js +111 -0
- package/dist/composite/scan-services.js.map +1 -0
- package/dist/composite/scan-tls.d.ts +3 -0
- package/dist/composite/scan-tls.d.ts.map +1 -0
- package/dist/composite/scan-tls.js +32 -0
- package/dist/composite/scan-tls.js.map +1 -0
- package/dist/composite/scan-waf.d.ts +3 -0
- package/dist/composite/scan-waf.d.ts.map +1 -0
- package/dist/composite/scan-waf.js +35 -0
- package/dist/composite/scan-waf.js.map +1 -0
- package/dist/correlation/index.d.ts +3 -0
- package/dist/correlation/index.d.ts.map +1 -0
- package/dist/correlation/index.js +1044 -0
- package/dist/correlation/index.js.map +1 -0
- package/dist/data/analytics-patterns.d.ts +21 -0
- package/dist/data/analytics-patterns.d.ts.map +1 -0
- package/dist/data/analytics-patterns.js +449 -0
- package/dist/data/analytics-patterns.js.map +1 -0
- package/dist/data/app-signatures.d.ts +52 -0
- package/dist/data/app-signatures.d.ts.map +1 -0
- package/dist/data/app-signatures.js +1143 -0
- package/dist/data/app-signatures.js.map +1 -0
- package/dist/data/c2-signatures.d.ts +54 -0
- package/dist/data/c2-signatures.d.ts.map +1 -0
- package/dist/data/c2-signatures.js +256 -0
- package/dist/data/c2-signatures.js.map +1 -0
- package/dist/data/cloud-ranges.d.ts +34 -0
- package/dist/data/cloud-ranges.d.ts.map +1 -0
- package/dist/data/cloud-ranges.js +628 -0
- package/dist/data/cloud-ranges.js.map +1 -0
- package/dist/data/cookie-patterns.d.ts +28 -0
- package/dist/data/cookie-patterns.d.ts.map +1 -0
- package/dist/data/cookie-patterns.js +225 -0
- package/dist/data/cookie-patterns.js.map +1 -0
- package/dist/data/error-signatures.d.ts +19 -0
- package/dist/data/error-signatures.d.ts.map +1 -0
- package/dist/data/error-signatures.js +321 -0
- package/dist/data/error-signatures.js.map +1 -0
- package/dist/data/favicon-hashes.d.ts +25 -0
- package/dist/data/favicon-hashes.d.ts.map +1 -0
- package/dist/data/favicon-hashes.js +249 -0
- package/dist/data/favicon-hashes.js.map +1 -0
- package/dist/data/h2-signatures.d.ts +50 -0
- package/dist/data/h2-signatures.d.ts.map +1 -0
- package/dist/data/h2-signatures.js +211 -0
- package/dist/data/h2-signatures.js.map +1 -0
- package/dist/data/header-order.d.ts +38 -0
- package/dist/data/header-order.d.ts.map +1 -0
- package/dist/data/header-order.js +185 -0
- package/dist/data/header-order.js.map +1 -0
- package/dist/data/jarm-signatures.d.ts +25 -0
- package/dist/data/jarm-signatures.d.ts.map +1 -0
- package/dist/data/jarm-signatures.js +213 -0
- package/dist/data/jarm-signatures.js.map +1 -0
- package/dist/data/saas-patterns.d.ts +23 -0
- package/dist/data/saas-patterns.d.ts.map +1 -0
- package/dist/data/saas-patterns.js +139 -0
- package/dist/data/saas-patterns.js.map +1 -0
- package/dist/data/sensitive-paths.d.ts +12 -0
- package/dist/data/sensitive-paths.d.ts.map +1 -0
- package/dist/data/sensitive-paths.js +1539 -0
- package/dist/data/sensitive-paths.js.map +1 -0
- package/dist/data/service-banners.d.ts +59 -0
- package/dist/data/service-banners.d.ts.map +1 -0
- package/dist/data/service-banners.js +323 -0
- package/dist/data/service-banners.js.map +1 -0
- package/dist/data/smtp-signatures.d.ts +12 -0
- package/dist/data/smtp-signatures.d.ts.map +1 -0
- package/dist/data/smtp-signatures.js +350 -0
- package/dist/data/smtp-signatures.js.map +1 -0
- package/dist/data/takeover-patterns.d.ts +37 -0
- package/dist/data/takeover-patterns.d.ts.map +1 -0
- package/dist/data/takeover-patterns.js +249 -0
- package/dist/data/takeover-patterns.js.map +1 -0
- package/dist/data/tech-patterns.d.ts +44 -0
- package/dist/data/tech-patterns.d.ts.map +1 -0
- package/dist/data/tech-patterns.js +690 -0
- package/dist/data/tech-patterns.js.map +1 -0
- package/dist/data/waf-signatures.d.ts +21 -0
- package/dist/data/waf-signatures.d.ts.map +1 -0
- package/dist/data/waf-signatures.js +318 -0
- package/dist/data/waf-signatures.js.map +1 -0
- package/dist/dns/index.d.ts +3 -0
- package/dist/dns/index.d.ts.map +1 -0
- package/dist/dns/index.js +1067 -0
- package/dist/dns/index.js.map +1 -0
- package/dist/enum/index.d.ts +3 -0
- package/dist/enum/index.d.ts.map +1 -0
- package/dist/enum/index.js +818 -0
- package/dist/enum/index.js.map +1 -0
- package/dist/h2/index.d.ts +3 -0
- package/dist/h2/index.d.ts.map +1 -0
- package/dist/h2/index.js +414 -0
- package/dist/h2/index.js.map +1 -0
- package/dist/http/index.d.ts +3 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +2444 -0
- package/dist/http/index.js.map +1 -0
- package/dist/identify/index.d.ts +3 -0
- package/dist/identify/index.d.ts.map +1 -0
- package/dist/identify/index.js +447 -0
- package/dist/identify/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +165 -0
- package/dist/index.js.map +1 -0
- package/dist/infra/index.d.ts +3 -0
- package/dist/infra/index.d.ts.map +1 -0
- package/dist/infra/index.js +989 -0
- package/dist/infra/index.js.map +1 -0
- package/dist/iot/index.d.ts +3 -0
- package/dist/iot/index.d.ts.map +1 -0
- package/dist/iot/index.js +610 -0
- package/dist/iot/index.js.map +1 -0
- package/dist/meta/index.d.ts +3 -0
- package/dist/meta/index.d.ts.map +1 -0
- package/dist/meta/index.js +442 -0
- package/dist/meta/index.js.map +1 -0
- package/dist/osint/index.d.ts +3 -0
- package/dist/osint/index.d.ts.map +1 -0
- package/dist/osint/index.js +687 -0
- package/dist/osint/index.js.map +1 -0
- package/dist/passive/index.d.ts +3 -0
- package/dist/passive/index.d.ts.map +1 -0
- package/dist/passive/index.js +944 -0
- package/dist/passive/index.js.map +1 -0
- package/dist/path/index.d.ts +3 -0
- package/dist/path/index.d.ts.map +1 -0
- package/dist/path/index.js +878 -0
- package/dist/path/index.js.map +1 -0
- package/dist/protocol/mcp-server.d.ts +4 -0
- package/dist/protocol/mcp-server.d.ts.map +1 -0
- package/dist/protocol/mcp-server.js +32 -0
- package/dist/protocol/mcp-server.js.map +1 -0
- package/dist/protocol/tools.d.ts +3 -0
- package/dist/protocol/tools.d.ts.map +1 -0
- package/dist/protocol/tools.js +5 -0
- package/dist/protocol/tools.js.map +1 -0
- package/dist/service/index.d.ts +3 -0
- package/dist/service/index.d.ts.map +1 -0
- package/dist/service/index.js +1053 -0
- package/dist/service/index.js.map +1 -0
- package/dist/smtp/index.d.ts +3 -0
- package/dist/smtp/index.d.ts.map +1 -0
- package/dist/smtp/index.js +437 -0
- package/dist/smtp/index.js.map +1 -0
- package/dist/ssh/index.d.ts +3 -0
- package/dist/ssh/index.d.ts.map +1 -0
- package/dist/ssh/index.js +676 -0
- package/dist/ssh/index.js.map +1 -0
- package/dist/tcp/index.d.ts +3 -0
- package/dist/tcp/index.d.ts.map +1 -0
- package/dist/tcp/index.js +369 -0
- package/dist/tcp/index.js.map +1 -0
- package/dist/timing/index.d.ts +3 -0
- package/dist/timing/index.d.ts.map +1 -0
- package/dist/timing/index.js +425 -0
- package/dist/timing/index.js.map +1 -0
- package/dist/tls/index.d.ts +3 -0
- package/dist/tls/index.d.ts.map +1 -0
- package/dist/tls/index.js +1332 -0
- package/dist/tls/index.js.map +1 -0
- package/dist/types/index.d.ts +26 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/cache.d.ts +11 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +35 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/murmurhash3.d.ts +3 -0
- package/dist/utils/murmurhash3.d.ts.map +1 -0
- package/dist/utils/murmurhash3.js +57 -0
- package/dist/utils/murmurhash3.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +10 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +35 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/dist/utils/require-key.d.ts +2 -0
- package/dist/utils/require-key.d.ts.map +1 -0
- package/dist/utils/require-key.js +8 -0
- package/dist/utils/require-key.js.map +1 -0
- package/dist/waf/index.d.ts +3 -0
- package/dist/waf/index.d.ts.map +1 -0
- package/dist/waf/index.js +767 -0
- package/dist/waf/index.js.map +1 -0
- package/dist/web/index.d.ts +3 -0
- package/dist/web/index.d.ts.map +1 -0
- package/dist/web/index.js +1366 -0
- package/dist/web/index.js.map +1 -0
- package/package.json +66 -0
package/README.it.md
ADDED
|
@@ -0,0 +1,767 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<a href="README.md">English</a> |
|
|
3
|
+
<a href="README.zh.md">简体中文</a> |
|
|
4
|
+
<a href="README.zh-TW.md">繁體中文</a> |
|
|
5
|
+
<a href="README.ko.md">한국어</a> |
|
|
6
|
+
<a href="README.de.md">Deutsch</a> |
|
|
7
|
+
<a href="README.es.md">Español</a> |
|
|
8
|
+
<a href="README.fr.md">Français</a> |
|
|
9
|
+
<strong>Italiano</strong> |
|
|
10
|
+
<a href="README.da.md">Dansk</a> |
|
|
11
|
+
<a href="README.ja.md">日本語</a> |
|
|
12
|
+
<a href="README.pl.md">Polski</a> |
|
|
13
|
+
<a href="README.ru.md">Русский</a> |
|
|
14
|
+
<a href="README.bs.md">Bosanski</a> |
|
|
15
|
+
<a href="README.ar.md">العربية</a> |
|
|
16
|
+
<a href="README.no.md">Norsk</a> |
|
|
17
|
+
<a href="README.pt-BR.md">Português (Brasil)</a> |
|
|
18
|
+
<a href="README.th.md">ไทย</a> |
|
|
19
|
+
<a href="README.tr.md">Türkçe</a> |
|
|
20
|
+
<a href="README.uk.md">Українська</a> |
|
|
21
|
+
<a href="README.bn.md">বাংলা</a> |
|
|
22
|
+
<a href="README.el.md">Ελληνικά</a> |
|
|
23
|
+
<a href="README.vi.md">Tiếng Việt</a> |
|
|
24
|
+
<a href="README.hi.md">हिन्दी</a>
|
|
25
|
+
</p>
|
|
26
|
+
|
|
27
|
+
<p align="center">
|
|
28
|
+
<br>
|
|
29
|
+
<picture>
|
|
30
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/badchars/fingerprint-mcp/main/.github/banner-dark.svg">
|
|
31
|
+
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/badchars/fingerprint-mcp/main/.github/banner-light.svg">
|
|
32
|
+
<img alt="fingerprint-mcp" src="https://raw.githubusercontent.com/badchars/fingerprint-mcp/main/.github/banner-dark.svg" width="700">
|
|
33
|
+
</picture>
|
|
34
|
+
</p>
|
|
35
|
+
|
|
36
|
+
<h3 align="center">Fingerprinting digitale universale per agenti AI.</h3>
|
|
37
|
+
|
|
38
|
+
<p align="center">
|
|
39
|
+
TCP, TLS/SSL, SSH, HTTP, DNS, WAF/CDN, IoT, SMTP, sondaggio servizi, JARM, JA4X, hashing favicon, topologia dell'infrastruttura, rilevamento C2, arricchimento OSINT — unificati in un unico server MCP.<br>
|
|
40
|
+
Il tuo agente AI ottiene il <b>fingerprinting a spettro completo su richiesta</b>, non 11 strumenti CLI scollegati e correlazione manuale.
|
|
41
|
+
</p>
|
|
42
|
+
|
|
43
|
+
<br>
|
|
44
|
+
|
|
45
|
+
<p align="center">
|
|
46
|
+
<a href="#il-problema">Il Problema</a> •
|
|
47
|
+
<a href="#in-cosa-%C3%A8-diverso">In Cosa è Diverso</a> •
|
|
48
|
+
<a href="#avvio-rapido">Avvio Rapido</a> •
|
|
49
|
+
<a href="#cosa-pu%C3%B2-fare-lai">Cosa Può Fare l'AI</a> •
|
|
50
|
+
<a href="#riferimento-strumenti-13-strumenti-103-tecniche">Strumenti (13)</a> •
|
|
51
|
+
<a href="#fonti-dati-21">Fonti Dati</a> •
|
|
52
|
+
<a href="#architettura">Architettura</a> •
|
|
53
|
+
<a href="CHANGELOG.md">Changelog</a> •
|
|
54
|
+
<a href="CONTRIBUTING.md">Contribuire</a>
|
|
55
|
+
</p>
|
|
56
|
+
|
|
57
|
+
<p align="center">
|
|
58
|
+
<a href="https://www.npmjs.com/package/fingerprint-mcp"><img src="https://img.shields.io/npm/v/fingerprint-mcp.svg" alt="npm"></a>
|
|
59
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/license-AGPL--3.0-blue.svg" alt="Licenza"></a>
|
|
60
|
+
<img src="https://img.shields.io/badge/runtime-Bun-f472b6" alt="Bun">
|
|
61
|
+
<img src="https://img.shields.io/badge/protocol-MCP-8b5cf6" alt="MCP">
|
|
62
|
+
<img src="https://img.shields.io/badge/tools-13-ef4444" alt="13 Strumenti">
|
|
63
|
+
<img src="https://img.shields.io/badge/techniques-103-f97316" alt="103 Tecniche">
|
|
64
|
+
</p>
|
|
65
|
+
|
|
66
|
+
<p align="center">
|
|
67
|
+
<img src="https://raw.githubusercontent.com/badchars/fingerprint-mcp/main/.github/demo.gif" alt="Demo di fingerprint-mcp" width="800">
|
|
68
|
+
</p>
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Il Problema
|
|
73
|
+
|
|
74
|
+
Fare il fingerprinting di un server oggi significa destreggiarsi tra una dozzina di strumenti scollegati. Esegui `nmap` per la scansione delle porte, `testssl.sh` per l'analisi dei certificati, `curl -I` per gli header HTTP, `dig` per il DNS, `wafw00f` per il rilevamento WAF, `ssh-audit` per SSH, uno strumento JARM separato, Wappalyzer per il rilevamento delle tecnologie — e poi passi 30 minuti a correlare manualmente tutto in un foglio di calcolo per capire cosa sta realmente girando.
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
Flusso di lavoro tradizionale del fingerprinting:
|
|
78
|
+
analisi certificati TLS -> testssl.sh / openssl s_client
|
|
79
|
+
cattura header HTTP -> curl -I
|
|
80
|
+
rilevamento tecnologie web -> wappalyzer CLI
|
|
81
|
+
ricognizione DNS -> dig / nslookup / dnsenum
|
|
82
|
+
scansione porte -> nmap -sV
|
|
83
|
+
rilevamento WAF -> wafw00f
|
|
84
|
+
audit SSH -> ssh-audit
|
|
85
|
+
fingerprinting servizi -> nmap scripts
|
|
86
|
+
fingerprint JARM -> jarm (strumento separato)
|
|
87
|
+
verifica database OSINT -> shodan CLI, censys CLI
|
|
88
|
+
correlazione di tutto -> manualmente in un foglio di calcolo
|
|
89
|
+
──────────────────────────────
|
|
90
|
+
Totale: 11 strumenti, 30+ minuti, correlazione manuale
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
**fingerprint-mcp** fornisce al tuo agente AI 13 strumenti compositi che racchiudono 103 tecniche di fingerprinting attraverso 21 provider tramite il [Model Context Protocol](https://modelcontextprotocol.io). L'agente esegue fingerprinting multi-livello in parallelo, correla i segnali tra i livelli TCP/TLS/HTTP/DNS/SSH, rileva honeypot e infrastrutture C2, e presenta un quadro di intelligence unificato — in una singola conversazione.
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
Con fingerprint-mcp:
|
|
97
|
+
Tu: "Fai una ricognizione approfondita su target.com"
|
|
98
|
+
|
|
99
|
+
Agente: -> recon {url: "https://target.com", depth: "deep"}
|
|
100
|
+
|
|
101
|
+
-> TLS: nginx/1.24.0 tramite JARM (3fd21b20d00000...),
|
|
102
|
+
certificato Let's Encrypt, 2 SAN, TLS 1.2+1.3
|
|
103
|
+
-> HTTP: Express.js dietro Cloudflare WAF,
|
|
104
|
+
React SPA, Google Analytics, 14 header di sicurezza analizzati
|
|
105
|
+
-> DNS: record A/AAAA/MX/TXT, SPF/DKIM/DMARC configurati,
|
|
106
|
+
Slack + Google Workspace rilevati tramite CNAME/MX
|
|
107
|
+
-> Porte: 80, 443, 22 (OpenSSH 9.6), 8080 (server di sviluppo)
|
|
108
|
+
-> WAF: Cloudflare rilevato, IP di origine scoperto tramite connessione diretta
|
|
109
|
+
-> Enumerazione: 12 sottodomini tramite log CT, DNS wildcard rilevato
|
|
110
|
+
-> "target.com esegue nginx/1.24.0 con Express.js dietro
|
|
111
|
+
Cloudflare WAF. IP di origine 203.0.113.42 esposto sulla porta 8080.
|
|
112
|
+
TLS è configurato correttamente (equivalente A+) ma il server
|
|
113
|
+
di sviluppo sulla 8080 non ha protezione WAF. 3 sottodomini puntano a
|
|
114
|
+
infrastruttura dismessa — potenziale rischio di takeover."
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## In Cosa è Diverso
|
|
120
|
+
|
|
121
|
+
Gli strumenti esistenti ti danno dati grezzi un livello alla volta. fingerprint-mcp dà al tuo agente AI la capacità di **ragionare su tutti i livelli di fingerprinting simultaneamente**.
|
|
122
|
+
|
|
123
|
+
<table>
|
|
124
|
+
<thead>
|
|
125
|
+
<tr>
|
|
126
|
+
<th></th>
|
|
127
|
+
<th>Approccio Tradizionale</th>
|
|
128
|
+
<th>fingerprint-mcp</th>
|
|
129
|
+
</tr>
|
|
130
|
+
</thead>
|
|
131
|
+
<tbody>
|
|
132
|
+
<tr>
|
|
133
|
+
<td><b>Interfaccia</b></td>
|
|
134
|
+
<td>11 strumenti CLI diversi con formati di output diversi</td>
|
|
135
|
+
<td>MCP — l'agente AI chiama gli strumenti in modo conversazionale</td>
|
|
136
|
+
</tr>
|
|
137
|
+
<tr>
|
|
138
|
+
<td><b>Tecniche</b></td>
|
|
139
|
+
<td>Uno strumento, un livello alla volta</td>
|
|
140
|
+
<td>103 tecniche su 21 provider, eseguite in parallelo</td>
|
|
141
|
+
</tr>
|
|
142
|
+
<tr>
|
|
143
|
+
<td><b>Analisi TLS</b></td>
|
|
144
|
+
<td>Output di testssl.sh, analisi JARM manuale separata</td>
|
|
145
|
+
<td>L'agente combina certificato + JARM + JA4X + suite di cifratura + SNI + log CT in una sola chiamata</td>
|
|
146
|
+
</tr>
|
|
147
|
+
<tr>
|
|
148
|
+
<td><b>Correlazione</b></td>
|
|
149
|
+
<td>Copia-incolla dei risultati in un foglio di calcolo</td>
|
|
150
|
+
<td>L'agente correla incrociando: "JARM corrisponde a un framework C2 noto, il timing HTTP conferma un honeypot"</td>
|
|
151
|
+
</tr>
|
|
152
|
+
<tr>
|
|
153
|
+
<td><b>Bypass WAF</b></td>
|
|
154
|
+
<td>wafw00f rileva il WAF, cerchi manualmente l'origine</td>
|
|
155
|
+
<td>L'agente rileva il WAF, scopre l'IP di origine e verifica che serva lo stesso contenuto</td>
|
|
156
|
+
</tr>
|
|
157
|
+
<tr>
|
|
158
|
+
<td><b>Chiavi API</b></td>
|
|
159
|
+
<td>Richieste per Shodan, Censys, ecc.</td>
|
|
160
|
+
<td>80+ tecniche attive funzionano senza alcuna chiave API; le chiavi sbloccano l'arricchimento OSINT</td>
|
|
161
|
+
</tr>
|
|
162
|
+
<tr>
|
|
163
|
+
<td><b>Configurazione</b></td>
|
|
164
|
+
<td>Installa nmap, testssl, wafw00f, ssh-audit, jarm, wappalyzer...</td>
|
|
165
|
+
<td><code>npx fingerprint-mcp</code> — un comando, zero configurazione</td>
|
|
166
|
+
</tr>
|
|
167
|
+
</tbody>
|
|
168
|
+
</table>
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## Avvio Rapido
|
|
173
|
+
|
|
174
|
+
### Opzione 1: npx (senza installazione)
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
npx fingerprint-mcp
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
Tutte le 80+ tecniche di fingerprinting attivo funzionano immediatamente. Non sono richieste chiavi API per il fingerprinting TCP, TLS, SSH, HTTP, DNS, WAF, percorsi, servizi, timing, IoT, SMTP e applicazioni.
|
|
181
|
+
|
|
182
|
+
### Opzione 2: Clone
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
git clone https://github.com/badchars/fingerprint-mcp.git
|
|
186
|
+
cd fingerprint-mcp
|
|
187
|
+
bun install
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### Variabili d'ambiente (opzionali)
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
# Arricchimento OSINT (tutte opzionali — il fingerprinting attivo funziona senza alcuna chiave)
|
|
194
|
+
export SHODAN_API_KEY=your-key # Abilita osint_shodan, ssh_hostkey_lookup
|
|
195
|
+
export CENSYS_API_ID=your-id # Abilita osint_censys (gratuito: 250 query/mese)
|
|
196
|
+
export CENSYS_API_SECRET=your-secret # Segreto API Censys
|
|
197
|
+
export SECURITYTRAILS_API_KEY=your-key # Abilita waf_origin, enum_passive_dns
|
|
198
|
+
export VIRUSTOTAL_API_KEY=your-key # Abilita osint_virustotal (gratuito: 500 query/giorno)
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
Tutte le chiavi API sono opzionali. Senza di esse, ottieni comunque il fingerprinting completo TCP/TLS/SSH/HTTP/DNS/WAF/percorsi/servizi/timing/IoT/SMTP/infrastruttura/applicazioni, correlazione, analisi passiva, enumerazione e strumenti meta — 80+ tecniche che funzionano sondando direttamente il target.
|
|
202
|
+
|
|
203
|
+
### Connetti al tuo agente AI
|
|
204
|
+
|
|
205
|
+
<details open>
|
|
206
|
+
<summary><b>Claude Code</b></summary>
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
# Con npx
|
|
210
|
+
claude mcp add fingerprint-mcp -- npx fingerprint-mcp
|
|
211
|
+
|
|
212
|
+
# Con clone locale
|
|
213
|
+
claude mcp add fingerprint-mcp -- bun run /path/to/fingerprint-mcp/src/index.ts
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
</details>
|
|
217
|
+
|
|
218
|
+
<details>
|
|
219
|
+
<summary><b>Claude Desktop</b></summary>
|
|
220
|
+
|
|
221
|
+
Aggiungi a `~/Library/Application Support/Claude/claude_desktop_config.json`:
|
|
222
|
+
|
|
223
|
+
```json
|
|
224
|
+
{
|
|
225
|
+
"mcpServers": {
|
|
226
|
+
"fingerprint": {
|
|
227
|
+
"command": "npx",
|
|
228
|
+
"args": ["-y", "fingerprint-mcp"],
|
|
229
|
+
"env": {
|
|
230
|
+
"SHODAN_API_KEY": "optional",
|
|
231
|
+
"CENSYS_API_ID": "optional",
|
|
232
|
+
"CENSYS_API_SECRET": "optional",
|
|
233
|
+
"SECURITYTRAILS_API_KEY": "optional",
|
|
234
|
+
"VIRUSTOTAL_API_KEY": "optional"
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
</details>
|
|
242
|
+
|
|
243
|
+
<details>
|
|
244
|
+
<summary><b>Cursor / Windsurf / altri client MCP</b></summary>
|
|
245
|
+
|
|
246
|
+
Stesso formato di configurazione JSON. Punta il comando a `npx fingerprint-mcp` o al tuo percorso di installazione locale.
|
|
247
|
+
|
|
248
|
+
</details>
|
|
249
|
+
|
|
250
|
+
### Inizia a interrogare
|
|
251
|
+
|
|
252
|
+
```
|
|
253
|
+
Tu: "Fai il fingerprinting completo di target.com — TLS, stack HTTP, WAF, DNS, porte aperte"
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
Tutto qui. L'agente gestisce automaticamente il fingerprinting multi-livello, la correlazione dei segnali e l'analisi dell'infrastruttura.
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
## Cosa Può Fare l'AI
|
|
261
|
+
|
|
262
|
+
### Ricognizione Rapida
|
|
263
|
+
|
|
264
|
+
```
|
|
265
|
+
Tu: "Ricognizione rapida su target.com"
|
|
266
|
+
|
|
267
|
+
Agente: -> recon {url: "https://target.com", depth: "quick"}
|
|
268
|
+
|
|
269
|
+
-> TCP: porte 80, 443, 22 aperte
|
|
270
|
+
-> TLS: certificato RSA Let's Encrypt, TLS 1.2+1.3, firma JARM nginx
|
|
271
|
+
-> HTTP: nginx/1.24.0, Express.js, React, Cloudflare CDN
|
|
272
|
+
-> DNS: A 203.0.113.42, MX Google Workspace, SPF/DKIM configurati
|
|
273
|
+
-> WAF: Cloudflare rilevato (header cf-ray)
|
|
274
|
+
-> "target.com è una React SPA su Express.js dietro nginx/1.24.0,
|
|
275
|
+
servita tramite Cloudflare CDN. TLS configurato correttamente con
|
|
276
|
+
Let's Encrypt. SSH sulla porta 22 con OpenSSH 9.6. Email
|
|
277
|
+
gestita da Google Workspace con SPF/DKIM/DMARC completi."
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
### Indagine TLS Approfondita
|
|
281
|
+
|
|
282
|
+
```
|
|
283
|
+
Tu: "Analizza nel dettaglio la configurazione TLS di suspicious-server.com"
|
|
284
|
+
|
|
285
|
+
Agente: -> scan_tls {host: "suspicious-server.com"}
|
|
286
|
+
|
|
287
|
+
-> Certificato: auto-firmato, CN=localhost, scaduto 47 giorni fa
|
|
288
|
+
-> JARM: 2ad2ad0002ad2ad00042d42d00000069d641f34fe76acdc05c40262f8815e5
|
|
289
|
+
(corrisponde al profilo predefinito di Cobalt Strike)
|
|
290
|
+
-> JA4X: fingerprint corrispondente a pattern noto di framework C2
|
|
291
|
+
-> Suite di cifratura: accetta cifrari deboli (RC4, 3DES)
|
|
292
|
+
-> SNI: risponde identicamente a qualsiasi valore SNI
|
|
293
|
+
-> Log CT: certificato non registrato (non pubblicamente attendibile)
|
|
294
|
+
-> "ALTO RISCHIO: La configurazione TLS indica fortemente un'infrastruttura C2.
|
|
295
|
+
Certificato auto-firmato scaduto, fingerprint JARM corrispondente a Cobalt Strike,
|
|
296
|
+
accetta cifrari deboli e risponde a valori SNI arbitrari.
|
|
297
|
+
Si raccomanda indagine immediata e blocco."
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
### Bypass WAF e Scoperta dell'Origine
|
|
301
|
+
|
|
302
|
+
```
|
|
303
|
+
Tu: "target.com è dietro un WAF. Riesci a trovare il server di origine?"
|
|
304
|
+
|
|
305
|
+
Agente: -> scan_waf {url: "https://target.com"}
|
|
306
|
+
-> scan_dns {domain: "target.com"}
|
|
307
|
+
-> enumerate {domain: "target.com"}
|
|
308
|
+
|
|
309
|
+
-> WAF: Cloudflare (AS13335), pagina di verifica su richieste sospette
|
|
310
|
+
-> DNS: il record A punta all'IP Cloudflare 104.21.x.x
|
|
311
|
+
-> Sottodomini: dev.target.com risolve a 203.0.113.42 (non-Cloudflare)
|
|
312
|
+
-> Connessione diretta a 203.0.113.42:443 restituisce lo stesso certificato TLS
|
|
313
|
+
-> Storico SecurityTrails: l'origine era 203.0.113.42 prima di Cloudflare
|
|
314
|
+
-> "IP di origine trovato: 203.0.113.42. Scoperto tramite il sottodominio
|
|
315
|
+
dev.target.com che bypassa Cloudflare. L'origine serve lo stesso
|
|
316
|
+
certificato TLS e risponde all'header Host target.com.
|
|
317
|
+
L'origine non ha protezione WAF — accesso diretto possibile."
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
### Scoperta Servizi su un Host
|
|
321
|
+
|
|
322
|
+
```
|
|
323
|
+
Tu: "Quali servizi sono in esecuzione su 10.0.1.50?"
|
|
324
|
+
|
|
325
|
+
Agente: -> scan_ports {host: "10.0.1.50"}
|
|
326
|
+
-> scan_services {host: "10.0.1.50", ports: [22, 80, 3306, 5432, 6379, 8080]}
|
|
327
|
+
|
|
328
|
+
-> Porta 22: OpenSSH 8.9p1 Ubuntu, chiave host ED25519
|
|
329
|
+
-> Porta 80: Apache/2.4.57, PHP/8.2, WordPress 6.4
|
|
330
|
+
-> Porta 3306: MySQL 8.0.36, autenticazione richiesta
|
|
331
|
+
-> Porta 5432: PostgreSQL 16.1, SSL richiesto
|
|
332
|
+
-> Porta 6379: Redis 7.2.4, NESSUNA autenticazione (aperto)
|
|
333
|
+
-> Porta 8080: server di sviluppo Node.js Express, CORS: *
|
|
334
|
+
-> "CRITICO: Redis sulla porta 6379 non ha autenticazione — chiunque sulla
|
|
335
|
+
rete può leggere/scrivere dati. Il server di sviluppo Express sulla 8080
|
|
336
|
+
ha CORS wildcard. MySQL e PostgreSQL richiedono correttamente l'autenticazione.
|
|
337
|
+
WordPress è indietro di 2 versioni minori. Azione immediata necessaria
|
|
338
|
+
su Redis e l'esposizione del server di sviluppo."
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
---
|
|
342
|
+
|
|
343
|
+
## Riferimento Strumenti (13 strumenti, 103 tecniche)
|
|
344
|
+
|
|
345
|
+
<details open>
|
|
346
|
+
<summary><b>recon — Ricognizione completa con selezione delle tecniche basata sulla profondità</b></summary>
|
|
347
|
+
|
|
348
|
+
| Parametro | Tipo | Descrizione |
|
|
349
|
+
|-----------|------|-------------|
|
|
350
|
+
| `url` | string | URL del target da analizzare |
|
|
351
|
+
| `depth` | `quick` \| `standard` \| `deep` | Profondità di scansione: quick=5 tecniche, standard=20, deep=50+ |
|
|
352
|
+
|
|
353
|
+
Orchestra le tecniche di tutti i provider in base al livello di profondità. La modalità quick fornisce una panoramica rapida; la modalità deep esegue un fingerprinting esaustivo inclusi enumerazione, OSINT e correlazione.
|
|
354
|
+
|
|
355
|
+
</details>
|
|
356
|
+
|
|
357
|
+
<details>
|
|
358
|
+
<summary><b>scan_ports — Scansione porte TCP con rilevamento servizi (3 tecniche)</b></summary>
|
|
359
|
+
|
|
360
|
+
| Parametro | Tipo | Descrizione |
|
|
361
|
+
|-----------|------|-------------|
|
|
362
|
+
| `host` | string | Host target (IP o dominio) |
|
|
363
|
+
| `ports` | number[] | Opzionale — porte specifiche da scansionare (predefinito: porte comuni) |
|
|
364
|
+
|
|
365
|
+
| Tecnica | Descrizione |
|
|
366
|
+
|---------|-------------|
|
|
367
|
+
| `tcp_probe` | Scansione TCP connect per rilevare porte aperte |
|
|
368
|
+
| `tcp_banner` | Cattura banner sulle porte aperte per l'identificazione dei servizi |
|
|
369
|
+
| `tcp_analysis` | Analisi delle combinazioni di porte e inferenza dei servizi |
|
|
370
|
+
|
|
371
|
+
</details>
|
|
372
|
+
|
|
373
|
+
<details>
|
|
374
|
+
<summary><b>scan_tls — Analisi TLS/SSL completa (8 tecniche)</b></summary>
|
|
375
|
+
|
|
376
|
+
| Parametro | Tipo | Descrizione |
|
|
377
|
+
|-----------|------|-------------|
|
|
378
|
+
| `host` | string | Host target (IP o dominio) |
|
|
379
|
+
| `port` | number | Opzionale — porta TLS (predefinito: 443) |
|
|
380
|
+
|
|
381
|
+
| Tecnica | Descrizione |
|
|
382
|
+
|---------|-------------|
|
|
383
|
+
| `tls_certificate` | Analisi certificato X.509 — soggetto, emittente, SAN, validità, catena |
|
|
384
|
+
| `tls_jarm` | Fingerprinting attivo JARM — 10 probe TLS Client Hello, hash di 62 caratteri |
|
|
385
|
+
| `tls_ja4x` | Fingerprinting TLS passivo JA4X dalle proprietà del certificato |
|
|
386
|
+
| `tls_ciphers` | Enumerazione suite di cifratura e analisi della robustezza |
|
|
387
|
+
| `tls_protocols` | Rilevamento versioni del protocollo TLS supportate (SSLv3 fino a TLS 1.3) |
|
|
388
|
+
| `tls_sni` | Test comportamento SNI — certificato predefinito vs. hostname richiesto |
|
|
389
|
+
| `tls_ct_logs` | Ricerca nei log Certificate Transparency tramite crt.sh |
|
|
390
|
+
| `tls_ocsp` | Verifica stapling OCSP e stato di revoca |
|
|
391
|
+
|
|
392
|
+
</details>
|
|
393
|
+
|
|
394
|
+
<details>
|
|
395
|
+
<summary><b>scan_dns — Intelligence DNS (7 tecniche)</b></summary>
|
|
396
|
+
|
|
397
|
+
| Parametro | Tipo | Descrizione |
|
|
398
|
+
|-----------|------|-------------|
|
|
399
|
+
| `domain` | string | Dominio target |
|
|
400
|
+
|
|
401
|
+
| Tecnica | Descrizione |
|
|
402
|
+
|---------|-------------|
|
|
403
|
+
| `dns_records` | Enumerazione completa dei record — A, AAAA, MX, NS, TXT, CNAME, SOA |
|
|
404
|
+
| `dns_email_auth` | Analisi record SPF, DKIM e DMARC |
|
|
405
|
+
| `dns_saas` | Rilevamento SaaS/servizi tramite pattern CNAME e MX (Slack, Zendesk, ecc.) |
|
|
406
|
+
| `dns_server` | Fingerprinting server DNS (BIND, PowerDNS, Cloudflare, ecc.) |
|
|
407
|
+
| `dns_takeover` | Rilevamento subdomain takeover tramite analisi CNAME pendenti |
|
|
408
|
+
| `dns_zone` | Tentativo di trasferimento di zona (AXFR) |
|
|
409
|
+
| `dns_caa` | Analisi record CAA per restrizioni sulle autorità di certificazione |
|
|
410
|
+
|
|
411
|
+
</details>
|
|
412
|
+
|
|
413
|
+
<details>
|
|
414
|
+
<summary><b>scan_http — Fingerprinting HTTP/web (29 tecniche)</b></summary>
|
|
415
|
+
|
|
416
|
+
| Parametro | Tipo | Descrizione |
|
|
417
|
+
|-----------|------|-------------|
|
|
418
|
+
| `url` | string | URL target |
|
|
419
|
+
|
|
420
|
+
| Tecnica | Provider | Descrizione |
|
|
421
|
+
|---------|----------|-------------|
|
|
422
|
+
| `http_headers` | HTTP | Analisi header di risposta e identificazione del server |
|
|
423
|
+
| `http_header_order` | HTTP | Fingerprint dell'ordine degli header (firma del software server) |
|
|
424
|
+
| `http_security_headers` | HTTP | Audit header di sicurezza (CSP, HSTS, X-Frame-Options, ecc.) |
|
|
425
|
+
| `http_cookies` | HTTP | Analisi cookie — flag, prefissi, rilevamento framework |
|
|
426
|
+
| `http_methods` | HTTP | Enumerazione metodi HTTP consentiti (OPTIONS) |
|
|
427
|
+
| `http_cors` | HTTP | Analisi policy CORS e rilevamento misconfigurazioni |
|
|
428
|
+
| `http_compression` | HTTP | Algoritmi di compressione supportati (gzip, br, zstd) |
|
|
429
|
+
| `http_caching` | HTTP | Analisi header cache (rilevamento CDN, reverse proxy) |
|
|
430
|
+
| `http_etag` | HTTP | Analisi formato ETag per identificazione backend |
|
|
431
|
+
| `http_error` | HTTP | Fingerprinting pagine di errore (personalizzate vs. predefinite) |
|
|
432
|
+
| `http_redirect` | HTTP | Analisi catena di redirect |
|
|
433
|
+
| `http_timing` | HTTP | Baseline timing di risposta per profilazione delle prestazioni del server |
|
|
434
|
+
| `http_favicon` | HTTP | Hash favicon (MurmurHash3) per identificazione tecnologie |
|
|
435
|
+
| `http_robots` | HTTP | Analisi robots.txt ed estrazione percorsi non consentiti |
|
|
436
|
+
| `http_sitemap` | HTTP | Scoperta sitemap ed estrazione URL |
|
|
437
|
+
| `http_wellknown` | HTTP | Scoperta endpoint .well-known (security.txt, openid, ecc.) |
|
|
438
|
+
| `web_tech` | Web | Rilevamento tecnologie tramite pattern HTML/JS/CSS |
|
|
439
|
+
| `web_analytics` | Web | Rilevamento servizi di analisi e tracciamento |
|
|
440
|
+
| `web_sourcemaps` | Web | Scoperta file source map |
|
|
441
|
+
| `web_websocket` | Web | Rilevamento endpoint WebSocket |
|
|
442
|
+
| `web_graphql` | Web | Rilevamento endpoint GraphQL e introspezione |
|
|
443
|
+
| `web_spa` | Web | Rilevamento framework applicazioni single-page |
|
|
444
|
+
| `web_cdn` | Web | Rilevamento CDN tramite header di risposta e DNS |
|
|
445
|
+
| `web_meta` | Web | Analisi meta tag HTML (generatore, indizi sul framework) |
|
|
446
|
+
| `web_feed` | Web | Scoperta feed RSS/Atom |
|
|
447
|
+
| `h2_detect` | HTTP/2 | Rilevamento supporto protocollo HTTP/2 |
|
|
448
|
+
| `h2_fingerprint` | HTTP/2 | Fingerprinting server HTTP/2 (SETTINGS, WINDOW_UPDATE) |
|
|
449
|
+
| `h2_h3` | HTTP/2 | Rilevamento supporto HTTP/3 (QUIC) tramite header Alt-Svc |
|
|
450
|
+
| `app_cms` | Application | Rilevamento CMS (WordPress, Drupal, Joomla, ecc.) |
|
|
451
|
+
|
|
452
|
+
</details>
|
|
453
|
+
|
|
454
|
+
<details>
|
|
455
|
+
<summary><b>scan_paths — Intelligence sui percorsi (5 tecniche)</b></summary>
|
|
456
|
+
|
|
457
|
+
| Parametro | Tipo | Descrizione |
|
|
458
|
+
|-----------|------|-------------|
|
|
459
|
+
| `url` | string | URL target |
|
|
460
|
+
| `categories` | string[] | Opzionale — categorie da verificare (sensitive, git, debug, api, config) |
|
|
461
|
+
|
|
462
|
+
| Tecnica | Descrizione |
|
|
463
|
+
|---------|-------------|
|
|
464
|
+
| `path_sensitive` | Scoperta file sensibili (file di backup, file di configurazione, dump database) |
|
|
465
|
+
| `path_robots` | Analisi robots.txt e sitemap.xml per percorsi nascosti |
|
|
466
|
+
| `path_git` | Rilevamento leak repository Git (.git/HEAD, .git/config) |
|
|
467
|
+
| `path_debug` | Scoperta endpoint di debug (phpinfo, server-status, console di debug) |
|
|
468
|
+
| `path_api` | Scoperta versioni API e endpoint di documentazione |
|
|
469
|
+
|
|
470
|
+
</details>
|
|
471
|
+
|
|
472
|
+
<details>
|
|
473
|
+
<summary><b>scan_waf — Rilevamento e fingerprinting WAF/CDN (4 tecniche)</b></summary>
|
|
474
|
+
|
|
475
|
+
| Parametro | Tipo | Descrizione |
|
|
476
|
+
|-----------|------|-------------|
|
|
477
|
+
| `url` | string | URL target |
|
|
478
|
+
|
|
479
|
+
| Tecnica | Descrizione |
|
|
480
|
+
|---------|-------------|
|
|
481
|
+
| `waf_detect` | Rilevamento presenza WAF tramite analisi header di risposta e comportamento |
|
|
482
|
+
| `waf_cdn` | Identificazione provider CDN (Cloudflare, Akamai, Fastly, ecc.) |
|
|
483
|
+
| `waf_fingerprint` | Identificazione prodotto WAF e rilevamento versione |
|
|
484
|
+
| `waf_origin` | Scoperta IP di origine dietro WAF/CDN (richiede `SECURITYTRAILS_API_KEY`) |
|
|
485
|
+
|
|
486
|
+
</details>
|
|
487
|
+
|
|
488
|
+
<details>
|
|
489
|
+
<summary><b>scan_services — Sondaggio a livello di servizio (12 tecniche)</b></summary>
|
|
490
|
+
|
|
491
|
+
| Parametro | Tipo | Descrizione |
|
|
492
|
+
|-----------|------|-------------|
|
|
493
|
+
| `host` | string | Host target (IP o dominio) |
|
|
494
|
+
| `ports` | number[] | Opzionale — porte specifiche da sondare |
|
|
495
|
+
| `service` | string | Opzionale — servizio specifico da sondare (mysql, postgres, redis, ftp, ssh, smtp, vnc, iot) |
|
|
496
|
+
|
|
497
|
+
| Tecnica | Provider | Descrizione |
|
|
498
|
+
|---------|----------|-------------|
|
|
499
|
+
| `ssh_probe` | SSH | Rilevamento versione protocollo SSH e software |
|
|
500
|
+
| `ssh_algorithms` | SSH | Audit algoritmi SSH (KEX, cifrari, MAC, tipi di chiave host) |
|
|
501
|
+
| `ssh_hostkey_lookup` | SSH | Ricerca chiave host SSH tramite Shodan (richiede `SHODAN_API_KEY`) |
|
|
502
|
+
| `svc_mysql` | Service | Rilevamento versione MySQL e fingerprinting delle capacità |
|
|
503
|
+
| `svc_postgres` | Service | Rilevamento versione PostgreSQL e verifica supporto SSL |
|
|
504
|
+
| `svc_redis` | Service | Rilevamento versione Redis e stato dell'autenticazione |
|
|
505
|
+
| `svc_ftp` | Service | Analisi banner FTP e verifica login anonimo |
|
|
506
|
+
| `svc_vnc_rdp` | Service | Rilevamento servizi VNC/RDP e valutazione della sicurezza |
|
|
507
|
+
| `smtp_banner` | SMTP | Analisi banner SMTP e identificazione MTA |
|
|
508
|
+
| `smtp_starttls` | SMTP | Supporto SMTP STARTTLS e ispezione certificato |
|
|
509
|
+
| `iot_detect` | IoT | Rilevamento dispositivi IoT tramite pattern banner e pagine predefinite |
|
|
510
|
+
| `iot_upnp` | IoT | Scoperta dispositivi UPnP/SSDP sulla rete locale |
|
|
511
|
+
|
|
512
|
+
</details>
|
|
513
|
+
|
|
514
|
+
<details>
|
|
515
|
+
<summary><b>enumerate — Espansione dello scope (8 tecniche)</b></summary>
|
|
516
|
+
|
|
517
|
+
| Parametro | Tipo | Descrizione |
|
|
518
|
+
|-----------|------|-------------|
|
|
519
|
+
| `domain` | string | Dominio target |
|
|
520
|
+
|
|
521
|
+
| Tecnica | Descrizione |
|
|
522
|
+
|---------|-------------|
|
|
523
|
+
| `enum_subdomains` | Enumerazione sottodomini tramite metodi multipli |
|
|
524
|
+
| `enum_wildcard` | Rilevamento DNS wildcard |
|
|
525
|
+
| `enum_tld` | Espansione TLD (target.com -> target.net, target.org, ecc.) |
|
|
526
|
+
| `enum_related` | Scoperta domini correlati tramite infrastruttura condivisa |
|
|
527
|
+
| `enum_asn` | Scoperta vicini ASN — altri domini sulla stessa rete |
|
|
528
|
+
| `enum_ct` | Estrazione sottodomini dai log Certificate Transparency |
|
|
529
|
+
| `enum_passive_dns` | Storico DNS passivo (richiede `SECURITYTRAILS_API_KEY`) |
|
|
530
|
+
| `enum_scope` | Riepilogo scope e panoramica della superficie di attacco |
|
|
531
|
+
|
|
532
|
+
</details>
|
|
533
|
+
|
|
534
|
+
<details>
|
|
535
|
+
<summary><b>osint — Arricchimento OSINT (6 tecniche)</b></summary>
|
|
536
|
+
|
|
537
|
+
| Parametro | Tipo | Descrizione |
|
|
538
|
+
|-----------|------|-------------|
|
|
539
|
+
| `target` | string | Indirizzo IP o dominio da arricchire |
|
|
540
|
+
| `type` | `ip` \| `domain` | Opzionale — tipo di target (rilevato automaticamente se omesso) |
|
|
541
|
+
|
|
542
|
+
| Tecnica | Auth | Descrizione |
|
|
543
|
+
|---------|------|-------------|
|
|
544
|
+
| `osint_shodan` | `SHODAN_API_KEY` | Ricerca host Shodan — porte aperte, banner, vulnerabilità, SO |
|
|
545
|
+
| `osint_censys` | `CENSYS_API_ID` + `CENSYS_API_SECRET` | Dati host Censys — servizi, TLS, sistema autonomo |
|
|
546
|
+
| `osint_reverse_ip` | Nessuno | Ricerca IP inverso — altri domini sullo stesso IP |
|
|
547
|
+
| `osint_whois` | Nessuno | Dati registrazione WHOIS — registrar, date, nameserver |
|
|
548
|
+
| `osint_webarchive` | Nessuno | Storico Web Archive — primo/ultimo snapshot, frequenza modifiche |
|
|
549
|
+
| `osint_virustotal` | `VIRUSTOTAL_API_KEY` | Report VirusTotal dominio/IP — rilevamenti, categorie, DNS |
|
|
550
|
+
|
|
551
|
+
</details>
|
|
552
|
+
|
|
553
|
+
<details>
|
|
554
|
+
<summary><b>analyze — Analisi passiva del fingerprint (3 modalità)</b></summary>
|
|
555
|
+
|
|
556
|
+
| Parametro | Tipo | Descrizione |
|
|
557
|
+
|-----------|------|-------------|
|
|
558
|
+
| `type` | `headers` \| `html` \| `banner` | Tipo di dati da analizzare |
|
|
559
|
+
| `data` | string | Dati grezzi da analizzare (incolla header, HTML o output banner) |
|
|
560
|
+
|
|
561
|
+
| Modalità | Descrizione |
|
|
562
|
+
|----------|-------------|
|
|
563
|
+
| `fp_analyze_headers` | Analisi passiva header HTTP — rilevamento server, framework, proxy senza inviare traffico |
|
|
564
|
+
| `fp_analyze_html` | Analisi passiva HTML — rilevamento tecnologie, identificazione framework dal sorgente |
|
|
565
|
+
| `fp_analyze_banner` | Analisi passiva banner — identificazione servizi dal testo grezzo del banner |
|
|
566
|
+
|
|
567
|
+
</details>
|
|
568
|
+
|
|
569
|
+
<details>
|
|
570
|
+
<summary><b>correlate — Motore di correlazione multi-segnale (7 modalità)</b></summary>
|
|
571
|
+
|
|
572
|
+
| Parametro | Tipo | Descrizione |
|
|
573
|
+
|-----------|------|-------------|
|
|
574
|
+
| `type` | `consistency` \| `honeypot` \| `spoofing` \| `compare` \| `topology` \| `c2` \| `identify` | Modalità di correlazione |
|
|
575
|
+
| `signals` | object | Segnali fingerprint da correlare (variano per modalità) |
|
|
576
|
+
|
|
577
|
+
| Modalità | Descrizione |
|
|
578
|
+
|----------|-------------|
|
|
579
|
+
| `fp_consistency` | Verifica coerenza segnali cross-layer — i fingerprint TCP, TLS, HTTP e DNS concordano? |
|
|
580
|
+
| `fp_honeypot` | Rilevamento honeypot — verifica combinazioni di servizi impossibili e anomalie comportamentali |
|
|
581
|
+
| `fp_spoofing` | Rilevamento spoofing — identifica discrepanze tra header server e comportamento effettivo |
|
|
582
|
+
| `fp_compare` | Confronto affiancato dei profili fingerprint di due host |
|
|
583
|
+
| `fp_topology` | Mappatura topologia dell'infrastruttura — catena CDN, load balancer, reverse proxy |
|
|
584
|
+
| `fp_c2` | Rilevamento framework C2 tramite correlazione JARM, TLS, HTTP e timing |
|
|
585
|
+
| `fp_identify` | Identificazione basata su hash contro database di firme conosciute |
|
|
586
|
+
|
|
587
|
+
</details>
|
|
588
|
+
|
|
589
|
+
<details>
|
|
590
|
+
<summary><b>meta — Configurazione server e dati (3 modalità)</b></summary>
|
|
591
|
+
|
|
592
|
+
| Parametro | Tipo | Descrizione |
|
|
593
|
+
|-----------|------|-------------|
|
|
594
|
+
| `category` | string | Opzionale — filtra per categoria |
|
|
595
|
+
|
|
596
|
+
| Modalità | Descrizione |
|
|
597
|
+
|----------|-------------|
|
|
598
|
+
| `fp_sources` | Elenco di tutte le fonti dati disponibili con configurazione e stato chiavi API |
|
|
599
|
+
| `fp_config` | Configurazione server — versione, provider caricati, conteggio tecniche |
|
|
600
|
+
| `fp_signatures` | Elenco database firme — firme JARM, banner, WAF, applicazioni |
|
|
601
|
+
|
|
602
|
+
</details>
|
|
603
|
+
|
|
604
|
+
---
|
|
605
|
+
|
|
606
|
+
### Utilizzo CLI
|
|
607
|
+
|
|
608
|
+
```bash
|
|
609
|
+
# Elenca tutti gli strumenti e le tecniche disponibili
|
|
610
|
+
npx fingerprint-mcp --list
|
|
611
|
+
|
|
612
|
+
# Esegui qualsiasi strumento direttamente
|
|
613
|
+
npx fingerprint-mcp --tool recon '{"url":"https://example.com","depth":"quick"}'
|
|
614
|
+
npx fingerprint-mcp --tool scan_tls '{"host":"example.com"}'
|
|
615
|
+
npx fingerprint-mcp --tool scan_ports '{"host":"10.0.1.50","ports":[22,80,443,3306,8080]}'
|
|
616
|
+
npx fingerprint-mcp --tool scan_dns '{"domain":"example.com"}'
|
|
617
|
+
npx fingerprint-mcp --tool scan_http '{"url":"https://example.com"}'
|
|
618
|
+
npx fingerprint-mcp --tool scan_waf '{"url":"https://example.com"}'
|
|
619
|
+
npx fingerprint-mcp --tool scan_services '{"host":"10.0.1.50","service":"redis"}'
|
|
620
|
+
npx fingerprint-mcp --tool enumerate '{"domain":"example.com"}'
|
|
621
|
+
npx fingerprint-mcp --tool analyze '{"type":"headers","data":"Server: nginx/1.24.0\nX-Powered-By: Express"}'
|
|
622
|
+
npx fingerprint-mcp --tool correlate '{"type":"honeypot","signals":{"jarm":"...","banner":"..."}}'
|
|
623
|
+
npx fingerprint-mcp --tool meta '{}'
|
|
624
|
+
|
|
625
|
+
# Strumenti OSINT (richiedono chiavi API)
|
|
626
|
+
SHODAN_API_KEY=your-key npx fingerprint-mcp --tool osint '{"target":"203.0.113.42","type":"ip"}'
|
|
627
|
+
```
|
|
628
|
+
|
|
629
|
+
---
|
|
630
|
+
|
|
631
|
+
## Fonti Dati (21)
|
|
632
|
+
|
|
633
|
+
| Fonte | Auth | Cosa fornisce |
|
|
634
|
+
|-------|------|---------------|
|
|
635
|
+
| Sondaggio TCP | Nessuno | Scansione porte, cattura banner, rilevamento servizi |
|
|
636
|
+
| Analisi TLS/SSL | Nessuno | Analisi certificati, fingerprinting JARM, JA4X, enumerazione cifrari, test SNI |
|
|
637
|
+
| Sondaggio SSH | Nessuno | Versione protocollo, audit algoritmi, rilevamento software |
|
|
638
|
+
| Analisi HTTP | Nessuno | Fingerprinting header, hashing favicon, analisi cookie, enumerazione metodi, CORS |
|
|
639
|
+
| Rilevamento web | Nessuno | Rilevamento tecnologie, analytics, source map, WebSocket, GraphQL, framework SPA |
|
|
640
|
+
| Scoperta percorsi | Nessuno | File sensibili, leak git, endpoint di debug, versioni API, robots.txt |
|
|
641
|
+
| Risoluzione DNS | Nessuno | Enumerazione record, analisi autenticazione email, rilevamento SaaS, fingerprinting server |
|
|
642
|
+
| Rilevamento WAF/CDN | Nessuno | Identificazione WAF, rilevamento CDN, fingerprinting WAF |
|
|
643
|
+
| Analisi timing | Nessuno | Baseline timing di risposta, rilevamento sfasamento orologio |
|
|
644
|
+
| HTTP/2 e HTTP/3 | Nessuno | Rilevamento e fingerprinting HTTP/2, scoperta HTTP/3 Alt-Svc |
|
|
645
|
+
| Sondaggio SMTP | Nessuno | Analisi banner SMTP, ispezione STARTTLS |
|
|
646
|
+
| IoT/Embedded | Nessuno | Rilevamento dispositivi IoT, scoperta UPnP/SSDP |
|
|
647
|
+
| Rilevamento applicazioni | Nessuno | Identificazione CMS, framework e piattaforme e-commerce |
|
|
648
|
+
| Sondaggio servizi | Nessuno | Fingerprinting MySQL, PostgreSQL, Redis, FTP, VNC/RDP |
|
|
649
|
+
| Rilevamento infrastruttura | Nessuno | Identificazione provider cloud, hosting, CDN |
|
|
650
|
+
| Motore di correlazione | Nessuno | Coerenza segnali, rilevamento honeypot, rilevamento spoofing, mappatura topologia |
|
|
651
|
+
| Motore di identificazione | Nessuno | Identificazione basata su hash, rilevamento C2, corrispondenza firme |
|
|
652
|
+
| [Shodan](https://www.shodan.io) | `SHODAN_API_KEY` | Intelligence host — porte aperte, banner, vulnerabilità, rilevamento SO |
|
|
653
|
+
| [Censys](https://censys.io) | `CENSYS_API_ID` | Dati host — servizi, certificati TLS, informazioni sistema autonomo |
|
|
654
|
+
| [SecurityTrails](https://securitytrails.com) | `SECURITYTRAILS_API_KEY` | Scoperta origine WAF, storico DNS passivo, record storici |
|
|
655
|
+
| [VirusTotal](https://www.virustotal.com) | `VIRUSTOTAL_API_KEY` | Reputazione dominio/IP, risultati rilevamento, storico DNS, categorie |
|
|
656
|
+
|
|
657
|
+
---
|
|
658
|
+
|
|
659
|
+
## Architettura
|
|
660
|
+
|
|
661
|
+
```
|
|
662
|
+
src/
|
|
663
|
+
index.ts # Punto di ingresso CLI (--help, --list, --tool, server stdio)
|
|
664
|
+
protocol/
|
|
665
|
+
mcp-server.ts # Configurazione server MCP (trasporto stdio)
|
|
666
|
+
tools.ts # Registro strumenti — tutti i 13 strumenti compositi registrati qui
|
|
667
|
+
types/
|
|
668
|
+
index.ts # Tipi condivisi (ToolDef, ToolContext, ToolResult)
|
|
669
|
+
utils/
|
|
670
|
+
rate-limiter.ts # Rate limiter per provider
|
|
671
|
+
cache.ts # Cache TTL per risposte API
|
|
672
|
+
require-key.ts # Helper validazione chiavi API
|
|
673
|
+
murmurhash3.ts # MurmurHash3 per hashing favicon
|
|
674
|
+
composite/ # 13 orchestratori di strumenti compositi
|
|
675
|
+
recon.ts # Orchestratore ricognizione completa (quick/standard/deep)
|
|
676
|
+
scan-ports.ts # Composito scansione porte
|
|
677
|
+
scan-tls.ts # Composito analisi TLS
|
|
678
|
+
scan-dns.ts # Composito intelligence DNS
|
|
679
|
+
scan-http.ts # Composito fingerprinting HTTP
|
|
680
|
+
scan-paths.ts # Composito scoperta percorsi
|
|
681
|
+
scan-waf.ts # Composito rilevamento WAF/CDN
|
|
682
|
+
scan-services.ts # Composito sondaggio servizi
|
|
683
|
+
analyze.ts # Composito analisi passiva
|
|
684
|
+
correlate.ts # Composito motore di correlazione
|
|
685
|
+
enumerate.ts # Composito espansione scope
|
|
686
|
+
osint.ts # Composito arricchimento OSINT
|
|
687
|
+
meta.ts # Composito meta server
|
|
688
|
+
helpers.ts # Helper compositi condivisi
|
|
689
|
+
tcp/ # Tecniche sondaggio TCP (3)
|
|
690
|
+
tls/ # Tecniche analisi TLS/SSL (8)
|
|
691
|
+
ssh/ # Tecniche sondaggio SSH (3)
|
|
692
|
+
http/ # Tecniche fingerprinting HTTP (16)
|
|
693
|
+
web/ # Tecniche rilevamento tecnologie web (9)
|
|
694
|
+
path/ # Tecniche scoperta percorsi (5)
|
|
695
|
+
dns/ # Tecniche intelligence DNS (7)
|
|
696
|
+
waf/ # Tecniche rilevamento WAF/CDN (4)
|
|
697
|
+
timing/ # Tecniche analisi timing (2)
|
|
698
|
+
h2/ # Tecniche HTTP/2 e HTTP/3 (3)
|
|
699
|
+
smtp/ # Tecniche sondaggio SMTP (2)
|
|
700
|
+
iot/ # Tecniche rilevamento IoT/embedded (2)
|
|
701
|
+
app/ # Tecniche rilevamento applicazioni (3)
|
|
702
|
+
service/ # Tecniche sondaggio servizi (5)
|
|
703
|
+
infra/ # Tecniche rilevamento infrastruttura (3)
|
|
704
|
+
correlation/ # Motore di correlazione (5)
|
|
705
|
+
identify/ # Motore di identificazione (3)
|
|
706
|
+
passive/ # Analisi passiva (3)
|
|
707
|
+
osint/ # Tecniche arricchimento OSINT (6)
|
|
708
|
+
enum/ # Tecniche enumerazione (8)
|
|
709
|
+
meta/ # Strumenti meta (3)
|
|
710
|
+
data/ # Database di firme e librerie di pattern
|
|
711
|
+
jarm-signatures.ts # Fingerprint JARM conosciuti (C2, server, CDN)
|
|
712
|
+
waf-signatures.ts # Firme rilevamento WAF
|
|
713
|
+
service-banners.ts # Pattern banner servizi
|
|
714
|
+
tech-patterns.ts # Pattern rilevamento tecnologie
|
|
715
|
+
favicon-hashes.ts # Valori MurmurHash3 favicon conosciuti
|
|
716
|
+
c2-signatures.ts # Firme framework C2
|
|
717
|
+
... # 15+ database di firme/pattern
|
|
718
|
+
```
|
|
719
|
+
|
|
720
|
+
**Decisioni di design:**
|
|
721
|
+
|
|
722
|
+
- **13 strumenti compositi, 103 tecniche** — L'agente chiama strumenti di alto livello (`recon`, `scan_tls`, `scan_http`). Ogni composito orchestra molteplici tecniche di basso livello e restituisce risultati correlati. Questo riduce l'overhead delle chiamate mantenendo la granularità.
|
|
723
|
+
- **21 provider, 1 server** — Ogni livello di fingerprinting è un modulo indipendente. L'orchestratore composito seleziona le tecniche in base al contesto e alla profondità.
|
|
724
|
+
- **Prima l'attivo, OSINT opzionale** — 80+ tecniche funzionano sondando direttamente il target senza alcuna chiave API. I provider OSINT (Shodan, Censys, VirusTotal, SecurityTrails) aggiungono arricchimento ma non sono mai necessari.
|
|
725
|
+
- **Rate limiter per provider** — Ogni provider ha la propria istanza `RateLimiter`. Il sondaggio attivo è limitato per evitare il rilevamento; le API OSINT sono calibrate sulle loro quote.
|
|
726
|
+
- **Cache TTL** — I record DNS (10min), i risultati OSINT (15min), i log CT (30min) sono memorizzati in cache per evitare ricerche ridondanti durante flussi di lavoro multi-strumento.
|
|
727
|
+
- **Degradazione graduale** — Le chiavi API mancanti non fanno crashare il server. Gli strumenti OSINT restituiscono messaggi descrittivi: "Imposta SHODAN_API_KEY per abilitare la ricerca host Shodan."
|
|
728
|
+
- **3 dipendenze** — `@modelcontextprotocol/sdk`, `zod` e `cheerio`. Tutto l'I/O di rete tramite `fetch()` nativo e i moduli Node.js `net`/`tls`/`dns`. Nessun nmap, nessun binario esterno.
|
|
729
|
+
|
|
730
|
+
---
|
|
731
|
+
|
|
732
|
+
## Limitazioni
|
|
733
|
+
|
|
734
|
+
- Gli strumenti OSINT (Shodan, Censys, VirusTotal, SecurityTrails) richiedono chiavi API per le rispettive tecniche
|
|
735
|
+
- Il piano gratuito Censys è limitato a 250 query/mese
|
|
736
|
+
- Il piano gratuito VirusTotal è limitato a 500 query/giorno
|
|
737
|
+
- La scansione porte usa TCP connect (non scansione SYN) — meno furtivo di nmap ma non richiede privilegi root
|
|
738
|
+
- Il fingerprinting JARM richiede accesso TCP diretto al target (potrebbe essere bloccato dai firewall)
|
|
739
|
+
- La scoperta UPnP/SSDP funziona solo su reti locali
|
|
740
|
+
- Il sondaggio servizi (MySQL, PostgreSQL, Redis) si connette ma non si autentica
|
|
741
|
+
- L'enumerazione dei sottodomini si basa su log CT e fonti passive (nessun brute-force)
|
|
742
|
+
- Testato su macOS / Linux (Windows non testato)
|
|
743
|
+
|
|
744
|
+
---
|
|
745
|
+
|
|
746
|
+
## Parte della Suite di Sicurezza MCP
|
|
747
|
+
|
|
748
|
+
| Progetto | Dominio | Strumenti |
|
|
749
|
+
|----------|---------|-----------|
|
|
750
|
+
| [hackbrowser-mcp](https://github.com/badchars/hackbrowser-mcp) | Test di sicurezza basati su browser | 39 strumenti, Firefox, test di injection |
|
|
751
|
+
| [cloud-audit-mcp](https://github.com/badchars/cloud-audit-mcp) | Sicurezza cloud (AWS/Azure/GCP) | 38 strumenti, 60+ controlli |
|
|
752
|
+
| [github-security-mcp](https://github.com/badchars/github-security-mcp) | Postura di sicurezza GitHub | 39 strumenti, 45 controlli |
|
|
753
|
+
| [cve-mcp](https://github.com/badchars/cve-mcp) | Intelligence sulle vulnerabilità | 23 strumenti, 5 fonti |
|
|
754
|
+
| [osint-mcp-server](https://github.com/badchars/osint-mcp-server) | OSINT e ricognizione | 37 strumenti, 12 fonti |
|
|
755
|
+
| [darknet-mcp-server](https://github.com/badchars/darknet-mcp-server) | Dark web e threat intelligence | 66 strumenti, 16 fonti |
|
|
756
|
+
| **fingerprint-mcp** | **Fingerprinting digitale universale** | **13 strumenti, 103 tecniche, 21 provider** |
|
|
757
|
+
|
|
758
|
+
---
|
|
759
|
+
|
|
760
|
+
<p align="center">
|
|
761
|
+
<b>Solo per test di sicurezza e valutazioni autorizzate.</b><br>
|
|
762
|
+
Assicurati sempre di avere l'autorizzazione adeguata prima di eseguire il fingerprinting su qualsiasi target.
|
|
763
|
+
</p>
|
|
764
|
+
|
|
765
|
+
<p align="center">
|
|
766
|
+
<a href="LICENSE">Licenza AGPL-3.0</a> • Realizzato con Bun + TypeScript
|
|
767
|
+
</p>
|