Az - Function Apps
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Azure Function Apps ni huduma ya kompyuta isiyo na seva inayokuruhusu kuendesha vipande vidogo vya msimbo, vinavyojulikana kama functions, bila kusimamia miundombinu ya msingi. Zimeundwa kutekeleza msimbo kwa kujibu vichocheo mbalimbali, kama vile maombi ya HTTP, timer, au matukio kutoka kwa huduma nyingine za Azure kama Blob Storage au Event Hubs. Function Apps zinasaidia lugha nyingi za programu, ikiwa ni pamoja na C#, Python, JavaScript, na Java, na kuifanya kuwa rahisi kwa ajili ya kujenga maombi yanayoendeshwa na matukio, kuendesha michakato, au kuunganisha huduma. Ni za gharama nafuu, kwani kwa kawaida unalipa tu kwa muda wa kompyuta ulitumika wakati msimbo wako unakimbia.
Kumbuka kwamba Functions ni sehemu ya App Services, kwa hivyo, nyingi ya vipengele vilivyojadiliwa hapa vitatumika pia na maombi yaliyoundwa kama Azure Apps (webapp
katika cli).
Flex Consumption Plan: Inatoa kupanua kwa nguvu, inayotokana na matukio na bei ya kulipa kadri unavyotumia, ikiongeza au kuondoa mifano ya kazi kulingana na mahitaji. Inasaidia mtandao wa virtual na mifano iliyotayarishwa awali ili kupunguza kuanza baridi, na kuifanya iwe bora kwa mizigo inayobadilika ambayo haitahitaji msaada wa kontena.
Traditional Consumption Plan: Chaguo la seva isiyo na msingi, ambapo unalipa tu kwa rasilimali za kompyuta wakati kazi zinakimbia. Inapanuka kiotomatiki kulingana na matukio yanayoingia na inajumuisha mipango ya kuanza baridi, lakini haisaidii kutekeleza kontena. Inafaa kwa mizigo ya muda mfupi inayohitaji kupanuka kiotomatiki.
Premium Plan: Imeundwa kwa ajili ya utendaji thabiti, ikiwa na wafanyakazi walioandaliwa awali ili kuondoa kuanza baridi. Inatoa nyakati za utekelezaji zilizopanuliwa, mtandao wa virtual, na inasaidia picha za Linux za kawaida, na kuifanya kuwa bora kwa maombi muhimu yanayohitaji utendaji wa juu na vipengele vya juu.
Dedicated Plan: Inakimbia kwenye mashine halisi zilizotengwa na malipo yanayoweza kutabiriwa na inasaidia kupanuka kwa mikono au kiotomatiki. Inaruhusu kuendesha maombi mengi kwenye mpango mmoja, inatoa kujitegemea kwa kompyuta, na inahakikisha ufikiaji salama wa mtandao kupitia Mazingira ya Huduma ya Programu, na kuifanya iwe bora kwa maombi yanayoendelea kwa muda mrefu yanayohitaji ugawaji wa rasilimali thabiti.
Container Apps: Inaruhusu kutekeleza maombi ya kazi yaliyowekwa kwenye kontena katika mazingira yanayosimamiwa, pamoja na huduma ndogo na APIs. Inasaidia maktaba za kawaida, uhamishaji wa maombi ya zamani, na usindikaji wa GPU, ikiondoa usimamizi wa klasta ya Kubernetes. Inafaa kwa maombi yanayoendeshwa na matukio, yanayoweza kupanuka yaliyowekwa kwenye kontena.
Unapounda Function App mpya isiyo na kontena (lakini ukitoa msimbo wa kuendesha), msimbo na data nyingine zinazohusiana na Function zitahifadhiwa kwenye akaunti ya Hifadhi. Kwa kawaida, console ya wavuti itaunda mpya kwa kila kazi kuhifadhi msimbo.
Zaidi ya hayo, kubadilisha msimbo ndani ya ndoo (katika mifumo tofauti ambayo inaweza kuhifadhiwa), msimbo wa programu utabadilishwa kuwa mpya na kutekelezwa wakati wa pili kazi inaitwa.
Hii ni ya kuvutia sana kutoka kwa mtazamo wa washambuliaji kwani ufikiaji wa kuandika kwenye ndoo hii utamruhusu mshambuliaji kudhoofisha msimbo na kupandisha mamlaka kwa utambulisho unaosimamiwa ndani ya Function App.
Zaidi kuhusu hili katika sehemu ya kupandisha mamlaka.
Pia inawezekana kupata funguo za master na functions zilizohifadhiwa kwenye akaunti ya hifadhi katika kontena azure-webjobs-secrets
ndani ya folda <app-name>
katika faili za JSON unazoweza kupata ndani.
Kumbuka kwamba Functions pia zinaruhusu kuhifadhi msimbo katika eneo la mbali kwa kuashiria tu URL yake.
Kwa kutumia kichocheo cha HTTP:
Inawezekana kutoa ufikiaji kwa kazi kutoka kwa Intaneti yote bila kuhitaji uthibitisho wowote au kutoa ufikiaji kulingana na IAM. Ingawa pia inawezekana kuzuia ufikiaji huu.
Pia inawezekana kutoa au kuzuia ufikiaji kwa Function App kutoka mtandao wa ndani (VPC).
Hii ni ya kuvutia sana kutoka kwa mtazamo wa washambuliaji kwani inaweza kuwa inawezekana kuhamasisha kwenye mitandao ya ndani kutoka kwa Function dhaifu iliyo wazi kwa Intaneti.
Inawezekana kuunda mabadiliko ya mazingira ndani ya programu, ambayo yanaweza kuwa na taarifa nyeti. Zaidi ya hayo, kwa kawaida mabadiliko ya mazingira AzureWebJobsStorage
na WEBSITE_CONTENTAZUREFILECONNECTIONSTRING
(miongoni mwa mengine) yanaundwa. Haya ni ya kuvutia sana kwa sababu yana funguo za akaunti kudhibiti kwa ruhusa KAMILI akaunti ya hifadhi inayohifadhi data ya programu. Mipangilio hii pia inahitajika kutekeleza msimbo kutoka kwa Akaunti ya Hifadhi.
Mabadiliko haya ya mazingira au vigezo vya usanidi pia vinadhibiti jinsi Function inavyotekeleza msimbo, kwa mfano ikiwa WEBSITE_RUN_FROM_PACKAGE
ipo, itadhihirisha URL ambapo msimbo wa programu unapatikana.
Ndani ya sandbox ya linux, msimbo wa chanzo unapatikana katika /home/site/wwwroot
katika faili function_app.py
(ikiwa python inatumika) mtumiaji anayekimbia msimbo ni app
(bila ruhusa za sudo).
Katika Windows function inayotumia NodeJS msimbo ulikuwa unapatikana katika C:\home\site\wwwroot\HttpTrigger1\index.js
, jina la mtumiaji lilikuwa mawsFnPlaceholder8_f_v4_node_20_x86
na ilikuwa sehemu ya makundi: Mandatory Label\High Mandatory Level Label
, Everyone
, BUILTIN\Users
, NT AUTHORITY\INTERACTIVE
, CONSOLE LOGON
, NT AUTHORITY\Authenticated Users
, NT AUTHORITY\This Organization
, BUILTIN\IIS_IUSRS
, LOCAL
, 10-30-4-99\Dwas Site Users
.
Kama VMs, Functions zinaweza kuwa na Managed Identities za aina 2: Iliyotolewa na Mfumo na Iliyotolewa na Mtumiaji.
iliyotolewa na mfumo itakuwa utambulisho unaosimamiwa ambao ni kazi pekee ambayo ina utambulisho huo itakuwa na uwezo wa kutumia, wakati utambulisho wa mtumiaji ni utambulisho unaosimamiwa ambao huduma nyingine yoyote ya Azure itakuwa na uwezo wa kutumia.
Kama ilivyo katika VMs, Functions zinaweza kuwa na 1 utambulisho wa mfumo na utambulisho kadhaa wa mtumiaji, kwa hivyo ni muhimu kila wakati kujaribu kupata yote ikiwa unadhoofisha kazi kwa sababu unaweza kuwa na uwezo wa kupandisha mamlaka kwa utambulisho kadhaa wa kusimamiwa kutoka kwa Function moja tu.
Ikiwa hakuna utambulisho wa mfumo unaotumika lakini utambulisho mmoja au zaidi wa mtumiaji umeunganishwa na kazi, kwa kawaida huwezi kupata token yoyote.
Inawezekana kutumia PEASS scripts kupata token kutoka kwa utambulisho wa kawaida wa kusimamiwa kutoka kwa mwisho wa metadata. Au unaweza kuzipata kwa mikono kama ilivyoelezwa katika:
Kumbuka kwamba unahitaji kupata njia ya kuangalia yote ya Managed Identities ambayo kazi inaunganishwa kwani ikiwa hujaashiria, mwisho wa metadata uta tumia tu ile ya kawaida (angalia kiungo kilichopita kwa maelezo zaidi).
Kumbuka kwamba hakuna ruhusa za RBAC za kutoa ufikiaji kwa watumiaji kuanzisha kazi. kuanzisha kazi kunategemea kichocheo kilichochaguliwa wakati ilipoundwa na ikiwa kichocheo cha HTTP kilichaguliwa, inaweza kuwa inahitajika kutumia funguo za ufikiaji.
Unapounda mwisho ndani ya kazi ukitumia kichocheo cha HTTP inawezekana kuashiria kiwango cha idhini ya funguo za ufikiaji kinachohitajika kuanzisha kazi. Chaguzi tatu zinapatikana:
ANONYMOUS: Kila mtu anaweza kufikia kazi kupitia URL.
FUNCTION: Mwisho unapatikana tu kwa watumiaji wanaotumia funguo, mwenyeji au funguo za master.
ADMIN: Mwisho unapatikana tu kwa watumiaji wanaotumia funguo za master.
Aina za funguo:
Funguo za Kazi: Funguo za kazi zinaweza kuwa za kawaida au zilizofanywa na mtumiaji na zimeundwa kutoa ufikiaji pekee kwa misheni maalum ya mwisho ndani ya Function App ikiruhusu ufikiaji wa kina zaidi juu ya mwisho.
Funguo za Mwenyeji: Funguo za mwenyeji, ambazo pia zinaweza kuwa za kawaida au zilizofanywa na mtumiaji, zinatoa ufikiaji kwa misheni yote ya mwisho ndani ya Function App kwa kiwango cha ufikiaji wa FUNCTION.
Funguo za Master: Funguo za master (_master
) hutumikia kama funguo za usimamizi zinazotoa ruhusa za juu, ikiwa ni pamoja na ufikiaji kwa misheni yote ya mwisho (kiwango cha ufikiaji wa ADMIN kinajumuishwa). Hii funguo haiwezi kufutwa.
Funguo za Mfumo: Funguo za mfumo zinazosimamiwa na nyongeza maalum na zinahitajika kwa ufikiaji wa mwisho wa webhook unaotumiwa na vipengele vya ndani. Mifano ni pamoja na kichocheo cha Event Grid na Functions za Kudumu, ambazo hutumia funguo za mfumo kuingiliana kwa usalama na APIs zao.
Mfano wa kufikia mwisho wa API ya kazi ukitumia funguo:
https://<function_uniq_name>.azurewebsites.net/api/<endpoint_name>?code=<access_key>
Kama ilivyo katika App Services, Functions pia zinasaidia uthibitishaji wa msingi kuungana na SCM na FTP ili kutekeleza msimbo kwa kutumia jina la mtumiaji na nenosiri katika URL inayotolewa na Azure. Maelezo zaidi kuhusu hilo katika:
Az - App ServicesWakati kazi inaundwa kutoka kwa repo ya Github, console ya wavuti ya Azure inaruhusu kuunda kiotomatiki Workflow ya Github katika hazina maalum ili kila wakati hazina hii inaposasishwa, msimbo wa kazi unasasishwa. Kwa kweli, yaml ya Github Action kwa kazi ya python inaonekana kama hii:
Jifunze & fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Jifunze & fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)