Чек-лист тестирования безопасности API, сгруппированный по тому, кто выполняет проверку

Закрывается автоматической функциональной проверкой

Это поведенческие проверки: правильно ли API отвечает на запрос, который должен отклонить. Их место — в вашем обычном наборе тестов, и запускаться они должны при каждом изменении.

  • Доступ без аутентификации отклоняется. Каждый защищённый эндпоинт при вызове без учётных данных возвращает корректный отказ, а не данные.

  • Авторизация проверяется на уровне каждого объекта. Пользователь A не может прочитать или изменить записи пользователя B, подставив другой идентификатор в путь. Это самая часто эксплуатируемая уязвимость в реальных API — и при этом обычная поведенческая проверка.

  • Границы ролей соблюдаются. Роль только для чтения не может писать. Просроченный или отозванный токен отклоняется.

  • Валидация входных данных отклоняет значения вне допустимого диапазона. Граничные случаи по каждому параметру, включая те, которые никто не документирует.

  • Ошибки не раскрывают внутреннее устройство. Стек-трейсы, фрагменты запросов и внутренние имена хостов не попадают в ответы.

Требует сканера или специализированного инструмента

  • Уязвимости зависимостей и библиотек.

  • Классы инъекций: SQL, командные, шаблонные, десериализация.

  • Конфигурация TLS и работа с сертификатами.

  • Проверка вашего стека на известные CVE.

Требует человека

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

  • Моделирование угроз и решение о том, какие данные на самом деле являются чувствительными.

  • Всё, что требует фантазии на тему того, как кто-то станет использовать ваш продукт не по назначению.

Пункт, который пропускают

Авторизация на уровне объектов — пункт, которого чаще всего не хватает и который проще всего проверить. Создайте две учётные записи, из-под одной создайте запись и попробуйте прочитать её с токеном второй. Если в ответ пришли данные, у вас самая распространённая серьёзная уязвимость API в отрасли — и находит её один тест.

Автоматизация этой проверки окупает всю работу, потому что повторять её приходится для каждого нового эндпоинта, а человек об этом не вспомнит.

Как заставить автоматизируемую половину действительно запускаться

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

Терминал

npm install -g @testsprite/testsprite-cli
testsprite setup

Панель управления закрывает то же самое для тех, кому не нужна локальная установка, а полный набор команд — в репозитории CLI.

Механика описана в документации по тестированию API.

Две учётные записи, которые стоит держать постоянно

Почти каждому поведенческому пункту этого списка нужны два пользователя, и самое дешёвое, что вы можете сделать, — держать пару тестовых учётных записей в каждом окружении, а не создавать их под каждый тест.

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

Вариант, который не работает, — создавать учётные записи внутри каждого теста. Это медленнее, после него остаются данные, и проверка начинает зависеть от работоспособности регистрации: сломанная регистрация красит все тесты прав доступа в красный по неверной причине. Постоянные учётные записи, созданные один раз, снимают всё это.

Периодичность по группам

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

Подключите репозиторий из панели управления — и запуски будут стартовать от того развёртывания, которое вы и так собираете, либо вместо этого добавьте шаг в свой рабочий процесс.

Как TestSprite закрывает автоматизируемую треть

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

Это значит, что доступ без аутентификации, авторизация на уровне объектов, границы ролей, просроченные токены и значения вне диапазона проверяются при каждом изменении, на работающем сервисе и для каждого эндпоинта, включая добавленные на прошлой неделе. Auto-Authentication поддерживает сессии живыми на протяжении всего прогона, Dynamic Variables переносят значения между вызовами, Dependency Chains выводят порядок выполнения из того, что каждому случаю требуется и что он создаёт, а Auto-Cleanup удаляет ровно то, что появилось за прогон.

Ценность здесь в регулярности, а не в изощрённости. Такие проверки нетрудно написать — трудно вспомнить о них на сороковом эндпоинте. Именно то, что они генерируются и выполняются постоянно, закрывает самую часто эксплуатируемую брешь в реальных API, не добавляя процесса, которому кто-то обязан следовать.

Заменяет ли это тест на проникновение?

Нет. Поведенческая половина закрывается постоянно, и это сокращает то, что остаётся искать тесту на проникновение, повышая отдачу от этой дорогой работы.

Сканирует ли TestSprite уязвимости?

Нет. Он проверяет поведение, включая авторизацию и граничные случаи. Сканирование уязвимостей — другой инструмент.

Как часто нужно запускать поведенческие проверки?

При каждом изменении. Новые эндпоинты появляются постоянно, и каждому нужна та же проверка авторизации, что и предыдущему.

С чего начать?

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

Нужна ли для этого команда безопасности?

Для моделирования угроз и злоупотреблений бизнес-логикой — да. Пункты чек-листа выше — обычная инженерная работа.

Коротко

Чек-лист без ответственных — это просто документ.

Чек-лист тестирования безопасности API делится на три части: поведенческие проверки, которые вы автоматизируете и запускаете при каждом изменении, сканирование по расписанию и человеческая оценка возможных злоупотреблений. Начните с авторизации на уровне объектов — это самая распространённая серьёзная уязвимость, и находится она одним тестом.