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.uk.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
|
+
<a href="README.it.md">Italiano</a> |
|
|
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
|
+
<strong>Українська</strong> |
|
|
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">Універсальне цифрове зняття відбитків для AI-агентів.</h3>
|
|
37
|
+
|
|
38
|
+
<p align="center">
|
|
39
|
+
TCP, TLS/SSL, SSH, HTTP, DNS, WAF/CDN, IoT, SMTP, зондування сервісів, JARM, JA4X, хешування favicon, топологія інфраструктури, виявлення C2, збагачення OSINT — об'єднано в єдиний MCP сервер.<br>
|
|
40
|
+
Ваш AI-агент отримує <b>повний спектр зняття відбитків на вимогу</b>, а не 11 роз'єднаних CLI інструментів та ручну кореляцію.
|
|
41
|
+
</p>
|
|
42
|
+
|
|
43
|
+
<br>
|
|
44
|
+
|
|
45
|
+
<p align="center">
|
|
46
|
+
<a href="#проблема">Проблема</a> •
|
|
47
|
+
<a href="#чим-це-відрізняється">Чим це відрізняється</a> •
|
|
48
|
+
<a href="#швидкий-старт">Швидкий старт</a> •
|
|
49
|
+
<a href="#що-може-ai">Що може AI</a> •
|
|
50
|
+
<a href="#довідник-інструментів-13-інструментів-103-техніки">Інструменти (13)</a> •
|
|
51
|
+
<a href="#джерела-даних-21">Джерела даних</a> •
|
|
52
|
+
<a href="#архітектура">Архітектура</a> •
|
|
53
|
+
<a href="CHANGELOG.md">Журнал змін</a> •
|
|
54
|
+
<a href="CONTRIBUTING.md">Внесок</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="Ліцензія"></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 інструментів">
|
|
63
|
+
<img src="https://img.shields.io/badge/techniques-103-f97316" alt="103 техніки">
|
|
64
|
+
</p>
|
|
65
|
+
|
|
66
|
+
<p align="center">
|
|
67
|
+
<img src="https://raw.githubusercontent.com/badchars/fingerprint-mcp/main/.github/demo.gif" alt="Демонстрація fingerprint-mcp" width="800">
|
|
68
|
+
</p>
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Проблема
|
|
73
|
+
|
|
74
|
+
Зняття відбитків сервера сьогодні означає жонглювання десятком роз'єднаних інструментів. Ви запускаєте `nmap` для сканування портів, `testssl.sh` для аналізу сертифікатів, `curl -I` для HTTP заголовків, `dig` для DNS, `wafw00f` для виявлення WAF, `ssh-audit` для SSH, окремий інструмент JARM, Wappalyzer для виявлення технологій — а потім витрачаєте 30 хвилин на ручне перехресне порівняння всього в електронній таблиці, щоб зрозуміти, що насправді працює.
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
Традиційний процес зняття відбитків:
|
|
78
|
+
аналіз TLS сертифікатів -> testssl.sh / openssl s_client
|
|
79
|
+
отримання HTTP заголовків -> curl -I
|
|
80
|
+
виявлення веб-технологій -> wappalyzer CLI
|
|
81
|
+
DNS розвідка -> dig / nslookup / dnsenum
|
|
82
|
+
сканування портів -> nmap -sV
|
|
83
|
+
виявлення WAF -> wafw00f
|
|
84
|
+
аудит SSH -> ssh-audit
|
|
85
|
+
зняття відбитків сервісів -> nmap scripts
|
|
86
|
+
JARM відбиток -> jarm (окремий інструмент)
|
|
87
|
+
перевірка баз OSINT -> shodan CLI, censys CLI
|
|
88
|
+
кореляція всього -> вручну в електронній таблиці
|
|
89
|
+
──────────────────────────────
|
|
90
|
+
Разом: 11 інструментів, 30+ хвилин, ручна кореляція
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
**fingerprint-mcp** надає вашому AI-агенту 13 композитних інструментів, що охоплюють 103 техніки зняття відбитків від 21 постачальника через [Model Context Protocol](https://modelcontextprotocol.io). Агент виконує багаторівневе зняття відбитків паралельно, корелює сигнали між рівнями TCP/TLS/HTTP/DNS/SSH, виявляє ханіпоти та C2 інфраструктуру і представляє єдину розвідувальну картину — в одній розмові.
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
З fingerprint-mcp:
|
|
97
|
+
Ви: "Зроби глибоку розвідку target.com"
|
|
98
|
+
|
|
99
|
+
Агент: -> recon {url: "https://target.com", depth: "deep"}
|
|
100
|
+
|
|
101
|
+
-> TLS: nginx/1.24.0 через JARM (3fd21b20d00000...),
|
|
102
|
+
сертифікат Let's Encrypt, 2 SAN, TLS 1.2+1.3
|
|
103
|
+
-> HTTP: Express.js за Cloudflare WAF,
|
|
104
|
+
React SPA, Google Analytics, проаналізовано 14 заголовків безпеки
|
|
105
|
+
-> DNS: записи A/AAAA/MX/TXT, налаштовано SPF/DKIM/DMARC,
|
|
106
|
+
виявлено Slack + Google Workspace через CNAME/MX
|
|
107
|
+
-> Порти: 80, 443, 22 (OpenSSH 9.6), 8080 (dev сервер)
|
|
108
|
+
-> WAF: виявлено Cloudflare, знайдено IP-адресу джерела через direct-connect
|
|
109
|
+
-> Перелік: 12 піддоменів через CT журнали, виявлено wildcard DNS
|
|
110
|
+
-> "target.com працює на nginx/1.24.0 з Express.js за
|
|
111
|
+
Cloudflare WAF. IP-адреса джерела 203.0.113.42 відкрита на порту 8080.
|
|
112
|
+
TLS правильно налаштовано (еквівалент A+), але dev сервер
|
|
113
|
+
на 8080 не має захисту WAF. 3 піддомени вказують на
|
|
114
|
+
виведену з експлуатації інфраструктуру — потенційний ризик захоплення."
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Чим це відрізняється
|
|
120
|
+
|
|
121
|
+
Існуючі інструменти дають вам необроблені дані по одному рівню за раз. fingerprint-mcp дає вашому AI-агенту можливість **аналізувати всі рівні зняття відбитків одночасно**.
|
|
122
|
+
|
|
123
|
+
<table>
|
|
124
|
+
<thead>
|
|
125
|
+
<tr>
|
|
126
|
+
<th></th>
|
|
127
|
+
<th>Традиційний підхід</th>
|
|
128
|
+
<th>fingerprint-mcp</th>
|
|
129
|
+
</tr>
|
|
130
|
+
</thead>
|
|
131
|
+
<tbody>
|
|
132
|
+
<tr>
|
|
133
|
+
<td><b>Інтерфейс</b></td>
|
|
134
|
+
<td>11 різних CLI інструментів з різними форматами виводу</td>
|
|
135
|
+
<td>MCP — AI-агент викликає інструменти в розмові</td>
|
|
136
|
+
</tr>
|
|
137
|
+
<tr>
|
|
138
|
+
<td><b>Техніки</b></td>
|
|
139
|
+
<td>Один інструмент, один рівень за раз</td>
|
|
140
|
+
<td>103 техніки від 21 постачальника, виконуються паралельно</td>
|
|
141
|
+
</tr>
|
|
142
|
+
<tr>
|
|
143
|
+
<td><b>Аналіз TLS</b></td>
|
|
144
|
+
<td>Вивід testssl.sh, ручний розбір JARM окремо</td>
|
|
145
|
+
<td>Агент поєднує сертифікат + JARM + JA4X + набори шифрів + SNI + CT журнали в одному виклику</td>
|
|
146
|
+
</tr>
|
|
147
|
+
<tr>
|
|
148
|
+
<td><b>Кореляція</b></td>
|
|
149
|
+
<td>Копіювання результатів в електронну таблицю</td>
|
|
150
|
+
<td>Агент перехресно корелює: "JARM збігається з відомим C2 фреймворком, тайминг HTTP підтверджує ханіпот"</td>
|
|
151
|
+
</tr>
|
|
152
|
+
<tr>
|
|
153
|
+
<td><b>Обхід WAF</b></td>
|
|
154
|
+
<td>wafw00f виявляє WAF, ви вручну шукаєте джерело</td>
|
|
155
|
+
<td>Агент виявляє WAF, знаходить IP-адресу джерела і перевіряє, що вона повертає той самий контент</td>
|
|
156
|
+
</tr>
|
|
157
|
+
<tr>
|
|
158
|
+
<td><b>API ключі</b></td>
|
|
159
|
+
<td>Потрібні для Shodan, Censys тощо.</td>
|
|
160
|
+
<td>80+ активних технік працюють без будь-яких API ключів; ключі розблоковують збагачення OSINT</td>
|
|
161
|
+
</tr>
|
|
162
|
+
<tr>
|
|
163
|
+
<td><b>Налаштування</b></td>
|
|
164
|
+
<td>Встановіть nmap, testssl, wafw00f, ssh-audit, jarm, wappalyzer...</td>
|
|
165
|
+
<td><code>npx fingerprint-mcp</code> — одна команда, нуль конфігурації</td>
|
|
166
|
+
</tr>
|
|
167
|
+
</tbody>
|
|
168
|
+
</table>
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## Швидкий старт
|
|
173
|
+
|
|
174
|
+
### Варіант 1: npx (без встановлення)
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
npx fingerprint-mcp
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
Всі 80+ активних технік зняття відбитків працюють одразу. Не потрібні API ключі для TCP, TLS, SSH, HTTP, DNS, WAF, шляхів, сервісів, таймінгу, IoT, SMTP, інфраструктурного та прикладного зняття відбитків.
|
|
181
|
+
|
|
182
|
+
### Варіант 2: Клонування
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
git clone https://github.com/badchars/fingerprint-mcp.git
|
|
186
|
+
cd fingerprint-mcp
|
|
187
|
+
bun install
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### Змінні середовища (необов'язково)
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
# Збагачення OSINT (все необов'язкове — активне зняття відбитків працює без будь-яких ключів)
|
|
194
|
+
export SHODAN_API_KEY=your-key # Вмикає osint_shodan, ssh_hostkey_lookup
|
|
195
|
+
export CENSYS_API_ID=your-id # Вмикає osint_censys (безкоштовно: 250 запитів/місяць)
|
|
196
|
+
export CENSYS_API_SECRET=your-secret # Секрет Censys API
|
|
197
|
+
export SECURITYTRAILS_API_KEY=your-key # Вмикає waf_origin, enum_passive_dns
|
|
198
|
+
export VIRUSTOTAL_API_KEY=your-key # Вмикає osint_virustotal (безкоштовно: 500 запитів/день)
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
Всі API ключі необов'язкові. Без них ви все одно отримуєте повне зняття відбитків TCP/TLS/SSH/HTTP/DNS/WAF/шляхів/сервісів/таймінгу/IoT/SMTP/інфраструктури/додатків, кореляцію, пасивний аналіз, перелік та мета-інструменти — 80+ технік, що працюють шляхом прямого зондування цілі.
|
|
202
|
+
|
|
203
|
+
### Підключення до вашого AI-агента
|
|
204
|
+
|
|
205
|
+
<details open>
|
|
206
|
+
<summary><b>Claude Code</b></summary>
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
# З npx
|
|
210
|
+
claude mcp add fingerprint-mcp -- npx fingerprint-mcp
|
|
211
|
+
|
|
212
|
+
# З локальним клоном
|
|
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
|
+
Додайте до `~/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 / інші MCP клієнти</b></summary>
|
|
245
|
+
|
|
246
|
+
Той самий формат JSON конфігурації. Вкажіть команду на `npx fingerprint-mcp` або шлях до вашої локальної установки.
|
|
247
|
+
|
|
248
|
+
</details>
|
|
249
|
+
|
|
250
|
+
### Почніть запити
|
|
251
|
+
|
|
252
|
+
```
|
|
253
|
+
Ви: "Зніми відбитки з усього на target.com — TLS, HTTP стек, WAF, DNS, відкриті порти"
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
Це все. Агент автоматично виконує багаторівневе зняття відбитків, кореляцію сигналів та аналіз інфраструктури.
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
## Що може AI
|
|
261
|
+
|
|
262
|
+
### Швидка розвідка
|
|
263
|
+
|
|
264
|
+
```
|
|
265
|
+
Ви: "Швидка розвідка target.com"
|
|
266
|
+
|
|
267
|
+
Агент: -> recon {url: "https://target.com", depth: "quick"}
|
|
268
|
+
|
|
269
|
+
-> TCP: порти 80, 443, 22 відкриті
|
|
270
|
+
-> TLS: RSA сертифікат Let's Encrypt, TLS 1.2+1.3, підпис 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 налаштовано
|
|
273
|
+
-> WAF: виявлено Cloudflare (заголовок cf-ray)
|
|
274
|
+
-> "target.com — це React SPA на Express.js за nginx/1.24.0,
|
|
275
|
+
який обслуговується через Cloudflare CDN. TLS правильно налаштовано з
|
|
276
|
+
Let's Encrypt. SSH на порту 22 працює OpenSSH 9.6. Пошта
|
|
277
|
+
обробляється Google Workspace з повним SPF/DKIM/DMARC."
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
### Глибоке дослідження TLS
|
|
281
|
+
|
|
282
|
+
```
|
|
283
|
+
Ви: "Детально проаналізуй конфігурацію TLS suspicious-server.com"
|
|
284
|
+
|
|
285
|
+
Агент: -> scan_tls {host: "suspicious-server.com"}
|
|
286
|
+
|
|
287
|
+
-> Сертифікат: самопідписаний, CN=localhost, прострочений 47 днів тому
|
|
288
|
+
-> JARM: 2ad2ad0002ad2ad00042d42d00000069d641f34fe76acdc05c40262f8815e5
|
|
289
|
+
(збігається з профілем Cobalt Strike за замовчуванням)
|
|
290
|
+
-> JA4X: відбиток збігається з відомим шаблоном C2 фреймворку
|
|
291
|
+
-> Набори шифрів: приймає слабкі шифри (RC4, 3DES)
|
|
292
|
+
-> SNI: відповідає однаково на будь-яке значення SNI
|
|
293
|
+
-> CT журнали: сертифікат не зареєстровано (не є публічно довіреним)
|
|
294
|
+
-> "ВИСОКИЙ РИЗИК: конфігурація TLS чітко вказує на C2 інфраструктуру.
|
|
295
|
+
Самопідписаний прострочений сертифікат, відбиток JARM збігається з Cobalt Strike,
|
|
296
|
+
приймає слабкі шифри і відповідає на довільні значення SNI.
|
|
297
|
+
Рекомендовано негайне розслідування та блокування."
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
### Обхід WAF та виявлення джерела
|
|
301
|
+
|
|
302
|
+
```
|
|
303
|
+
Ви: "target.com за WAF. Чи можеш ти знайти сервер-джерело?"
|
|
304
|
+
|
|
305
|
+
Агент: -> scan_waf {url: "https://target.com"}
|
|
306
|
+
-> scan_dns {domain: "target.com"}
|
|
307
|
+
-> enumerate {domain: "target.com"}
|
|
308
|
+
|
|
309
|
+
-> WAF: Cloudflare (AS13335), сторінка перевірки при підозрілих запитах
|
|
310
|
+
-> DNS: запис A вказує на IP Cloudflare 104.21.x.x
|
|
311
|
+
-> Піддомени: dev.target.com вирішується на 203.0.113.42 (не Cloudflare)
|
|
312
|
+
-> Пряме з'єднання з 203.0.113.42:443 повертає той самий TLS сертифікат
|
|
313
|
+
-> Історія SecurityTrails: джерело було 203.0.113.42 до Cloudflare
|
|
314
|
+
-> "IP-адресу джерела знайдено: 203.0.113.42. Виявлено через піддомен
|
|
315
|
+
dev.target.com, який обходить Cloudflare. Джерело обслуговує той самий
|
|
316
|
+
TLS сертифікат і відповідає на заголовок Host target.com.
|
|
317
|
+
Джерело не має захисту WAF — можливий прямий доступ."
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
### Виявлення сервісів на хості
|
|
321
|
+
|
|
322
|
+
```
|
|
323
|
+
Ви: "Які сервіси працюють на 10.0.1.50?"
|
|
324
|
+
|
|
325
|
+
Агент: -> scan_ports {host: "10.0.1.50"}
|
|
326
|
+
-> scan_services {host: "10.0.1.50", ports: [22, 80, 3306, 5432, 6379, 8080]}
|
|
327
|
+
|
|
328
|
+
-> Порт 22: OpenSSH 8.9p1 Ubuntu, ключ хоста ED25519
|
|
329
|
+
-> Порт 80: Apache/2.4.57, PHP/8.2, WordPress 6.4
|
|
330
|
+
-> Порт 3306: MySQL 8.0.36, потрібна автентифікація
|
|
331
|
+
-> Порт 5432: PostgreSQL 16.1, потрібен SSL
|
|
332
|
+
-> Порт 6379: Redis 7.2.4, БЕЗ автентифікації (відкритий)
|
|
333
|
+
-> Порт 8080: Node.js Express dev сервер, CORS: *
|
|
334
|
+
-> "КРИТИЧНО: Redis на порту 6379 не має автентифікації — будь-хто в
|
|
335
|
+
мережі може читати/записувати дані. Express dev сервер на 8080
|
|
336
|
+
має wildcard CORS. MySQL і PostgreSQL правильно вимагають автентифікацію.
|
|
337
|
+
WordPress відстає на 2 мінорні версії. Потрібні негайні дії
|
|
338
|
+
щодо Redis та відкритого dev сервера."
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
---
|
|
342
|
+
|
|
343
|
+
## Довідник інструментів (13 інструментів, 103 техніки)
|
|
344
|
+
|
|
345
|
+
<details open>
|
|
346
|
+
<summary><b>recon — Повна розвідка з вибором технік на основі глибини</b></summary>
|
|
347
|
+
|
|
348
|
+
| Параметр | Тип | Опис |
|
|
349
|
+
|----------|-----|------|
|
|
350
|
+
| `url` | string | Цільовий URL для зняття відбитків |
|
|
351
|
+
| `depth` | `quick` \| `standard` \| `deep` | Глибина сканування: quick=5 технік, standard=20, deep=50+ |
|
|
352
|
+
|
|
353
|
+
Оркеструє техніки від усіх постачальників на основі рівня глибини. Швидкий режим дає короткий огляд; глибокий режим запускає вичерпне зняття відбитків, включаючи перелік, OSINT та кореляцію.
|
|
354
|
+
|
|
355
|
+
</details>
|
|
356
|
+
|
|
357
|
+
<details>
|
|
358
|
+
<summary><b>scan_ports — Сканування TCP портів з виявленням сервісів (3 техніки)</b></summary>
|
|
359
|
+
|
|
360
|
+
| Параметр | Тип | Опис |
|
|
361
|
+
|----------|-----|------|
|
|
362
|
+
| `host` | string | Цільовий хост (IP або домен) |
|
|
363
|
+
| `ports` | number[] | Необов'язково — конкретні порти для сканування (за замовчуванням поширені порти) |
|
|
364
|
+
|
|
365
|
+
| Техніка | Опис |
|
|
366
|
+
|---------|------|
|
|
367
|
+
| `tcp_probe` | TCP connect сканування для виявлення відкритих портів |
|
|
368
|
+
| `tcp_banner` | Захоплення банерів на відкритих портах для ідентифікації сервісів |
|
|
369
|
+
| `tcp_analysis` | Аналіз комбінацій портів та визначення сервісів |
|
|
370
|
+
|
|
371
|
+
</details>
|
|
372
|
+
|
|
373
|
+
<details>
|
|
374
|
+
<summary><b>scan_tls — Повний аналіз TLS/SSL (8 технік)</b></summary>
|
|
375
|
+
|
|
376
|
+
| Параметр | Тип | Опис |
|
|
377
|
+
|----------|-----|------|
|
|
378
|
+
| `host` | string | Цільовий хост (IP або домен) |
|
|
379
|
+
| `port` | number | Необов'язково — TLS порт (за замовчуванням: 443) |
|
|
380
|
+
|
|
381
|
+
| Техніка | Опис |
|
|
382
|
+
|---------|------|
|
|
383
|
+
| `tls_certificate` | Розбір X.509 сертифіката — суб'єкт, видавець, SAN, термін дії, ланцюжок |
|
|
384
|
+
| `tls_jarm` | Активне зняття відбитків JARM — 10 зондів TLS Client Hello, 62-символьний хеш |
|
|
385
|
+
| `tls_ja4x` | Пасивне зняття відбитків JA4X TLS з властивостей сертифіката |
|
|
386
|
+
| `tls_ciphers` | Перелік наборів шифрів та аналіз їх стійкості |
|
|
387
|
+
| `tls_protocols` | Виявлення підтримуваних версій протоколу TLS (SSLv3 до TLS 1.3) |
|
|
388
|
+
| `tls_sni` | Тестування поведінки SNI — сертифікат за замовчуванням vs. запитане ім'я хоста |
|
|
389
|
+
| `tls_ct_logs` | Пошук у журналах Certificate Transparency через crt.sh |
|
|
390
|
+
| `tls_ocsp` | Перевірка OCSP stapling та статусу відкликання |
|
|
391
|
+
|
|
392
|
+
</details>
|
|
393
|
+
|
|
394
|
+
<details>
|
|
395
|
+
<summary><b>scan_dns — DNS розвідка (7 технік)</b></summary>
|
|
396
|
+
|
|
397
|
+
| Параметр | Тип | Опис |
|
|
398
|
+
|----------|-----|------|
|
|
399
|
+
| `domain` | string | Цільовий домен |
|
|
400
|
+
|
|
401
|
+
| Техніка | Опис |
|
|
402
|
+
|---------|------|
|
|
403
|
+
| `dns_records` | Повний перелік записів — A, AAAA, MX, NS, TXT, CNAME, SOA |
|
|
404
|
+
| `dns_email_auth` | Аналіз записів SPF, DKIM та DMARC |
|
|
405
|
+
| `dns_saas` | Виявлення SaaS/сервісів через шаблони CNAME та MX (Slack, Zendesk тощо) |
|
|
406
|
+
| `dns_server` | Зняття відбитків DNS сервера (BIND, PowerDNS, Cloudflare тощо) |
|
|
407
|
+
| `dns_takeover` | Виявлення захоплення піддоменів через аналіз висячих CNAME |
|
|
408
|
+
| `dns_zone` | Спроба трансферу зони (AXFR) |
|
|
409
|
+
| `dns_caa` | Аналіз записів CAA для обмежень центрів сертифікації |
|
|
410
|
+
|
|
411
|
+
</details>
|
|
412
|
+
|
|
413
|
+
<details>
|
|
414
|
+
<summary><b>scan_http — HTTP/веб зняття відбитків (29 технік)</b></summary>
|
|
415
|
+
|
|
416
|
+
| Параметр | Тип | Опис |
|
|
417
|
+
|----------|-----|------|
|
|
418
|
+
| `url` | string | Цільовий URL |
|
|
419
|
+
|
|
420
|
+
| Техніка | Постачальник | Опис |
|
|
421
|
+
|---------|-------------|------|
|
|
422
|
+
| `http_headers` | HTTP | Аналіз заголовків відповіді та ідентифікація сервера |
|
|
423
|
+
| `http_header_order` | HTTP | Відбиток порядку заголовків (підпис серверного ПЗ) |
|
|
424
|
+
| `http_security_headers` | HTTP | Аудит заголовків безпеки (CSP, HSTS, X-Frame-Options тощо) |
|
|
425
|
+
| `http_cookies` | HTTP | Аналіз cookie — прапорці, префікси, виявлення фреймворку |
|
|
426
|
+
| `http_methods` | HTTP | Перелік дозволених HTTP методів (OPTIONS) |
|
|
427
|
+
| `http_cors` | HTTP | Аналіз політики CORS та виявлення неправильної конфігурації |
|
|
428
|
+
| `http_compression` | HTTP | Підтримувані алгоритми стиснення (gzip, br, zstd) |
|
|
429
|
+
| `http_caching` | HTTP | Аналіз заголовків кешування (виявлення CDN, зворотного проксі) |
|
|
430
|
+
| `http_etag` | HTTP | Аналіз формату ETag для ідентифікації бекенду |
|
|
431
|
+
| `http_error` | HTTP | Зняття відбитків сторінок помилок (користувацькі vs. стандартні) |
|
|
432
|
+
| `http_redirect` | HTTP | Аналіз ланцюжка перенаправлень |
|
|
433
|
+
| `http_timing` | HTTP | Базовий тайминг відповіді для профілювання продуктивності сервера |
|
|
434
|
+
| `http_favicon` | HTTP | Хеш favicon (MurmurHash3) для ідентифікації технологій |
|
|
435
|
+
| `http_robots` | HTTP | Розбір robots.txt та вилучення заборонених шляхів |
|
|
436
|
+
| `http_sitemap` | HTTP | Виявлення карти сайту та вилучення URL |
|
|
437
|
+
| `http_wellknown` | HTTP | Виявлення точок доступу .well-known (security.txt, openid тощо) |
|
|
438
|
+
| `web_tech` | Web | Виявлення технологій через шаблони HTML/JS/CSS |
|
|
439
|
+
| `web_analytics` | Web | Виявлення сервісів аналітики та відстеження |
|
|
440
|
+
| `web_sourcemaps` | Web | Виявлення файлів source map |
|
|
441
|
+
| `web_websocket` | Web | Виявлення точок доступу WebSocket |
|
|
442
|
+
| `web_graphql` | Web | Виявлення точок доступу GraphQL та інтроспекція |
|
|
443
|
+
| `web_spa` | Web | Виявлення фреймворків односторінкових додатків |
|
|
444
|
+
| `web_cdn` | Web | Виявлення CDN через заголовки відповіді та DNS |
|
|
445
|
+
| `web_meta` | Web | Аналіз HTML мета-тегів (генератор, підказки фреймворку) |
|
|
446
|
+
| `web_feed` | Web | Виявлення RSS/Atom стрічок |
|
|
447
|
+
| `h2_detect` | HTTP/2 | Виявлення підтримки протоколу HTTP/2 |
|
|
448
|
+
| `h2_fingerprint` | HTTP/2 | Зняття відбитків HTTP/2 сервера (SETTINGS, WINDOW_UPDATE) |
|
|
449
|
+
| `h2_h3` | HTTP/2 | Виявлення підтримки HTTP/3 (QUIC) через заголовок Alt-Svc |
|
|
450
|
+
| `app_cms` | Application | Виявлення CMS (WordPress, Drupal, Joomla тощо) |
|
|
451
|
+
|
|
452
|
+
</details>
|
|
453
|
+
|
|
454
|
+
<details>
|
|
455
|
+
<summary><b>scan_paths — Розвідка шляхів (5 технік)</b></summary>
|
|
456
|
+
|
|
457
|
+
| Параметр | Тип | Опис |
|
|
458
|
+
|----------|-----|------|
|
|
459
|
+
| `url` | string | Цільовий URL |
|
|
460
|
+
| `categories` | string[] | Необов'язково — категорії для перевірки (sensitive, git, debug, api, config) |
|
|
461
|
+
|
|
462
|
+
| Техніка | Опис |
|
|
463
|
+
|---------|------|
|
|
464
|
+
| `path_sensitive` | Виявлення чутливих файлів (файли резервних копій, конфігураційні файли, дампи баз даних) |
|
|
465
|
+
| `path_robots` | Аналіз robots.txt та sitemap.xml для прихованих шляхів |
|
|
466
|
+
| `path_git` | Виявлення витоку Git репозиторію (.git/HEAD, .git/config) |
|
|
467
|
+
| `path_debug` | Виявлення точок доступу налагодження (phpinfo, server-status, консолі налагодження) |
|
|
468
|
+
| `path_api` | Виявлення версій API та точок доступу документації |
|
|
469
|
+
|
|
470
|
+
</details>
|
|
471
|
+
|
|
472
|
+
<details>
|
|
473
|
+
<summary><b>scan_waf — Виявлення та зняття відбитків WAF/CDN (4 техніки)</b></summary>
|
|
474
|
+
|
|
475
|
+
| Параметр | Тип | Опис |
|
|
476
|
+
|----------|-----|------|
|
|
477
|
+
| `url` | string | Цільовий URL |
|
|
478
|
+
|
|
479
|
+
| Техніка | Опис |
|
|
480
|
+
|---------|------|
|
|
481
|
+
| `waf_detect` | Виявлення наявності WAF через аналіз заголовків відповіді та поведінки |
|
|
482
|
+
| `waf_cdn` | Ідентифікація постачальника CDN (Cloudflare, Akamai, Fastly тощо) |
|
|
483
|
+
| `waf_fingerprint` | Ідентифікація продукту WAF та виявлення версії |
|
|
484
|
+
| `waf_origin` | Виявлення IP-адреси джерела за WAF/CDN (потрібен `SECURITYTRAILS_API_KEY`) |
|
|
485
|
+
|
|
486
|
+
</details>
|
|
487
|
+
|
|
488
|
+
<details>
|
|
489
|
+
<summary><b>scan_services — Зондування на рівні сервісів (12 технік)</b></summary>
|
|
490
|
+
|
|
491
|
+
| Параметр | Тип | Опис |
|
|
492
|
+
|----------|-----|------|
|
|
493
|
+
| `host` | string | Цільовий хост (IP або домен) |
|
|
494
|
+
| `ports` | number[] | Необов'язково — конкретні порти для зондування |
|
|
495
|
+
| `service` | string | Необов'язково — конкретний сервіс для зондування (mysql, postgres, redis, ftp, ssh, smtp, vnc, iot) |
|
|
496
|
+
|
|
497
|
+
| Техніка | Постачальник | Опис |
|
|
498
|
+
|---------|-------------|------|
|
|
499
|
+
| `ssh_probe` | SSH | Виявлення версії протоколу SSH та програмного забезпечення |
|
|
500
|
+
| `ssh_algorithms` | SSH | Аудит алгоритмів SSH (KEX, шифри, MAC, типи ключів хоста) |
|
|
501
|
+
| `ssh_hostkey_lookup` | SSH | Пошук ключа хоста SSH через Shodan (потрібен `SHODAN_API_KEY`) |
|
|
502
|
+
| `svc_mysql` | Service | Виявлення версії MySQL та зняття відбитків можливостей |
|
|
503
|
+
| `svc_postgres` | Service | Виявлення версії PostgreSQL та перевірка підтримки SSL |
|
|
504
|
+
| `svc_redis` | Service | Виявлення версії Redis та статусу автентифікації |
|
|
505
|
+
| `svc_ftp` | Service | Аналіз банера FTP та перевірка анонімного входу |
|
|
506
|
+
| `svc_vnc_rdp` | Service | Виявлення сервісів VNC/RDP та оцінка безпеки |
|
|
507
|
+
| `smtp_banner` | SMTP | Аналіз банера SMTP та ідентифікація MTA |
|
|
508
|
+
| `smtp_starttls` | SMTP | Підтримка SMTP STARTTLS та перевірка сертифіката |
|
|
509
|
+
| `iot_detect` | IoT | Виявлення IoT пристроїв через шаблони банерів та стандартні сторінки |
|
|
510
|
+
| `iot_upnp` | IoT | Виявлення пристроїв UPnP/SSDP у локальній мережі |
|
|
511
|
+
|
|
512
|
+
</details>
|
|
513
|
+
|
|
514
|
+
<details>
|
|
515
|
+
<summary><b>enumerate — Розширення обсягу (8 технік)</b></summary>
|
|
516
|
+
|
|
517
|
+
| Параметр | Тип | Опис |
|
|
518
|
+
|----------|-----|------|
|
|
519
|
+
| `domain` | string | Цільовий домен |
|
|
520
|
+
|
|
521
|
+
| Техніка | Опис |
|
|
522
|
+
|---------|------|
|
|
523
|
+
| `enum_subdomains` | Перелік піддоменів кількома методами |
|
|
524
|
+
| `enum_wildcard` | Виявлення wildcard DNS |
|
|
525
|
+
| `enum_tld` | Розширення TLD (target.com -> target.net, target.org тощо) |
|
|
526
|
+
| `enum_related` | Виявлення пов'язаних доменів через спільну інфраструктуру |
|
|
527
|
+
| `enum_asn` | Виявлення сусідів ASN — інші домени в тій же мережі |
|
|
528
|
+
| `enum_ct` | Вилучення піддоменів з журналів Certificate Transparency |
|
|
529
|
+
| `enum_passive_dns` | Історія пасивного DNS (потрібен `SECURITYTRAILS_API_KEY`) |
|
|
530
|
+
| `enum_scope` | Підсумок обсягу та огляд поверхні атаки |
|
|
531
|
+
|
|
532
|
+
</details>
|
|
533
|
+
|
|
534
|
+
<details>
|
|
535
|
+
<summary><b>osint — Збагачення OSINT (6 технік)</b></summary>
|
|
536
|
+
|
|
537
|
+
| Параметр | Тип | Опис |
|
|
538
|
+
|----------|-----|------|
|
|
539
|
+
| `target` | string | IP-адреса або домен для збагачення |
|
|
540
|
+
| `type` | `ip` \| `domain` | Необов'язково — тип цілі (автовизначення, якщо пропущено) |
|
|
541
|
+
|
|
542
|
+
| Техніка | Автентифікація | Опис |
|
|
543
|
+
|---------|---------------|------|
|
|
544
|
+
| `osint_shodan` | `SHODAN_API_KEY` | Пошук хоста в Shodan — відкриті порти, банери, вразливості, ОС |
|
|
545
|
+
| `osint_censys` | `CENSYS_API_ID` + `CENSYS_API_SECRET` | Дані хоста Censys — сервіси, TLS, автономна система |
|
|
546
|
+
| `osint_reverse_ip` | Немає | Зворотний пошук IP — інші домени на тому ж IP |
|
|
547
|
+
| `osint_whois` | Немає | Реєстраційні дані WHOIS — реєстратор, дати, сервери імен |
|
|
548
|
+
| `osint_webarchive` | Немає | Історія Web Archive — перший/останній знімок, частота змін |
|
|
549
|
+
| `osint_virustotal` | `VIRUSTOTAL_API_KEY` | Звіт VirusTotal про домен/IP — виявлення, категорії, DNS |
|
|
550
|
+
|
|
551
|
+
</details>
|
|
552
|
+
|
|
553
|
+
<details>
|
|
554
|
+
<summary><b>analyze — Пасивний аналіз відбитків (3 режими)</b></summary>
|
|
555
|
+
|
|
556
|
+
| Параметр | Тип | Опис |
|
|
557
|
+
|----------|-----|------|
|
|
558
|
+
| `type` | `headers` \| `html` \| `banner` | Тип даних для аналізу |
|
|
559
|
+
| `data` | string | Необроблені дані для аналізу (вставте заголовки, HTML або вивід банера) |
|
|
560
|
+
|
|
561
|
+
| Режим | Опис |
|
|
562
|
+
|-------|------|
|
|
563
|
+
| `fp_analyze_headers` | Пасивний аналіз HTTP заголовків — виявлення сервера, фреймворку, проксі без надсилання трафіку |
|
|
564
|
+
| `fp_analyze_html` | Пасивний аналіз HTML — виявлення технологій, ідентифікація фреймворку з вихідного коду |
|
|
565
|
+
| `fp_analyze_banner` | Пасивний аналіз банерів — ідентифікація сервісів з необробленого тексту банера |
|
|
566
|
+
|
|
567
|
+
</details>
|
|
568
|
+
|
|
569
|
+
<details>
|
|
570
|
+
<summary><b>correlate — Механізм багатосигнальної кореляції (7 режимів)</b></summary>
|
|
571
|
+
|
|
572
|
+
| Параметр | Тип | Опис |
|
|
573
|
+
|----------|-----|------|
|
|
574
|
+
| `type` | `consistency` \| `honeypot` \| `spoofing` \| `compare` \| `topology` \| `c2` \| `identify` | Режим кореляції |
|
|
575
|
+
| `signals` | object | Сигнали відбитків для кореляції (залежить від режиму) |
|
|
576
|
+
|
|
577
|
+
| Режим | Опис |
|
|
578
|
+
|-------|------|
|
|
579
|
+
| `fp_consistency` | Перевірка узгодженості міжрівневих сигналів — чи збігаються відбитки TCP, TLS, HTTP та DNS? |
|
|
580
|
+
| `fp_honeypot` | Виявлення ханіпотів — перевірка неможливих комбінацій сервісів та поведінкових аномалій |
|
|
581
|
+
| `fp_spoofing` | Виявлення підробки — ідентифікація невідповідності заголовків сервера та фактичної поведінки |
|
|
582
|
+
| `fp_compare` | Порівняння профілів відбитків двох хостів поруч |
|
|
583
|
+
| `fp_topology` | Картографування топології інфраструктури — CDN, балансувальник навантаження, ланцюжок зворотних проксі |
|
|
584
|
+
| `fp_c2` | Виявлення C2 фреймворку через кореляцію JARM, TLS, HTTP та таймінгу |
|
|
585
|
+
| `fp_identify` | Ідентифікація на основі хешів за базою даних відомих підписів |
|
|
586
|
+
|
|
587
|
+
</details>
|
|
588
|
+
|
|
589
|
+
<details>
|
|
590
|
+
<summary><b>meta — Конфігурація та дані сервера (3 режими)</b></summary>
|
|
591
|
+
|
|
592
|
+
| Параметр | Тип | Опис |
|
|
593
|
+
|----------|-----|------|
|
|
594
|
+
| `category` | string | Необов'язково — фільтрація за категорією |
|
|
595
|
+
|
|
596
|
+
| Режим | Опис |
|
|
597
|
+
|-------|------|
|
|
598
|
+
| `fp_sources` | Список усіх доступних джерел даних з конфігурацією та статусом API ключів |
|
|
599
|
+
| `fp_config` | Конфігурація сервера — версія, завантажені постачальники, кількість технік |
|
|
600
|
+
| `fp_signatures` | Список бази даних підписів — підписи JARM, банерів, WAF, додатків |
|
|
601
|
+
|
|
602
|
+
</details>
|
|
603
|
+
|
|
604
|
+
---
|
|
605
|
+
|
|
606
|
+
### Використання CLI
|
|
607
|
+
|
|
608
|
+
```bash
|
|
609
|
+
# Список усіх доступних інструментів та технік
|
|
610
|
+
npx fingerprint-mcp --list
|
|
611
|
+
|
|
612
|
+
# Запуск будь-якого інструменту напряму
|
|
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
|
+
# Інструменти OSINT (потрібні API ключі)
|
|
626
|
+
SHODAN_API_KEY=your-key npx fingerprint-mcp --tool osint '{"target":"203.0.113.42","type":"ip"}'
|
|
627
|
+
```
|
|
628
|
+
|
|
629
|
+
---
|
|
630
|
+
|
|
631
|
+
## Джерела даних (21)
|
|
632
|
+
|
|
633
|
+
| Джерело | Автентифікація | Що надає |
|
|
634
|
+
|---------|---------------|----------|
|
|
635
|
+
| TCP зондування | Немає | Сканування портів, захоплення банерів, виявлення сервісів |
|
|
636
|
+
| Аналіз TLS/SSL | Немає | Розбір сертифікатів, зняття відбитків JARM, JA4X, перелік шифрів, тестування SNI |
|
|
637
|
+
| Зондування SSH | Немає | Версія протоколу, аудит алгоритмів, виявлення програмного забезпечення |
|
|
638
|
+
| Аналіз HTTP | Немає | Зняття відбитків заголовків, хешування favicon, аналіз cookie, перелік методів, CORS |
|
|
639
|
+
| Виявлення Web | Немає | Виявлення технологій, аналітика, source maps, WebSocket, GraphQL, SPA фреймворки |
|
|
640
|
+
| Виявлення шляхів | Немає | Чутливі файли, витоки git, точки доступу налагодження, версії API, robots.txt |
|
|
641
|
+
| DNS резолюція | Немає | Перелік записів, аналіз автентифікації пошти, виявлення SaaS, зняття відбитків серверів |
|
|
642
|
+
| Виявлення WAF/CDN | Немає | Ідентифікація WAF, виявлення CDN, зняття відбитків WAF |
|
|
643
|
+
| Аналіз таймінгу | Немає | Базовий тайминг відповіді, виявлення зсуву годинника |
|
|
644
|
+
| HTTP/2 та HTTP/3 | Немає | Виявлення та зняття відбитків HTTP/2, виявлення HTTP/3 Alt-Svc |
|
|
645
|
+
| Зондування SMTP | Немає | Аналіз банера SMTP, перевірка STARTTLS |
|
|
646
|
+
| IoT/Вбудовані | Немає | Виявлення IoT пристроїв, виявлення UPnP/SSDP |
|
|
647
|
+
| Виявлення додатків | Немає | Ідентифікація CMS, фреймворків та e-commerce платформ |
|
|
648
|
+
| Зондування сервісів | Немає | Зняття відбитків MySQL, PostgreSQL, Redis, FTP, VNC/RDP |
|
|
649
|
+
| Виявлення інфраструктури | Немає | Ідентифікація хмарного провайдера, хостинг-провайдера, CDN |
|
|
650
|
+
| Механізм кореляції | Немає | Узгодженість сигналів, виявлення ханіпотів, виявлення підробки, картографування топології |
|
|
651
|
+
| Механізм ідентифікації | Немає | Ідентифікація на основі хешів, виявлення C2, зіставлення підписів |
|
|
652
|
+
| [Shodan](https://www.shodan.io) | `SHODAN_API_KEY` | Розвідка хоста — відкриті порти, банери, вразливості, виявлення ОС |
|
|
653
|
+
| [Censys](https://censys.io) | `CENSYS_API_ID` | Дані хоста — сервіси, TLS сертифікати, інформація про автономну систему |
|
|
654
|
+
| [SecurityTrails](https://securitytrails.com) | `SECURITYTRAILS_API_KEY` | Виявлення джерела WAF, історія пасивного DNS, історичні записи |
|
|
655
|
+
| [VirusTotal](https://www.virustotal.com) | `VIRUSTOTAL_API_KEY` | Репутація домену/IP, результати виявлення, історія DNS, категорії |
|
|
656
|
+
|
|
657
|
+
---
|
|
658
|
+
|
|
659
|
+
## Архітектура
|
|
660
|
+
|
|
661
|
+
```
|
|
662
|
+
src/
|
|
663
|
+
index.ts # Точка входу CLI (--help, --list, --tool, stdio сервер)
|
|
664
|
+
protocol/
|
|
665
|
+
mcp-server.ts # Налаштування MCP сервера (stdio транспорт)
|
|
666
|
+
tools.ts # Реєстр інструментів — усі 13 композитних інструментів зареєстровані тут
|
|
667
|
+
types/
|
|
668
|
+
index.ts # Спільні типи (ToolDef, ToolContext, ToolResult)
|
|
669
|
+
utils/
|
|
670
|
+
rate-limiter.ts # Обмежувач швидкості для кожного постачальника
|
|
671
|
+
cache.ts # TTL кеш для відповідей API
|
|
672
|
+
require-key.ts # Допоміжна функція перевірки API ключів
|
|
673
|
+
murmurhash3.ts # MurmurHash3 для хешування favicon
|
|
674
|
+
composite/ # 13 композитних оркестраторів інструментів
|
|
675
|
+
recon.ts # Оркестратор повної розвідки (quick/standard/deep)
|
|
676
|
+
scan-ports.ts # Композит сканування портів
|
|
677
|
+
scan-tls.ts # Композит аналізу TLS
|
|
678
|
+
scan-dns.ts # Композит DNS розвідки
|
|
679
|
+
scan-http.ts # Композит зняття відбитків HTTP
|
|
680
|
+
scan-paths.ts # Композит виявлення шляхів
|
|
681
|
+
scan-waf.ts # Композит виявлення WAF/CDN
|
|
682
|
+
scan-services.ts # Композит зондування сервісів
|
|
683
|
+
analyze.ts # Композит пасивного аналізу
|
|
684
|
+
correlate.ts # Композит механізму кореляції
|
|
685
|
+
enumerate.ts # Композит розширення обсягу
|
|
686
|
+
osint.ts # Композит збагачення OSINT
|
|
687
|
+
meta.ts # Композит мета сервера
|
|
688
|
+
helpers.ts # Спільні допоміжні функції композитів
|
|
689
|
+
tcp/ # Техніки зондування TCP (3)
|
|
690
|
+
tls/ # Техніки аналізу TLS/SSL (8)
|
|
691
|
+
ssh/ # Техніки зондування SSH (3)
|
|
692
|
+
http/ # Техніки зняття відбитків HTTP (16)
|
|
693
|
+
web/ # Техніки виявлення веб-технологій (9)
|
|
694
|
+
path/ # Техніки виявлення шляхів (5)
|
|
695
|
+
dns/ # Техніки DNS розвідки (7)
|
|
696
|
+
waf/ # Техніки виявлення WAF/CDN (4)
|
|
697
|
+
timing/ # Техніки аналізу таймінгу (2)
|
|
698
|
+
h2/ # Техніки HTTP/2 та HTTP/3 (3)
|
|
699
|
+
smtp/ # Техніки зондування SMTP (2)
|
|
700
|
+
iot/ # Техніки виявлення IoT/вбудованих пристроїв (2)
|
|
701
|
+
app/ # Техніки виявлення додатків (3)
|
|
702
|
+
service/ # Техніки зондування сервісів (5)
|
|
703
|
+
infra/ # Техніки виявлення інфраструктури (3)
|
|
704
|
+
correlation/ # Механізм кореляції (5)
|
|
705
|
+
identify/ # Механізм ідентифікації (3)
|
|
706
|
+
passive/ # Пасивний аналіз (3)
|
|
707
|
+
osint/ # Техніки збагачення OSINT (6)
|
|
708
|
+
enum/ # Техніки переліку (8)
|
|
709
|
+
meta/ # Мета-інструменти (3)
|
|
710
|
+
data/ # Бази даних підписів та бібліотеки шаблонів
|
|
711
|
+
jarm-signatures.ts # Відомі відбитки JARM (C2, сервери, CDN)
|
|
712
|
+
waf-signatures.ts # Підписи виявлення WAF
|
|
713
|
+
service-banners.ts # Шаблони банерів сервісів
|
|
714
|
+
tech-patterns.ts # Шаблони виявлення технологій
|
|
715
|
+
favicon-hashes.ts # Відомі значення MurmurHash3 favicon
|
|
716
|
+
c2-signatures.ts # Підписи C2 фреймворків
|
|
717
|
+
... # 15+ баз даних підписів/шаблонів
|
|
718
|
+
```
|
|
719
|
+
|
|
720
|
+
**Проєктні рішення:**
|
|
721
|
+
|
|
722
|
+
- **13 композитних інструментів, 103 техніки** — Агент викликає інструменти високого рівня (`recon`, `scan_tls`, `scan_http`). Кожен композит оркеструє кілька низькорівневих технік та повертає корельовані результати. Це зменшує накладні витрати на виклики інструментів, зберігаючи гранулярність.
|
|
723
|
+
- **21 постачальник, 1 сервер** — Кожен рівень зняття відбитків є незалежним модулем. Композитний оркестратор вибирає техніки на основі контексту та глибини.
|
|
724
|
+
- **Спочатку активне, OSINT необов'язковий** — 80+ технік працюють шляхом прямого зондування цілі з нулем API ключів. Постачальники OSINT (Shodan, Censys, VirusTotal, SecurityTrails) додають збагачення, але ніколи не є обов'язковими.
|
|
725
|
+
- **Обмежувачі швидкості для кожного постачальника** — Кожен постачальник має власний екземпляр `RateLimiter`. Активне зондування обмежується за швидкістю для уникнення виявлення; OSINT API калібруються відповідно до їх квот.
|
|
726
|
+
- **TTL кешування** — DNS записи (10 хв), результати OSINT (15 хв), CT журнали (30 хв) кешуються для уникнення зайвих пошуків під час багатоінструментних робочих процесів.
|
|
727
|
+
- **Плавна деградація** — Відсутні API ключі не призводять до збою сервера. Інструменти OSINT повертають описові повідомлення: "Встановіть SHODAN_API_KEY для ввімкнення пошуку хоста Shodan."
|
|
728
|
+
- **3 залежності** — `@modelcontextprotocol/sdk`, `zod` та `cheerio`. Усе мережеве введення/виведення через нативні `fetch()` та модулі Node.js `net`/`tls`/`dns`. Без nmap, без зовнішніх бінарних файлів.
|
|
729
|
+
|
|
730
|
+
---
|
|
731
|
+
|
|
732
|
+
## Обмеження
|
|
733
|
+
|
|
734
|
+
- Інструменти OSINT (Shodan, Censys, VirusTotal, SecurityTrails) потребують API ключів для відповідних технік
|
|
735
|
+
- Безкоштовний рівень Censys обмежений 250 запитами/місяць
|
|
736
|
+
- Безкоштовний рівень VirusTotal обмежений 500 запитами/день
|
|
737
|
+
- Сканування портів використовує TCP connect (не SYN scan) — менш непомітне ніж nmap, але не потребує привілеїв root
|
|
738
|
+
- Зняття відбитків JARM потребує прямого TCP доступу до цілі (може бути заблоковано файерволами)
|
|
739
|
+
- Виявлення UPnP/SSDP працює лише в локальних мережах
|
|
740
|
+
- Зондування сервісів (MySQL, PostgreSQL, Redis) з'єднується, але не автентифікується
|
|
741
|
+
- Перелік піддоменів покладається на CT журнали та пасивні джерела (без перебору)
|
|
742
|
+
- Протестовано на macOS / Linux (Windows не тестувався)
|
|
743
|
+
|
|
744
|
+
---
|
|
745
|
+
|
|
746
|
+
## Частина пакету безпеки MCP
|
|
747
|
+
|
|
748
|
+
| Проєкт | Домен | Інструменти |
|
|
749
|
+
|--------|-------|-------------|
|
|
750
|
+
| [hackbrowser-mcp](https://github.com/badchars/hackbrowser-mcp) | Тестування безпеки на основі браузера | 39 інструментів, Firefox, тестування ін'єкцій |
|
|
751
|
+
| [cloud-audit-mcp](https://github.com/badchars/cloud-audit-mcp) | Безпека хмари (AWS/Azure/GCP) | 38 інструментів, 60+ перевірок |
|
|
752
|
+
| [github-security-mcp](https://github.com/badchars/github-security-mcp) | Безпека GitHub | 39 інструментів, 45 перевірок |
|
|
753
|
+
| [cve-mcp](https://github.com/badchars/cve-mcp) | Розвідка вразливостей | 23 інструменти, 5 джерел |
|
|
754
|
+
| [osint-mcp-server](https://github.com/badchars/osint-mcp-server) | OSINT та розвідка | 37 інструментів, 12 джерел |
|
|
755
|
+
| [darknet-mcp-server](https://github.com/badchars/darknet-mcp-server) | Даркнет та розвідка загроз | 66 інструментів, 16 джерел |
|
|
756
|
+
| **fingerprint-mcp** | **Універсальне цифрове зняття відбитків** | **13 інструментів, 103 техніки, 21 постачальник** |
|
|
757
|
+
|
|
758
|
+
---
|
|
759
|
+
|
|
760
|
+
<p align="center">
|
|
761
|
+
<b>Лише для авторизованого тестування та оцінки безпеки.</b><br>
|
|
762
|
+
Завжди переконуйтесь, що у вас є належна авторизація перед зняттям відбитків будь-якої цілі.
|
|
763
|
+
</p>
|
|
764
|
+
|
|
765
|
+
<p align="center">
|
|
766
|
+
<a href="LICENSE">Ліцензія AGPL-3.0</a> • Створено з Bun + TypeScript
|
|
767
|
+
</p>
|