Безопасность API

В этой статье разработчики компании DST Global обсудят меры безопасности API и лучшие практики в области обеспечения API или веб -сервисов.

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

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

Тип API: обзор

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

REST API

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

SOAP API

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

GraphQL API

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

APIS OPENAPI/SWAGGER

OpenAPI/Swagger APIs are used to define and document RESTful APIs, allowing developers to understand the structure and functionality of the API before using it.

Что такое безопасность API?

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

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

Используемые стандарты: Существует несколько стандартов и рамок, используемых для обеспечения API. Некоторые из широко используемых: Open Project Security Security Project (OWASP) API Security 10, Национальный институт стандартов и технологий (NIST) API Security, протокол авторизации открытого стандарта (OAUTH) и Open ID Connect.

Компоненты безопасности API

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

Общие проблемы с безопасностью API

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

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

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

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

- Безопасность API должна защищать от атак отказа в службе (DOS) , которые включают в себя подавляющее API с помощью потока просьбы о нарушении ее нормальной работы. Механизмы защиты DOS необходимы для предотвращения таких атак.

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

Зачем нам безопасность API?

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

- Защитите конфиденциальные данные

- Смягчить риски кибербезопасности

- Обеспечить соответствие

- Поддерживать непрерывность бизнеса

- Поддерживать доверие

В последнее время мы наблюдали несколько недавних атак, связанных с безопасностью API, некоторые из них:

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

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

Уточнение данных T-Mobile: T-Mobile объявил о нарушении данных в августе 2021 года, затрагивая более 50 миллионов клиентов. Киберпреступники использовали уязвимость API, чтобы получить вступление в личные данные клиентов, включая номера социального страхования, даты рождения, имена и адреса.

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

Лучшие практики, которые следует учитывать для безопасности API

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

- Используйте сильную аутентификацию: использование сильных механизмов аутентификации (например: OAuth 2.0, OpenID Connect или клавиши API) может помочь предотвратить несанкционированный доступ к API.

- Реализовать правильные элементы управления доступа на основе ролей.

- Зашифруйте данные: данные в состоянии покоя или транзит, которые будут зашифрованы.

- Используйте HTTPS: используйте защищенный канал для всех коммуникаций API.

- Реализовать ограничение ставки и предотвращает злоупотребление API, ограничивая количество запросов.

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

- Мониторинг в реальном времени: мониторинг трафика API в реальном времени может помочь определить аномалии, которые могут указывать на нарушение безопасности.

- Программа тестирования безопасности: для выявления уязвимостей и обеспечения безопасности API.

- План реагирования на инцидент: быстро реагировать на любые инциденты безопасности.

- Управление уязвимость: регулярная частота применения исправлений безопасности и обновлений.

Безопасность API (стандарты тестирования)

Многочисленные фреймворки безопасности используются; Некоторые из общих рамок:

Центр управления центром безопасности интернет -безопасности (CIS)

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

Национальный институт стандартов и технологий (NIST) рамки кибербезопасности

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

API открытого проекта безопасности веб -приложений (OWASP)

Структура для разработки безопасных API. Разработчики DST Global хотели подчеркнуть, что больше связано с этой структурой, поскольку я вижу в этом базу для безопасности API. Топ -10 OWASP служит руководством для разработчиков и организаций для расстановки приоритетов и устранения рисков безопасности в своих API.

Ниже перечислен список 10 лучших стандартов OWASP:

Top 10 Top 10 Risks API Security - это список из десяти самых важных рисков безопасности для API, как идентифицировано Проектом безопасности Open Web Application (OWASP). Текущая версия - OWASP Top 10 Risks Security Risks 2019.

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

- Сломанная аутентификация и управление сеансами: термин относится к проблемам безопасности, возникающих в результате ошибочной реализации аутентификации и управления сеансами.

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

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

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

- Разбитый авторизация функции: этот термин относится к проблемам, касающимся разрешения и элементов управления доступа конкретных функций или действий в API.

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

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

- Инъекция: Этот термин относится к проблемам, связанным с инъекцией вредоносного кодекса или запросов SQL в запрос или ответ API.

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

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

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

Безопасность API: краеугольный камень защиты ИИ и LLM

Поскольку искусственный интеллект и модели крупного языка (LLMS) продолжают изменять технологический ландшафт, важность безопасности API никогда не была более критичной. В недавнем интервью в Black Hat 2024 Тайлер Шилдс , вице -президент по маркетингу продуктов в Tracable, пролил свет на развивающиеся отношения между API Security и AI/LLM. В этой статье рассматривается ключевая идея для разработчиков, инженеров и архитекторов, ориентирующихся на эту сложную местность.

Развивающийся ландшафт уязвимостей API

С быстром принятием приложений, управляемых ИИ и LLM, ландшафт безопасности API претерпевает значительные изменения. Шилдс подчеркивает «массивный взрыв API», обусловленный несколькими факторами:

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

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

- Интеграция LLM: включение сторонних LLMS в приложения вводит новые модели связи API.

Шилдс объясняет: «Генеративное ИИ - это связь между системой и генеративным бэкэдом ИИ. Во многих отношениях безопасность API и генеративная безопасность ИИ - это одно и то же».

Уникальные проблемы для разработчиков

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

- Том: огромное количество вызовов API в современных приложениях может быть ошеломляющим.

- Недотеринный характер: ответы LLM не всегда предсказуемы, что делает традиционные методы проверки ввода менее эффективными.

- Контекстная безопасность: Shields подчеркивает необходимость целостного подхода: «Это делает входной проверку, а вывод санитария намного сложнее. Так что то, что мы начинаем видеть, требует возможности взглянуть на эти входы и ответы целостно в контексте, используя искусственное искусство . "

Поддержание видимости и контроля

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

«Мы сможем развернуть все эти ситуации и захватить трафик API. Что это значит для наших клиентов? Ну, для наших клиентов это означает универсальную видимость», - объясняет Шилдс.

Эта видимость распространяется на облачные среды, балансировщики нагрузки, сети и даже в контейнерах с использованием технологии EBPF. Шилдс добавляет: «Вы должны посмотреть на входящий запрос, исходящий запрос. Вы должны посмотреть на его время. Вы должны смотреть на сеансы по нескольким запросам, вы должны посмотреть на весь корпус всех сотен ваших API и понимают, как они общаются друг с другом ».

Предотвращение конфиденциального раскрытия информации

В то время как Шилдс не обращался непосредственно в топ -10 OWASP для приложений LLM , он подчеркнул важность целостного анализа данных в предотвращении конфиденциального раскрытия информации:

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

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

Обнаружение и предотвращение злоупотреблений API

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

«Мы смотрим на информацию, такую как тип информации, данные, идущие туда -сюда, как она отклоняется от своих норм, объема данных», - объясняет Шилдс. «Если вы продвигаете 10 мегабайт данных в день, и вдруг вы пробираетесь через 100 гигабайт за час. Вы знаете, что происходит что -то необычное. Вы также можете увидеть объемные паттерны».

Развивающиеся методы безопасности API

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

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

- Интеграция с системами выполнения: используйте данные времени выполнения для повышения анализа безопасности.

- Тестирование с учетом контекста: «Возьмите богатый контекст и позвольте вашим инструментам приложений, ваши инструменты безопасности приложений, ориентированные на разработки, иметь эти знания. Знайте, как выглядит 99,99% трафика, и ищите выбросы».

- Сдвиг левая безопасность: сделать инструменты безопасности умнее, предоставляя им больше контекста ранее в процессе разработки.

Консультации для разработчиков и команд безопасности

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

- Расстановите приоритеты на видимости: «Первый шаг - это видимость и наблюдаемость».

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

- Соберите и проанализируйте контекст: «Второй шаг собирает контекст, понимая контекст обоих с этим набором данных».

- Реализуйте защиту: «Шаг третий вкладывает защиту в игре и делает ваше тестирование умным».

Роль ИИ в безопасности API

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

«Мы использовали ИИ, но мы также используем людей для рассмотрения контента. И у вас люди смотрят на результат».

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

Заглядывая в будущее: будущее безопасности API в мире, основанном на искусственном интеллекте

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

«Я думаю, что развитие AI-абонентов быстро усыновлено и становятся лучше с каждым днем. Я часто разговариваю с разработчиками, и они говорят:« Дайте мне компонент, который делает XYZ, 123 »,-это требует их с 12 часов в глубина до двух часов ".

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

Заключение

Поскольку технологии AI и LLM продолжают трансформировать ландшафт разработки программного обеспечения, безопасность API становится важным компонентом в обеспечении безопасности и целостности этих систем. Сосредоточив внимание на всесторонней видимости, контекстном анализе и развитии методов безопасности, разработчики и группы безопасности могут лучше защитить свои приложения, управляемые искусственным интеллектом от возникающих угроз. Как говорит Тайлер Шилдс: «Вы должны смотреть на все функции. Вы должны смотреть на все API». Этот целостный подход будет ключом к навигации по сложному пересечению безопасности API и ИИ в ближайшие годы.

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

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

Итак, среди существующих общедоступных и общеизвестных API, актуальными являются API на базе следующих архитектур:

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

— Ресурс является частью URL

— Для каждого ресурса создается два URL, один для коллекции, один для экземпляра коллекции, /users и users/123.

— HTTP-методы GET, POST, PATCH и DELETE информируют сервер о том, какое действие нужно совершить над данным ресурсом. Различные методы, примененные к одному и тому же ресурсу, выполняют различную функциональность.

— SOAP — расширение протокола XML-RPC. Первоначально предназначался для RPC (вызова удаленных процедур), сейчас чаще используется для обмена сообщениями в формате XML. Чаще всего встречается в сервисах типа мессенджеров (см. Mattermost).

— RPC — самый просто тип API, когда вызов передается в качестве полезной нагрузки в запросе, например:

POST /api/conversations.archive
 
    HOST slack.com
 
    Content-Type: application/x-www-form-urlencoded
 
    Authorization: token OAUTH-TOKEN
 
    channel=C01234
16:41
+2
Давайте разберем тогда какие уязвимости у API?

Когда мы говорим об архитектуре REST чаще всего на ум приходит — JSON (хотя RESTfull API подразумевает под собой необязательно передачу только JSON файла, но тем не менее).

Вот тут крутая статья, кто вообще не понимает, что здесь происходит.

JSON уязвимости и их защита

Необходимо пояснить, что, разумеется, большинство атак на API нацелены именно на внутренние движки приложений и в полезной нагрузке (пейлоаде) могут быть любые сигнатуры (SQL инъекции, RCE, XSS, DoS и т.д.). Здесь я опишу именно специфичные уязвимости самих технологий API.

Как ранее упоминалось в статье, одна из атак нацелена на параметры. Как же это происходит?

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

Итак, первая категория уязвимостей JSON:

Неопределенный приоритет повторяющихся ключей.

Что будет если просто продублировать JSON ключ?

Например:

Test = { “bro”:1, “bro”:2}


Какое значение для bro будет итоговым при генерации такого запроса: 1 или 2, или будет ошибка? Согласно официальному стандарту оба варианта возможны (J). Причина, почему так возможно, кроется, как мне кажется, в том, что стандарт заранее сделан таким образом, чтобы не нарушать обратную совместимость с анализаторами предварительной спецификации.

Какая разница 2 или 1, или ошибка? Представим, что у вас сервис с платежной системой, можно покупать объекты для определенного ВАШЕГО аккаунта. Вы хотите купить пачку чипсов и 5 пачек жвачки:

POST /cart/checkout HTTP/1.1
...
Content-Type: application/json
{
    "orderId": 10,
    "paymentInfo": {
        //...
    },
    "shippingInfo": {
        //... 
    },
    "cart": [
        {
            "id": 0,
            "qty": 5
        },
        {
            "id": 1,
            "qty": -1,
            "qty": 1
        }
    ]
}


Где id чипсов — 1, id жвачки — 0 а их количество — qty. Пачка чипсов стоит при этом 100 рублей. При отправке такого запроса к веб-серверу, который использует для анализа JSON стандартную библиотеку Python, будет использоваться приоритет последнего ключа. Такой запрос успешно валидируется данным парсером и сырые данные отправляются дальше в систему генерации платежной квитанции, которая в свою очередь использует Golang для анализа (например, buger/jsonparser).

id, _ := jsonparser.GetInt(value, "id")
qty, _ := jsonparser.GetInt(value, "qty")
total = total + productDB[id]["price"].(int64) * qty;


Он же (Golang) использует приоритет первого ключа. Таким образом, если мы отправим запрос на 5 пачек жвачки стоимостью 500 рублей и чипсов стоимостью 100 рублей с дубликатом ключа, парсер веб-сервера проанализировав запрос (относительно json схемы) примет его как валидный, а данные, отправленные на сервис платежной системы сформируют квитанцию для qty размером -1.

Таким образом, при формировании платежной квитанции нам будет отправлено 5 пачек жвачки и 1 пачка чипсов стоимостью 500 рублей, но с нас возьмут 400 рублей, т.к. при qty -1 для пачки чипсов — их цена в чеке будет вычтена парсером Golang.

Следующий тип атаки — коллизия значений.

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

{"test": 1, "test\[raw \x0d byte]": 2} 
{"test": 1, "test\ud800": 2}
{"test": 1, "test"": 2}
{"test": 1, "te\st": 2} 


Эти строковые значения обычно не устойчивы к нескольким этапам сереализации и десереализации. Так, U+D800 и U+DFFF являются непарными суррогатными кодовыми точками в UTF-16 и пока они могут быть закодированы в UTF-8 байтовую строку, это будет уязвимостью. Предположим, что у нас есть приложение, в котором администратор приложения может создавать роли и пользователей через API. Также пользователи с повышенными правами имеют роль — superuser. Формат создания пользователя такой:

POST /user/create HTTP/1.1
...
Content-Type: application/json
 
{
   "user": "NoviiPolzak", 
   "roles": [
       "superuser"
   ]
}
 
HTTP/1.1 401 Not Authorized
...
Content-Type: application/json
{"Error": "Assignment of internal role 'superuser' is forbidden"}


Как мы видим, при попытке добавления пользователя “NoviiPolzak” с ролью “superuser” сервер отвечает ошибкой 401 и контентом, что доступ запрещен. Теперь самое интересное, с помощью API мы добавим новую роль следующим образом:

POST /role/create HTTP/1.1
...
Content-Type: application/json
 
{
   "name": "superuser\ud888"
}
 
HTTP/1.1 200 OK
...
Content-type: application/json
 
{"result": "OK: Created role 'superuser\ud888'"}


Также создадим еще раз пользователя:

POST /user/create HTTP/1.1
...
Content-Type: application/json
 
{
   "user": "NoviiPolzak", 
   "roles": [
       "superuser\ud888"
   ]
}
 
HTTP/1.1 200 OK
...
Content-Type: application/json
 
{"result": "OK: Created user “NoviiPolzak”}


Таким образом в системе на данный момент создан пользователь NoviiPolzak с ролью superuser\ud888 и при использовании парсера, который сокращает запрещенные кодовые точки система будет принимать просто роль “superuser”. То есть, когда с созданной записью пользователя мы будем обращаться, например, к панели администратора, система даст нам повышенные права.

Как известно, многие библиотеки JSON поддерживают комментирование из JavaScript интерпретатора, например /*,*/. Благодаря этому один запрос может быть обработан двумя разными парсерами по-разному:

obj = {"description": "Коллизия с помощью комментирования ", "test": 2, "extra": /*, "test": 1, "extra2": */}


GoLang распарсит так:

Description: “Коллизия с помощью комментирования”
Test= 2 
Extra= “”


Java JSON-iterator — вот так:

Description:
Extra=/*”
Extra2=”*/”
Test= 1


Выходит, основные уязвимости JSON связаны непосредственно с парсерами данных на стороне приложения во время их кодировки и декодирования. Такие уязвимости достаточно тяжело обнаружить, и они требуют общего подхода к их устранению — как со стороны разработчика, так и от команды ИБ. Ниже я опишу, какие существуют средства защиты API, а сейчас переходим к SOAP.
SOAP уязвимости

SOAP, как известно, в своем фундаменте имеет XML и основные уязвимости вытекают отсюда.

SOAP injection — самая простая, но тяжело детектируемая атака, непосредственно инъекция в теле SOAP запроса.

<soapenv:Envelope xmlns:soapenv=”http://schemas.xmlsoap.org/soap/envelope/” xmlns:web=”web:”>
    <soapenv:Header>
    </soapenv:Header>
<soapenv:Body>
        <web1:Login xmlns:web1=”http://ws.example.com/”> 
                <fname>Ivan</fname>
                <lname>Ivanov</lname>
                <password>lmao1337</password>
        </web1:Login>
    </soapenv:Body>
</soapenv:Envelope>


Это классический запрос авторизации, и если он пройдет успешно, мы получим ответ ОК. Но теперь уберем тэг из запроса. В ответ от сервера получим, что-то вроде:

Error at line 66: lname == null | loginid
loginid cannot be null


Вообще данный ответ содержит в себе кусок кода, и говорит нам о том, что если lname тэг отсутствует, то должен использоваться loginid вместо него. Получается, если мы создадим запрос, в котором укажем loginid без строки :

<fname>Ivan</fname>
<password>lmao1337</password>
<loginid>1</loginid>


То мы сможем успешно авторизоваться и отправлять запросы на уровне администратора.

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

SOAP Action Spoofing — сам SOAP допускает использование дополнительного заголовка HTTP – SOAPAction. Данный заголовок содержит в себе имя выполняемой операции и служит для оптимизации анализа SOAP целевым приложением. Приложение, основываясь на заголовке, может не производить анализ целого пересылаемого XML.

Допустим, у нас есть приложение, уязвимое к SOAPAction — спуфингу по двум операциям: “createUser” и “deleteAllUsers”. При этом, перед приложением стоит шлюз, который блокирует все запросы на удаление всех пользователей, если они пришли извне (deleteAllUsers), т.е. только прямое подключение к приложению позволяет авторизованному пользователю выполнить удаление.

Пример запроса пользователя на создание нового пользователя:

POST /service HTTP/1.1
Host: myHost
SOAPAction: "createUser"
 
<Envelope>
  <Header />
  <Body>
    <createUser>
      <login>IVANPOPOLAM</login>
      <pwd>secret</pwd>
    </createUser>
  </Body>
</Envelope>


Теперь, если злоумышленник добавит в запрос заголовок SOAPAction:

POST /service HTTP/1.1
Host: myHost
SOAPAction: "deleteAllUsers"
 
<Envelope>
  <Header />
  <Body>
    <createUser>
      <login>IVANPOPOLAM</login>
      <pwd>secret</pwd>
    </createUser>
  </Body>
</Envelope>


Шлюз, стоящий перед приложением пропустит такой запрос, т.к. он смотрит только в тело SOAP и в следствии приложение прочитав заголовок SOAPAction удалит всех пользователей.

XXE — классическая уязвимость. На самом деле XXE эксплуатируется похожим образом, как и XSS, выполняя вредоносный код на стороне сервера, при разведке данных на приложении и т.п.
Хорошо Арсений, а чем защищаться будем?
16:43
+1
Описанные ранее уязвимости в основном находятся на уровне логики работы парсеров и обработчиков запросов. Защита достигается путем взаимной работы отдела разработчиков и ИБ-отдела. И если со стороны разработчиков все понятно — не использовать уязвимые библиотеки и вовремя обновляться, то ИБ-отдел может предложить использовать средства защиты веб-приложений — WAF (Web Application Firewall) с функциональностью API Protect. В таком случае WAF обычно выступает дополнительной точкой отказа.

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

Чем может похвастаться Nginx App Protect

Во-первых, в отличии от классического WAF, он достаточно гибко разворачивается в DevOps инфраструктуру. Является модулем для подписки NGINX Plus.

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

Функционал:

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

— Подписка Threat Campaigns — это одна из ключевых фишек F5 и Nginx – тяжеловесные скореллированные сигнатуры с низким процентом ложных срабатываний, распространяются только по доп. подписке.

— HTTP Compliance — не совсем относится к API, тем не менее ограничивающие политики для запросов всегда нужны и важны.

— Data Guard — маскирование критических данных в запросах. Например, если в API передаются серия и номер паспорта, есть возможность маскировать эту информацию.

— Parameter parsing — автоматический парсинг параметров из запроса для создания отдельных логических объектов. Далее созданные объекты могут быть индивидуально настроены для применения тех или иных ограничений.

— JSON Content — в системе есть возможность создать логический профиль для описания разрешений при использовании JSON. Скажем, можно определить разрешенную длину полезной нагрузки JSON и длину массива, проверять возможные атаки на парсеры JSON.

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

— gRPC Content — в системе создается профиль содержимого gRPC. Nginx обнаруживает сигнатуры атак и запрещенные метасимволы. Кроме того, есть возможность запрещать использование неизвестных полей. Для этого необходимо будет указать файл определения языка (IDL).

Как и говорил ранее, немного о существующих решениях на российском рынке:

PTAF — разработка компании «Positive Technologies», не имеет каких-то автоматизированных протекторов API. Тем не менее у PTAF очень гибкий движок по написанию собственных правил, а также встроенные функции проверки потенциально нелегитимных JSON и XML файлов.

Wallarm API Security — продукт компании «Wallarm». Функционал направлен точечно на защиту API. Из коробки защищает по OWASP API TOP-10, имеет собственные API парсеры и протекторы JSON/XML.

InfoWatch Attack Killer — под капотом ядро «Wallarm», его API парсеры и механизмы защиты.

Фундаментально это все. Ограничения на точке отказа в любом случае не панацея, необходимо всегда анализировать уязвимые места парсеров и создавать виртуальные заплатки. Для этого во многих WAF реализован функционал создания своих сигнатур. Т.е., помимо того, чтобы просто внедрить WAF в свою инфраструктуру, необходимо постоянно его администрировать совместно с разработчиками веб-приложения.
16:44
Я чего-то не догоняю: а не пофиг ли вообще, как там распарсит парсер? Любые входные данные все равно будут проверяться бизнес-логикой. Скажем, в примере с пачкой чипсов возможность ставить отрицательное количество товара (если таковая вообще есть в принципе) будет зависеть как минимум от роли пользователя.

И это со всеми примерами так: не взломав авторизацию, ими не воспользуешься, а если взломать — так они уже и не нужны.
16:44
+1
Не совсем так. Исходный json подменить может любой. И если в компании разные службы обслуживаются разными (микро)сервисами, то вполне возможна такая ситуация. Тут уж зависит от уровня квалификации разработчиков.
16:44
Все равно не совсем понятно. Можно подробнее пример взаимодействия, когда разработчики этих разных сервисов не совсем уж тупые джуны и чуть-чуть думают о входных данных?
нет, потому что если разрабы не тупые джуны, они никому не доверяют, даже соседнему сервису (где вполне могут сидеть тупые джуны)
16:45
Такое вполне возможно, когда сервис платежной системы используется «готовый» и интегрируется в существующее веб-приложение.
Вам может быть интересно
По мере роста Gen AI, организации сталкиваются с новыми рисками безопасности. Специалисты компании DST Global расскажут в этой статье, как защищать свои системы ИИ от быстрого взлома и других возникаю...
Zero Trust («нулевое доверие») – это модель безопасности, разработанная бывшим а...
Вопросы безопасности для наблюдения: повышение над...
Управление цифровыми правами (DRM) – это технологи...
и её связь с бизнес-схемами распространения прогр...
Система управления цифровыми правами (Digital Righ...
Практическое руководство по реализации эффективног...
Ознакомьтесь с руководством от специалистов компан...
Что такое и зачем нужно облако ФЗ-152. Специалисты...
Шифрование хранящихся данных имеет жизненно важное...

Новые комментарии

Такое вполне возможно, когда сервис платежной системы используется «готовый» и и...
нет, потому что если разрабы не тупые джуны, они никому не доверяют, даже соседн...
Все равно не совсем понятно. Можно подробнее пример взаимодействия, когда разраб...

Заявка на услуги DST

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

Адрес

Ижевск, ул. Воткинское шоссе, д. 170 Е, Технопарк Нобель, офис 1117

8 495 1985800
Заказать звонок

Режим работы: Пн-Пт 10:00-19:00

info@dstglobal.ru

Задать вопрос по почте

Укажите ваше имя
Укажите ваше email
Укажите ваше телефон