Категория > Новости > Блямбда. Эксплуатируем AWS Lambda - «Новости»

Блямбда. Эксплуатируем AWS Lambda - «Новости»


26-11-2022, 00:00. Автор: Нестор

Про­вер­ка ведер. Как искать уяз­вимос­ти в бакетах AWS S3».


 

Теория


 

AWS Lambda


Как работа­ет AWS Lambda? Если прос­тыми сло­вами: ты добав­ляешь свой скрипт и зада­ешь триг­гер или событие, при нас­тупле­нии которо­го будет запус­кать­ся этот код. Боль­ше делать ничего не нуж­но, потому что обо всем дру­гом — адми­нис­три­рова­нии, монито­рин­ге работы, безопас­ности, жур­налах, логах — позабо­тит­ся сер­вис AWS Lambda. Ког­да событий нет, лям­бда не выпол­няет­ся, соот­ветс­твен­но, ресур­сы не пот­ребля­ются.

Блямбда. Эксплуатируем AWS Lambda - «Новости»

Ус­трой­ство лям­бды 

Лямбда-функция


Лям­бда‑фун­кция — это часть кода, которая выпол­няет­ся каж­дый раз, ког­да сра­баты­вает триг­гер.


Ус­трой­ство лям­бда‑фун­кции

Су­щес­тву­ет три типа триг­геров, отли­чают­ся они спо­собом вызова:



  • по­токо­вый — сра­баты­вает при изме­нени­ях в чем‑либо, нап­ример при добав­лении дан­ных в БД;

  • син­хрон­ный — сра­баты­вает при получе­нии зап­роса на какой‑то конеч­ной точ­ке, которая вызыва­ет лям­бда‑фун­кцию;

  • асин­хрон­ный — про­исхо­дит в слу­чае какого‑либо события, нап­ример при заг­рузке фай­ла на S3.


При этом вызов воз­можно выпол­нить и с помощью API Gateway.


 

API Gateway


Служ­ба API Gateway упро­щает раз­работ­чикам работу с API. Под­держи­вает­ся REST, HTTP и WebSocket API.


Сос­тав API Gateway

Мы можем при­вязать API Gateway к какому‑то сер­вису, мобиль­ному при­ложе­нию, даже к IOT, — глав­ное, что­бы у них был дос­туп в интернет. Пос­ле это­го оно будет сту­чать на API-шлюз, с которо­го и ста­нут вызывать­ся тре­буемые дей­ствия.


Стан­дар­тное исполь­зование API Gateway 

Первоначальный доступ


Ча­ще все­го через лям­бду в обла­ко не попада­ют. Но в слу­чае обна­руже­ния фун­кции, гей­твея, соз­дания пол­ной ссыл­ки и тре­буемо­го набора парамет­ров мож­но все‑таки поп­робовать. Нап­ример, если лям­бда‑фун­кция при­нима­ет какую‑либо коман­ду для запус­ка в cmd:


https://i8jee1mn2f.execute-api.us-east-2.amazonaws.com/prod/system?cmd=env

При­мер экс­плу­ата­ции уяз­вимос­ти 

Разведка


 

Lambda Function


На пер­вом эта­пе нуж­но хорошень­ко раз­ведать обста­нов­ку и поис­кать уяз­вимые мес­та. На помощь нам при­дет AWS CLI. Что­бы уви­деть все лям­бда‑фун­кции, вос­поль­зуем­ся сле­дующей коман­дой:


awslambdalist-functions

По­лучить лям­бда‑фун­кции в отдель­ном реги­оне:


aws lambda list-functions --regionus-east-1

По­иск лям­бда‑фун­кций

Изу­чение зависи­мос­тей



  • FunctionArn — уни­каль­ный иден­тифика­тор фун­кции;


  • Runtime — язык, на котором написа­на фун­кция;


  • Role — роль, которую име­ет лям­бда‑фун­кция. Воз­можно, опре­делен­ная лям­бда‑фун­кция име­ет дос­туп к дру­гим служ­бам. Соот­ветс­твен­но, мы так­же можем опре­делить полити­ки, при­вязан­ные к лям­бда‑фун­кции;


  • Layers — зависи­мос­ти лям­бда‑фун­кции.


По­лучить информа­цию о кон­крет­ной лям­бда‑фун­кции (в том чис­ле исходный код) мож­но сле­дующим обра­зом:


awslambdaget-function--function-name<function-name>[--regioneu-west-1--profiledemo]

При­мер:


awslambdaget-function--function-namePentestingForFun

Смот­рим опре­делен­ную фун­кцию

В при­веден­ном выше при­мере мы видим раз­дел Code, а в нем — Location. То есть код извле­кает­ся по это­му пути, в дан­ном слу­чае это S3-бакет awslambda-us-west2-tasks. Перей­дя по ука­зан­ной ссыл­ке (либо порыв­шись в ука­зан­ном бакете), мы смо­жем ска­чать код лям­бда‑фун­кции.


При этом в выводе дан­ной коман­ды есть огромная струк­тура Configuration, которую тоже сто­ит обя­затель­но пос­мотреть. Во вре­мя пен­тестов мы час­то обна­ружи­вали здесь учет­ные дан­ные.


Учет­ные дан­ные в перемен­ных сре­ды

Ис­ходный код зависи­мос­ти мож­но получить вот так:


awslambdaget-layer-version--layer-name<LayerName>--version-number<VersionNumber>

При­мер:


awslambdaget-layer-version--layer-namerequest-library--version-number1

Те­перь обра­ти вни­мание на спо­собы вызова фун­кции.


awslambdaget-policy--function-name<function-name>

При­мер:


awslambdaget-policy--function-namePentestingForFun

Объ­екты, спо­соб­ные вызывать син­хрон­ный триг­гер



  • Service — то, кому раз­решено дер­гать фун­кцию;


  • Action — что может сде­лать Service;


  • Resource — какие объ­екты могут быть выз­ваны.


В лям­бда‑фун­кци­ях иног­да встре­чает­ся раз­дел Condition. Он отве­чает за «филь­тра­цию» — каким методом и каким обра­зом вызыва­ется лям­бда. Имен­но в нем всег­да будет пря­тать­ся айдиш­ник, по которо­му ты смо­жешь опре­делить, к какому гей­твею при­вяза­на лям­бда‑фун­кция.


При­мер Condition

В дан­ном слу­чае uj3lq1cu8e — REST API ID. При этом триг­гер может сра­ботать и от изме­нений в чем‑либо. Для получе­ния информа­ции о подоб­ных событи­ях сущес­тву­ет вот такой коман­длет:


awslambdalist-event-source-mappings--function-name<function-name>

При­мер:


awslambdalist-event-source-mappings--function-namePentestingForFun

Что при­ведет к асин­хрон­ному/потоко­вому триг­геру

В этом слу­чае исполь­зует­ся Amazon Simple Queue Service (SQS) — служ­ба оче­реди сооб­щений.


 

API Gateway


Пос­ле изу­чения дос­тупных лям­бда‑фун­кций пора вос­ста­нав­ливать URL, который при­ведет к ее вызову. Что­бы уви­деть все REST APIs (получить айдиш­ник, так как Region зачас­тую схож с боль­шинс­твом реги­онов, в котором сто­ят ЕС2-инстан­сы), вос­поль­зуем­ся сле­дующей коман­дой:


awsapigatewayget-rest-apis

Об­наруже­ние всех REST API


Перейти обратно к новости