Üksus 11 / 12

Koodi kontrollimine, tehisintellekti väljundi haavatavused ja riskid

Kasu:

  • Võimalus kontrollida tehisintellekti väljundit kolmel tasandil: täpsus, turvalisus ja allikas/litsents
  • Võimalus katta riske, nagu süstimine, hallutsinatsioonipaketid ja maetud saladused ohutute vormide ja tööriistadega
  • Oskus esitada turvakriitilist koodi pädevale insenerile heakskiidul ja mõista vastutuse mitteandmatust

AI-koodi genereerimine on lihtne; Tema usaldamine on kallis. Selle üksuse ainus eesmärk on muuta "kontrolli" põhimõte, mida oleme korranud kõigis eelmistes üksustes, süstemaatiliseks inseneridistsipliiniks. Sest tehisintellekti toodetud kood, isegi kui see esmapilgul tundub õige, kätkeb endas kolme erinevat ohtu: olla mittetöötav/vale (hallutsinatsioonid), ebaturvaline (haavatavus) ja juriidiliste/litsentsimisriskidega. Nende kolme tundmine ja igaühele ukse loomine teeb teist professionaali.

Siin käsitleme "valideerimist" kolmel tasandil: õigsus (kas kood teeb tegelikult oma töö ära?), turvalisus (kas see peab vastu pahatahtlikule sisendile?) ja päritolu/litsents (kas mul on õigus seda koodi kasutada?). Igal kihil on oma juhtimisvahendid ja ühestki neist ei saa mööda minna, kui "nii ütles AI".

Kolm riskikihti

1. Täpsuse oht (hallutsinatsioonid). Mudel võib helistada olematule funktsioonile, kuritarvitada API-d, vaikselt mööda minna servajuhtumist. Kood tundub "mõistlik", kuid on vale. Antidoot: koostamine, testimine, staatiline analüüs ja visuaalne kontroll.

2. Turvarisk. AI võib korrata treeningandmetes ebaturvalisi mustreid: SQL-i süstimise suhtes haavatav päring, kasutaja autentimine, nõrk krüptimine, ebaturvaline deserialiseerimine, avatud ümbersuunamine. Kood töötab, kuid on rünnakute suhtes haavatav. Vastumürk: turvalisusele keskendunud ülevaade, automatiseeritud skannerid (SAST) ja teadaolevate turvamustrite kehtestamine.

3. Allika/litsentsi risk. AI võib toota väljundit, mis sarnaneb väga autoriõigustega kaitstud või piirava litsentsitud koodiga, või võib viidata sobimatult litsentsitud sõltuvusele. Vastumürk: sõltuvuse ja litsentside kontroll, originaalsuse kontroll, ettevõtte poliitika.

Ettevaatust! Nendest kolmest riskist kõige salakavalam on turvalisus; sest kood võib läbida testimise, töötada sujuvalt tootmises ja haavatavus ilmneb alles siis, kui ründaja selle leiab. "Töötamine" ei ole sama mis "turvaline".

Samm-sammult: kihiline autentimisvärav

  1. Lugege mõistmisega. Enne selle vastuvõtmist saate koodist tõesti aru; Ärge ühendage koodi, millest te aru ei saa. Kui te ei suuda selgitada, miks see töötab, pole seda veel kinnitatud.
  2. Kontrollige selle olemasolu. Veenduge, et iga kasutatud funktsioon, API ja pakett on tegelikult olemas ja neid kasutatakse õigesti (hallutsinatsioonivärav).
  3. Käivitage automatiseeritud tööriistu. Kompilaator, linter (stiili/vea skanner), tüübikontroll, ühikutestid ja võimalusel SAST (Static Application Security Testing – tööriist, mis kontrollib lähtekoodi haavatavusi).
  4. Vaadake seda turvalisuse vaatenurgast. Kas sisend on kinnitatud? Kas päring on parameetritega? Kas saladus on maetud? Kas autoriseerimise kontroll on olemas?
  5. Kontrollige allikat ja litsentsi. Kas uued sõltuvused on litsentsitud? Kas väljund näeb liiga sarnane teadaoleva koodibaasiga?
  6. Kui see on turvalisuse seisukohast kriitiline, küsige ekspertide nõusolekut. Kohustuslik on sõltumatu ülevaatus sellistes valdkondades nagu autentimine, maksmine, krüptograafia ja juurdepääsu kontroll inseneri poolt.

Kolm miniümbrist

Juhtum 1 – SQL-i süst tabati kontrollväravas. AI loodud kood, mis ühendab kasutaja sisendi otse otsingu lõpp-punkti SQL-päringusse ("... WHERE nimi = '" + q + "'"). Kood töötas ja läbis testi. Turvalisusele keskendunud kontroll ja SAST-skannimine tabasid selle; See teisendati parameetritega päringuks (valmis avaldus). Kui seda poleks tabatud, oleks see olnud klassikaline andmelekke haavatavus.

Juhtum 2 – hallutsinatsioonipakett. AI soovitas ülesande jaoks olematut npm-paketti (fast-safe-parse). Kui arendaja proovis seda installida, paketti ei leitud. Veelgi hullem: mõnel juhul võivad ründajad selliseid "kummitus" pakettide nimesid täita päris pahatahtlike pakettidega (sõltuvussegadus). Õppetund: kontrollige iga soovitatud paketti ametliku registri ja allalaadimis-/hooldusajaloo põhjal.

Juhtum 3 – litsentsi kokkusobimatus. Tehisintellekti soovitatud vahval kaasteegil oli tugev copyleft-litsents, mis ei ühildunud asutuse tootelitsentsiga. Sõltuvuslitsentsi skannimine teatas sellest; Meeskond asendas litsentsi sobiva alternatiiviga. Ilma kontrollimiseta tekiks toodete turustamisel õiguslik koorem.

Neli kopeeritavat malli

Sisseastumiseelne enesekontroll:

Enne järgmise AI loodud koodi aktsepteerimist kontrollige: 1) Kas kõik funktsioonid/API/paketid, mida see kasutab, on tegelikult olemas? Märgistage kahtlustatavad.2) Kas on mõni kinnitamata sisend, SQL-i/käskude konkatenatsioon, maetud saladus, nõrk krüpto?3) Millised on adresseerimata vead/servajuhtumid? Märgistage iga leiu kui "kindel / tõenäoline" ja soovitage parandusi.{{code}}

Turvalisusele keskendunud ülevaade:

Uurige seda koodi turvasilmaga. Otsige levinud OWASP-stiilis haavatavusi: süstimine, katkine autentimine/volitamine, tundlike andmete avalikustamine, ebaturvaline deserialiseerimine, autentimata ümbersuunamine. Iga leiu kohta: risk, kasutamise stsenaarium, heastamine. See on esialgne sõeluuring; suunake kriitilised leiud inimturvalisuse ülevaatusele.{{code}}

Sõltuvuse ja litsentsi kontrollimine:

Loetlege selle koodiga lisatud/soovitatavad sõltuvused. Igaühe puhul: kas pakett on tegelikult olemas, kas seda hooldatakse, milline oleks selle tüüpiline litsents (TULEB KONTROLLIDA) ja kas seda on projekti jaoks tegelikult vaja või saab seda teha olemasoleva tööriistaga?{{code or dependency list}}

Ohutu raketise paigaldamine (tootmisel):

Kirjutage kood {{ülesande}} jaoks. KOHUSTUSLIKUD turvareeglid: - Kontrollige/puhastage kõik välised sisendid. - Kasutage andmebaasi juurdepääsul ainult parameetritega päringuid. - Ärge manustage koodi saladusi; eeldame keskkonnamuutujat/saladust haldurit – Ärge neelake vigu alla; Kaaluge seda tähendusrikkalt. Selgitage kolmes punktis, kuidas kood nendele reeglitele vastab.

Nõrk viip / Tugev viip

Nõrk: "Kirjutage päring, mis otsib kasutajanime järgi." (Võib esineda süstimise suhtes haavatav kood.)
Tugev: "Kirjutage funktsioon, mis otsib kasutajanime järgi. Ärge kunagi ühendage kasutaja sisendit päringusse stringina; kasutage parameetritega päringut (ettevalmistatud lause). Kinnitage sisend pikkuse ja tähemärgi osas. Selgitage 2 lausega, miks kood on sisestamiseks suletud."

Tugev versioon kehtestab turvalise mustri algusest peale; Seega tagab see, et haavatavust üldse ei teki, selle asemel et seda hiljem tabada. Siiski on oluline genereeritud kood läbi kontrollvärava edastada.

Autentimiskiht

Tööriist/meetod

Kas "AI-st" piisab?

täpsust

Koostamine, testimine, visuaalne kontroll

ei

API/paketireaalsus

Ametlik dokumentide/kirjete kontroll

ei

Turvalisus

SAST, turvaülevaade

ei

Litsents/allikas

Sõltuvuste ja litsentside kontroll

ei

Turvakriitiline loogika

Ekspertinseneri kinnitus

Absoluutselt mitte

Vastutust ei saa üle anda

Vastutus AI tööriista toodetud koodist tulenevate vigade, haavatavuste või rikkumiste eest kuulub meeskonnale, kes selle koodi kokku paneb ja levitab, mitte tööriista pakkuja. See on nii professionaalne kui ka juriidiline fakt: kirjutate alla. Nii et "AI tootis seda" ei ole vabandus, vaid õigustus ekstra ettevaatlikkusele. Eriti ohutuskriitilistes süsteemides ei asenda tehisintellekti väljund mingil juhul kvalifitseeritud inseneri läbivaatamist ja heakskiitu; Maksimaalselt pakub AI kavandit, mis seda inseneri kiirendab.

Näpunäide. Looge oma meeskonnale lühike kontroll-loend, mida nimetate tehisintellekti loodud koodi valideerimisväravaks (ehitamine + test + turvakontroll + visuaalne kontroll). Kui see värav muutub harjumuseks, on kiiruse kaotus minimaalne ja riskide vähenemine maksimaalne.

Levinud vead

  • Segi ajada "töötab" ja "turvaline". Testimise läbinud kood võib olla rünnaku suhtes haavatav.
  • Paketi/API kasutamine ilma seda kinnitamata. Hallutsinatsioonipaketid rikuvad ja kujutavad endast turvariski.
  • Automatiseeritud tööriistadest möödahiilimine. Linter, tüübikontroll ja SAST püüavad odavalt kinni, millest inimesed puudust tunnevad.
  • Litsentsi eiramine. Ebaõige litsentsitud sõltuvus tekitab levitamisele juriidilise koormuse.
  • Vastutuse panemine sõidukile. Tootmises oleva koodi eest vastutab meeskond; "AI tegi seda" ei ole vabandus.

Kokkuvõttes

Tehisintellekti väljundi aktsepteerimine nõuab kolme kontrollikihti: õigsus (koostamine, testimine, visuaalne kontroll), turvalisus (SAST ja turvalisusele keskendunud ülevaade) ja allikas/litsents (sõltuvuse kontroll). Veenduge, et iga kasutatud pakett ja API on tegelikult olemas, jõustage algusest peale turvalised mustrid ja esitage kvalifitseeritud insenerile kinnitamiseks turvalisuse seisukohalt kriitiline kood. "Töötab" ei tähenda ohutut ja "AI toodetud" ei eemalda vastutust. Taatlusvärav on professionaalsuse, mitte kiiruse hind.

Rakenduse ülesanne

Andke tehisintellektile teadlikult turvatundlik ülesanne (nt „funktsioon, mis otsib andmebaasist kasutaja sisendiga”), seekord ilma turvalist mustrit kehtestamata. Edastage sissetulev kood "sissepääsueelse enesekontrolli" ja "turvalisusele keskendunud ülevaatuse" mallide kaudu: kas on süstimist, maetud saladust, hallutsineeritud paketti või autentimata sisendit? Seejärel esitage sama ülesanne uuesti malliga "Turvaline muster" ja võrrelge kahte väljundit. Võimaluse korral käivitage tööriist linter/SAST ja võrrelge tulemusi tehisintellekti iseregulatsiooniga.

kontrollnimekiri

  • [ ] Kontrollin tehisintellekti väljundit kolmel tasandil: täpsus, turvalisus ja litsents.
  • [ ] Kinnitan, et iga kasutatud funktsioon, API ja pakett on reaalselt olemas.
  • [ ] Käitan kompileerimise, testimise, linteri ja võimalusel SAST-i tööriistu.
  • [ ] Ma kehtestan algusest peale turvalised mustrid (parameetritega päring, sisendi kinnitamine, salajane haldamine).
  • [ ] Kontrollin litsentsimist ja uute sõltuvuste nõuet.
  • [ ] Esitan turvakriitilise koodi pädevale insenerile kinnitamiseks ja saan aru, et vastutan selle eest.