Cloud & IT Cert Prep · Oppitunti

Serverless- ja funktioiden tietoturva

Tunnista serverless-funktioiden ainutlaatuinen hyökkäyspinta (liian laajat IAM-roolit, tapahtumien injektointi ja riippuvuusriskit) ja sovella vähimpien oikeuksien sekä syötteiden validoinnin kontrolleja.

Oppitunti 3/413 vaihetta

Serverless- ja funktioiden tietoturva on ilmainen Cloud & IT Cert Prep-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Cloud & IT Cert Prep-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Cloud & IT Cert Prep-kurssilla on yhteensä 4 oppituntia.

Mitä palvelimeton laskenta on?

Palvelimeton laskenta (Functions as a Service, FaaS) mahdollistaa yksittäisten funktioiden käyttöönoton siten, että tapahtumat — HTTP-pyynnöt, jonoviestit, tietokantatriggerit tai ajastetut ajot — käynnistävät ne ilman taustalla olevien palvelinten hallintaa. Tunnettuja alustoja ovat esimerkiksi AWS Lambda, Google Cloud Functions ja Azure Functions. Pilvipalveluntarjoaja huolehtii päivityksistä, skaalauksesta ja infrastruktuurista. Vaikka tämä vähentää ylläpidon työmäärää, se muuttaa turvallisuusvastuiden mallia: palveluntarjoaja suojaa suoritusympäristön, mutta kehittäjä vastaa yksin funktion koodista, käyttöoikeuksista ja määrityksistä.

Palvelimettoman arkkitehtuurin ainutlaatuinen hyökkäyspinta

Palvelimettomilla funktioilla on perinteisiin sovelluksiin verrattuna erilainen hyökkäyspinta: funktiot ovat yleensä lyhytikäisiä (sekunteja tai minuutteja), minkä vuoksi perinteiset EDR-ratkaisut ja verkkovalvonta ovat tehottomampia; ne ovat tapahtumaohjattuja, joten suorituksen voi käynnistää useat erilaiset lähteet (S3-tapahtumat, API Gateway, SNS); ne suoritetaan usein IAM-käyttöoikeuksilla, joilla voidaan käyttää muita pilviresursseja; ja ne käyttävät kolmannen osapuolen riippuvuuksia (npm-, pip-paketteja), jotka saattavat sisältää haitallista koodia. Hyökkäyspinnan määrittävät tapahtumasyötteet, IAM-käyttöoikeudet ja riippuvuuksien luottamusketjut.

Liian laajat IAM-roolit: suurin uhka

Yleisin palvelimettoman arkkitehtuurin tietoturva-aukko ovat liian laajat IAM-roolit. Kun kehittäjät tarvitsevat funktiolle pääsyn yhteen S3-bucketiin, he saattavat myöntää sille oikeuden s3:* (täysi S3-käyttöoikeus) välttääkseen käyttöoikeusvirheet. Tällaisella roolilla toimiva vaarantunut tai haavoittuva funktio voi sen jälkeen lukea, kirjoittaa tai poistaa minkä tahansa tilin bucketin. Suojautumiskeino on tiukasti toteutettu vähimpien oikeuksien mukainen IAM-rooli: jokaisella funktiolla tulee olla oma roolinsa, joka myöntää vain kyseisen funktion tiettyihin tehtäviin tarvittavat vähimmäisoikeudet. Työkalut, kuten AWS IAM Access Analyzer ja Cloudsplaining, tunnistavat liian laajat Lambda-roolit automaattisesti.

# IAM policy: least privilege for specific Lambda function
{
  'Version': '2012-10-17',
  'Statement': [{
    'Effect': 'Allow',
    'Action': ['s3:GetObject'],
    'Resource': 'arn:aws:s3:::my-specific-bucket/uploads/*'
  }]
}

Tapahtumien injektiohyökkäykset

Tapahtumainjektio tapahtuu, kun hyökkääjän hallitsemaa tapahtumahyötykuorman dataa käsitellään funktiokoodissa turvattomasti. Koska palvelimettomia funktioita voidaan käynnistää monista tapahtumalähteistä — HTTP-otsakkeista, kyselyparametreista, tietokannan muutosmerkinnöistä, jonoviestien sisällöstä ja sähköpostisisällöstä — mikä tahansa näistä voi sisältää haitallisen hyötykuorman. Yleisiä injektiotyyppejä ovat SQL-injektio, jos funktio tekee tietokantakyselyn tapahtumadatan avulla, NoSQL-injektio (MongoDB-operaattorit JSON-hyötykuormissa), komentoinjektio, jos tapahtumadataa käytetään käyttöjärjestelmäkomennoissa, sekä SSRF (Server-Side Request Forgery), jos tapahtumadatassa oleviin URL-osoitteisiin tehdään pyyntöjä. Syötteen validointi ja parametrisoidut kyselyt ovat olennaisia suojauksia.

# Vulnerable: event data used directly in shell command
# const filename = event.filename;
# exec('convert ' + filename + ' output.jpg');

# Safe: validate and sanitize input
# const filename = path.basename(event.filename);
# if (!/^[a-z0-9_-]+\.(jpg|png)$/i.test(filename)) throw new Error('Invalid');
# execFile('convert', [filename, 'output.jpg']);

Riippuvuuksien riskit: kolmannen osapuolen paketit

Palvelimettomat funktiot ovat usein riippuvaisia kymmenistä kolmannen osapuolen paketeista. Nämä riippuvuudet aiheuttavat toimitusketjuriskin: haitallinen tai vaarantunut paketti voi suorittaa mielivaltaista koodia funktion suoritusympäristössä, käyttää ympäristömuuttujia (jotka sisältävät usein salaisuuksia), muodostaa ulospäin suuntautuvia verkkoyhteyksiä ja käyttää funktion IAM-roolia pilviresurssien käyttöön. Tunnetut hyökkäykset, kuten event-stream npm -paketin vaarantuminen vuonna 2018, sekä lukuisat typosquatting-paketit havainnollistavat tätä riskiä. Suojautumiskeinoja ovat riippuvuuksien kiinnittäminen, SCA-tarkistus CI/CD-putkessa sekä riippuvuuksien määrän pitäminen mahdollisimman pienenä.

Salaisuudet palvelimettomassa arkkitehtuurissa: ympäristömuuttujat

Palvelimettomat funktiot saavat usein salaisuuksia pilvikonsolissa määritettyjen ympäristömuuttujien kautta. Ympäristömuuttujat näkyvät kaikille, joilla on IAM-käyttöoikeus Lambdan määrityksiin, ja niitä voi käyttää mikä tahansa funktion sisällä suoritettava koodi. Parhaita käytäntöjä ovat seuraavat: älkää tallentako salaisuuksia suoraan selväkielisinä ympäristömuuttujina; tallentakaa niiden sijaan ARN-tunnisteet tai salaisuuksien nimet ja noutakaa salaisuudet ajonaikaisesti palveluista AWS Secrets Manager tai Parameter Store; ottakaa käyttöön KMS-salaus Lambdan ympäristömuuttujille levossa; älkääkä koskaan kirjoittako ympäristömuuttujia lokiin (monet debug-lokittimet tulostavat virheen yhteydessä kaikki ympäristömuuttujat).

# Retrieve secret at runtime instead of hardcoding
# Using AWS SDK in Lambda
# const secretsClient = new SecretsManagerClient({});
# const response = await secretsClient.send(
#   new GetSecretValueCommand({ SecretId: 'prod/myapp/db-password' })
# );
# const dbPassword = response.SecretString;

Funktion aikakatkaisu- ja samanaikaisuusrajat

Palvelimettomiin funktioihin kohdistuva palvelunestohyökkäys voi ilmetä kutsujen tulvana — hyökkääjä, joka pystyy käynnistämään funktion toistuvasti, voi kuluttaa tilin samanaikaisuusrajan loppuun (Lambdan oletusarvo on 1 000 samanaikaista suoritusta aluetta kohden), jolloin tilin muut funktiot eivät pysty suorittamaan. Käyttäjän hallitsemaa syötettä käsittelevien funktioiden tulee käyttää nopeudenrajoitusta API Gateway -tasolla, validoida hyötykuorman koko ja määrittää asianmukaiset aikakatkaisuarvot hallitsemattomien suoritusten estämiseksi. Funktioihin voidaan kohdistaa myös Billion Laughs -tyyppisiä laajennushyökkäyksiä XML-/YAML-jäsennyksen aikana, jos syötteen kokoa ei rajoiteta.

# AWS Lambda: set reserved concurrency to prevent account-wide DoS
aws lambda put-function-concurrency \
  --function-name my-api-handler \
  --reserved-concurrent-executions 100

VPC-integraatio ja verkkoympäristön eristäminen

Oletusarvoisesti AWS Lambda -funktiot suoritetaan AWS:n hallinnoimassa VPC:ssä, jolla on Internet-yhteys mutta ei pääsyä yksityisen VPC:si resursseihin (RDS-tietokantoihin, ElastiCacheen tai yksityisiin API-rajapintoihin). Yksityisten resurssien käyttämiseksi Lambda on määritettävä suoritettavaksi VPC:ssäsi tiettyjen aliverkkojen ja suojausryhmien kanssa. VPC:hen liitetyillä Lambda-funktioilla ei kuitenkaan ole oletusarvoisesti Internet-yhteyttä — ulospäin suuntautuvaa Internet-liikennettä varten ne tarvitsevat NAT Gatewayn. Lambda-funktioihin liitettyjen suojausryhmien tulee noudattaa vähimpien oikeuksien periaatetta: sallikaa vain tarvittavat portit ja kohteet. Välttäkää 0.0.0.0/0-lähtevien sääntöjen käyttöä tuotantofunktioiden suojausryhmissä.

Palvelimettomien funktioiden valvonta

Palvelimettoman arkkitehtuurin turvallisuuden valvonta edellyttää erilaisia menetelmiä kuin perinteinen isäntien valvonta. Koska funktiot ovat lyhytikäisiä, isäntäpohjaiset agentit eivät ole käytännöllisiä. Tehokkaassa valvonnassa käytetään seuraavia: AWS CloudTrailia kaikkien Lambdan API-kutsujen (kutsujen, määritysmuutosten ja roolien olettamisten) lokittamiseen; CloudWatch Logs Insightsia funktion suorituslokien kyselyyn poikkeavien mallien löytämiseksi; Amazon GuardDutyä uhkien havaitsemiseen, mukaan lukien epätavallinen Lambdan verkkotoiminta; sekä kaupallisia palvelimetonta arkkitehtuuria varten suunniteltuja tietoturvatyökaluja, kuten Protegoa (nykyisin osa Check Pointia) tai Datadogin palvelimetonta valvontaa, joka instrumentoi funktioita layerien avulla ja tarjoaa näkyvyyden ajonaikaiseen toimintaan.

# Query CloudWatch Logs for Lambda errors and anomalies
aws logs start-query \
  --log-group-name '/aws/lambda/my-function' \
  --start-time $(date -d '-1 hour' +%s) \
  --end-time $(date +%s) \
  --query-string 'fields @timestamp, @message | filter @message like /ERROR|WARN|credential/'

Palvelimettoman arkkitehtuurin turvallisuuden testaaminen

Palvelimettoman arkkitehtuurin turvallisuuden testaaminen edellyttää erityisiä työkaluja: PureSec CLI (nykyisin Check Point) ja Prowler tarkistavat pilvimääritykset palvelimettoman arkkitehtuurin virheellisten määritysten varalta; DAST-työkalut voivat testata HTTP:n käynnistämiä funktioita injektiohaavoittuvuuksien varalta; funktion koodin staattinen analyysi esimerkiksi Banditilla (Python) tai ESLintin tietoturvalaajennuksilla löytää turvattomia koodausmalleja; ja manuaalisessa testauksessa tulee luetteloida kaikki tapahtumalähteet, jotka voivat käynnistää kunkin funktion, sekä testata jokainen niistä virheellisillä ja haitallisilla hyötykuormilla. OWASP Serverless Top 10 tarjoaa kattavan, palvelimettomiin arkkitehtuureihin tarkoitetun haavoittuvuustarkistuslistan.

# Prowler: check Lambda security posture
prowler aws --service lambda
# Checks: public URL, over-privileged roles, unencrypted env vars,
# outdated runtime, missing VPC config, excessive timeout

Jaettu vastuu palvelimettomassa arkkitehtuurissa

Palvelimeton laskenta siirtää jaetun vastuun mallia entistä enemmän palveluntarjoajalle. Pilvipalveluntarjoaja vastaa seuraavista: funktion suoritusympäristö, käyttöjärjestelmän päivitykset, taustalla olevan infrastruktuurin turvallisuus ja fyysiset tilat. Asiakas vastaa edelleen seuraavista: funktion koodin turvallisuus, IAM-käyttöoikeuksien suunnittelu, salaisuuksien hallinta, syötteen validointi, riippuvuuksien hallinta, lokituksen määritykset ja verkkokäytännöt. Infrastruktuurivastuun väheneminen ei tarkoita turvallisuusvastuun vähenemistä — se ainoastaan siirtää turvallisuuteen tehtävien investointien painopistettä ensisijaisesti sovellustason ja IAM:n turvallisuuteen.

Pikatarkistus

Testatkaa, miten hyvin ymmärrätte tällä oppitunnilla käsitellyt CompTIA Security+ (SY0-701) -käsitteet.

Oppitunnin kertaus

Tällä oppitunnilla opitte, että liian laajat IAM-roolit ovat palvelimettoman arkkitehtuurin ensisijainen riski — jokainen funktio tarvitsee oman vähimpien oikeuksien mukaisen roolinsa; tapahtumien injektiohyökkäykset hyödyntävät mitä tahansa tapahtumalähdettä, joka välittää hyökkääjän hallitsemaa dataa syötteen validointia vailla oleville funktioille; ja kolmannen osapuolen pakettien aiheuttama riippuvuuksien toimitusketjuriski voi vaarantaa funktion suorituksen ja antaa pääsyn IAM-tunnistetietoihin ja salaisuuksiin. Seuraavaksi tutustumme Infrastructure as Code -turvallisuuden tarkistamiseen, jolla virheelliset määritykset voidaan havaita ennen käyttöönottoa.

Aloita maksutta

Opi Cloud & IT Cert Prep tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
150
Oppitunnit
600

Usein kysytyt kysymykset

Onko oppitunti ”Serverless- ja funktioiden tietoturva” ilmainen?

Kyllä – oppitunnin ”Serverless- ja funktioiden tietoturva” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Cloud & IT Cert Prep-kurssin, päivitä CoddyKit PROhon. Cloud & IT Cert Prep-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Serverless- ja funktioiden tietoturva”?

Tunnista serverless-funktioiden ainutlaatuinen hyökkäyspinta (liian laajat IAM-roolit, tapahtumien injektointi ja riippuvuusriskit) ja sovella vähimpien oikeuksien sekä syötteiden validoinnin kontrol… Harjoittelet Cloud & IT Cert Prep-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Cloud & IT Cert Prep-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Cloud & IT Cert Prep-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”Serverless- ja funktioiden tietoturva”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Cloud & IT Cert Prep-oppitunnilla?

Kyllä. Jokainen Cloud & IT Cert Prep-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Konttien tietoturva: näköistiedostojen koventaminen ja suorituksenaikainen suojaus
  2. Kubernetes-tietoturva: RBAC, verkkokäytännöt ja pod-tietoturva
  3. Serverless- ja funktioiden tietoturva
  4. Infrastruktuuri koodina -tietoturvatarkistus
← Takaisin: Cloud & IT Cert Prep