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) and 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 and SoapUI — visualize the API logic and interact with it.

 

Бачиш Swagger API Testing також.

 

Kiterunner — API scanner for endpoints and content discovery.

 

BurpSuite and 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 працює на стадії виробництва, тестування, розробки. Просто поміняйте, наприклад, на V1 V2 в кінцевих точках і подивіться, чи зможете ви розкриття конфіденційної інформації, 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

 

Інші Послуги

Готові до безпеки?

зв'язатися з нами