
Открытый исходный код, самостоятельно размещаемый конвейер безопасности для IT, AI и OT. Вход — логи. Выход — доказательства.: нормализация OCSF, 46 правил обнаружения (с тегами MITRE/ATLAS/ICS), корреляция, пакеты доказательств, черновики NIS2, переработанная консоль React + демо на GitHub Pages. Apache-2.0.
Вход в систему. Доказательства на выходе.
Открытый конвейер безопасности для IT, AI и OT: от сырых логов до подтверждённого инцидента и черновика уведомления по NIS2.
Страница проекта и живое демо · Быстрый старт · Консоль · Архитектура · Статус (SSOT)
Бейджи отражают последний реальный запуск на
main, а не обещание. Оставшиеся замечания Scorecard — это принятые и задокументированные компромиссы, а не пробелы; см. SSOT.md §1.
FENGARDE связывает телеметрию безопасности из IT, AI и OT, чтобы показать, что произошло, кто или что действовал, что было затронуто, как связаны события и какие доказательства подтверждают вывод.
Создан для европейского промышленного Mittelstand: открытый исходный код, self-hosted, Apache-2.0, с путём формирования черновика уведомления об инциденте по NIS2, детерминированным генератором отчётов на немецком/английском, опциональными RBAC/MFA/журналом аудита/мультитенантностью для развёртываний в стиле MSP, опциональным профилем HA (протестированным живым отключением, а не просто подключённым), и AI-триажем, который никогда не покидает вашу сеть.
Логи собираются, нормализуются в одну схему (OCSF), прогоняются через правила корреляции на скользящем окне, группируются в инциденты с причинно-следственным графом и пакетом доказательств с хеш-цепочкой, и индексируются в OpenSearch. Каждый сервис независим и общается с остальными только через шину сообщений, поэтому любую часть можно масштабировать или заменить, не переписывая остальные.
OLLAMA_URL; иначе
размеченная детерминированная заглушка. Данные оповещений никогда не передаются через сторонний LLM
API, и консоль указывает, какой движок фактически работал. Качество вердиктов низкое у двух измеренных моделей (qwen2.5:3b — 1 из 54 размеченных оповещений верно, qwen2.5:7b — 7 из 54, в основном ответы suspicious); см.
eval/llm_triage/RESULTS.md.OpenSearch, а не Elastic: никакого упоминания лицензии на движке хранения (ADR 003). Стоит знать, но это не отличие от Wazuh (его indexer — тоже форк OpenSearch).
| Способ | Требуется | Что вы получите |
|---|---|---|
| Страница проекта | Браузер | Настоящая консоль на записи лабораторного запуска, с воспроизводимой атакой, архитектурой, всеми 46 правилами и четырьмя записанными прохождениями. Статическая; записи остаются в вашем браузере (docs/console-demo.md точно описывает, что реально). |
make e2e | Python 3 | SSH brute-force до реального алерта, идемпотентно при повторе. Без Docker, Redis или OpenSearch. |
make demo | Docker | Полный живой стек; реальный алерт brute-force появляется в консоли примерно через минуту. |
git clone https://github.com/supermhel/fengarde.git && cd fengarde
make preflight # doctor: checks vm.max_map_count, Docker RAM, free ports
make demo # docker compose up -- a real SSH brute-force alert appears
# in the dashboard within ~30-60s, no manual step
# open http://localhost:8080
Нет Docker под рукой? Весь конвейер обнаружения работает без инфраструктуры:
make e2e # SSH brute-force -> real alert -> idempotent replay, no Docker/Redis/OpenSearch
bash tools/demo.sh # same test, narrated (Windows: powershell -File tools\demo.ps1)
Что вы видите: 10 неудачных попыток входа с одного IP в течение 60 секунд (SSH
Failed password или Windows EventID 4625 — оба нормализуются в одно и то же событие
аутентификации OCSF) срабатывает
common_bruteforce.yml
(threshold: 10, window_seconds: 60, группировка по IP-адресу источника), и оповещение
попадает в список оповещений панели управления, идемпотентно при повторной доставке.
Предварительные требования: Docker Desktop или Docker Engine + Compose v2, ≥4 ГБ ОЗУ,
выделенных для Docker; Linux, macOS или Windows через WSL2 (контейнеры Linux,
POSIX-скрипты sh). Python 3 только если вы добавляете парсер — для этого Docker
не нужен (см. Contributing).
vm.max_map_countsudo sysctl -w vm.max_map_count=262144
# persist across reboots:
echo 'vm.max_map_count=262144' | sudo tee /etc/sysctl.d/99-fengarde.conf
Без этого OpenSearch завершается с ошибкой JVM, а не с полезным сообщением об ошибке. Не требуется в macOS Docker Desktop (обрабатывается внутри его VM). make preflight проверяет это за вас и выводит точное исправление, если чего-то не хватает.
Другие цели: