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 Functions je serverless rešenje koje vam omogućava da pišete manje koda, održavate manje infrastrukture i štedite na troškovima. Umesto da brinete o implementaciji i održavanju servera, cloud infrastruktura pruža sve ažurirane resurse potrebne za održavanje vaših aplikacija.
U Azure portalu, integracija između Azure Functions i Azure API Management je olakšana, omogućavajući HTTP trigger funkcijskim krajnjim tačkama da budu izložene kao REST API. API-ji izloženi na ovaj način su opisani koristeći OpenAPI definiciju, pružajući standardno, jezik-agnostičko sučelje za RESTful API.
Flex Consumption plan nudi dinamičko, događajem pokrenuto skaliranje sa fleksibilnim opcijama računanja. Automatski dodaje ili uklanja instance funkcija na osnovu potražnje, osiguravajući efikasnu upotrebu resursa i isplativost kroz pay-as-you-go model. Ovaj plan podržava virtuelno umrežavanje za poboljšanu sigurnost i omogućava vam da smanjite hladne startove prethodnim obezbeđivanjem instanci. Idealno je za aplikacije koje doživljavaju promenljive radne opterećenja i zahtevaju brzo skaliranje bez potrebe za podrškom kontejnera.
Tradicionalni Consumption plan za Azure Functions je podrazumevani serverless hosting opcija, gde plaćate samo za resurse računanja kada su vaše funkcije u radu. Automatski se skalira na osnovu broja dolaznih događaja, čineći ga veoma isplativim za aplikacije sa povremenim ili nepredvidivim radnim opterećenjima. Iako ne podržava implementacije kontejnera, uključuje optimizacije za smanjenje vremena hladnog starta i pogodan je za širok spektar serverless aplikacija koje zahtevaju automatsko skaliranje bez opterećenja upravljanja infrastrukturom.
Premium plan za Azure Functions je dizajniran za aplikacije koje zahtevaju dosledne performanse i napredne funkcije. Automatski se skalira na osnovu potražnje koristeći prethodno zagrejane radnike, eliminišući hladne startove i osiguravajući da funkcije rade brzo čak i nakon perioda neaktivnosti. Ovaj plan nudi moćnije instance, produžene vreme izvršenja i podržava virtuelnu mrežnu povezanost. Pored toga, omogućava korišćenje prilagođenih Linux slika, što ga čini pogodnim za aplikacije od kritične važnosti koje zahtevaju visoke performanse i veću kontrolu nad resursima.
Dedicated plan, poznat i kao App Service plan, pokreće vaše funkcije na posvećenim virtuelnim mašinama unutar App Service okruženja. Ovaj plan pruža predvidljivo fakturisanje i omogućava ručno ili automatsko skaliranje instanci, što ga čini idealnim za dugotrajne scenarije gde Durable Functions nisu pogodne. Podržava pokretanje više web i funkcijskih aplikacija na istom planu, nudi veće veličine računanja i osigurava potpunu izolaciju računanja i sigurni pristup mreži kroz App Service Environments (ASE). Ova opcija je najbolja za aplikacije koje zahtevaju doslednu alokaciju resursa i opsežno prilagođavanje.
Container Apps omogućavaju vam da implementirate kontejnerizovane funkcijske aplikacije unutar potpuno upravljanog okruženja koje hostuje Azure Container Apps. Ova opcija je savršena za izgradnju događajem pokrenutih, serverless aplikacija koje rade zajedno sa drugim mikroservisima, API-ima i radnim tokovima. Podržava pakovanje prilagođenih biblioteka sa vašim funkcijskim kodom, migraciju nasleđenih aplikacija na cloud-native mikroservise i korišćenje visokih procesorskih resursa sa GPU resursima. Container Apps pojednostavljuju implementaciju eliminisanjem potrebe za upravljanjem Kubernetes klasterima, što ih čini idealnim za programere koji traže fleksibilnost i skalabilnost u kontejnerizovanom okruženju.
Kada kreirate novu Function App koja nije kontejnerizovana (ali daje kod za pokretanje), kod i drugi podaci vezani za funkciju će biti pohranjeni u Storage nalogu. Po defaultu, web konzola će kreirati novi nalog po funkciji za pohranu koda.
Štaviše, kada god nova instanca aplikacije treba da se pokrene, kod aplikacije će biti prikupljen odavde i izvršen.
Ovo je veoma zanimljivo iz perspektive napadača jer pristup za pisanje preko ovog bucket-a će omogućiti napadaču da kompromituje kod i eskalira privilegije na upravljane identitete unutar Function App-a.
Moguće je dati pristup funkciji svima na Internetu bez potrebe za bilo kakvom autentifikacijom ili dati pristup na osnovu IAM-a.
Takođe je moguće dati ili ograničiti pristup Function App-u sa Interneta, dajući pristup unutrašnjoj mreži (VPC) Function App-u.
Ovo je veoma zanimljivo iz perspektive napadača jer bi moglo biti moguće pivotsati na unutrašnje mreže iz ranjive Lambda funkcije izložene Internetu.
Štaviše, Function App može imati određene krajnje tačke koje zahtevaju određeni nivo autentifikacije, kao što su "admin" ili "anonymous". Napadač bi mogao pokušati da pristupi anonimno dozvoljenim krajnjim tačkama kako bi zaobišao ograničenja i dobio pristup osetljivim podacima ili funkcionalnosti.
Napomena da ne postoje RBAC dozvole za davanje pristupa korisnicima da pozivaju funkcije. Poziv funkcije zavisi od okidača odabranog prilikom kreiranja i ako je odabran HTTP Trigger, možda će biti potrebno koristiti pristupni ključ.
Kada kreirate krajnju tačku unutar funkcije koristeći HTTP trigger, moguće je naznačiti nivo autorizacije pristupnog ključa potreban za pokretanje funkcije. Dostupne su tri opcije:
ANONYMOUS: Svi mogu pristupiti funkciji putem URL-a.
FUNCTION: Krajnja tačka je dostupna samo korisnicima koji koriste funkcijski, host ili master ključ.
ADMIN: Krajnja tačka je dostupna samo korisnicima sa master ključem.
Tipovi ključeva:
Function Keys: Ključevi funkcija mogu biti ili podrazumevani ili korisnički definisani i dizajnirani su da daju pristup isključivo određenim funkcijskim krajnjim tačkama unutar Function App-a. Ovo omogućava fino podešavanje sigurnosne kontrole, osiguravajući da samo ovlašćeni korisnici ili servisi mogu pozivati određene funkcije bez izlaganja cele aplikacije.
Host Keys: Ključevi hosta, koji takođe mogu biti podrazumevani ili korisnički definisani, pružaju pristup svim funkcijskim krajnjim tačkama unutar Function App-a. Ovo je korisno kada je potrebno pristupiti više funkcija koristeći jedan ključ, pojednostavljujući upravljanje i smanjujući broj ključeva koji treba distribuirati ili čuvati na siguran način.
Master Key: Master ključ (_master
) služi kao administrativni ključ koji nudi povišene dozvole, uključujući pristup runtime REST API-ima Function App-a. Ovaj ključ se ne može opozvati i treba ga rukovati sa najvećom pažnjom. Ključno je ne deliti master ključ sa trećim stranama ili ga uključivati u native klijentske aplikacije kako bi se sprečio neovlašćen administrativni pristup.
Kada se postavi autentifikacija funkcije na ADMIN (a ne ANONYMOUS ili FUNCTION), potrebno je koristiti ovaj ključ.
System Keys: Sistem ključevi su upravljani specifičnim ekstenzijama i potrebni su za pristup webhook krajnjim tačkama koje koriste unutrašnji komponenti. Primeri uključuju Event Grid trigger i Durable Functions, koji koriste sistem ključeve za sigurno interagovanje sa svojim API-ima. Sistem ključevi se mogu regenerisati putem Azure Portala ili ključ API-a kako bi se održala sigurnost.
Example to access a function API endpoint using a key:
https://<function_uniq_name>.azurewebsites.net/api/<endpoint_name>?code=<access_key>
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)