Сценарий 14: Реагирование на инциденты безопасности

Сценарий 14: Реагирование на инциденты безопасности

Группа безопасности расследует возможные инциденты и уязвимости в системе безопасности.

Содержание

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

# Выберите сценарий реагирования на инцидент
/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] в [функции]»
  • «Найти пути эксплуатации для [функции]»
  • «Найти похожие шаблоны уязвимостей»
  • «Какие данные можно получить через [уязвимость]?»
  • «Оценить влияние исправления на [функцию]»
  • «Создать отчет по инциденту»