2025-11-29 14:14:22 +03:00
2025-11-28 11:10:18 +03:00
2025-11-29 14:14:22 +03:00
2025-11-29 14:14:22 +03:00
2025-11-28 11:10:18 +03:00
2025-11-28 11:10:18 +03:00
2025-11-28 11:10:18 +03:00
2025-11-28 11:25:41 +03:00
2025-11-28 11:10:18 +03:00
2025-11-28 11:10:18 +03:00
2025-11-28 11:34:00 +03:00
2025-11-28 11:10:18 +03:00

Portainer Plus - Подсистема мониторинга событий для обнаружения бесфайловых атак

Дипломный проект: Разработка подсистемы мониторинга событий в контейнеризированных средах для обнаружения бесфайловых атак на уровне ядра операционной системы.

Описание проекта

Portainer Plus - это расширенная версия Portainer с интегрированной подсистемой мониторинга безопасности, которая:

  • Собирает события на уровне ядра ОС через eBPF (extended Berkeley Packet Filter)
  • Обнаруживает бесфайловые атаки в контейнерах с использованием 720+ паттернов детектирования
  • Интегрируется с Wazuh для централизованного мониторинга и анализа
  • Сопоставляет события с техниками MITRE ATT&CK - все обнаруженные события автоматически маппятся на соответствующие техники и подтехники
  • Предоставляет современный UI для визуализации событий безопасности с фильтрацией и группировкой
  • Мониторит системные вызовы в реальном времени: execve, memfd_create, ptrace, process_vm_writev, process_vm_readv, mprotect, mmap, open, openat
  • Обнаруживает подозрительные операции с памятью и файловой системой (/dev/mem, /dev/kmem, /proc/*/mem)

Структура проекта

portainer_plus/
├── portainer/                    # Исходный код Portainer (из GitHub)
├── monitoring-subsystem/         # Подсистема мониторинга
│   ├── collector/               # Модуль сбора событий
│   ├── analyzer/                # Модуль анализа
│   ├── mitre/                   # Модуль MITRE ATT&CK
│   ├── wazuh/                   # Модуль интеграции с Wazuh
│   ├── api/                     # API для Portainer
│   └── cmd/                     # Точка входа
├── frontend/                     # UI компоненты
├── docker-compose.yml           # Конфигурация Docker Compose
├── Dockerfile.portainer         # Кастомный образ Portainer
└── .env                         # Переменные окружения

Требования

  • Docker 20.10+
  • Docker Compose 2.0+
  • Linux с ядром 5.8+ (для поддержки eBPF)
  • Минимум 4GB RAM
  • 10GB свободного места на диске

Быстрый старт

  1. Клонирование и настройка:
cd portainer_plus
cp .env.example .env  # Настройте переменные окружения при необходимости
  1. Запуск всех сервисов:
docker-compose up -d
  1. Доступ к сервисам:

Сборка кастомных образов

Сборка Portainer Plus:

docker-compose build portainer

Сборка подсистемы мониторинга:

docker-compose build monitoring-subsystem

Сборка всех образов:

docker-compose build

Разработка

Запуск в режиме разработки:

# Запуск только инфраструктуры (Wazuh)
docker-compose up -d wazuh-manager wazuh-agent

# Разработка подсистемы мониторинга локально
cd monitoring-subsystem
go run cmd/main.go

Структура модулей:

  • collector/: Сбор событий через eBPF и auditd
  • analyzer/: Анализ и детектирование бесфайловых атак
  • mitre/: Сопоставление с техниками MITRE ATT&CK
  • wazuh/: Интеграция с Wazuh API
  • api/: REST API для интеграции с Portainer

Конфигурация

Основные настройки находятся в файле .env и docker-compose.yml:

Переменные окружения для Monitoring Subsystem:

  • WAZUH_API_USER / WAZUH_API_PASSWORD: Учетные данные для Wazuh API
  • LOG_LEVEL: Уровень логирования (debug, info, warn, error)
  • API_ADDR: Адрес и порт для API (по умолчанию :8080)
  • MITRE_DATA_DIR: Путь к данным MITRE ATT&CK
  • GENERATE_TEST_EVENTS: Генерация тестовых событий (true/false)
  • PATTERNS_CONFIG_PATH: Путь к файлу с пользовательскими паттернами

Переменные окружения для Portainer:

  • PORTAINER_ENABLE_MONITORING: Включить интеграцию с мониторингом (true/false)
  • MONITORING_SUBSYSTEM_URL: URL подсистемы мониторинга (http://monitoring-subsystem:8080)
  • WAZUH_MANAGER_URL: URL Wazuh Manager API
  • WAZUH_AGENT_URL: URL Wazuh Agent

Пользовательские паттерны

Вы можете добавить собственные паттерны обнаружения, создав файл monitoring-subsystem/patterns.json:

{
  "patterns": [
    {
      "name": "custom_pattern",
      "description": "Описание паттерна",
      "indicators": [
        {
          "type": "syscall",
          "value": "execve",
          "condition": "equals",
          "required": true
        }
      ],
      "mitreTechniques": ["T1059"],
      "severity": "warning"
    }
  ]
}

Архитектура

┌─────────────────────────────────────────────────────────┐
│                    Portainer UI                         │
│  ┌──────────────────────────────────────────────────┐   │
│  │  Security Events View (React/TypeScript)        │   │
│  │  - Фильтрация по контейнерам                    │   │
│  │  - Статистика и детальный просмотр              │   │
│  │  - Отображение MITRE техник                     │   │
│  └──────────────────────────────────────────────────┘   │
└────────────────────┬────────────────────────────────────┘
                     │ HTTP REST API
┌────────────────────▼────────────────────────────────────┐
│          Monitoring Subsystem (Go)                      │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐  │
│  │  Collector   │  │  Analyzer    │  │  MITRE       │  │
│  │  (eBPF)      │→ │  (720+       │→ │  Mapper      │  │
│  │              │  │  patterns)   │  │              │  │
│  └──────────────┘  └──────────────┘  └──────────────┘  │
│         │                  │                  │         │
│         └──────────────────┼──────────────────┘         │
│                            │                            │
│                   ┌────────▼────────┐                   │
│                   │  API Server     │                   │
│                   │  (REST)         │                   │
│                   └────────┬────────┘                   │
└────────────────────────────┼────────────────────────────┘
                              │
                    ┌─────────┴─────────┐
                    │                  │
         ┌──────────▼──────────┐  ┌───▼──────────┐
         │   Wazuh Manager     │  │  Database    │
         │   (Centralized Logs) │  │  (Events)    │
         └─────────────────────┘  └──────────────┘

Компоненты системы

  1. eBPF Collector - сбор системных вызовов на уровне ядра
  2. Analyzer - анализ событий по 720+ паттернам бесфайловых атак
  3. MITRE Mapper - сопоставление событий с техниками MITRE ATT&CK
  4. API Server - REST API для интеграции с Portainer
  5. Wazuh Integration - отправка событий в Wazuh для централизованного анализа
  6. UI Components - React компоненты для отображения событий

Основные возможности

Мониторинг системных вызовов

Подсистема отслеживает следующие системные вызовы через eBPF:

  • execve - выполнение программ
  • memfd_create - создание бесфайловых файлов в памяти
  • ptrace - отладка и инъекция в процессы
  • process_vm_writev/readv - чтение/запись памяти процессов
  • mprotect - изменение прав доступа к памяти
  • mmap - отображение файлов/устройств в память
  • open/openat - открытие файлов (с фильтрацией подозрительных путей)

Обнаружение бесфайловых атак

Система использует 720+ паттернов для обнаружения различных типов бесфайловых атак:

  • Инъекция в процессы (Process Injection) - через ptrace, process_vm_writev
  • Манипуляции с памятью - memfd_create, mprotect, mmap с подозрительными флагами
  • Доступ к физической памяти - /dev/mem, /dev/kmem, /proc/*/mem
  • Злоупотребление переменными окружения - LD_PRELOAD, LD_LIBRARY_PATH
  • Операции с /dev/shm - создание исполняемых файлов в shared memory
  • Манипуляции с /proc - чтение/запись памяти через /proc/self/mem
  • Namespace операции - unshare, setns для изоляции
  • IPC манипуляции - использование shared memory, semaphores для передачи кода
  • И многие другие - полный список паттернов в monitoring-subsystem/analyzer/patterns/patterns.go

Интеграция с MITRE ATT&CK

Все обнаруженные события автоматически сопоставляются с техниками и подтехниками MITRE ATT&CK Framework:

  • T1055 - Process Injection (T1055.001, T1055.002, T1055.003, T1055.004, T1055.008, T1055.009, T1055.011, T1055.012, T1055.013, T1055.014, T1055.015)
  • T1027 - Obfuscated Files or Information (T1027.001, T1027.002, T1027.003, T1027.004, T1027.005, T1027.006, T1027.007, T1027.008, T1027.009, T1027.010, T1027.011, T1027.012, T1027.013)
  • T1059 - Command and Scripting Interpreter
  • T1106 - Native API
  • T1078 - Valid Accounts
  • T1548 - Abuse Elevation Control Mechanism
  • T1134 - Access Token Manipulation
  • T1574 - Hijack Execution Flow
  • И многие другие техники

UI для событий безопасности

Интерфейс пользователя предоставляет:

  • Таблица событий с фильтрацией по уровню, типу, контейнеру
  • Фильтрация по контейнерам:
    • С контейнерами (по умолчанию)
    • Без контейнеров
    • Все события
  • Статистика - общее количество, распределение по уровням критичности
  • Детальный просмотр - модальное окно с полной информацией о событии
  • Группировка событий - одинаковые события группируются с указанием количества
  • Отображение MITRE техник - визуальное представление связанных техник
  • Статус eBPF коллектора - индикатор работы системы мониторинга

Логи и отладка

Просмотр логов:

# Все сервисы
docker-compose logs -f

# Конкретный сервис
docker-compose logs -f monitoring-subsystem
docker-compose logs -f portainer
docker-compose logs -f wazuh-manager

Остановка

docker-compose down

# С удалением volumes
docker-compose down -v

Технические детали

eBPF программы

eBPF программы находятся в monitoring-subsystem/collector/ebpf/syscall_monitor.c и отслеживают:

  • Tracepoints для системных вызовов
  • Фильтрация подозрительных путей в ядре
  • Сбор метаданных (PID, UID, GID, cgroup_id)
  • Передача событий в userspace через perf_event_array

Паттерны обнаружения

Паттерны определены в monitoring-subsystem/analyzer/patterns/patterns.go и включают:

  • Типы индикаторов: syscall, path, env, behavior
  • Условия сопоставления: equals, contains, starts_with, ends_with, regex
  • Обязательные/опциональные индикаторы
  • Уровни критичности: info, warning, error, critical

API Endpoints

Monitoring Subsystem предоставляет следующие REST API:

  • GET /api/v1/security-events - список событий безопасности
  • GET /api/v1/security-events/stats - статистика событий
  • GET /api/v1/security-events/{id} - детали события
  • DELETE /api/v1/security-events - удаление событий
  • POST /api/v1/security-events/test - создание тестового события
  • GET /api/v1/collector/status - статус eBPF коллектора
  • GET /api/v1/patterns - список паттернов
  • POST /api/v1/patterns - добавление пользовательского паттерна

Производительность

  • Низкая нагрузка на систему - eBPF работает на уровне ядра без копирования данных
  • Масштабируемость - поддержка множества контейнеров одновременно
  • Группировка событий - одинаковые события автоматически группируются
  • Асинхронная обработка - события обрабатываются в фоновых горутинах

Безопасность

  • Привилегированный режим - требуется для работы eBPF (только для monitoring-subsystem)
  • Изоляция контейнеров - события привязаны к конкретным контейнерам через cgroup_id
  • Аудит событий - все события логируются и сохраняются
  • Интеграция с Wazuh - централизованное хранение и анализ

Лицензия

Portainer Plus использует код Portainer (Apache 2.0) и добавляет собственные компоненты.

Разработка

Структура кода

  • Go - backend (monitoring-subsystem)
  • React/TypeScript - frontend (portainer/app/react/monitoring)
  • C - eBPF программы
  • Docker Compose - оркестрация сервисов

Добавление новых паттернов

Паттерны добавляются в monitoring-subsystem/analyzer/patterns/patterns.go в функцию GetPatterns(). Каждый паттерн должен включать:

  • Уникальное имя
  • Описание
  • Индикаторы (минимум один обязательный)
  • MITRE техники
  • Уровень критичности

Контакты и поддержка

Для вопросов и предложений создавайте Issues в репозитории проекта.

Description
No description provided
Readme 7.4 MiB
Languages
TypeScript 42.6%
Go 39.3%
JavaScript 10.6%
HTML 5.7%
CSS 1.1%
Other 0.5%