Сценарий 14: Реагирование на инциденты безопасности¶
Группа безопасности расследует возможные инциденты и уязвимости в системе безопасности.
Содержание¶
- Быстрый старт
- Расследование инцидента
- Анализ воздействия уязвимостей (CVE)
- Отслеживание путей эксплуатации
- Анализ устранения
- Поиск похожих уязвимостей
- Оценка воздействия исправлений
- Форензический анализ
- Отслеживание затронутых данных
- Хронология инцидента
- Формирование отчёта об инциденте
- Примеры вопросов
- Связанные сценарии
Быстрый старт¶
# Выберите сценарий реагирования на инцидент
/select 14
Расследование инцидента¶
Анализ воздействия CVE¶
> Анализ воздействия уязвимости CVE-2023-XXXX в функции parse_query
╭─────────────── Анализ воздействия CVE ─────────────────────────╮
│ │
│ CVE: CVE-2023-XXXX │
│ Уязвимость: Переполнение буфера в функции parse_query() │
│ Степень серьёзности: КРИТИЧЕСКАЯ (CVSS 9.8) │
│ │
│ Уязвимая функция: │
│ parse_query() │
│ Расположение: src/backend/parser/parser.c:234 │
│ │
│ Поверхность атаки: │
│ Точки входа: 3 │
│ - exec_simple_query() [Доступно по сети] │
│ - exec_parse_message() [Подготовленные выражения] │
│ - SPI_execute() [Внутреннее API] │
│ │
│ Путь эксплуатации: │
│ Клиент → pq_getmsgstring() → exec_simple_query() │
│ → parse_query() [УЯЗВИМА] │
│ │
│ Радиус поражения: │
│ Прямые вызовы: 5 │
│ Косвенное воздействие: 156 функций │
│ │
╰───────────────────────────────────────────────────────────────╯
Отслеживание путей эксплуатации¶
> Найти все пути от сетевого ввода до уязвимой функции
╭─────────────── Пути эксплуатации ──────────────────────────╮
│ │
│ Пути от сети к уязвимому коду: │
│ │
│ Путь 1 (Прямой, 3 перехода): │
│ ProcessClientRead() → exec_simple_query() │
│ → parse_query() ⚠️ │
│ │
│ Путь 2 (Подготовленный запрос, 4 перехода): │
│ ProcessClientRead() → exec_parse_message() │
│ → pg_parse_query() │
│ → parse_query() ⚠️ │
│ │
│ Путь 3 (Расширенный протокол, 5 переходов): │
│ ProcessClientRead() → exec_bind_message() │
│ → PortalRun() │
│ → pg_parse_query() │
│ → parse_query() ⚠️ │
│ │
│ Всего уязвимых путей: 3 │
│ │
╰────────────────────────────────────────────────────────────╯
Анализ устранения уязвимостей¶
Поиск похожих уязвимостей¶
> Поиск схожих шаблонов, которые могут содержать ту же уязвимость
╭─────────────── Анализ шаблонов ────────────────────────────╮
│ │
│ Выполняется поиск схожих шаблонов уязвимостей... │
│ │
│ Шаблон: Копирование строки без ограничения размера из сетевого ввода │
│ │
│ Найдены похожие места: │
│ │
│ 🔴 ВЫСОКИЙ РИСК (тот же шаблон): │
│ src/backend/parser/gram.y:567 │
│ src/backend/tcop/postgres.c:890 │
│ src/backend/commands/copy.c:234 │
│ │
│ 🟡 СРЕДНИЙ РИСК (похожий шаблон): │
│ src/backend/replication/walsender.c:456 │
│ src/backend/libpq/auth.c:789 │
│ │
│ Рекомендация: Проверить все 5 мест и применить одинаковое исправление │
│ │
╰────────────────────────────────────────────────────────────╯
Оценка влияния исправления¶
> Оценка влияния предлагаемого исправления
╭─────────────── Влияние исправления ────────────────────────╮
│ │
│ Предлагаемое исправление: Добавить проверку границ в parse_query() │
│ │
│ Место внесения исправления: │
│ Файл: src/backend/parser/parser.c │
│ Строки: 234-240 │
│ │
│ Функциональное влияние: │
│ - Длина запроса теперь ограничена MAX_QUERY_SIZE │
│ - Для слишком длинных запросов будет возвращена ошибка │
│ │
│ Влияние на производительность: │
│ - Дополнительный вызов strlen(): ~0.1% накладных расходов│
│ - Экономия памяти: предотвращение выделения неограниченного объёма │
│ │
│ Влияние на совместимость: │
│ - Запросы больше 1 ГБ теперь будут завершаться с ошибкой (ранее — неопределённое поведение) │
│ - Изменений в API нет │
│ │
│ Уровень риска: НИЗКИЙ │
│ - Только защитная проверка │
│ - Нет изменений в поведении для корректных входных данных │
│ │
╰────────────────────────────────────────────────────────────╯
Анализ цифровых следов¶
Отследить затронутые данные¶
> Какие данные могли быть получены с использованием этой уязвимости?
╭─────────────── Анализ доступа к данным ────────────────────────╮
│ │
│ Возможное раскрытие данных вследствие уязвимости: │
│ │
│ Доступные области памяти: │
│ ├── Буфер текста запроса (прямой доступ) │
│ ├── Состояние соединения (смежная память) │
│ ├── Токены аутентификации (тот же контекст) │
│ └── Другие данные сессии (кадры стека) │
│ │
│ Уровень привилегий: │
│ - Запускается как: процесс бэкенда postgres │
│ - Может получить доступ: ко всем файлам базы данных │
│ - Не может получить доступ: на уровне ОС без эскалации │
│ │
│ Наихудший сценарий: │
│ - Полный доступ на чтение ко всей базе данных │
│ - Возможность выполнения кода от имени пользователя postgres│
│ │
│ Признаки компрометации: │
│ - Запросы с необычным двоичным содержимым │
│ - Неожиданные ошибки выделения памяти │
│ - Логи сбоев с parse_query в трассировке стека │
│ │
╰───────────────────────────────────────────────────────────────╯
Хронология инцидента¶
Сформировать отчёт об инциденте¶
> Сформировать отчёт по реагированию на инцидент
╭─────────────── Отчёт об инциденте ─────────────────────────────╮
│ │
│ ОТЧЁТ ОБ ИНЦИДЕНТЕ БЕЗОПАСНОСТИ │
│ Сформирован: 2024-12-20 14:30 UTC │
│ │
│ Краткое описание уязвимости: │
│ Тип: Переполнение буфера (CWE-120) │
│ Степень серьёзности: КРИТИЧЕСКАЯ │
│ Затронуто: parse_query() в parser.c │
│ │
│ Хронология: │
│ Обнаружение: 2024-12-19 10:00 UTC │
│ Анализ: 2024-12-19 14:00 UTC │
│ Готовность исправления: 2024-12-20 08:00 UTC │
│ Развертывание: УТОЧНЯЕТСЯ │
│ │
│ Затронутые системы: │
│ - Все версии PostgreSQL 14.x, 15.x, 16.x │
│ - Расширения, использующие SPI_execute │
│ │
│ Меры устранения: │
│ 1. Применить исправление к функции parse_query() │
│ 2. Проверить аналогичные участки кода (5 мест) │
│ 3. Обновить документацию по безопасности │
│ │
╰───────────────────────────────────────────────────────────────╯
Примеры вопросов¶
- «Проследить влияние [CVE] в [функции]»
- «Найти пути эксплуатации для [функции]»
- «Найти похожие шаблоны уязвимостей»
- «Какие данные можно получить через [уязвимость]?»
- «Оценить влияние исправления на [функцию]»
- «Создать отчет по инциденту»
Связанные сценарии¶
- Аудит безопасности — Проактивный анализ безопасности
- Точки входа — Картирование поверхности атаки
- Проверка кода — Проверка патчей безопасности