Сценарий 16: Точки входа и поверхность атаки

Автоматизированное картирование поверхности атаки и анализ границ API с использованием CPG-запросов и интеграции с доменным плагином.

Обзор

Обработчик точек входа (EntryPointsHandler) обнаруживает и категоризирует все точки входа в кодовой базе — сетевые слушатели, функции доступа к файлам, проверки аутентификации, границы доверия и другие. Обработчик доменно-агностичен — все имена функций и шаблоны загружаются динамически из активного доменного плагина через DomainRegistry.get_security_entry_points() и get_security_entry_point_patterns().

Метод обнаружения:

  1. CPG-запросы — SQL LIKE-шаблоны по базе данных графа свойств кода
  2. Доменный плагин — списки функций по категориям из YAML-конфигурации security_entry_points
  3. Определение типа вопроса — 40+ типов вопросов (EN + RU) через _detect_entry_point_question_type(), маршрутизация по релевантным категориям
  4. Ранжирование по релевантности_rank_by_query_relevance() оценивает и сортирует результаты по близости к запросу

Категории точек входа (15 всего):

Категория Описание
network Сетевые слушатели, обработчики соединений
query Точки входа обработки запросов
auth Проверки аутентификации и авторизации
file_access Функции файлового ввода-вывода (чтение, запись, список)
trust_boundary Переходы привилегий, переключение ролей
connection Обработчики установки соединений
protocol Обработчики сообщений протокола
replication Точки входа репликации
copy Импорт/экспорт данных (COPY-подобные команды)
spi Внутреннее API расширений
extension Загрузка расширений/плагинов
external Интерфейс вызова внешних функций
socket Низкоуровневые обработчики сокетов
exec Точки входа выполнения кода
bgworker Точки входа фоновых процессов

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

# Выберите сценарий точек входа через CLI или MCP
/select 16

REST API

curl -X POST http://localhost:8000/api/v1/query \
  -H "Content-Type: application/json" \
  -d '{"query": "Найти все сетевые точки входа", "scenario_id": "16"}'

Карта поверхности атаки

Точки сетевого доступа

> Найти все точки входа, доступные через сеть

╭─────────────── Точки сетевого доступа ───────────────────────╮
│                                                              │
│  Точки входа, доступные через сеть:                           │
│                                                              │
│  Уровень сетевого протокола:                                 │
│    accept_connection()     - Установление соединения          │
│    handle_client_read()    - Основной приём данных            │
│    read_message_string()   - Чтение строки от клиента         │
│    read_message_int()      - Чтение целого числа от клиента   │
│                                                              │
│  Обработка запросов:                                         │
│    handle_query()          - Прямое выполнение запроса        │
│    handle_parse_message()  - Подготовленный запрос            │
│    handle_bind_message()   - Привязка параметров              │
│    handle_execute()        - Выполнение подготовленного       │
│                                                              │
│  Репликация:                                                 │
│    replication_sender()    - Потоковая передача данных        │
│    replication_receiver()  - Приём данных                     │
│                                                              │
│  Общее количество сетевых точек входа: 23                     │
│                                                              │
╰──────────────────────────────────────────────────────────────╯

Точки доступа к файловой системе

> Найти точки доступа к файловой системе

╭─────────────── Точки доступа к файловой системе ─────────────╮
                                                              
  Точки доступа к файловой системе:                            
                                                              
  Вызываемые через SQL функции:                                
    read_file()             - Чтение произвольного файла       
    read_binary_file()      - Чтение бинарного файла           
    list_directory()        - Список содержимого каталога      
    stat_file()             - Получение статистики файла       
                                                              
  Импорт/экспорт данных:                                      
    do_copy()  copy_from() - Чтение из файла                  
    do_copy()  copy_to()   - Запись в файл                    
                                                              
  Загрузка расширений:                                        
    load_external_function() - Загрузка разделяемой библиотеки 
    dynamic_load()          - Динамическая загрузка библиотек  
                                                              
  Уровень риска: ВЫСОКИЙ                                       
  Требуется: Повышенные привилегии для большинства операций   
                                                              
╰──────────────────────────────────────────────────────────────╯

Анализ границ API

Публичные функции API

> Перечислить все точки входа публичного API

╭─────────────── Публичный API ──────────────────────────────────╮
│                                                                │
│  Экспортированные функции расширений: 1234                      │
│                                                                │
│  Категории:                                                    │
│    Типы данных:         234 функции                            │
│    Операторы:           189 функций                            │
│    Агрегатные:          67 функций                             │
│    Оконные:             23 функции                             │
│    Процедурные:         45 функций                             │
│                                                                │
│  Внутреннее API расширений:                                   │
│    spi_connect()        - Подключение к внутреннему API       │
│    spi_execute()        - Выполнение запроса                  │
│    spi_prepare()        - Подготовка запроса                  │
│    spi_finish()         - Отключение                          │
│                                                                │
│  Точки перехвата (Hook Points):                                │
│    utility_hook          - Обработка служебных команд          │
│    executor_hook         - Выполнение запросов                │
│    planner_hook          - Планирование запросов              │
│                                                                │
╰────────────────────────────────────────────────────────────────╯

Внутренние границы API

> Показать границы внутренних модулей

╭─────────────── Границы модулей ───────────────────────────────╮
│                                                               │
│  Внутренние границы API:                                       │
│                                                               │
│  Исполнитель → Хранилище:                                     │
│    table_insert()        - Вставка записи                     │
│    table_update()        - Обновление записи                  │
│    table_delete()        - Удаление записи                    │
│    index_insert()        - Обслуживание индекса                │
│                                                               │
│  Парсер → Каталог:                                           │
│    cache_lookup()        - Поиск в системном кеше             │
│    scan_relation()       - Сканирование отношения             │
│    resolve_oid()         - Разрешение OID                     │
│                                                               │
│  Планировщик → Статистика:                                   │
│    get_relation_stats()  - Статистика по таблице              │
│    estimate_groups()     - Оценка мощности (cardinality)      │
│                                                               │
│  Всего внутренних API: 456 функций                            │
│                                                               │
╰───────────────────────────────────────────────────────────────╯

Анализ границ доверия

Пути повышения привилегий

> Найти функции, изменяющие уровень привилегий

╭─────────────── Переходы привилегий ─────────────────────────╮
                                                              
  Точки повышения привилегий:                                 
                                                              
  Функции SECURITY DEFINER:                                   
    Всего: 23 функции                                         
    Риск: Выполняются с привилегиями владельца                
                                                              
  Функции повышенных привилегий, вызываемые                   
  обычными пользователями:                                    
    reload_config()        через обёртку admin                
    terminate_backend()    через обёртку admin                
                                                              
  Переходы ролей:                                             
    set_role()             - Переключение ролей               
    check_role_grantor()   - Проверка прав доступа            
                                                              
  Обход проверки безопасности на уровне строк (RLS):          
    check_rls_enabled()    - Точка проверки RLS               
    check_permissions()    - Проверка прав доступа            
                                                              
  Точки аудита: 45 местоположений                             
                                                              
╰──────────────────────────────────────────────────────────────╯

Точки входа аутентификации

> Найти точки проверки аутентификации и авторизации

╭─────────────── Точки входа аутентификации ──────────────────╮
│                                                              │
│  Проверки аутентификации:                                    │
│                                                              │
│    check_password()       - Проверка пароля                  │
│    verify_client_cert()   - TLS-сертификат клиента           │
│    auth_handler()         - Основной диспетчер авторизации   │
│                                                              │
│  Проверки авторизации:                                       │
│                                                              │
│    acl_check()            - Общая проверка ACL               │
│    check_table_privilege() - Доступ на уровне таблицы        │
│    check_object_ownership() - Владение объектом              │
│                                                              │
│  Управление сессиями:                                        │
│                                                              │
│    create_session()       - Инициализация сессии             │
│    validate_token()       - Проверка токена                  │
│                                                              │
╰──────────────────────────────────────────────────────────────╯

Обработчики недоверенных данных

> Найти функции, обрабатывающие недоверенные входные данные

╭─────────────── Обработчики недоверенных данных ──────────────╮
│                                                              │
│  Прямая обработка входных данных от клиента:                  │
│                                                              │
│  Строковый ввод:                                             │
│    read_message_string()  - Сырая строка от клиента          │
│    read_message_text()    - Текст с указанием кодировки      │
│    convert_encoding()     - Преобразование кодировки         │
│                                                              │
│  Бинарный ввод:                                              │
│    read_message_byte()    - Один байт                        │
│    read_message_int()     - Целое число (разных размеров)    │
│    read_message_bytes()   - Сырые байты                      │
│                                                              │
│  Ввод запросов:                                              │
│    parse_query()          - Разбор SQL                       │
│    eval_expressions()     - Вычисление выражений             │
│                                                              │
╰──────────────────────────────────────────────────────────────╯

Примеры вопросов

  • «Найти все точки входа в сеть»
  • «Перечислить функции доступа к файловой системе»
  • «Показать функции публичного API»
  • «Найти пути повышения привилегий»
  • «Определить обработчики недоверенного ввода»
  • «Отобразить границы доверия»
  • «Найти точки проверки аутентификации»
  • «Показать полную поверхность атаки»
  • «Найти точки входа фоновых процессов»
  • «Перечислить точки входа репликации»

Связанные сценарии