Перейти к основному содержимому

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

Найдите предполагаемые внешние точки входа по исходникам и графу. Проверьте границы доверия и отличайте статическую связь от доступности в runtime.

Руководства

Сценарий 16 ищет в CPG проекта возможные точки входа: обработку сетевого ввода, запросов, аутентификации, файлов и процессов. Результат даёт специалисту по безопасности список функций для проверки входных данных, прав доступа и последующих операций.

Когда применять

Сценарий отвечает на ограниченные вопросы:

  • какие функции принимают сетевой или клиентский ввод;
  • где в код входят границы аутентификации или привилегий;
  • какие интерфейсы файлов, процессов или расширений увеличивают поверхность атаки;
  • какие кандидаты требуют анализа потоков данных или расследования инцидента.

Для активного инцидента используйте сценарий 14, для общей модели системы — модель угроз.

Предварительные условия и область

Подготовьте окружение Python и конфигурацию по руководству CLI и программному интерфейсу. Проверьте доступность сервисов графа и настройте LLM для ветвей workflow, которые её используют. Сохраните пример в файл Python в корне репозитория CodeGraph и запустите его из этого каталога в подготовленном окружении. Замените проект, namespace, задачу, ссылки на свидетельства и пути исходников на принятую область AppSec.

Укажите задачу AppSec, ревизию исходников, компонент и конфигурацию языка и доменного плагина. Используйте CPG этой ревизии. Дополните найденные функции маршрутами из конфигурации работающей системы, динамической регистрации, сгенерированного кода и внешних шлюзов.

Доменный плагин задаёт категории, шаблоны имён и конкретные функции для поиска. Выбирайте категории по интерфейсам своего проекта.

Запуск типизированного сценария AppSec

from src.digital_employees.runtime.scenarios import (
    RoleBoundScenarioInvocationRequest,
    invoke_role_bound_scenario_request,
)

request = RoleBoundScenarioInvocationRequest(
    query="Найди сетевые точки входа в ограниченном API-компоненте.",
    employee_id="codegraph_appsec",
    scenario_id="scenario_16",
    event_type="appsec_start",
    context={
        "project_key": "codegraph",
        "namespace": "default",
        "task_id": "<task-id>",
        "source_refs": ["<revision-ref>", "<threat-model-ref>"],
        "file_paths": ["<bounded-source-path>"],
    },
)
result = invoke_role_bound_scenario_request(request)
if result.get("error"):
    raise RuntimeError(result["error"])
if not result.get("scenario_id") or not result.get("answer"):
    raise RuntimeError("Scenario returned no scenario identity or answer")
print(result["answer"])

После запуска сохраните ответ вместе с ревизией проекта. Используйте найденные функции как список для проверки маршрутов, входных данных и прав доступа.

Как сценарий собирает категории

Общий путь выбирает один тип вопроса по ключевым словам. Сначала он выполняет поиск для этой категории, затем добавляет общие категории из активного плагина. Если найденных имён меньше настроенного порога, он выполняет дополнительные поиски по шаблонам плагина. Результаты ранжируются по соответствию запросу.

Задавайте сеть и аутентификацию отдельными вопросами. В примере Python выбран сетевой поиск. Для второго вызова используйте запрос «Найди точки входа аутентификации в ограниченном API-компоненте.» и сохраните его результат отдельно. Так можно сопоставить обработчики ввода с функциями проверки личности пользователя.

В общем пути cpg_results содержит пары name и category, а metadata.entry_points группирует найденные имена по категориям. retrieved_functions содержит ранжированный список в пределах настроенного лимита. Поле metadata.total_entry_points показывает длину этого списка. Для разбора отдельной категории используйте её имена из metadata.entry_points.

Как читать результат

Проверьте retrieved_functions, cpg_results, evidence и метаданные категорий. Подтвердите значимых кандидатов в исходной ревизии, затем отдельно проследите данные и авторизацию.

Для значимой функции проследите путь от внешнего ввода до операции, проверьте доступность маршрута и действующие проверки прав. Так список кандидатов становится планом проверки поверхности атаки.

От инвентаризации к свидетельству AppSec

Для каждой важной точки зафиксируйте границу доверия, тип входа, проверки аутентификации и авторизации, проверку входных данных, последующие опасные операции, доступность в среде и владельца. При необходимости исследуйте поток данных и конфигурацию работающей системы.

Сверьте результаты сценария с исходным кодом и конфигурацией работающей системы. На этой основе обновите модель угроз и зафиксируйте решение по каждому существенному риску.

Ошибки и восстановление

Если context пуст, вызов завершается ошибкой role_bound_scenario_contract_missing:project_key,namespace,task_id. Заполните project_key, namespace и task_id значениями проекта и задачи, для которых выполняете анализ, затем повторите вызов.

  • Список пуст: проверьте свежесть CPG, конфигурацию языка и доменного плагина, область и формулировку запроса.
  • Слишком много общих кандидатов: укажите одну границу или категорию ввода и повторите анализ.
  • Маршрут работающей системы отсутствует: приложите конфигурацию развёртывания и маршрутизатора, проверьте сгенерированную и динамическую регистрацию.
  • Получен резервный ответ: уточните, какие данные использовал сценарий, и дополните их исходниками и графом перед решением.

Связанные материалы