Содержание статьи
info
О том, как можно эксплуатировать другие уязвимости AWS, читай в статье «Проверка ведер. Как искать уязвимости в бакетах AWS S3».
Теория
AWS Lambda
Как работает AWS Lambda? Если простыми словами: ты добавляешь свой скрипт и задаешь триггер или событие, при наступлении которого будет запускаться этот код. Больше делать ничего не нужно, потому что обо всем другом — администрировании, мониторинге работы, безопасности, журналах, логах — позаботится сервис AWS Lambda. Когда событий нет, лямбда не выполняется, соответственно, ресурсы не потребляются.
Лямбда-функция
Лямбда‑функция — это часть кода, которая выполняется каждый раз, когда срабатывает триггер.
Существует три типа триггеров, отличаются они способом вызова:
- потоковый — срабатывает при изменениях в чем‑либо, например при добавлении данных в БД;
- синхронный — срабатывает при получении запроса на какой‑то конечной точке, которая вызывает лямбда‑функцию;
- асинхронный — происходит в случае какого‑либо события, например при загрузке файла на S3.
При этом вызов возможно выполнить и с помощью API Gateway.
API Gateway
Служба API Gateway упрощает разработчикам работу с API. Поддерживается REST, HTTP и WebSocket API.
Мы можем привязать API Gateway к какому‑то сервису, мобильному приложению, даже к IOT, — главное, чтобы у них был доступ в интернет. После этого оно будет стучать на API-шлюз, с которого и станут вызываться требуемые действия.
Первоначальный доступ
Чаще всего через лямбду в облако не попадают. Но в случае обнаружения функции, гейтвея, создания полной ссылки и требуемого набора параметров можно все‑таки попробовать. Например, если лямбда‑функция принимает какую‑либо команду для запуска в cmd:
https://i8jee1mn2f.execute-api.us-east-2.amazonaws.com/prod/system?cmd=env
Разведка
Lambda Function
На первом этапе нужно хорошенько разведать обстановку и поискать уязвимые места. На помощь нам придет AWS CLI. Чтобы увидеть все лямбда‑функции, воспользуемся следующей командой:
aws lambda list-functions
Получить лямбда‑функции в отдельном регионе:
aws lambda list-functions --region us-east-1
-
FunctionArn
— уникальный идентификатор функции; -
Runtime
— язык, на котором написана функция; -
Role
— роль, которую имеет лямбда‑функция. Возможно, определенная лямбда‑функция имеет доступ к другим службам. Соответственно, мы также можем определить политики, привязанные к лямбда‑функции; -
Layers
— зависимости лямбда‑функции.
Получить информацию о конкретной лямбда‑функции (в том числе исходный код) можно следующим образом:
aws lambda get-function --function-name <function-name> [--region eu-west-1 --profile demo]
Пример:
aws lambda get-function --function-name PentestingForFun
В приведенном выше примере мы видим раздел Code
, а в нем — Location
. То есть код извлекается по этому пути, в данном случае это S3-бакет awslambda-us-west2-tasks
. Перейдя по указанной ссылке (либо порывшись в указанном бакете), мы сможем скачать код лямбда‑функции.
При этом в выводе данной команды есть огромная структура Configuration
, которую тоже стоит обязательно посмотреть. Во время пентестов мы часто обнаруживали здесь учетные данные.
Исходный код зависимости можно получить вот так:
aws lambda get-layer-version --layer-name <LayerName> --version-number <VersionNumber>
Пример:
aws lambda get-layer-version --layer-name request-library --version-number 1
Теперь обрати внимание на способы вызова функции.
aws lambda get-policy --function-name <function-name>
Пример:
aws lambda get-policy --function-name PentestingForFun
-
Service
— кому разрешено дергать функцию; -
Action
— что может сделатьService
; -
Resource
— какие объекты могут быть вызваны.
В лямбда‑функциях иногда встречается раздел Condition
. Он отвечает за «фильтрацию» — каким методом и каким образом вызывается лямбда. Именно в нем всегда будет прятаться айдишник, по которому ты сможешь определить, к какому гейтвею привязана лямбда‑функция.
В данном случае uj3lq1cu8e
— REST API ID. При этом триггер может сработать и от изменений в чем‑либо. Для получения информации о подобных событиях существует вот такой командлет:
aws lambda list-event-source-mappings --function-name <function-name>
Пример:
aws lambda list-event-source-mappings --function-name PentestingForFun
В этом случае используется Amazon Simple Queue Service (SQS) — служба очереди сообщений.
API Gateway
После изучения доступных лямбда‑функций пора восстанавливать URL, который приведет к ее вызову. Чтобы увидеть все REST APIs (получить айдишник, так как Region зачастую схож с большинством регионов, в котором стоят ЕС2-инстансы), воспользуемся следующей командой:
aws apigateway get-rest-apis
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»