17 Янв, 2023

Методология тестирования на проникновение API

Penetration Testing as a service (PTaaS)

Tests security measures and simulates attacks to identify weaknesses.

Введение в API

 

API (интерфейс прикладного программирования) - это интерфейс предназначен для того, чтобы помочь программам, устройствам, облакам и их базам данных взаимодействовать и интегрироваться. Он соединяет сотни приложений и заставляет их все работать как единое целое. В случае пользовательский интерфейс where a person interacts with an app via buttons that are associated with the app’s functions, интерфейс прикладного программирования это все о строках кода из одного приложения, взаимодействующих со строками кода из другого приложения для обмена данными с использованием различных языков программирования. В настоящее время, в эпоху Интернета вещей и экспоненциальное увеличение объема данных, почти 90% разработчиков используют API in many fields around the world.  These are the most popular APIs’ протоколы: RPC (обновлен до gRPC), SOAP, REST (или RESTful), GraphQL.

 

Каждый протокол имеет различные технические характеристики which describe it from different sides of usage and needs. For SOAP protocol it’s SOAP specification (how to define SOAP protocol), WSDL (how to describe SOAP-service), WS-Security (how to secure SOAP-based services) etc. In REST case that in 99% uses HTTP protocol for communication,  specification also will be HTTP-based. Another specification for REST is Развязность которые описывают, продуцируют и визуализируют веб-сервисы RESTful и OpenAPI это основано на спецификации Swagger 2.0.

 

Спецификация содержит документацию (как ее использовать) и еще более глубокое объяснение (как это работает). Documentation is about how to structure requests to another system so that this system understands it’s queries and responds to them.

 

Одним из наиболее распространенных типов API является Веб - API or web service or RESTful service that sends messages over HTTP protocol with CRUD operations — GET / POST / PUT / DELETE that makes it possible to communicate between web services even if they are built using other languages or platforms. SOAP can use HTTP protocol too, but, in this case, you can get Response only in XML format. This makes it heavier and less flexible compared to REST, which gives you various formats — XML, JSON, Atom, RSS, CSV, HTML, and others.

 

Зачем нам вообще нужен GraphQL? REST может перегружать данные. Представьте, что клиент должен отправлять запросы на разные конечные точки (ресурсы) и каким-то образом собирать, фильтровать и компоновать все данные. Запрос обрабатывается, и клиент получает свои данные, но, кроме того, он получает много несвязанных данных из источника только потому, что REST разработан таким образом. Чтобы разобраться с этой проблемой, GraphQL был создан. Он предназначен для работы с одной конечной точкой and give users the ability to get the exact data they need — no more, no less (see our Методология GraphQL для получения дополнительной информации).

 

 

Основные характеристики

 

Вызовы API функций — it’s language statements that allow to make requests on the server, composed with verbs and nouns.

 

Конечные точки — endpoints of interactions — different options that you can use in API. These are actual address of the resource.

 

Ключ API — allows you to interact with API and prevent the server from overloading and abuse.

 

Шлюз API — when a user sends an HTTP request, API Gateway checks Parameter Validation, Rate limiter, Allow / Deny list, conducts an

Проверка подлинности / Авторизации (поставщик удостоверений) и т.д.

Проверка подлинности API реализовано с помощью веб-токена JSON (JWT) и OAuth.

 

REST API:

  • gives limited access for another system — borders other apps can’t cross.
  • использует HTTP-кэширование.
  • has uniform interface — один соглашение об именовании, формат данных и формат конечной точки.
  • has session independence and doesn’t store info connected to the previous session.
  • is system-independent, which means that system transformations won’t affect API functions.

 

Веб - API коммуникация основана на клиент-серверной архитектуре в виде Всемирной паутины!

 

Нагрузки API-интерфейсы с OpenAPI спецификация приводит к проверке каждого ответа и запроса и структуры данных в них, клиентских библиотек, серверного кода, проверки схемы JSON и т.д. (в файле YAML или JSON, который включал все из них, например, схему API) соответствуют стандартам и определениям OpenAPI. Чтобы сделать схему понятной для человека, используйте Swagger UI.

 

Обратите внимание! A company chooses API that fits its business logic and needs best, not because it’s the most popular one.

 

 

Инструменты для использования

 

Postman — send Requests and receive Responses in the nice and easy to understand format.

 

Swagger UI и SoapUI — visualize the API logic and interact with it.

 

See Swagger API Testing также.

 

Kiterunner — API scanner for endpoints and content discovery.

 

BurpSuite и ZAP — Intercept the requests and responses from API.

 

unfurl — extracting paths from URL lists.

 

FFUF — tool for API fuzzing.

 

ILSpy — decompile API projects’ files (for white-box).

 

MindAPI — Reconnaissance and testing tips.

 

Checklist — follow this checklist during pentest.

 

API key guesser — guess the API key.

 

OpenAPI.Инструменты — lots of useful tools for OpenAPI.

 

 

Фаза рекогносцировки

 

Enumerate all possible endpoints locally in the docs (in WADL /WSDL format) or in the web and build logic “tree view” in Burp Suite or Swagger UI. Documentation uses WSDL / WADL format and usually saved in the ?wsdl или /приложение.wadl или /application.wadl?подробно=true в пути, как https://api.ex/api/?wsdl. Сравните локальные и общедоступные документы API в поисках скрытых функций, методов или конечных точек. Использование пути json2paths инструмент для перечисления конечных точек. Для определения спецификаций (которые часто более полезны, чем документация) конечные точки swagger используют это. Вы также можете перебирать пути с помощью Burp Intruder и использовать списки слов или создайте конкретный вариант после изучения вашей цели.

 

Сканирование портов, перечисление служб, запущенных на сервере, перечисление IP-адресов.

 

Используйте SOAPUI или расширение WSDLer Burp Suite для SOAP.

 

Используйте Postman для REST для разбора документов.

 

Исследовать HTTP-методы (ПОЛУЧИТЬ, ОПУБЛИКОВАТЬ, ИСПРАВИТЬ. ПОМЕСТИТЬ, УДАЛИТЬ).

 

Найдите версию API в URL-адресе и возможное использование более старых версий в путях входа / регистрации / пользователя и конечных точках. Использование V1 или V2 или V3 и т.д. в URL-адресах. Более старые версии обычно более уязвимы.

 

Note that API for developers is not the API for users, so test them separately. Discover the API style and documentation, define if there’s only one API architecture (SOAP + REST or just REST / SOAP). For this purpose change the content-type to “application/xml”, add a simple XML in the request body, and see how the API response to it.

 

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

 

Узнайте, что поддомены и родственные домены, чтобы найти предыдущие версии и этапы API. Сканирование файлов java-скриптов для получения URL-адресов и понимания инфраструктуры API. Используйте онлайн-веб-архивы.

 

Откройте для себя реализацию API (открытый исходный код на GitHub, продукты, пользовательская реализация API).

 

Аутентификация и авторизация. Find all possible endpoints which requires authentication and other publicly accessible. There’s always more than one way to authenticate to an API. Modify the URL paths with key words and test all the URLs.

 

Find auth methods (cookie based or header based). Identify handlers (JWT (JSON Web Token), Encrypted value, value to save the user’s state, encoded / encrypted serialized value, hashed user value – hashed username, user ID)

 

Использование Kiterunner для сканирования конечных точек и unfurl для извлечения путей из списков URL-адресов. Это поможет в создании пользовательские списки слов фаза.

 

 

Нарушенная авторизация на уровне объекта

 

Simply manipulate with ID in the URL endpoint by replacing it with another and get access to the sensitive data that you shouldn’t see and enumerate. Authorize to your account and then replace your ID value in the URL or Headers (e.g., X-User-Id) providing the same authorization data. Then try to get unauthorized access to the other user’s accounts or documents and even manipulate with them, which is leads to раскрытие данных, потеря данных, поглощение учетной записи. Пример из реального мира: злоумышленник T-Mobile в 2017 году обнаруженный этот номер телефона был использован в качестве идентификатора пользователя в URL-адресе.

 

Инструменты: Astra / апидор / Автоматрица / Авторизация / Анализатор подлинности / Susanoo

 

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

 

 

 

Нарушена аутентификация пользователя

 

If API doesn’t have rate limiting for requests, captcha, account lockout, weak login/password policy and cryptographic mechanism there’s risk of registered usernames enumeration. Try to use trivial and custom usernames and passwords in the login page, brute force passwords or 2FA codes. See if passwords, usernames and session tokens use in the URL paths. Check the session token validation / signing and try to bypass it. This leads to поглощение учетной записи и выполнять конфиденциальные действия с других счетов, например, переводить деньги.

 

Чтобы обойти аутентификацию, вы можете изменить параметры JSON, если механизм аутентификации работает только с простыми строками. Вместо того , чтобы {“id”:111} использование {“id”:[111]} и т.д.

 

 

Нехватка ресурсов и ограничение скорости

 

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

 

 

 

Нарушенная авторизация на уровне функций

 

Discover the hidden endpoints you as a user shouldn’t have access to with changing HTTP method from GET to POST / PUT etc., changing users’ parameters in the URL to escalate vertical or horizontal access privileges. The main task is to find administrative functions, get access to them and manipulate with their sensitive data. Try to change the user roles, register / delete / enumerate users. So, broken level authorization and user hierarchy leads to манипулирование административными / конфиденциальными данными.

 

 

 

Массовое присвоение

 

Look up for properties you shouldn’t see as a user in the response body by changing POST to GET in the request. After that you may see additional info about the user account. For example, {“user_is_admin” : false} или {“email_verifed”: false}. Если это так, используйте это свойство с заголовком POST / PUT в новом запросе и перепишите значение. Раскрытие внутренних объектов и неправильно настроенный белый список внутренних свойств и переменных кода приводит к перезапись конфиденциальных данных, эскалация привилегий, обход механизмов безопасности и т.д.

 

 

 

Ненадлежащее управление активами

 

On the Recon phase find out if there’s Старый, не исправленные версии API и документация, запущенная на некоторых хостах, подключенных к тем же базам данных. Чтобы выяснить это, посмотрите, были ли обновлены документы, устарел инвентарь хостов, старые версии запущены на сервере без исправлений, API работает на стадии производства, тестирования, разработки. Просто измените, например, V2 на V1 в конечных точках и посмотрите, сможете ли вы раскрытие конфиденциальной информации, gain access to developers’ data or technology that previously wasn’t implemented with security features и т.д.

 

 

Чрезмерное раскрытие данных

 

Intercept the HTTP traffic via Burp Suite or ZAP and look up for sensitive data in Response body and error messages. Data exposure in Response is designed to be there and it’s up to developers to implement addition filtering in order to secure data. Misconfigured data filtering leads to раскрытие конфиденциальных данных. Попробуйте перечислить все конечные точки API и отслеживать трафик от них.

 

 

Injection by design & Export Injection

 

Replace the parameters in the requests with SQL  / NoSQL / XML / OS command / ORM / ODM payloads after exploring the source code or scan and fuzz the endpoints. Use Полезная нагрузка все эти вещи. If client data is not sanitized, filtered or validated properly there’s high risk of Injection attack and DoS, потеря или перезапись данных и т.д.

While exporting PDF file from the source there’s a chance to usage of external libraries for converting HTML. Simply inject HTML tags (iframes tags) into content headers in the HTTP request: <h1>Hello<h1><iframe. Это может привести к экспорту инъекций. Для получения более подробной информации проверьте это.

 

 

Неправильная настройка безопасности

 

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

 

 

 

 

Расширения для Burp Suite Тестирование API

 

 

OpenAPI Parser

 

это расширение, направленное на оптимизацию процесса выполнения оценок веб-сервисов с использованием API-интерфейсов на основе OpenAPI. https://portswigger.net/bappstore/6bf7574b632847faaaa4eb5e42f1757c

 

 

burp-rest-api

 

инструмент по умолчанию для автоматизации веб-сканирования на базе BurpSuite.

https://github.com/vmware/burp-rest-api

 

 

BurpKit

 

Это плагин BurpSuite, который помогает в оценке сложных веб-приложений, которые динамически отображают содержимое своих страниц.

https://github.com/allfro/BurpKit

 

 

swurg

 

предназначен для тестирования OpenAPI.

https://github.com/AresS31/swurg

 

 

burp-vulners-scanner

 

найдите отпечатки пальцев в HTTP-ответе и проверьте найденную версию в vulners.com база данных уязвимостей.

https://github.com/vulnersCom/burp-vulners-scanner

 

 

Freddy, Deserialization Bug Finder

 

помогает в обнаружении и использовании библиотек/ API сериализации.

https://portswigger.net/bappstore/ae1cce0c6d6c47528b4af35faebc3ab3

 

 

sqlipy

 

это плагин Python для Burp Suite, который интегрирует SQLMap с использованием SQLMap API.

https://github.com/codewatchorg/sqlipy

 

 

Peach API Security

 

это автоматизированное решение для тестирования безопасности, которое позволяет организациям тестировать свои веб-API на соответствие OWASP Top-10 и PCI Section 6.5. https://github.com/PeachTech/peachapisec-burp

 

 

 

Настройка среды тестирования в KALI LINUX

 

 

VAmPI https://github.com/erev0s/VAmPI

 

This is the testing environment (website which is hosted locally) for practicing pentester’s skills and testing API security/scans/pentest tools. Have fun! Make sure that all requirements for app are satisfied.

 

  1. Клонирование репозитория:

git - клон https://github.com/erev0s/VAmPI

 

  1. Откройте папку с приложением cd Вампи и беги:

sudo сборка docker -t vampi_docker: последняя версия .

запуск docker -d -p 5000:5000 vampi_docker: последняя версия

 

  1. Откройте браузер и перейдите к http://localhost:5000 или http://localhost:5000/books/v1 чтобы просмотреть информацию о книгах.

 

 

уязвимый-api https://github.com/rahulunair/vulnerable-api

 

Этот репозиторий содержит пример Python API, который уязвим для нескольких различных атак web API.

 

  1. Клонирование репозитория:

git - клон https://github.com/rahulunair/vulnerable-api

 

  1. Откройте папку с приложением cd уязвимый-api и запуск:

sudo docker run -tid -p 8081:8081 --имя api mkam/уязвимый-api-demo

 

  1. Откройте браузер и перейдите к http://localhost:8081

 

 

 

Утомительный-API https://github.com/payatu/Tiredful-API

 

Tiredful API - это намеренно разработанное сломанное приложение. Цель этого веб-приложения - научить разработчиков, QA или специалистов по безопасности недостаткам, присутствующим в веб-сервисах (REST API) из-за небезопасной практики кодирования.

 

  1. Клонирование репозитория:

git - клон https://github.com/payatu/Tiredful-API

 

  1. Откройте папку с приложением cd Утомительный-API и запуск:

sudo сборка docker - не утомляет .

sudo запуск docker -p 8000:8000 --имя tiredf -это tiredf

 

  1. Откройте браузер и перейдите к http://localhost:8000

 

 

crAPI – Completely ridiculous API https://github.com/OWASP/crAPI

 

Completely ridiculous API (crAPI) will help you to understand the ten most critical API security risks. crAPI is vulnerable by design, but you’ll be able to safely run it to educate/train yourself.

 

  1. Клонирование репозитория:

git - клон https://github.com/OWASP/crAPI

 

  1. Откройте папку с приложением cd Утомительный-API и запуск:

curl -o docker-compose.yml https://raw.githubusercontent.com/OWASP/crAPI/main/deploy/docker/docker- compose.yml

sudo docker-компоновка pull

sudo docker-compose -f docker-compose.yml --повышение совместимости -d

 

  1. Откройте браузер и перейдите к http://localhost:8888

 

 

vAPI – Vulnerable Adversely Programmed Interface https://github.com/roottusk/vapi

 

vAPI - это уязвимый, неблагоприятно запрограммированный интерфейс, который представляет собой автономный API, который имитирует сценарии OWASP API Top 10 в средствах упражнений.

 

  1. Клонирование репозитория:

git - клон https://github.com/roottusk/vapi

 

  1. Откройте папку с приложением cd Утомительный-API и запуск:

sudo docker-создать -d

 

  1. Откройте браузер и перейдите к http://localhost/vapi/

 

 

Инструменты безопасности API

 

 

FFUF https://github.com/ffuf/ffuf

 

Конечная точка API, пути, перечисление поддоменов.

 

You’ll need the wordlist :  https://github.com/danielmiessler/SecLists. Веб-сайт для тестирования http://ffuf.me/

 

  1. Установка:

git - клон https://github.com/ffuf/ffuf & и компакт-диск ffuf && иди и возьми && иди строй

 

  1. Using common.txt wordlist with GET header for 200 OK response with results output as a file in json format. -recursion  tells ffuf that if it enounters a directory it should start another scan within that directory and so on until no more results are found.

ffuf -w wordlist/Discovery/Web-Content/common.txt -recursion -X GET -mc 200 -o results.json -u http://ffuf.me/cd/basic/FUZZ

 

Теперь вы можете увидеть результаты в результатах.файл json.

 

 

Развязность-EZ https://github.com/RhinoSecurityLabs/Swagger-EZ

 

Инструмент, предназначенный для пентестирования API с использованием определений OpenAPI для создания карты сайта и перечисления конечных точек API для API Swagger (OpenAPI).

 

  1. Установка:

git - клон https://github.com/RhinoSecurityLabs/Swagger-EZ

 

  1. Откройте набор для отрыжки. Открыть файл index.html в браузере Burp Suite можно перехватывать запросы API и строить карту сайта. Нажмите Загрузить -> Автозаполнение -> Отправить все.

 

После отправки All now вы можете увидеть на карте сайта Burp дерево, например target API petstore.

 

 

Astra https://github.com/flipkart-incubator/Astra

 

Сканер API для распространенных уязвимостей, таких как SQL-инъекции, CSS, утечка информации, нарушение аутентификации и управления сеансами, CSRF, CORS, JWT-атака и т. Д.

 

  1. Клонируйте репозиторий и запустите:

git - клон https://github.com/flipkart-incubator/Astra.git

cd Astra

sudo докер сборка -t astra .

sudo докер выполнить --rm -it --link астра-монго: монго -п 8094:8094 астра

 

Откройте http://localhost:8094 зайдите в браузер и запустите сканирование.

 

 

Kiterunner https://github.com/assetnote/kiterunner

 

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

 

Клонирование репозитория:

git - клон https://github.com/assetnote/kiterunner

 

Загружайте файлы из репозитория. Извлеките их в папке Kiterunner:

 

 

Откройте терминал в папке Kiterunner и запустите:

 

сделать сборку

sudo ln -s $(pwd)/dist/kr /usr/локальный/bin/kr

кр кб скомпилировать маршруты-большой.json маршруты-большой.воздушный змей

 

Теперь мы можем использовать список слов из Kiterunner список словарей. Чтобы увидеть Список беги:

кр список словарей

 

В нашем примере мы используем плот-маленькие-файлы-в нижнем регистре список слов. Запустите сканирование:

кр - сканирование http://localhost:8000плот-маленькие-файлы-в нижнем регистре

 

 

Другие инструменты безопасности API

 

ZAP (fuzzer) https://www.zaproxy.org/

 

Dredd https://dredd.org/en/latest/

 

CATS https://github.com/Endava/cats

 

Zerocode https://github.com/authorjapps/zerocode

 

Susanoo https://github.com/ant4g0nist/Susanoo

 

WapiFuzz https://github.com/ysoftdevs/wapifuzz

 

OpenAPI Vulnerability Scanner https://github.com/s3rgeym/openapi-vulnerability-scanner

 

Apidor https://github.com/bm402/apidor

 

 

Заключение

 

APIs systems are susceptible to a broad range of vulnerabilities. Understanding potential dangers is crucial in order to take the steps necessary to efficient pentest an application.

Cybersecurity doesn’t have to be complicated. With Компанией CQR, you get a team of professionals to perform a полная проверка безопасности вашего приложения, whether it runs on REST, GraphQL, or any other API. Schedule a free demo today or learn more about our workflow.

 

While we covered some of the most common vulnerabilities, there are many other dangers out there. With time some vulnerabilities are addressed by developers while new vulnerabilities are being found and exploited, attacks get more sophisticated, and hackers more creative.

 

 

Дополнительная информация для изучения

 

Шпаргалка по безопасности ОТДЫХА

https://cheatsheetseries.owasp.org/cheatsheets/REST_Security_Cheat_Sheet.html

 

Потрясающе-Приложение-Безопасность-Контрольный список

https://github.com/MahdiMashrur/Awesome-Application-Security-Checklist

 

Рекомендации Microsoft REST API

https://github.com/microsoft/api-guidelines

 

Контрольный список безопасности API HolyTips

https://github.com/HolyBugx/HolyTips/blob/main/Checklist/API%20Security.pdf

 

Империя безопасности API

https://github.com/Cyber-Guy1/API-SecurityEmpire

 

API-Безопасность-Контрольный список

https://github.com/shieldfy/API-Security-Checklist

 

Общедоступные API-интерфейсы

https://github.com/public-apis/public-apis

 

Awesome-api-security

https://github.com/arainho/awesome-api-security

 

Уязвимый общедоступный веб-сервис с API

https://hack-yourself-first.com/

 

SOAP vs REST. What’s the Difference?

https://smartbear.com/blog/soap-vs-rest-whats-the-difference/

 

BOLA, IDOR, MA, BFLA. Добро пожаловать в Топ-10 API OWASP!

https://www.youtube.com/watch?v=BdzxmuQhn_M

 

Другие Услуги

Готовы к безопасности?

Связаться с нами