Периметр — кибербезопасность как сервис
Российская EASM/PaaS-платформа: 17 независимых скан-модулей на RabbitMQ, A-RAG аналитика на GigaChat, compliance по 15 фреймворкам РФ и мира.
Задача
Мультитенантный SaaS-сканер периметра без агентов — только внешние проверки
Покрыть 17 типов проверок (network/TLS/DNS/web/vuln/leaks/malware/OSINT/brand/cloud/darknet/compliance/DAST/mobile/exchange/exposure/API) единым risk score 0-100
Распознавать российский стек: Bitrix, UMI, NetCat, Yandex/VK ID, ЕСИА, YooKassa, Sberbank/Tinkoff acquiring, RuStore, Selectel
Compliance под 15 фреймворков: 152-ФЗ, КИИ-187, ФСТЭК-21/117/239, ФСБ-117, ЦБ РФ 382-П/683-П/719-П, ГОСТ, GDPR, PCI DSS v4, ISO 27001, SOC 2, NIST CSF
Работа в условиях блокировки иностранных API: SOCKS5 через WireGuard, GigaChat-2-Max как primary с fallback на Anthropic/OpenAI/Cerebras/Zhipu/SambaNova
Atomic Agentic-RAG (A-RAG): 8 ReAct-инструментов, native tool calling, KB из 38+ документов с эмбеддингами Qwen3 1024-dim
17 независимых скан-модулей
Каждый модуль — отдельный воркер на собственной очереди scan.<module>. 6 тяжёлых (network/web/osint/exposure/tls/dns) запущены в cluster mode с 2 инстансами; DAST в fork с тайм-аутом 60s. Backend-оркестратор аггрегирует результаты в scan.results, по завершении триггерит correlation и AI-анализ. Веса модулей (network=20, tls=15, web=15, dns=10, total=178) хранятся в БД и определяют вклад в финальный score.
- 17 PM2-процессов (фактически 22 инстанса), prefetch 1-5 на воркер
- DAST с Nuclei v3.x (12 958 YAML-шаблонов) и proxy через SOCKS5
- Exposure: 263 path-check (.env, .git, wp-config.bak, .aws/credentials)
- Brand-protection: VK API, Telegram Bot API, Wildberries, Ozon, Google Play, RuStore
A-RAG аналитика findings
Автоматический анализ Assessment после завершения скана: 8 ReAct-инструментов (keyword/semantic/hybrid search, read_chunk, get_benchmarks, get_correlations, suggest_additional_checks, analyze_finding_patterns). Min 3 / max 8 tool calls перед финальным JSON-ответом с executiveSummary, prioritizedActions, attackChains. Глубина анализа зависит от тарифа (free=5 loops, enterprise=10, superadmin=20).
- GigaChat-2-Max primary с fallback на Anthropic/OpenAI/Cerebras/Zhipu/SambaNova
- Self-hosted эмбеддинги Qwen3-Embedding-0.6B (1024-dim ONNX INT8)
- Cross-encoder BGE-reranker-v2-m3 на собственном сервере
- Redis-lock gigachat:global:lock — concurrency=1 на всех 5 проектах
Compliance: 15 фреймворков, 84 проверки
Compliance-воркер загружает 15 frameworks из frameworks.json и 84 уникальных check-definitions. Проверки переиспользуются (например tls участвует в 7 фреймворках одновременно). 152-ФЗ (9 контролей), КИИ-187, ФСТЭК-21 (11), ФСТЭК-117, ФСТЭК-239, ФСБ-117 СКЗИ, ЦБ РФ 382-П/683-П/719-П, ГОСТ Р 57580.1-2017, GDPR (6), PCI DSS v4 (4), ISO 27001 (5), SOC 2 (5), NIST CSF (5), OWASP Top 10.
- Privacy: privacy_policy, cookie_consent, data_localization (RU IP)
- ФСТЭК: auth_mechanism, vuln_scan, web_protection, email SPF/DKIM/DMARC
- КИИ: kii_categorization, kii_incident_response, kii_fstec_239
- GOST crypto detect (34.10/28147)
Risk score из 7 компонентов
Финальный score рассчитывается по формуле baseScore × (0.3 + 0.7 × coverage) с агрегацией по уровням asset → project → organization. Учитывает severity-веса findings (critical=25, high=15, medium=8, low=3), вес модуля (БД, total=178), criticality актива (4/3/2/1), фильтр по статусу (только OPEN), coverage-коэффициент, тренд и scope-агрегацию. 9 185 score-снапшотов в production-БД.
- 18 correlation-rules: RCE, data breach, phishing, supply chain, Exchange RCE, NTLM relay
- 8+ ATTACK_CHAIN_PATTERNS в anomaly-detection
- Trend: changeDirection up/down/same vs предыдущий снапшот
- История score: GET /scores/history-chart
15 модулей сканирования
Каждый модуль — отдельный RabbitMQ-воркер с собственной очередью
network
TCP top-1000, Shodan, banner-fingerprint
tls
OpenSSL, GOST 34.10/28147, crt.sh, Heartbleed
dns
SPF/DMARC/DKIM, MTA-STS, DNSSEC, DNSBL
web
Retire.js, WAF-detect (11 вендоров), РФ-стек
dast
Nuclei v3.x, 3 режима, dastConsent 90 дней
exposure
.env, .git, .aws/credentials, Wayback
vuln
NVD API 2.0, EPSS, CISA KEV
osint
Subdomain enum, crt.sh, AlienVault OTX
api
OpenAPI/Swagger, GraphQL, OWASP API Top 10
mobile
Google Play, RuStore, deep-links
leaks
GitHub, npm, Docker Hub, LeakIX, IntelX
malware
URLhaus, VirusTotal, Yandex Safe Browsing
brand
Homoglyph, VK/Telegram/Wildberries/Ozon/RuStore
cloud
S3/GCS/Azure, Firebase, takeover для 21 сервиса
darknet
Feodo, TOR, GreyNoise, AbuseIPDB, Censys
compliance
15 фреймворков (РФ + международные)
exchange
MS Exchange, ProxyLogon, ProxyNotShell
Внешние интеграции
Threat Intelligence из лучших мировых источников
Архитектура
NestJS 10.3 Backend
52 371 LOC, 41 controller, 356 endpoints
React 18.2 Frontend
55 499 LOC, 38 страниц + admin/blog/tools
PostgreSQL 15 + pgvector
50 таблиц, HNSW для KB-эмбеддингов
RabbitMQ 3
topic exchange, DLX, 17 scan queues
Redis 7
Кэш + cross-project GigaChat-lock
17 Workers
PM2 cluster + fork, 41 332 LOC
Финальный risk score актива
Формула baseScore × (0.3 + 0.7 × coverage). Severity-веса critical=25, high=15, medium=8, low=3. Вес модуля хранится в БД (total=178).
Findings: единый реестр с severity и модулем
17 модулей пишут в общий поток findings. CVE + EPSS + KEV-подсветка, mute с обоснованием, статус OPEN/REMEDIATED/MUTED влияет на score.
| Severity | Уязвимость | Модуль | Актив | CVE | Статус |
|---|---|---|---|---|---|
| critical | MS Exchange ProxyNotShell на /owa | exchange | mail.example.ru | CVE-2022-41080 | open |
| critical | .env с DATABASE_URL и SECRET_KEY доступен | exposure | app.example.ru/.env | — | open |
| high | Поддомен dev.example.ru с устаревшим nginx 1.18.0 | vuln | dev.example.ru | CVE-2021-23017 | open |
| high | SPF и DMARC не настроены (no record) | dns | example.ru | — | open |
| medium | TLS 1.0 включён, weak ciphers | tls | vpn.example.ru:443 | — | muted |
| medium | GitHub: token YooKassa в публичном репо forks | leaks | github.com/... | — | open |
| low | HTTP без редиректа на HTTPS | web | static.example.ru | — | fixed |
Compliance mapping: 15 фреймворков
84 check-definitions переиспользуются между фреймворками (например tls участвует в 7 одновременно). Из коробки 152-ФЗ + КИИ-187 + ФСТЭК-21/117 + GDPR + PCI DSS v4.