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.ru.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
|
+
<strong>Русский</strong> |
|
|
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">Универсальный цифровой фингерпринтинг для 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">Changelog</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 (сервер разработки)
|
|
108
|
+
-> WAF: Cloudflare обнаружен, исходный IP обнаружен через прямое подключение
|
|
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+), но сервер
|
|
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 # Секрет API Censys
|
|
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, CORS: *
|
|
334
|
+
-> "КРИТИЧНО: Redis на порту 6379 без аутентификации — любой в
|
|
335
|
+
сети может читать/записывать данные. Сервер разработки Express на 8080
|
|
336
|
+
имеет wildcard CORS. MySQL и PostgreSQL корректно требуют аутентификацию.
|
|
337
|
+
WordPress отстаёт на 2 минорные версии. Требуются немедленные действия
|
|
338
|
+
по Redis и открытости сервера разработки."
|
|
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` | Пассивный TLS-фингерпринтинг JA4X по свойствам сертификата |
|
|
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-степлинга и статуса отзыва |
|
|
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 | Анализ cookies — флаги, префиксы, обнаружение фреймворка |
|
|
426
|
+
| `http_methods` | HTTP | Перечисление разрешённых HTTP-методов (OPTIONS) |
|
|
427
|
+
| `http_cors` | HTTP | Анализ политики CORS и обнаружение неправильной конфигурации |
|
|
428
|
+
| `http_compression` | HTTP | Поддерживаемые алгоритмы сжатия (gzip, br, zstd) |
|
|
429
|
+
| `http_caching` | HTTP | Анализ заголовков кеширования (обнаружение CDN, reverse proxy) |
|
|
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
|
+
| Техника | Auth | Описание |
|
|
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, балансировщик нагрузки, reverse proxy |
|
|
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
|
+
| Источник | Auth | Что предоставляет |
|
|
634
|
+
|----------|------|-------------------|
|
|
635
|
+
| Зондирование TCP | Нет | Сканирование портов, захват баннеров, обнаружение сервисов |
|
|
636
|
+
| Анализ TLS/SSL | Нет | Разбор сертификатов, фингерпринтинг JARM, JA4X, перечисление шифров, тестирование SNI |
|
|
637
|
+
| Зондирование SSH | Нет | Версия протокола, аудит алгоритмов, определение ПО |
|
|
638
|
+
| Анализ HTTP | Нет | Фингерпринтинг заголовков, хеширование favicon, анализ cookies, перечисление методов, CORS |
|
|
639
|
+
| Веб-обнаружение | Нет | Обнаружение технологий, аналитика, 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, фреймворков и платформ электронной коммерции |
|
|
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 # Rate limiter для каждого провайдера
|
|
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
|
+
- **Rate limiters для каждого провайдера** — У каждого провайдера свой экземпляр `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-сканирование) — менее скрытно, чем 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>
|