Источник: https://github.com/AnaktaCTF/CTF/blob/main — WEB/working with API.md

Capture The Flag (CTF) — это формат соревнований в области информационной безопасности, где участники решают задачи, связанные с нахождением уязвимостей в системах и приложениях. Одной из ключевых тем, обсуждаемых на CTF, является работа с API (Application Programming Interface).

Основы работы с API

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

• Аутентификацию: процесс проверки подлинности пользователя.

• Авторизацию: процесс определения прав доступа пользователя к ресурсам.

• Обмен данными: отправка и получение данных между клиентом и сервером.

Уязвимости API

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

  1. Небезопасные прямые ссылки на объекты (IDOR)

IDOR (Insecure Direct Object Reference) — это уязвимость, позволяющая злоумышленнику получить доступ к объектам или данным, к которым он не должен иметь доступа. Например, если API позволяет запрашивать данные по идентификатору пользователя, злоумышленник может изменить идентификатор в запросе и получить доступ к данным другого пользователя.


Злоумышленник может изменить 2 на 1 и получить данные другого пользователя.

  1. Недостатки аутентификации пользователей

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

  1. Избыточная передача данных

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

Методы защиты API

Для защиты API от уязвимостей необходимо применять ряд методов:

  1. Использование HTTPS

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

  1. Проверка прав доступа

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

  1. Ограничение доступа по IP

Можно ограничить доступ к API только для определенных IP-адресов или диапазонов адресов. Это поможет предотвратить атаки из внешних источников.

  1. Логирование и мониторинг

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

Примеры задач CTF с использованием API

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

Решение:

Переходим на страницу задания:

http://challenge01.root-me.org:59088/

И мы сразу видим интерфейс Swagger.

Swagger позволяет:

• интерактивно просматривать спецификацию и отправлять запросы;

• генерировать документацию на основе существующего кода на основе Java Annotation;

• создавать клиентов для неё.

В визуальном веб-GUI Swagger можно:

• просмотреть типы поддерживаемых HTTP-методов и описание схемы используемых данных;

• протестировать их.

Имеем четыре функции API:

• /api/signup — регистрация пользователя

• /api/login — вход в приложение

• /api/user — получение информации о пользователе

• /api/note — редактирование заметки

Регистрируем нового пользователя, здесь же в GUI.

Пользователь зарегистрирован.

Мы видим путь, куда отправляется POST запрос и результат выполнения.
Попробуем отредактировать свою заметку. Судя по описанию, нам нужно просто отправить значение note.

Прочитаем данные о своём пользователе.

/api/user имеет параметр user_id

{

"note": "Привет из internet-lab.ru!",

"userid": 5,

"username": "internet"

}

Получаем нашу заметку, имя и идентификатор пользователя.

Этот параметр имеет приписку (path). Т.е. он используется в пути.

http://challenge01.root-me.org:59088/api/user/5

И получаем тот же JSON. А в URL-то у нас идентификатор пользователя, подставим единицу:

http://challenge01.root-me.org:59088/api/user/1

Заключение

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

Рекомендации по дальнейшему изучению

• Изучите OWASP Top Ten — список наиболее распространенных уязвимостей веб-приложений.

• Практикуйтесь на платформах CTF, таких как Hack The Box или TryHackMe.

• Ознакомьтесь с инструментами для тестирования безопасности API, такими как Postman или Burp Suite.

Используемые источники:

http://challenge01.root-me.org:59088/

https://dzen.ru/a/Zi7BVxkUjnghD1oE

https://internet-lab.ru/ctf_api_broken_access

https://lins05.gitbooks.io/seafile-docs/content/develop/web_api.html