Dobici:
- Sposobnost korištenja umjetne inteligencije kao drugog oka i označavanja ranjivosti OWASP klase (injekcija, hard secret, kontrola pristupa) u kodu davanjem konteksta
- Sposobnost uklanjanja lažno pozitivnih rezultata koje proizvodi umjetna inteligencija s kontekstom i sprječavanje tretiranja svakog nalaza kao stvarne ranjivosti bez provjere
- Sposobnost prepoznavanja da popravak koji predlaže umjetna inteligencija može uvesti nove ranjivosti/bugove i proći svaku zakrpu kroz vrata za pregled i testiranje
Ranjivosti unutar softvera su među najskupljim ranjivostima jer su ugrađene u proizvod od početka i distribuirane milijunima korisnika. Pregled sigurnog koda proces je čitanja izvornog koda redak po redak i otkrivanja ranjivosti — SQL ubacivanje, ranjivost autentifikacije, tvrdo kodirana lozinka, netočna autorizacija — prije nego što krenu u proizvodnju. Kada se radi ručno, sporo je i naporno; Lako je propustiti ranjivost u velikoj bazi koda.
AI je moćan u pregledu koda iz dva razloga: kod je također jezik, a AI je dobar u prepoznavanju uzoraka. AI može brzo označiti opasne uzorke u dijelu koda (stavljanje korisničkog unosa izravno u upit, nešifrirana pohrana podataka, nedostajanje provjere valjanosti unosa), objasniti zašto je svaki riskantan i predložiti popravak. Ali AI ne vidi cijeli operativni kontekst koda (ulaz se možda briše na drugom sloju), može izmisliti ranjivost koja ne postoji (lažno pozitivno) ili propustiti pravu ranjivost (lažno negativno), i što je najvažnije, "popravak" koji predlaže može uvesti novu ranjivost ili grešku. AI je drugo oko i pokazivač u pregledu koda; Programer i stručnjak za sigurnost odlučuju je li nalaz stvarna ranjivost i je li popravak ispravan i siguran.
Koraci pregleda koda
- Dajte opseg i kontekst. Koji jezik, koji okvir, gdje ovaj kod uzima ulaz, gdje daje izlaz, na kojem sloju radi? Pregled koda bez konteksta daje lažne rezultate.
- Skenirajte opasne uzorke. Potražite poznate klase ranjivosti AI (kao što je OWASP Top 10): ubrizgavanje, autentifikacija, otkrivanje osjetljivih podataka, kontrola pristupa.
- Svaki nalaz obrazložiti. Za svaku zastavu: koja linija, koja klasa ranjivosti, kako se može iskoristiti, koji su dokazi. Neopravdani nalaz se ne shvaća ozbiljno.
- Uklonite lažno pozitivno. Briše li se unos stvarno, je li taj put doista dostupan — provjerite u kontekstu.
- Provjerite ispravak. Potvrdite da zakrpa koju preporučuje AI zapravo zatvara ranjivost, ne uvodi nove ranjivosti/bugove i da je prošla testiranje.
- Ljudsko odobrenje. Programer + sigurnosni stručnjak pregledava nalaz i popravlja; Tako ulazi u spremište koda.
Uvjeti: SAST (Static Application Security Testing — statičko sigurnosno testiranje koje analizira izvorni kod bez njegovog pokretanja). DAST (Dynamic — dinamičko testiranje koje eksterno testira pokrenutu aplikaciju). OWASP Top 10 je standardni popis najčešćih ranjivosti web aplikacija. Injekcija je ranjivost uzrokovana tumačenjem korisničkog unosa kao naredbe/upita (npr. SQL injekcija). Parametrizirani upit ispravna je metoda koja sprječava ubacivanje odvajanjem ulaza od koda.
Tablica uobičajenih klasa ranjivosti
Klasa ranjivosti
Simptom (u kodu)
pravo rješenje
AI-ova zamka
SQL injekcija
Spajanje unosa u upit
Parametrizirani upit
Može zanemariti dezinfekciju
tvrdo kodirana tajna
Lozinka/unesite šifru
Tajni sef (trezor), okr
Lažno pozitivno (uzorak/test)
Slaba autentifikacija
Nedostaje/neispravna kontrola
Snažna, centralizirana kontrola
promašuje kontekst
Neispravna kontrola pristupa
Nema provjere autorizacije
Autorizacija na strani poslužitelja
Ne razumije složeni tok
Otkrivanje osjetljivih podataka
Pohrana/zapisivanje bez lozinke
Šifriranje, maskiranje
Ne može znati kritičnost
Nesigurna serijalizacija
Deserijalizirajte nepouzdane podatke
Sigurno analiziranje
Nedostaje rijedak uzorak
tri mini kućišta
Slučaj 1 — Hvatanje stvarne injekcije. Programer ima AI da ispita funkciju pristupa podacima. AI označava liniju u kojoj je vrijednost userId od korisnika spojena izravno u SQL tekst i kaže "ovo je klasična SQL injekcija, pretvorite je u parametrizirani upit"; Omogućuje korekciju uzorka. Programer potvrđuje da unos nije saniran negdje drugdje, potvrđuje da se radi o stvarnoj ranjivosti, implementira predloženi parametrizirani upit i piše test. AI je istaknuo ranjivost; provjera i testiranje ispravaka dolazi od programera.
Slučaj 2 — Lažno pozitivna fiksna tajna. AI vidi lozinku = "test1234" redak u datoteci i kaže "kritično: tvrdo kodirana lozinka". Programer provjerava kontekst: ovo je jedinična testna datoteka, lažni testni podaci, koji nisu pušteni u proizvodnju i nisu preneseni na pravi sustav. Nalaz je lažno pozitivan. Programer to dokumentira, ali ne poduzima ništa jer to nije prava tajna. Lekcija: AI-jev znak "teške tajne" mora biti eliminiran kontekstom; Nije svaki niz tajna.
Slučaj 3 — Novi popravak ranjivosti. AI predlaže popravak za XSS (cross-site scripting) ranjivost; ali kod koji on predlaže briše unos na pogrešnom mjestu i preskače izlazno kodiranje u drugom području; Kao rezultat toga, jaz se ne zatvara u potpunosti. Stručnjak za sigurnost pregledava popravak, primjećuje nedostajuće kodiranje i popravlja ga na ispravnom sloju. Lekcija: Zakrpa koju AI preporučuje nije automatski sigurna; Svaki popravak se pregledava i testira.
Slab upit / Jak upit
Slab upit:
Postoji li rupa u ovom kodu, popravite je: [code]
Ovaj upit ne daje kontekst (jezik, okvir, izvor unosa), ne traži opravdanje, ne dovodi u pitanje lažno pozitivno i otvoren je za slijepo prihvaćanje ispravka koje je proizvela umjetna inteligencija. AI je pomiješao znakove stvarne ranjivosti i nepostojeće.
Snažan upit:
Vaša uloga: pomoćnik koji je DRUGO OKO programeru u sigurnom pregledu koda. Donošenje odluka; smatrati da je popravak izravno primijenjen. Kod: [navedite jezik/okvir]. Kontekst: ova funkcija [izvor unosa: npr. prima [vanjski HTTP zahtjev], piše u [odredište izlaza]. Vaš zadatak: (1) označite moguće ranjivosti s OWASP klasom, navedite broj retka + zašto rizično + kako iskoristiti + dokaze za svaku, (2) napišite barem 1 lažno pozitivan scenarij za svaki nalaz (npr. ako je unos saniran u drugom sloju), (3) predložite popravak, ali sa znakom "[review + write test]"; Također procijenite uvodi li popravak nove ranjivosti/bugove. Dodavanje lažne ranjivosti.[code]
Snažan upit daje kontekst, traži OWASP klasu i dokaze, dovodi u pitanje lažno pozitivno i rizike sanacije, prisiljava na ljudski pregled.
Predlošci upita koji se mogu kopirati
PREDLOG SKENIRANJA RANJIVOSTI Ispitajte [jezik/okvir] kod za OWASP Top 10. Za svaki mogući nalaz: broj retka, klasa ranjivosti, zašto je rizično, primjer iskorištavanja, snaga dokaza (siguran/vjerojatan/slab). Kontekst: ulaz [izvor], izlaz [cilj]. Dodavanje izmišljenih nalaza; Ako niste sigurni, upišite "[mora biti potvrđeno]". Šifra: [zalijepi]
LAŽNO POZITIVAN OBRAZAC UKLANJANJA Za sljedeće pronalaženje koda, navedite scenarije u kojima NEMA stvarne ranjivosti: može li se unos obrisati na drugom sloju, je li ovaj put dostupan, je li ova vrijednost test/uzorak, je li okvir automatski zaštićen. Za svaku napiši kako potvrditi. Nalaz: [zalijepi]
PREDLOŽAK PROCJENE POPRAVKA preporuča popravak za sljedeću ranjivost; zatim kritizirajte svoj vlastiti popravak: (1) zatvara li doista ranjivost, (2) uvodi li novu ranjivost/bug, (3) koji test trebam napisati (pozitivan i negativan slučaj), (4) učinak/utjecaj na funkcionalnost. Pregledat ću i testirati popravak. Ranjivost + kod: [zalijepi]
SIGURNI UZORAK NASTAVNOG PREDLOŽKA za klasu ranjivosti [npr. SQL injection] usporedno pokazuju uzorak sigurnog tipkanja i uobičajene pogrešne obrasce u ovom jeziku/okviru. Opće pravilo + dati primjer koda; ali želim da pitate kontekst prije nego što to implementirate u moj kod. Jezik/okvir: [pisati]
Uobičajene greške
- Recenzija bez konteksta. Bez jezika, okvira i ulazno/izlaznog konteksta, umjetna inteligencija zbunjuje stvarne i lažne nalaze; Obavezno navedite kontekst.
- Miješajući svaki znak sa stvarnom slabošću. AI proizvodi lažne rezultate (podaci testiranja, unos očišćen na drugom sloju); Prosijajte svaki nalaz s kontekstom.
- Slijepa primjena AI-jeve korekcije. Preporučena zakrpa može uvesti nove ranjivosti/bugove; pregledati i napisati testove.
- Vjerovati lažno negativnom. Čak i ako AI kaže "nema ranjivosti", sami ispitajte kritične putove; Statičko skeniranje ne otkriva svaku ranjivost.
- Davanje šifre/tajne vanjskom alatu. Privatni kod i stvarne tajne (ključ, lozinka) su intelektualno vlasništvo i ranjivost; anonimizirati ili koristiti korporativne, izolirane alate.
Savjet: kada imate AI kod za pregled, najučinkovitiji filtar je tražiti "snagu dokaza" (sigurno/vjerojatno/slabo) za svaki nalaz. Većina nalaza označenih kao "slabo" su lažno pozitivni; svoju energiju raspoređujete na one "sigurne".
Oprez: sigurnosni popravak koji je predložio AI ne bi trebao ući u skladište bez testiranja. Neispravan "popravak" može ostaviti otvorenu ranjivost i dovesti do funkcionalne pogreške u proizvodnji; Svaka zakrpa prolazi kroz vrata za pregled i testiranje.
Ukratko
Siguran pregled koda najjeftiniji je način za otkrivanje ranjivosti prije nego što krenu u proizvodnju, a budući da je kod jezik, AI ovdje postaje moćno drugo oko: označava opasne obrasce, objašnjava rizik, predlaže popravke. Ali AI ne vidi cijeli operativni kontekst, proizvodi lažno pozitivne i lažno negativne rezultate, a zakrpa koju preporučuje može uvesti nove ranjivosti. Dakle, pregled ima šest koraka (kontekst, pregled, opravdanje, lažno pozitivno uklanjanje, provjera popravka, ljudsko odobrenje), a odluka je na programeru i stručnjaku za sigurnost. Tri principa: nijedan nalaz se ne tumači bez konteksta, svaki znak se eliminira s kontekstom, nijedan popravak ne ide u pohranu neprovjeren. A kod/tajna se nikada ne daje vanjskom alatu bez anonimizacije.
Zadatak aplikacije
Uzmite ogledni isječak koda (bilo uklanjanjem osjetljivih dijelova iz vlastitog koda ili ogledni kod s ranjivostima). Neka ga AI ispita s predloškom "Skeniranje ranjivosti"; Primijenite predložak "False Positive Elimination" za svaki nalaz i eliminirajte one prave. Uzmite ispravak najozbiljnijeg nalaza uz predložak "Ocjena sanacije", sami pregledajte i napišite jedan pozitivan + jedan negativan test case. Zabilježite koliko je nalaza bilo lažno pozitivno.
popis za provjeru
- [ ] Dao sam jezik, okvir i ulazno/izlazni kontekst prije pregleda koda.
- [ ] Tražio sam broj retka, klasu ranjivosti, put iskorištavanja i dokaz za svaki nalaz.
- [ ] Provjerio sam svaki nalaz na lažno pozitivne rezultate s kontekstom.
- [ ] Nisam slijepo primijenio AI ispravak; Pregledao sam i napisao test.
- [ ] Unatoč izlazu "Nema ranjivosti", sam sam ispitao kritične staze.
- [ ] Anonimizirao sam kod/tajne ili koristio korporativni izolirani alat.
- [ ] Prošao sam otkrivanje i popravak kroz odobrenje razvojnog programera + sigurnost.