Dobici:
- Sposobnost korištenja umjetne inteligencije kao drugog oka i označavanja ranjivosti klase OWASP (ubrizgavanje, čvrsta tajna, kontrola pristupa) u kodu davanjem konteksta
- Sposobnost eliminacije lažnih pozitivnih rezultata umjetne inteligencije s kontekstom i sprječavanja tretiranja svakog nalaza kao stvarne ranjivosti bez potvrđivanja istog
- Sposobnost prepoznavanja da popravak predložen od strane umjetne inteligencije može uvesti nove ranjivosti/bugove i proći svaku zakrpu kroz vrata za pregled i testiranje
Ranjivosti unutar softvera spadaju među najskuplje ranjivosti jer su ugrađene u proizvod od početka i distribuirane milionima korisnika. Sigurnosni pregled koda je proces čitanja izvornog koda red po red i otkrivanja ranjivosti — SQL injekcije, provjere autentičnosti, tvrdo kodirane lozinke, netačne autorizacije — prije nego što krenu u proizvodnju. Kada se radi ručno, to je sporo i zamorno; 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 obrazaca. AI može brzo označiti opasne obrasce u dijelu koda (stavljanje korisničkog unosa direktno u upit, skladištenje nešifriranih podataka, propuštanje validacije unosa), objasniti zašto je svaki rizičan i predložiti popravak. Ali AI ne vidi cijeli operativni kontekst koda (unos se možda briše na drugom sloju), može izmisliti ranjivost koja ne postoji (lažno pozitivan) ili propustiti stvarnu ranjivost (lažno negativan), 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 da li je nalaz prava ranjivost i da li je ispravak 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 proizvodi lažne pozitivne rezultate.
- Skenirajte opasne obrasce. Potražite poznate klase ranjivosti AI (kao što je OWASP Top 10): ubrizgavanje, autentifikacija, otkrivanje osjetljivih podataka, kontrola pristupa.
- Neka svaki nalaz bude opravdan. Za svaku zastavu: koja linija, koja klasa ranjivosti, kako se može iskoristiti, koji su dokazi. Neopravdani nalaz se ne shvata ozbiljno.
- Eliminišite lažno pozitivne. Da li se unos zaista briše, da li je taj put zaista dostupan - provjerite u kontekstu.
- Potvrdite ispravku. Potvrdite da zakrpa koju preporučuje AI zapravo zatvara ranjivost, ne uvodi nove ranjivosti/bugove i da je prošla testiranje.
- Ljudsko odobrenje. Programer + stručnjak za sigurnost pregleda nalaz i popravak; Tako ulazi u spremište kodova.
Uslovi: SAST (Static Application Security Testing — statičko testiranje sigurnosti koje analizira izvorni kod bez njegovog pokretanja). DAST (Dynamic — dinamičko testiranje koje eksterno testira pokrenutu aplikaciju). OWASP Top 10 je standardna lista najčešćih ranjivosti web aplikacija. Injekcija je ranjivost uzrokovana tumačenjem korisničkog unosa kao naredbe/upita (npr. SQL injekcija). Parametrizovani upit je ispravan metod koji sprečava ubrizgavanje odvajanjem unosa od koda.
Tabela uobičajenih klasa ranjivosti
Klasa ranjivosti
Simptom (u kodu)
pravo rešenje
AI zamka
SQL injekcija
Spajanje unosa u upit
Parametrizovani upit
Može zanemariti dezinfekciju
tvrdo šifrovana tajna
Lozinka/ključ u kodu
Tajni sef (trezor), okr
Lažno pozitivan (uzorak/test)
Slaba autentifikacija
Nedostaje/netačna kontrola
Snažna, centralizovana kontrola
nedostaje kontekst
Neispravna kontrola pristupa
Nema provjere autorizacije
Autorizacija na strani servera
Ne razumije složeni tok
Otkrivanje osjetljivih podataka
Pohrana/zapisivanje bez lozinke
Šifrovanje, maskiranje
Ne mogu znati kritičnost
Nesigurna serijalizacija
Deserijalizirajte nepouzdane podatke
Sigurno raščlanjivanje
Nedostaje rijedak uzorak
tri mini kofera
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 direktno u SQL tekst i kaže "ovo je klasična SQL injekcija, pretvorite je u parametrizirani upit"; Omogućava korekciju uzorka. Programer potvrđuje da unos nije dezinficiran na drugom mjestu, potvrđuje da je stvarna ranjivost, implementira predloženi parametrizirani upit i piše test. AI je istakao ranjivost; Testiranje verifikacije i ispravke je došlo od programera.
Slučaj 2 — Lažno pozitivna fiksna tajna. AI vidi red za lozinku = "test1234" u datoteci i kaže "kritično: tvrdo kodirana lozinka". Programer provjerava kontekst: ovo je datoteka za jedinični test, lažni testni podaci, koji nisu pušteni u proizvodnju i nisu portovani na pravi sistem. Nalaz je lažno pozitivan. Programer to dokumentira, ali ne poduzima ništa jer to nije prava tajna. Pouka: Znak AI "tvrda tajna" mora biti eliminisan kontekstom; Nije svaki niz tajna.
Slučaj 3 — Nova popravka ranjivosti. AI predlaže ispravku za XSS (cross-site scripting) ranjivost; ali kod koji on predlaže briše unos na pogrešnom mjestu i preskače kodiranje izlaza u drugom području; Kao rezultat toga, jaz se ne zatvara u potpunosti. Stručnjak za sigurnost pregleda ispravku, primijeti kodiranje koje nedostaje i popravi ga na ispravnom sloju. Lekcija: Zakrpa koju AI preporučuje nije automatski sigurna; Svaki popravak se pregleda i testira.
Slaba prompt / Jaka prompt
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 pozitivan i otvoren je slijepom prihvatanju korekcije koju je proizvela AI. AI je pomiješao znakove i 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; razmotrite direktno primijenjenu popravku. Kod: [navedite jezik/okvir]. Kontekst: ova funkcija [izvor unosa: npr. prima [eksterni HTTP zahtjev], upisuje na [izlazno odredište]. Vaš zadatak: (1) označite moguće ranjivosti klasom OWASP, navedite broj reda + zašto je rizično + kako iskoristiti + dokaz za svaki, (2) napišite najmanje 1 lažno pozitivan scenario za svaki nalaz (npr. ako je unos dezinficiran u drugom sloju), (3) predložite popravak, ali sa znakom "[pregled + test pisanja]"; Također procijenite da li popravka uvodi nove ranjivosti/greške. Dodavanje lažne ranjivosti.[code]
Snažan upit daje kontekst, traži OWASP klasu i dokaze, dovodi u pitanje lažno pozitivan rezultat i rizike sanacije, tjera ljude na pregled.
Predlošci upita koji se mogu kopirati
ŠABLONA ZA SCENIRANJE RANJIVOSTI Ispitajte [jezik/okvir] kod za OWASP Top 10. Za svaki mogući nalaz: broj reda, klasa ranjivosti, zašto je rizično, eksploatacija uzorka, snaga dokaza (izvjesno/vjerovatno/slabo). Kontekst: ulaz [izvor], izlaz [cilj]. Dodavanje fabrikovanih nalaza; Ako niste sigurni, upišite "[mora biti potvrđen]". Šifra: [zalijepi]
LAŽNO POZITIVNI UBRAZAC ELIMINACIJE Za sljedeće pronalaženje koda, navedite scenarije u kojima NE postoji stvarna ranjivost: da li se ulaz može obrisati na drugom sloju, da li je ova staza dostupna, da li je ova vrijednost test/uzorak, da li je okvir automatski zaštićen. Napišite kako da potvrdite za svaku od njih. Nalaz: [zalijepi]
FIX EVALUATION TAMPLATERPreporučite ispravku za sljedeću ranjivost; zatim kritikujte svoju ispravku: (1) da li zaista zatvara ranjivost, (2) da li uvodi novu ranjivost/bug, (3) koji test da napišem (pozitivan i negativan slučaj), (4) uticaj na performanse/funkcionalnost. Pregledat ću i testirati ispravak. Ranjivost + kod: [zalijepi]
SIGURNI OBRAZAC ZA NASTAVU za klasu ranjivosti [npr. SQL injekcija] komparativno pokazuju siguran obrazac kucanja i uobičajene pogrešne obrasce u ovom jeziku/okviru. Opće pravilo + dati primjer koda; ali želim da pitate kontekst prije nego što ga implementirate u moj kod. Jezik/okvir: [pisati]
Uobičajene greške
- Pregled bez konteksta. Bez jezika, okvira i ulazno/izlaznog konteksta, AI zbunjuje i stvarne i lažne nalaze; Obavezno navedite kontekst.
- Zamijeniti svaki znak za pravu slabost. AI proizvodi lažne pozitivne rezultate (testni podaci, ulaz očišćen na drugom sloju); Procijedite svaki nalaz s kontekstom.
- Slijepo primjena korekcije AI. 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 puteve; Statičko skeniranje ne otkriva svaku ranjivost.
- Davanje koda/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 kod za pregled AI, najefikasniji filter je tražiti "jaku dokaza" (izvjesan/vjerovatan/slab) za svaki nalaz. Većina nalaza označenih kao “slab” su lažno pozitivni; svoju energiju dodeljujete onim „sigurnim“.
Oprez: Sigurnosna ispravka koju je predložila AI ne bi trebala ući u skladište bez testiranja. Neispravan "popravak" može i ostaviti ranjivost otvorenom i dovesti do funkcionalne greške u proizvodnji; Svaki patch prolazi kroz pregled i testiranje.
Ukratko
Sigurni pregled koda je najjeftiniji način da se otkriju ranjivosti prije nego što krenu u proizvodnju, a pošto 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žne pozitivne i lažne negativne, a zakrpa koju preporučuje može uvesti nove ranjivosti. Dakle, pregled ima šest koraka (kontekst, skrining, opravdanje, lažno pozitivno uklanjanje, provjera popravka, ljudsko odobrenje) i odluka je na programeru i stručnjaku za sigurnost. Tri principa: nijedan nalaz se ne tumači bez konteksta, svaki znak se eliminiše sa kontekstom, nijedan popravak ne ide u skladište neproveren. A kod/tajna se nikada ne daje vanjskom alatu bez anonimizacije.
Zadatak aplikacije
Uzmite primjer isječka koda (ili uklanjanje osjetljivih dijelova iz vlastitog koda ili uzorak koda s ranjivostima). Neka ga AI ispita pomoću šablona „Skeniranje ranjivosti“; Primijenite šablon "False Positive Elimination" za svaki nalaz i eliminirajte prave. Uzmite ispravku najozbiljnijeg nalaza sa šablonom "Evaluacija sanacije", pregledajte ga sami i napišite jedan pozitivan + jedan negativan test slučaj. Obratite pažnju koliko je nalaza bilo lažno pozitivnih.
kontrolna lista
- [ ] Dao sam jezik, okvir i ulazno/izlazni kontekst prije pregleda koda.
- [ ] Tražio sam broj linije, klasu ranjivosti, putanju eksploatacije i dokaze za svaki nalaz.
- [ ] Svaki nalaz sam pregledao na lažne pozitivne rezultate sa kontekstom.
- [ ] Nisam slepo primenio korekciju AI; Pregledao sam i napisao test.
- [ ] Uprkos izlazu "Bez ranjivosti", sam sam ispitao kritične puteve.
- [ ] Anonimizirao sam kod/tajne ili koristio korporativne izolirane alate.
- [ ] Prošao sam otkrivanje i popravak putem odobrenja programera + sigurnosti.