AWS - Lambda Layers Persistence
Lambda Layers
Tabaka la Lambda ni faili ya .zip ambayo inaweza kuwa na msimbo wa ziada au maudhui mengine. Tabaka inaweza kuwa na maktaba, muda wa desturi, data, au faili za usanidi.
Inawezekana kuongeza hadi tabaka tano kwa kila kazi. Unapojumuisha tabaka katika kazi, maudhui yanaondolewa kwenye saraka ya /opt
katika mazingira ya utekelezaji.
Kwa chaguo-msingi, tabaka unazounda ni binafsi kwa akaunti yako ya AWS. Unaweza kuchagua kushiriki tabaka na akaunti zingine au kufanya tabaka kuwa ya umma. Ikiwa kazi zako zinatumia tabaka ambayo akaunti tofauti imetoa, kazi zako zinaweza kuendelea kutumia toleo la tabaka baada ya kufutwa, au baada ya ruhusa yako ya kupata tabaka kufutwa. Walakini, huwezi kuunda kazi mpya au kusasisha kazi zinazotumia toleo lililofutwa la tabaka.
Kazi zilizosambazwa kama picha ya kontena hazitumii tabaka. Badala yake, unapakia muda wako unaopendelea, maktaba, na mahitaji mengine ndani ya picha ya kontena unapojenga picha.
Njia ya kupakia Python
Njia ya kupakia ambayo Python itatumia kwenye lambda ni ifuatayo:
Angalia jinsi nafasi ya pili na ya tatu inavyochukuliwa na saraka ambapo lambda layers hufungua faili zao: /opt/python/lib/python3.9/site-packages
na /opt/python
Ikiwa mshambuliaji amefanikiwa kuweka mlango wa nyuma kwenye lambda layer iliyotumiwa au kuongeza moja ambayo itatekeleza mimba ya nambari inapopakia maktaba ya kawaida, ataweza kutekeleza nambari yenye nia mbaya kila wakati lambda inaitwa.
Kwa hivyo, mahitaji ni:
Angalia maktaba ambazo zime pakuliwa na nambari ya waathiriwa
Unda maktaba ya mbadala na lambda layers ambayo itatekeleza nambari ya desturi na pakia maktaba ya asili.
Maktaba zilizopakiwa mapema
Nikichunguza mbinu hii nilikutana na changamoto: Baadhi ya maktaba tayari zime pakuliwa katika muda wa python wakati nambari yako inatekelezwa. Nilitarajia kupata vitu kama os
au sys
, lakini hata maktaba ya json
ilipakuliwa.
Ili kutumia mbinu hii ya uthabiti, nambari inahitaji kupakia maktaba mpya ambayo haijapakiwa wakati nambari inatekelezwa.
Kwa nambari ya python kama hii, ni rahisi kupata orodha ya maktaba zilizopakiwa mapema ndani ya muda wa python kwenye lambda:
Na hii ni orodha (angalia kwamba maktaba kama vile os
au json
tayari zipo)
Na hii ni orodha ya maktaba ambazo lambda inajumuisha kwa msingi: [https://gist.github.com/gene1wood/4a052f39490fae00e0c3]
Lambda Layer Backdooring
Katika mfano huu tufikirie kuwa kanuni iliyolengwa inaingiza csv
. Tutakuwa tukirudisha nyuma uingizaji wa maktaba ya csv
.
Kufanya hivyo, tutakuwa tunaunda saraka ya csv na faili ya __init__.py
ndani yake kwenye njia ambayo inapakiwa na lambda: /opt/python/lib/python3.9/site-packages
Kisha, wakati lambda inatekelezwa na jaribu kupakia csv, faili yetu ya __init__.py
itapakiwa na kutekelezwa.
Faili hii lazima:
Tekeleza mzigo wetu
Pakia maktaba ya csv ya asili
Tunaweza kufanya yote haya na:
Kisha, tengeneza zip na nambari hii kwenye njia python/lib/python3.9/site-packages/__init__.py
na uiweke kama safu ya lambda.
Unaweza kupata nambari hii kwenye https://github.com/carlospolop/LambdaLayerBackdoor
Payload iliyoundwa itatuma IAM creds kwa seva MARAKA YA KWANZA inaitwa au BAADA YA kurejesha kontena ya lambda (mabadiliko ya nambari au lambda baridi), lakini njia zingine kama zifuatazo zinaweza pia kuingizwa:
pageAWS - Steal Lambda RequestsSafu za Nje
Tafadhali elewa kwamba inawezekana kutumia safu za lambda kutoka kwa akaunti za nje. Zaidi ya hayo, lambda inaweza kutumia safu kutoka kwa akaunti ya nje hata kama haina idhini. Pia elewa kwamba idadi kubwa ya safu ambayo lambda inaweza kuwa nayo ni 5.
Hivyo, ili kuboresha uwezo wa mbinu hii, mshambuliaji anaweza:
Weka mlango wa nyuma kwenye safu iliyopo ya mtumiaji (hakuna kitu cha nje)
Tengeneza safu katika akaunti yake, toa akaunti ya mwathiriwa upatikanaji wa kutumia safu, sanidi safu kwenye Lambda ya mwathiriwa na ondoa idhini.
Lambda itaendelea kuweza kutumia safu na mwathiriwa hatakuwa na njia rahisi ya kupakua nambari za safu (isipokuwa kupata rev shell ndani ya lambda)
Mwathiriwa hataona safu za nje zinazotumiwa na
aws lambda list-layers
Last updated