Направления / API, мобильные приложения и современные интерфейсы

Стили API и их риски: REST, GraphQL, gRPC

API, мобильные приложения и современные интерфейсы

Как устроены разные API и какие классы проблем им свойственны.

средний~45 минRESTGraphQLgRPCAPI

Зачем это нужно

  • API — основная поверхность атаки современных приложений и главный потребитель данных.
  • У каждого стиля свои типовые ошибки: знать их — значит проверять быстрее и точнее.
  • Защита API строится иначе, чем защита веб-страниц.

Теория

REST-API оперирует ресурсами и методами HTTP; типичные риски: неполный контроль доступа к объектам, отсутствие ограничений по объёму запроса, массовое присвоение полей (клиент передаёт поля, которые не должен менять), избыточная выдача данных, отсутствие проверки владельца ресурса, слабое управление версиями. Отдельный класс — недостаточная защита служебных и административных точек.

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

gRPC использует схему и бинарный протокол поверх HTTP/2; риски связаны с раскрытием схемы, отсутствием аутентификации на уровне методов, доверием к метаданным и слабым контролем доступа. Защита: взаимная аутентификация, проверка метаданных и прав на каждый метод, ограничение отражения и служебных интерфейсов, инвентаризация схем. Общие принципы для всех стилей: аутентификация сервисов, авторизация на уровне объекта и поля, ограничение объёма, журналирование, версионирование и управление жизненным циклом.

Ключевые концепции

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

Инструменты

  • Документация OpenAPI и Postman для описания и проверки API в своей среде.
  • Burp Suite и ZAP — ручная работа с API-запросами.
  • Инструменты проверки GraphQL schema и тестирования запросов.
  • Платформы управления API-шлюзом и политиками доступа.
  • Статические анализаторы контрактов и генераторы тестов.

Практика в легальных лабораториях

  • Опишите в OpenAPI три точки учебного API и проверьте соответствие реализации описанию.
  • Смоделируйте в лаборатории массовое присвоение полей и предложите защиту.
  • Настройте ограничение глубины запроса в GraphQL и проверьте, что сложный запрос отклоняется.
  • Проверьте в своей лаборатории, доступны ли служебные точки без аутентификации.
  • Составьте чек-лист проверки API из двадцати пунктов.

Защита, детект и защитные меры

  • Авторизуйте на уровне объекта: проверяйте права на каждый ресурс.
  • Ограничивайте объём и сложность запросов, вводите лимиты по умолчанию.
  • Используйте явные списки разрешённых полей при массовых операциях.
  • Ведите инвентарь API и версионирование; отключайте устаревшие версии.

Правовая рамка и этика

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

Типичные ошибки

  • Считать, что токен в заголовке автоматически решает вопрос авторизации.
  • Забывать про служебные и внутренние точки API.
  • Оставлять интроспекцию и отладку включёнными в продакшене.

Чек-лист «умею»

  • Различаю риски REST, GraphQL и gRPC.
  • Понимаю принцип авторизации на уровне объекта.
  • Умею ограничивать стоимость запросов.
  • Проверяю служебные точки в лаборатории.
  • Версионирую API и управляю жизненным циклом.

Вопросы на интервью

  • Какие риски специфичны для GraphQL?
  • Как вы проверяете, что API корректно проверяет права на объекты?
  • Как защитить служебные точки API?

Источники и первоисточники

CyberPath — обучение пентесту, кибербезопасности и сетевой грамотности