AWS API Gateway - це комплексна служба, що пропонується Amazon Web Services (AWS), призначена для розробників, щоб створювати, публікувати та контролювати API в масштабах. Вона функціонує як точка входу до програми, дозволяючи розробникам встановлювати набір правил і процедур. Ця структура регулює доступ зовнішніх користувачів до певних даних або функцій у програмі.
API Gateway дозволяє вам визначити, як запити до ваших API повинні оброблятися, і може створювати користувацькі кінцеві точки API з конкретними методами (наприклад, GET, POST, PUT, DELETE) та ресурсами. Вона також може генерувати клієнтські SDK (набори засобів розробки програмного забезпечення), щоб полегшити розробникам виклик ваших API з їхніх програм.
Типи API Gateway
HTTP API: Створюйте API REST з низькою затримкою та економічними витратами з вбудованими функціями, такими як OIDC та OAuth2, а також нативною підтримкою CORS. Працює з наступними: Lambda, HTTP бекенди.
WebSocket API: Створюйте WebSocket API, використовуючи постійні з'єднання для реальних випадків використання, таких як чат-додатки або інформаційні панелі. Працює з наступними: Lambda, HTTP, AWS Services.
REST API: Розробляйте REST API, де ви отримуєте повний контроль над запитом і відповіддю разом з можливостями управління API. Працює з наступними: Lambda, HTTP, AWS Services.
Приватний REST API: Створіть REST API, який доступний лише зсередини VPC.
Основні компоненти API Gateway
Ресурси: У API Gateway ресурси - це компоненти, які складають структуру вашого API. Вони представляють різні шляхи або кінцеві точки вашого API і відповідають різним діям, які підтримує ваш API. Ресурс - це кожен метод (наприклад, GET, POST, PUT, DELETE) всередині кожного шляху (/, або /users, або /user/{id}).
Стадії: Стадії в API Gateway представляють різні версії або середовища вашого API, такі як розробка, тестування або продуктивність. Ви можете використовувати стадії для управління та розгортання декількох версій вашого API одночасно, що дозволяє вам тестувати нові функції або виправлення помилок без впливу на продуктивне середовище. Стадії також підтримують змінні стадії, які є парами ключ-значення, що можуть використовуватися для налаштування поведінки вашого API залежно від поточної стадії. Наприклад, ви можете використовувати змінні стадії, щоб направляти запити API до різних функцій Lambda або інших бекенд-сервісів залежно від стадії.
Стадія вказується на початку URL-адреси кінцевої точки API Gateway.
Авторизатори: Авторизатори в API Gateway відповідають за контроль доступу до вашого API, перевіряючи особу виклику перед тим, як дозволити запит продовжити. Ви можете використовувати функції AWS Lambda як користувацькі авторизатори, що дозволяє вам реалізувати власну логіку аутентифікації та авторизації. Коли надходить запит, API Gateway передає токен авторизації запиту авторизатору Lambda, який обробляє токен і повертає політику IAM, що визначає, які дії дозволено виконувати виклику. API Gateway також підтримує вбудовані авторизатори, такі як AWS Identity and Access Management (IAM) та Amazon Cognito.
Політика ресурсу: Політика ресурсу в API Gateway - це документ JSON, який визначає дозволи для доступу до вашого API. Вона схожа на політику IAM, але спеціально адаптована для API Gateway. Ви можете використовувати політику ресурсу, щоб контролювати, хто може отримати доступ до вашого API, які методи вони можуть викликати та з яких IP-адрес або VPC вони можуть підключатися. Політики ресурсів можуть використовуватися в поєднанні з авторизаторами для надання детального контролю доступу до вашого API.
Щоб зміни набрали чинності, API потрібно знову розгорнути після зміни політики ресурсу.
Логування
За замовчуванням CloudWatch Logsвимкнено, журнал доступувимкнено, а трасування X-Ray також вимкнено.
Перерахування
Зверніть увагу, що в обох AWS API для перерахування ресурсів (apigateway та apigatewayv2) єдине дозволення, яке вам потрібно, і єдине дозволення на читання, яке можна надати, - це apigateway:GET, з цим ви можете перерахувати все.
# Generic infoawsapigatewayget-accountawsapigatewayget-domain-namesawsapigatewayget-usage-plansawsapigatewayget-vpc-linksawsapigatewayget-client-certificates# Enumerate APIsawsapigatewayget-rest-apis# This will also show the resource policy (if any)## Get stagesawsapigatewayget-stages--rest-api-id<id>## Get resourcesawsapigatewayget-resources--rest-api-id<id>## Get API resource action per HTTP verb (check authorizers and api key required)awsapigatewayget-method--http-methodGET--rest-api-id<api-id>--resource-id<resource-id>## Call APIhttps://<api-id>.execute-api.<region>.amazonaws.com/<stage>/<resource>## API authorizersawsapigatewayget-authorizers--rest-api-id<id>## Modelsawsapigatewayget-models--rest-api-id<id>## More infoawsapigatewayget-gateway-responses--rest-api-id<id>awsapigatewayget-request-validators--rest-api-id<id>awsapigatewayget-deployments--rest-api-id<id># Get api keys generatedawsapigatewayget-api-keys--include-valueawsapigatewayget-api-key--api-key<id>--include-value# Get just 1## Example use API keycurl-XGET-H"x-api-key: AJE&Ygenu4[..]"https://e83uuftdi8.execute-api.us-east-1.amazonaws.com/dev/test## Usage plansawsapigatewayget-usage-plans#Get limit use infoawsapigatewayget-usage-plan-keys--usage-plan-id<plan_id>#Get clear text values of api keysawsapigatewayget-usage-plan-key--usage-plan-id<plan_id>--key-id<key_id>###Already consumedawsapigatewayget-usage--usage-plan-id<plan_id>--start-date2023-07-01--end-date2023-07-12
# Generic infoawsapigatewayv2get-domain-namesawsapigatewayv2get-domain-name--domain-name<name>awsapigatewayv2get-vpc-links# Enumerate APIsawsapigatewayv2get-apis# This will also show the resource policy (if any)awsapigatewayv2get-api--api-id<id>## Get all the info from an api at onceawsapigatewayv2export-api--api-id<id>--output-typeYAML--specificationOAS30/tmp/api.yaml## Get stagesawsapigatewayv2get-stages--api-id<id>## Get routesawsapigatewayv2get-routes--api-id<id>awsapigatewayv2get-route--api-id<id>--route-id<route-id>## Get deploymentsawsapigatewayv2get-deployments--api-id<id>awsapigatewayv2get-deployment--api-id<id>--deployment-id<dep-id>## Get integrationsawsapigatewayv2get-integrations--api-id<id>## Get authorizersawsapigatewayv2get-authorizers--api-id<id>awsapigatewayv2get-authorizer--api-id<id>--authorizer-id<uth-id>## Get domain mappingsawsapigatewayv2get-api-mappings--api-id<id>--domain-name<dom-name>awsapigatewayv2get-api-mapping--api-id<id>--api-mapping-id<map-id>--domain-name<dom-name>## Get modelsawsapigatewayv2get-models--api-id<id>## Call APIhttps://<api-id>.execute-api.<region>.amazonaws.com/<stage>/<resource>
Різні авторизації для доступу до кінцевих точок API Gateway
Політика ресурсів
Можливо використовувати політики ресурсів, щоб визначити, хто може викликати кінцеві точки API.
У наступному прикладі ви можете побачити, що вказана IP-адреса не може викликати кінцеву точку /resource_policy через GET.
IAM авторизатор
Можливо встановити, що методи всередині шляху (ресурсу) вимагають IAM аутентифікації для виклику.
Коли це встановлено, ви отримаєте помилку {"message":"Missing Authentication Token"}, коли спробуєте досягти кінцевої точки без будь-якої авторизації.
Один простий спосіб згенерувати очікуваний токен додатком - це використати curl.
Зверніть увагу, що в інших випадках Authorizer міг бути погано закодований, і просто відправка будь-чого всередині Authorization header дозволить побачити прихований контент.
Можливо використовувати лямбду, яка на основі даного токена поверне IAM політику, що вказує, чи користувач уповноважений викликати API кінцеву точку.
Ви можете налаштувати кожен метод ресурсу, який буде використовувати авторизатор.
</details>
Назвіть це чимось на кшталт:
<pre class="language-bash" data-overflow="wrap"><code class="lang-bash"><strong>curl "https://jhhqafgh6f.execute-api.eu-west-1.amazonaws.com/prod/custom_auth" -H 'Authorization: your-secret-token'
</strong></code></pre>
<div data-gb-custom-block data-tag="hint" data-style='warning'>
Залежно від коду Lambda, ця авторизація може бути вразливою
</div>
Зверніть увагу, що якщо **генерується та повертається політика відмови**, помилка, повернена API Gateway, виглядає так: `{"Message":"User is not authorized to access this resource with an explicit deny"}`
Таким чином, ви могли б **виявити цю авторизацію**.
### Необхідний API ключ
Можна налаштувати API кінцеві точки, які **вимагають дійсний API ключ** для зв'язку з ними.
<figure><img src="../../../.gitbook/assets/image (88).png" alt=""><figcaption></figcaption></figure>
Можна генерувати API ключі в порталі API Gateway і навіть налаштувати, скільки разів їх можна використовувати (в термінах запитів на секунду та запитів на місяць).
Щоб API ключ працював, його потрібно додати до **Плану використання**, цей план використання повинен бути доданий до **API Стадії**, а асоційована API стадія повинна мати налаштоване **обмеження методів** для **кінцевої точки**, що вимагає API ключа:
<figure><img src="../../../.gitbook/assets/image (198).png" alt=""><figcaption></figcaption></figure>
## Неавтентифікований доступ
<div data-gb-custom-block data-tag="content-ref" data-url='../aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md'>
[aws-api-gateway-unauthenticated-enum.md](../aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md)
</div>
## Privesc
<div data-gb-custom-block data-tag="content-ref" data-url='../aws-privilege-escalation/aws-apigateway-privesc.md'>
[aws-apigateway-privesc.md](../aws-privilege-escalation/aws-apigateway-privesc.md)
</div>
## Постексплуатація
<div data-gb-custom-block data-tag="content-ref" data-url='../aws-post-exploitation/aws-api-gateway-post-exploitation.md'>
[aws-api-gateway-post-exploitation.md](../aws-post-exploitation/aws-api-gateway-post-exploitation.md)
</div>
## Постійність
<div data-gb-custom-block data-tag="content-ref" data-url='../aws-persistence/aws-api-gateway-persistence.md'>
[aws-api-gateway-persistence.md](../aws-persistence/aws-api-gateway-persistence.md)
</div>
<div data-gb-custom-block data-tag="hint" data-style='success'>
Вивчайте та практикуйте AWS Hacking:<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">\
Вивчайте та практикуйте GCP Hacking: <img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Підтримайте HackTricks</summary>
* Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)!
* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв.
</details>
</div>