Чек-лист для обнаружения теневых API – поиск недокументированных интерфейсов

Содержание
  1. Почему важно обнаруживать теневые API
  2. План проверки для обнаружения теневых API
  3. Шаг 1: Создание базового списка API
  4. Шаг 2: Сравнение документации с активностью во время выполнения
  5. Шаг 3: Поиск неизвестных конечных точек в журналах
  6. Шаг 4: Проверка кода, репозиториев и конвейеров CI/CD
  7. Шаг 5: Проверка открытости в облачных, Kubernetes и бессерверных средах
  8. Шаг 6: Анализ DNS и субдоменов на предмет открытости API
  9. Шаг 7: Обнаружение API извне
  10. Шаг 8: Проверка открытости и механизмов контроля доступа
  11. Шаг 9: Классификация конфиденциальной информации и бизнес-функций
  12. Шаг 10: Назначение ответственных и классификация API
  13. Шаг 11: Тестирование активных API на уязвимости
  14. Шаг 12: Приоритезация и устранение недостатков по реальному риску
  15. Шаг 13: Внедрение непрерывного управления для обнаруженных API
  16. Шаг 14: Постоянное обнаружение новых и измененных API
  17. Критерии выбора инструментов для обнаружения теневых API
  18. Как Invicti помогает обнаруживать и защищать теневые API
    1. Запрос на бесплатное тестирование Invicti

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

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

Независимо от происхождения, проблема безопасности одинакова: неизвестный API вряд ли будет подвергаться такому же тестированию, мониторингу и управлению, как и известный.

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

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

Почему важно обнаруживать теневые API

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

Это расхождение имеет прямые последствия для безопасности.

OWASP включает «Ненадлежащее управление инвентаризацией» (Improper Inventory Management) под пунктом API9:2023 в список OWASP API Security Top 10 2023. Другие риски для API включают нарушение авторизации на уровне объектов (BOLA), нарушение аутентификации, нарушение авторизации на уровне функций, неограниченный доступ к критическим бизнес-потокам и неправильную конфигурацию безопасности. Недокументированная конечная точка может потенциально содержать любую из этих уязвимостей – и при этом оставаться вне пределов регулярного тестирования безопасности.

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

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

Эффективный подход к этой проблеме заключается в сопоставлении разных уровней видимости среды API:

  • Документация указывает, что должно существовать.
  • Код показывает, что разработано.
  • Инфраструктура демонстрирует, что развернуто.
  • Анализ среды выполнения выявляет то, что применяется.
  • Внешнее сканирование определяет, к чему можно получить доступ.

Расхождения между этими данными указывают на места, где чаще всего появляются теневые API.

План проверки для обнаружения теневых API

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

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

ШагПроцесс обнаруженияИнформация для сбора
1Создание списка задокументированных APIКаталоги API, спецификации, маршруты шлюзов, реестры служб
2Сопоставление документации с показателями выполненияЗапросы или конечные точки, не имеющие соответствия в спецификациях
3Проверка журналов шлюзов и инфраструктурыНеизвестные пути, методы, имена хостов, версии и клиенты
4Инспекция исходного кода и систем развертыванияМаршруты, контроллеры, обработчики, спецификации API, бессерверные функции
5Аудит облачной и контейнерной инфраструктурыМаршруты шлюзов, функции, правила маршрутизации входящего трафика, сервисы, прямые пути доступа
6Поиск в системах DNS и субдоменахИмена хостов API, неактуальные записи, оставленные среды, открытый доступ к сервисам
7Поиск внешне достижимых APIХосты API, конечные точки, запросы от приложений, среды стейджинга, предварительные версии
8Валидация открытости и средств контроля доступаАутентификация, авторизация, уровни привилегий, лимиты запросов, покрытие через шлюз
9Классификация конфиденциальности данных и бизнес-рисковКонфиденциальные данные, учетные записи, токены, операции с высокими привилегиями
10Определение ответственности и этапа жизненного циклаВладелец процесса, назначение для бизнеса, среда, статус (актуальный или устаревший)
11Тестирование действующих API на уязвимостиРезультаты динамического тестирования (DAST) и проверок безопасности API
12Определение приоритетов и исправлениеУровень открытости, пригодность к эксплуатации, привилегии, конфиденциальность данных, влияние на деятельность компании
13Интеграция API в системы постоянного контроляУчет, мониторинг, регулярное тестирование, управление рисками безопасности
14Циклическое обнаружение и мониторинг изменений в реестрахТолько что обнаруженные конечные точки, измененные API, расхождения в инвентаризации

Шаг 1: Создание базового списка API

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

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

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

Действенный реестр API фиксирует не только имя хоста и путь:

Поле реестраПочему это имеет значение
Имя хостаОпределяет точку открытого доступа к API
Путь и метод HTTPОпределяет выполняемую операцию
СредаРазличает продакшн, стейджинг (staging), среду тестирования и разработки
АутентификацияДемонстрирует механизм контроля доступа
Классификация данныхПомогает установить потенциальное влияние в случае инцидента
Ответственное лицоОбеспечивает ответственность за устранение недостатков
ИсточникФиксирует место обнаружения или документирования API
Последняя зафиксированная активностьПомогает отличить активные конечные точки от неактивных
Статус жизненного циклаИдентифицирует активные, выведенные из эксплуатации, тестовые или неизвестные сервисы

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

Шаг 2: Сравнение документации с активностью во время выполнения

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

Известный реестрНаблюдаемое поведениеНа что это может указывать
/api/v1/users/api/v1/users/exportНедокументированная функциональность
Задокументирован метод GETТакже принимается запрос POSTНедокументированная операция записи
/api/v2/orders/api/v1/orders до сих пор получает трафикУстаревшее или Zombie API
Мобильное API не задокументированоМобильный клиент вызывает /mobile/api/sessionНедокументированный мобильный бэкенд
Маршрут шлюза отсутствуетСервер происхождения получает трафик APIПрямой доступ или обход шлюза

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

Именно поэтому обнаружение во время выполнения является мощным инструментом, но недостаточным само по себе. Оно фиксирует то, что было активно во время наблюдения, но не обязательно все возможные вызовы.

Шаг 3: Поиск неизвестных конечных точек в журналах

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

К соответствующим источникам могут относиться шлюзы API, обратные прокси, фаерволы (WAF), балансировщики нагрузки, сети доставки контента (CDN), контроллеры входящего трафика Kubernetes, сервисные сетки, журналы доступа к приложениям, облачные сервисы и бессерверные платформы.

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

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

Цель состоит в обнаружении необъяснимых расхождений, а не в создании еще одного списка URL-адресов.

Шаг 4: Проверка кода, репозиториев и конвейеров CI/CD

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

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

Инфраструктура как код (IaC) и конфигурации развертывания могут предоставить дополнительный срез информации. Определения шлюзов, правила Ingress, конфигурации систем DNS, триггеры бессерверных функций, контейнерные сервисы и манифесты непрерывной интеграции и непрерывного развертывания (CI/CD) – все это способно выявить доступность API, которая никогда не попадала в централизованную документацию.

ИсточникПотенциальный признак
Определение маршрута или контроллераКонечная точка существует в коде, но отсутствует в реестре
Спецификация APIСпецификация существует, но никогда не была зарегистрирована централизованно
Бессерверная функцияТриггер HTTP или URL-адрес функции открывает доступ к неизвестному сервису
Шаблон IaCМаршрут шлюза или входящего трафика существует вне каталога API
Манифест развертыванияСервис открыт в стейджинге или в продакшне
Мобильное приложениеКлиент обращается к недокументированному бэкенду
Устаревший репозиторийСтарая версия API может до сих пор соответствовать развернутому сервису

Обнаружение на основе кода также предоставляет важное преимущество сдвига влево (shift left): недокументированный API может быть потенциально идентифицирован перед развертыванием, а не только после того, как он станет доступным.

Если процесс разработки это позволяет, можно также требовать наличия спецификации API или соответствующей записи в реестре перед выпуском нового API. Тогда шлюзы развертывания (deployment gates) смогут проверять, были ли зарегистрированы и утверждены только что внедренные маршруты API. Эти меры контроля не устранят теневые API полностью, особенно в сложных или децентрализованных средах, но они способны уменьшить их количество, возникающее из-за обычных отклонений в процессах.

Шаг 5: Проверка открытости в облачных, Kubernetes и бессерверных средах

Распределенная инфраструктура создает больше мест, где API могут возникать за пределами ожидаемого маршрута в продакшн.

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

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

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

Шаг 6: Анализ DNS и субдоменов на предмет открытости API

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

Проверке подлежат известные домены и субдомены на наличие таких шаблонов наименования, как api, api-v1, api-v2, mobile, partner, internal, dev, test, staging и legacy. Эти записи необходимо сравнить с утвержденными реестрами активов и API.

Особое внимание следует обращать на устаревшие или непонятные записи DNS. Имя хоста, созданное для миграции, проверки концепции, предварительной версии API или временной среды, может оставаться доступным для распознавания еще долго после завершения изначального проекта.

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

Аналогично стоит проверять и противоположный сценарий: сервисы, достижимые непосредственно через IP-адрес, сгенерированное в облаке имя хоста, балансировщик нагрузки или URL-адрес бессерверной среды, могут вообще обходить ожидаемые правила именования публичных DNS организации.

Шаг 7: Обнаружение API извне

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

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

Динамическое тестирование безопасности приложений (DAST) может обеспечить дополнительный сигнал для обнаружения на этом этапе. Когда сканер обходит веб-приложение, он может фиксировать вызовы API, инициированные приложением, и идентифицировать конечные точки, которые могут быть неочевидными из документации или интерфейса пользователя..

Это особенно полезно для API, связанных с приложениями, однако не является полноценным методом обнаружения. API без интерфейса и межсервисные API (service-to-service) могут не иметь веб-интерфейса для сканирования. В свою очередь анализ трафика выявляет только те API, которые генерируют доступный для наблюдения трафик. Эффективное обнаружение API комбинирует эти подходы, не опираясь на предположение, что любой из них самостоятельно обеспечивает полную видимость.

Шаг 8: Проверка открытости и механизмов контроля доступа

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

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

Особое внимание следует уделить авторизации. Аутентификация отвечает на вопрос, кем является тот, кто осуществляет вызов. Авторизация определяет, имеет ли этот субъект право на доступ к определенному объекту или функции.

Например, нарушение авторизации на уровне объектов (BOLA) возникает тогда, когда API принимает действительный аутентифицированный запрос, но не проверяет, разрешен ли тому, кто осуществляет вызов, доступ к запрошенному объекту. Тестирование на подобные уязвимости требует большего, чем просто проверка наличия токена аутентификации – оно предполагает проверку границ доступа между пользователями.

Подобным образом, недокументированные административные операции или альтернативные методы HTTP могут раскрывать проблемы с авторизацией на уровне функций.

Рейтинг OWASP API Top 10 является удобным ориентиром для выявления слабых мест, которые следует учитывать, однако непосредственной целью на этом этапе является классификация: необходимо детально понять уровень открытости и привилегий конечной точки, чтобы определить срочность проведения более глубокого тестирования или принятия мер по локализации.

Шаг 9: Классификация конфиденциальной информации и бизнес-функций

Два недокументированных API могут представлять совершенно разные уровни риска.

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

Необходимо определить, обрабатывает ли API персональные данные (PII), платежную информацию, медицинские сведения, учетные данные, токены, интеллектуальную собственность или другие конфиденциальные данные компании. Также следует идентифицировать операции, позволяющие создавать, изменять, удалять, утверждать, передавать, экспортировать или администрировать ресурсы.

Особого внимания требуют чувствительные бизнес-процессы. В классификации OWASP API6:2023 («Неограниченный доступ к чувствительным бизнес-процессам») отмечается, что технически правильный функционал API все равно может создавать серьезный риск в случае автоматизации или злоупотребления им без надлежащих средств контроля.

Шаг 10: Назначение ответственных и классификация API

Не каждый API, отсутствующий в реестре, относится к одной и той же категории:

Тип APIОписаниеОсновная проблема
Теневой APIАктивный, но недокументированный, неизвестный или неуправляемыйНеизвестное состояние безопасности
Zombie APIУстаревший API, который остается доступнымУстаревший функционал и средства контроля
Rogue APIAPI, развернутый вне утвержденных процедур управленияОтсутствие проверки и подотчетности
Заброшенный API (Orphaned API)API без четко определенного владельцаПроблемы с обновлением и жизненным циклом
Внутренний APIAPI, предназначенный исключительно для внутреннего использованияНепредвиденный доступ извне
Партнерский APIAPI для поддержки сторонних интеграцийУправление доступом и данными
API для тестирования или стейджинга (staging)API вне продакшна, который остается доступнымБолее слабый контроль или доступность тестовых данных

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

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

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

Шаг 11: Тестирование активных API на уязвимости

Сам факт обнаружения API не указывает на наличие в нем уязвимостей.

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

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

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

По возможности тестирование следует автоматизировать как часть жизненного цикла разработки программного обеспечения (SDLC), в частности в стейджинге (до выхода в продакшн). Это снижает вероятность обнаружения недокументированного и уязвимого API уже после того, как он начал работать в среде продакшна.

Шаг 12: Приоритезация и устранение недостатков по реальному риску

Статус «недокументировано» сам по себе не должен определять уровень критичности уязвимости.

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

Действенная модель приоритезации может выглядеть следующим образом:

ПриоритетПримеры критериевРекомендуемые действия
P0Внешнее, неаутентифицированное, открывает конфиденциальные данные или привилегированный функционалНемедленно ограничить или заблокировать и провести расследование
P1Внешнее, недокументированное, конфиденциальное или с подтвержденной уязвимостьюНазначить владельца, тщательно протестировать, усилить средства контроля
P2Внутреннее, но обрабатывает конфиденциальные данные или имеет привилегированные функцииПроверить идентификацию, авторизацию, сегментацию и провести тестирование
P3Устаревшее API с низким уровнем использованияРазработать план вывода из эксплуатации
P4Действительный API с низким риском, отсутствующий в документацииДобавить в реестр, закрепить владельца и включить в регулярный мониторинг

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

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

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

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

Иногда конечная точка является действительной, а недостатки возникают в самом процессе. В таком случае решение заключается во включении API в систему управления, а не в его удалении.

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

Шаг 13: Внедрение непрерывного управления для обнаруженных API

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

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

Для API, находящихся в активной разработке, такие средства контроля интегрируются в процессы разработки. Спецификации API и записи в реестре могут проверяться в рамках CI/CD, тогда как тестирование безопасности может выполняться на этапе стейджинга и других соответствующих стадиях жизненного цикла разработки ПО (SDLC).

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

Шаг 14: Постоянное обнаружение новых и измененных API

Проведение разовой инвентаризации отвечает на устаревший вопрос: «Какие API удалось обнаружить?».

Реальный вопрос для обеспечения безопасности иной: «Какие API существуют сейчас и что претерпело изменения?».

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

Постоянный контроль помогает уменьшить это отклонение:

Непрерывный контрольЦель
Комплексное обнаружение APIНаходит API на основе множества независимых сигналов
Сопоставление реестровВыявляет несоответствия между известными и найденными API
Обнаружение изменений и сравнение версий реестраФиксирует новые, модифицированные, удаленные или непонятные API
Мониторинг во время выполненияОтображает API, активно обрабатывающие трафик
Поиск в исходном кодеНаходит API непосредственно на стадии разработки
Проверки реестра в рамках CI/CDОтмечает новые маршруты API, которые не включены в официальное управление
Требования к спецификациям APIОбеспечивает создание четкой записи для новых API до или во время релиза
DAST и сканирование APIПроверяет активные конечные точки на уязвимости времени выполнения
Проверка ответственных лицГарантирует актуальность информации об ответственных командах
Анализ жизненного циклаИдентифицирует API, которые следует вывести из эксплуатации или удалить

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

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

Критерии выбора инструментов для обнаружения теневых API

При оценке возможностей обнаружения API необходимо осознавать, что ни один отдельный источник данных не дает полной видимости API:

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

Оптимальный подход предполагает комбинирование множества сигналов с последующим совмещением обнаружения и проверки безопасности.

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

ВозможностьПочему это важно
Многоуровневое обнаружение API Уменьшает количество «слепых зон», присущих любому отдельному методу обнаружения
Обнаружение в исходном коде Идентифицирует API еще до развертывания
Обнаружение по трафику во время выполнения Раскрывает API, которые фактически используются
Обнаружение через шлюз API Добавляет видимость централизованно управляемых маршрутов
Обнаружение на основе приложений Находит API, которые используются веб-приложениями
Обработка спецификаций API Использует существующие определения и уменьшает объем ручной настройки
Обнаружение изменений и сравнение реестров Идентифицирует новые или измененные API, которые отклоняются от утвержденного реестра
Поддержка аутентификации Обеспечивает доступ к защищенному функционалу для реалистичного тестирования
Тестирование API с учетом состояния Тестирует рабочие процессы, охватывающие несколько запросов
Классификация конфиденциальных данных Помогает установить потенциальное влияние открытия доступа к API
Привязка к владельцам Связывает обнаруженные API с ответственными командами
Подтверждение уязвимостей Помогает отличить подтвержденные проблемы безопасности от теоретической открытости
Непрерывная инвентаризация Поддерживает актуальность информации об обнаруженных API
Интеграция с управлением уязвимостями Связывает результаты проверки API с рабочими процессами назначения владельцев и устранения недостатков

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

Как Invicti помогает обнаруживать и защищать теневые API

Платформа Invicti подходит к обеспечению видимости API как к процессу многоуровневого обнаружения.

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

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

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

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

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

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

Запрос на бесплатное тестирование Invicti

Подписаться на новости