API открыли наружу
Раньше им пользовались только своё приложение и кабинет, теперь к нему подключают партнёров и клиентов. Защита, рассчитанная на доверенную сеть, перестала подходить.
Несанкционированный доступ к API бывает трёх видов: вошёл не тот, вошёл нужный, но видит чужое, и подбирают пароли и номера, пока не повезёт. Защита строится по слоям: проверка того, кто пришёл, проверка прав на каждый объект, ограничение частоты запросов и журнал, по которому перебор заметен. Мы проверяем и усиливаем существующий API или закладываем эти слои в новый. Работаем на уровне кода и конфигурации: это не пентест боевой системы и не защита от DDoS.
Обследование защиты API — от 200 000 ₽, 2–3 неделиПрава проверяются из-под каждой роли на чужих объектахЛимиты и журнал настраиваются под ваш трафик, а не по шаблону
Раньше им пользовались только своё приложение и кабинет, теперь к нему подключают партнёров и клиентов. Защита, рассчитанная на доверенную сеть, перестала подходить.
Партнёрские ключи не имеют срока жизни, один ключ используют несколько систем, и никто не помнит, у кого какой. При утечке нечего отозвать, не сломав остальных.
Много неудачных входов за ночь, перебор номеров заказов, одинаковые запросы с разных адресов. Нужно понять, что это было и что закрыть.
В опроснике безопасности вопросы про ограничение попыток, срок токенов и разделение данных клиентов. Ответить хочется документом, а не словами.
Источник определяет меры. Об устройстве самого API, версиях и ошибках см. статью «Проектирование API для интеграций».
Способ зависит от того, кто вызывает API. В одном сервисе обычно два-три.
Вход отвечает на вопрос «кто это», права — на вопрос «что ему можно». Ошибки второго рода обходятся дороже.
Случайные идентификаторы вместо последовательных номеров затрудняют перебор, но не защищают: ссылка, которую кто-то переслал, тоже откроет объект, если владелец не проверяется. Правило одно: сервер сверяет объект с пользователем на каждый запрос, как бы выглядел номер.
Берём две учётные записи в разных организациях с одной ролью и пробуем из-под каждой обратиться к объектам другой: читать, менять, удалять, скачивать файл. Затем так же из-под разных ролей одной организации. Результат записывается в матрицу «роль — метод — объект — результат», и она остаётся у вас как набор тестов. Код обработчиков читаем отдельно, подход описан на странице Secure code review.
Ограничение частоты защищает от перебора и случайной перегрузки отдельным клиентом. От распределённой атаки на отказ в обслуживании оно не защищает, для этого нужны провайдер или сеть доставки.
Подбор паролей идёт двумя способами. Первый — перебор по словарю для одной записи, его видно по лимитам. Второй — проверка пар «адрес — пароль», утёкших с чужих сервисов: на каждую запись приходит по одной-две попытки с разных адресов, и простой лимит по адресу ничего не показывает. Защита строится в таком порядке:
Журнал, в который пишется всё подряд, не читает никто. Для защиты API нужны события с понятным составом: кто (учётная запись или ключ), откуда, что запросил, какой был ответ. Их набор небольшой:
Пароли, токены и ключи в журнал не попадают, даже в сообщениях об ошибках. Мы настраиваем отправку событий в то, чем вы пользуетесь для мониторинга, и 2–3 оповещения на серии отказов и неудачных входов. Систем обнаружения вторжений, SIEM и дежурства мы не предоставляем: события должны дойти до вашего человека.
Цены совпадают с тарифами. Цена обследования фиксируется до начала, остановиться можно после любой ступени.
Карта методов и ролей, проверка входа, прав и лимитов, чтение кода обработчиков, матрица «роль — метод — объект», вилка бюджета на исправление.
Плюс границы между сервисами, ключи партнёров и вебхуки, схема выдачи и отзыва доступа.
Один набор мер: лимиты, срок и отзыв ключей, проверка владельца в самых рискованных методах, журнал и оповещения.
Сервер выдачи токенов, права на уровне объекта и поля в нескольких сервисах, подпись между сервисами.
Проверка прав перед релизами, разбор срабатываний лимитов, ротация ключей. Сверх пакета — 5 000 ₽ в час.
Список методов, ролей, ключей и потребителей. Выясняем, кто чем пользуется, какие ключи живы, где доступ шире нужного.
Прогон прав двумя учётными записями, чтение кода обработчиков, проверка входа и восстановления, оценка лимитов на копии. Боевую систему не трогаем.
Находки с местом в коде, сценарием, правкой и серьёзностью. Порядок исправления: что закрыть до следующего релиза, что запланировать.
Лимиты, ключи, права, журнал. Каждая мера с тестом в вашем репозитории, который остаётся у вас.
Повторный прогон прав и ключей. Дальше разовые проверки перед релизами или пакет часов.
Работа растёт по числу сочетаний «роль — метод — объект», а не по числу методов. Пять ролей с правами на уровне договоров требуют иного объёма, чем две.
Если ключи выданы без срока и учёта, сначала нужна инвентаризация. Если вход встроен в каждый сервис отдельно, работа включает вынесение его в одно место.
Копия для прогона прав и разработчик, который объяснит, зачем в методе сделано именно так, экономят недели.
Сервер выдачи токенов, хранилище секретов и мониторинг в контуре без выхода наружу собираются из того, что разрешено, и требуют больше подготовки.
Если API нужно построить, а не защитить, начинайте с разработки API и бэкенда: защита закладывается в проект сразу. Если нужно, чтобы сотрудники входили во все системы одним входом и со вторым фактором, это SSO и MFA. Если вопрос шире API и касается всего приложения, нужен аудит безопасности веб-приложения, а если только код, то ревью кода. Защита от внедрения запросов и подмены содержимого страниц описана на странице о защите от SQL-инъекций и XSS. Порядок мер по шагам лежит в статье «Как защитить API от взлома».
Порядок мер по шагам: что проверять в первую очередь, какие лимиты вводить и как не пропустить чужие данные.
Как выбрать протокол входа, место хранения пользователей и второй фактор для разных групп.
Как устроены ключи, права, вебхуки, версии и ограничение частоты в API для интеграций.
Сорок минут созвона: кто вызывает API, как сейчас выдаются доступы и что вас беспокоит. По итогам скажем, с чего начать и в какую вилку это укладывается.
Обследование одного API — 200 000 ₽ и 2–3 недели, нескольких — 350 000 ₽ и 3–4 недели. Закрытие найденных дыр оценивается после отчёта: лёгкий пилот 150 000–400 000 ₽ за 2–8 недель, перестройка модели доступа 400 000–1 200 000 ₽ за 2–3 месяца. Обследование вычитается из первого этапа, если продолжаете с нами.
Это ограничение числа запросов от одного клиента за время. Оно мешает подбору паролей и кодов, перебору номеров и перегрузке сервиса одним потребителем. Распределённую атаку на отказ в обслуживании оно не останавливает: от неё защищает провайдер или сеть доставки.
Для серверной интеграции партнёра ключ допустим, если у него есть срок, ограничение прав и возможность отзыва без остановки остальных. Для приложений пользователей лучше короткоживущие токены, а ключ в браузере или мобильном клиенте хранить нельзя.
Нужны две учётные записи в разных организациях с одинаковой ролью и прогон всех методов с чужими идентификаторами: чтение, изменение, удаление, скачивание файла. Результат записывается в матрицу и превращается в автоматические тесты, которые запускаются при сборке.
Нет. Прогон прав и проверки лимитов идут на копии или тестовом стенде с обезличенными данными, код читаем в вашем репозитории. Боевую систему мы не атакуем.
Нет. Мы работаем на уровне кода и конфигурации приложения: вход, права, лимиты, журнал. Защита от распределённых атак и WAF как услуга в наш состав не входят.
В большинстве случаев да: лимиты, срок и отзыв ключей, проверка владельца в обработчиках и журнал добавляются по частям. Если вход устроен отдельно в каждом сервисе, на обследовании оценим, дешевле выносить его в единое место или оставить как есть.
Мы в Ростове-на-Дону, работаем с заказчиками по всей России: удалённо и в вашем контуре. Доступ к системам и обследование согласуем на старте с вашей службой безопасности.