Dobički:
- Zmožnost uporabe umetne inteligence kot drugega očesa in označevanja ranljivosti razreda OWASP (injekcija, trda skrivnost, nadzor dostopa) v kodi z podajanjem konteksta
- Sposobnost odpravljanja lažnih pozitivnih rezultatov, ki jih ustvari umetna inteligenca s kontekstom, in prepreči, da bi vsako ugotovitev obravnavali kot resnično ranljivost, ne da bi jo potrdili
- Sposobnost prepoznavanja, da lahko popravek, ki ga predlaga umetna inteligenca, povzroči nove ranljivosti/hrošče in prenese vsak popravek skozi vrata za pregled in testiranje
Ranljivosti v programski opremi so med najdražjimi ranljivostmi, ker so že od začetka vgrajene v izdelek in razdeljene milijonom uporabnikov. Pregled varne kode je postopek branja izvorne kode vrstico za vrstico in lovljenja ranljivosti – vbrizgavanje SQL, ranljivost pri preverjanju pristnosti, trdo kodirano geslo, napačna avtorizacija – preden gredo v proizvodnjo. Ko se dela ročno, je počasno in utrujajoče; V veliki bazi kode je enostavno spregledati ranljivost.
AI je močan pri pregledu kode iz dveh razlogov: koda je tudi jezik in AI je dober pri prepoznavanju vzorcev. Umetna inteligenca lahko hitro označi nevarne vzorce v delu kode (uporabniški vnos neposredno v poizvedbo, nešifrirano shranjevanje podatkov, manjkajoče preverjanje vnosa), razloži, zakaj je vsak tvegan, in predlaga popravek. Toda umetna inteligenca ne vidi celotnega operacijskega konteksta kode (vnos se morda čisti na drugi ravni), lahko si izmisli ranljivost, ki ne obstaja (lažno pozitivno) ali zgreši pravo ranljivost (lažno negativno), in kar je najpomembneje, "popravek", ki ga predlaga, lahko povzroči novo ranljivost ali hrošč. AI je drugo oko in kazalec pri pregledu kode; Razvijalec in strokovnjak za varnost odločita, ali je najdba resnična ranljivost in ali je popravek pravilen in varen.
Koraki pregleda kode
- Določite obseg in kontekst. Kateri jezik, kateri okvir, kje ta koda sprejema vhodne podatke, kje daje izhodne podatke, na kateri ravni deluje? Pregled kode brez konteksta povzroči lažne pozitivne rezultate.
- Iskanje nevarnih vzorcev. Poiščite znane razrede ranljivosti AI (kot je OWASP Top 10): vbrizgavanje, preverjanje pristnosti, razkritje občutljivih podatkov, nadzor dostopa.
- Vsako ugotovitev naj utemelji. Za vsako zastavo: katera linija, kateri razred ranljivosti, kako se lahko izkoristi, kakšni so dokazi. Neupravičene ugotovitve ne jemljejo resno.
- Odpravite lažno pozitivno. Ali se vnos dejansko čisti, ali je ta pot res dostopna - preverite v kontekstu.
- Preverite popravek. Potrdite, da popravek, ki ga priporoča AI, dejansko zapira ranljivost, ne uvaja novih ranljivosti/hroščev in je opravil testiranje.
- Človeško odobravanje. Razvijalec + varnostni strokovnjak pregleda ugotovitev in popravi; Tako vstopi v skladišče kode.
Pogoji: SAST (statično testiranje varnosti aplikacij — statično varnostno testiranje, ki analizira izvorno kodo, ne da bi jo zagnali). DAST (Dynamic — dinamično testiranje, ki zunanje testira delujočo aplikacijo). Top 10 OWASP je standardni seznam najpogostejših ranljivosti spletnih aplikacij. Vbrizgavanje je ranljivost, ki jo povzroča interpretacija uporabniškega vnosa kot ukaza/poizvedbe (npr. vbrizgavanje SQL). Parametrizirana poizvedba je pravilna metoda, ki preprečuje vstavljanje tako, da loči vnos od kode.
Tabela skupnih razredov ranljivosti
Razred ranljivosti
Simptom (v kodi)
prava rešitev
Past AI
Vbrizgavanje SQL
Združevanje vnosa v poizvedbo
Parametrizirana poizvedba
Lahko prezre sanitarije
trdo kodirana skrivnost
Geslo/vnesite kodo
Tajni trezor (trezor), okr
Lažno pozitivno (vzorec/test)
Šibka avtentikacija
Manjka/napačen nadzor
Zmogljiv, centraliziran nadzor
zgreši kontekst
Napačen nadzor dostopa
Brez preverjanja avtorizacije
Pooblastilo na strani strežnika
Ne razume kompleksnega toka
Razkritje občutljivih podatkov
Shranjevanje/beleženje brez gesla
Šifriranje, maskiranje
Ne pozna kritičnosti
Nezanesljiva serializacija
Deserializirajte nezanesljive podatke
Varno razčlenjevanje
Manjka redek vzorec
trije mini kovčki
Primer 1 – Ujemanje dejanskega vbrizga. Razvijalec ima AI, da pregleda funkcijo dostopa do podatkov. AI označuje vrstico, kjer je vrednost userId od uporabnika povezana neposredno v besedilo SQL in pravi "to je klasična injekcija SQL, spremenite jo v parametrizirano poizvedbo"; Zagotavlja popravek vzorca. Razvijalec potrdi, da vnos ni bil saniran drugje, preveri, ali gre za resnično ranljivost, implementira predlagano parametrizirano poizvedbo in napiše test. AI je poudaril ranljivost; preverjanje in testiranje popravkov je prišlo od razvijalca.
Primer 2 – Lažno pozitivna fiksna skrivnost. Umetna inteligenca vidi vrstico password = "test1234" v datoteki in reče "kritično: trdo kodirano geslo". Razvijalec preveri kontekst: to je testna datoteka enote, navidezni preskusni podatki, ki niso izdani v produkcijo in niso preneseni v pravi sistem. Ugotovitev je lažno pozitivna. Razvijalec to dokumentira, vendar ne ukrepa, ker ni prava skrivnost. Lekcija: Znak "trde skrivnosti" AI je treba odstraniti s kontekstom; Ni vsak niz skrivnost.
3. primer – Nov popravek ranljivosti. AI predlaga popravek za ranljivost XSS (crosssite scripting); vendar koda, ki jo predlaga, počisti vnos na napačnem mestu in preskoči izhodno kodiranje na drugem območju; Zaradi tega se vrzel ne zapre v celoti. Varnostni strokovnjak pregleda popravek, opazi manjkajoče kodiranje in ga popravi na pravi ravni. Lekcija: popravek, ki ga priporoča AI, ni samodejno varen; Vsak popravek je pregledan in preizkušen.
Šibek poziv/močan poziv
Šibek poziv:
Ali je v tej kodi vrzel, jo popravite: [koda]
Ta poziv ne podaja nobenega konteksta (jezik, okvir, vir vnosa), ne zahteva utemeljitve, ne postavlja pod vprašaj lažno pozitivnega in je odprt za slepo sprejemanje popravka, ki ga ustvari AI. AI meša znake resnične ranljivosti in neobstoječe.
Močan poziv:
Vaša vloga: pomočnik, ki je DRUGO OKO razvijalca pri varnem pregledu kode. Sprejemanje odločitev; menijo, da je popravek neposredno uporabljen. Koda: [določite jezik/ogrodje]. Kontekst: ta funkcija [vhodni vir: npr. prejme [zunanjo zahtevo HTTP], piše v [izhodni cilj]. Vaša naloga: (1) označite možne ranljivosti z razredom OWASP, navedite številko vrstice + zakaj tvegano + kako izkoristiti + dokaze za vsako, (2) napišite vsaj 1 lažno pozitiven scenarij za vsako ugotovitev (npr. če je vnos razčiščen v drugem sloju), (3) predlagajte popravek, vendar z znakom "[preglej + napiši preizkus]"; Ocenite tudi, ali popravek uvaja nove ranljivosti/hrošče. Dodajanje lažne ranljivosti.[code]
Močan poziv daje kontekst, zahteva razred OWASP in dokaze, postavlja vprašanja o lažno pozitivnih in tveganjih sanacije, zahteva človeški pregled.
Kopirane predloge pozivov
PREDLOGA PREGLEDA RANLJIVOSTI Preglejte kodo [jezik/ogrodje] za OWASP Top 10. Za vsako možno ugotovitev: številka vrstice, razred ranljivosti, zakaj je tvegano, vzorčno izkoriščanje, trdnost dokazov (gotovo/verjetno/šibko). Kontekst: vhod [vir], izhod [cilj]. Dodajanje izmišljenih ugotovitev; Če niste prepričani, vnesite "[mora biti preverjeno]". Koda: [prilepi]
LAŽNO POZITIVNI VZOREC IZLOČITVE Za naslednjo ugotovitev kode navedite scenarije, v katerih NI resnične ranljivosti: ali bi lahko vnos počistili na drugi ravni, ali je ta pot dostopna, ali je ta vrednost test/vzorec, ali je ogrodje samodejno zaščiteno. Za vsakega napiši, kako potrditi. Najdba: [prilepi]
PREDLOGA ZA OCENJEVANJE POPRAVKA priporočam popravek za naslednjo ranljivost; nato kritizirajte svoj popravek: (1) ali res zapira ranljivost, (2) ali uvaja novo ranljivost/hrošč, (3) kateri test naj napišem (pozitiven in negativen primer), (4) vpliv na zmogljivost/funkcionalnost. Pregledal bom in preizkusil popravek. Ranljivost + koda: [prilepi]
PREDLOGA ZA UČENJE VARNEGA VZORCA za razred ranljivosti [npr. SQL injection] primerjalno prikazuje vzorec varnega tipkanja in pogoste napačne vzorce v tem jeziku/ogrodju. Splošno pravilo + navedite primer kode; vendar želim, da vprašate kontekst, preden ga implementirate v mojo kodo. Jezik/ogrodje: [piši]
Pogoste napake
- Pregled brez konteksta. Brez jezika, okvira in vhodno/izhodnega konteksta umetna inteligenca zamenjuje resnične in lažne ugotovitve; Ne pozabite navesti konteksta.
- Zamenjuje vsak znak za resnično šibkost. AI proizvaja lažno pozitivne rezultate (testni podatki, vnos očiščen na drugem nivoju); Vsako ugotovitev presejte s kontekstom.
- Slepo uporabo popravka AI. Priporočeni popravek lahko povzroči nove ranljivosti/hrošče; pregledati in napisati teste.
- Zaupati lažno negativno. Tudi če umetna inteligenca pravi, da "ni ranljivosti", sami preglejte kritične poti; Statično skeniranje ne zazna vsake ranljivosti.
- Dajanje kode/skrivnosti zunanjemu orodju. Zasebna koda in prave skrivnosti (ključ, geslo) so intelektualna lastnina in ranljivost; anonimizirajo ali uporabljajo korporativna, izolirana orodja.
Namig: če imate kodo za pregled z umetno inteligenco, je najučinkovitejši filter vprašati za "moč dokazov" (gotovo/verjetno/šibko) za vsako ugotovitev. Večina ugotovitev z oznako "šibko" je lažno pozitivnih; svojo energijo namenjate tistim »gotovim«.
Pozor: Varnostni popravek, ki ga predlaga umetna inteligenca, ne sme vstopiti v skladišče, ne da bi bil preizkušen. Nepravilen "popravek" lahko pusti ranljivost odprto in povzroči funkcionalno napako v proizvodnji; Vsak popravek gre skozi vrata pregleda in testiranja.
Če povzamem
Varen pregled kode je najcenejši način za odkrivanje ranljivosti, preden gredo v proizvodnjo, in ker je koda jezik, umetna inteligenca tukaj postane močno drugo oko: označi nevarne vzorce, razloži tveganje, predlaga popravke. Toda umetna inteligenca ne vidi celotnega konteksta delovanja, proizvaja lažno pozitivne in lažno negativne rezultate, popravek, ki ga priporoča, pa lahko uvede nove ranljivosti. Pregled ima torej šest korakov (kontekst, pregled, utemeljitev, lažno pozitivno izločanje, preverjanje popravka, človeška odobritev), odločitev pa je v rokah razvijalca in strokovnjaka za varnost. Tri načela: nobena ugotovitev ni razložena brez konteksta, vsak znak je izločen s kontekstom, noben popravek ne gre v hrambo nepreizkušen. In koda/skrivnost ni nikoli posredovana zunanjemu orodju brez anonimizacije.
Aplikacijska naloga
Vzemite vzorčni delček kode (bodisi odstranite občutljive dele iz lastne kode ali vzorčno kodo z ranljivostmi). Naj ga AI pregleda s predlogo »Iskanje ranljivosti«; Za vsako ugotovitev uporabite predlogo "False Positive Elimination" in izločite prave. Vzemite popravek najhujše ugotovitve s predlogo "Ocena sanacije", sami pregledajte in napišite en pozitiven + en negativen testni primer. Upoštevajte, koliko ugotovitev je bilo lažno pozitivnih.
kontrolni seznam
- [ ] Podal sem jezik, ogrodje in vhodno/izhodni kontekst, preden sem pregledal kodo.
- [ ] Zahteval sem številko vrstice, razred ranljivosti, pot izkoriščanja in dokaz za vsako ugotovitev.
- [ ] Vsako ugotovitev sem pregledal glede lažno pozitivnih rezultatov s kontekstom.
- [] Nisem na slepo uporabil popravka AI; Pregledal sem in napisal test.
- [ ] Kljub izpisu "Brez ranljivosti" sem sam pregledal kritične poti.
- [ ] Anonimiziral sem kodo/skrivnosti ali uporabil izolirano orodje podjetja.
- [ ] Odkritje in popravek sem opravil z odobritvijo razvijalca + varnosti.