Ieguvumi:
- Iespēja izmantot mākslīgo intelektu kā otro aci un kodā atzīmēt OWASP klases ievainojamības (injekcijas, cietais noslēpums, piekļuves kontrole), piešķirot kontekstu
- Spēja novērst mākslīgā intelekta radītos viltus pozitīvos rezultātus ar kontekstu un novērst, ka katrs atradums tiek uzskatīts par reālu ievainojamību, to neapstiprinot
- Spēja atpazīt, ka mākslīgā intelekta ierosinātais labojums var ieviest jaunas ievainojamības/kļūdas un izlaist katru ielāpu cauri pārskatīšanas un testēšanas vārtiem
Programmatūras ievainojamības ir vienas no dārgākajām ievainojamībām, jo tās ir iegultas produktā no paša sākuma un izplatītas miljoniem lietotāju. Droša koda pārskatīšana ir process, kurā tiek nolasīts pirmkoda rindiņa pa rindiņai un tiek konstatētas ievainojamības — SQL injekcija, autentifikācijas ievainojamība, cietā kodēta parole, nepareiza autorizācija — pirms to nonākšanas ražošanā. Ja to dara ar rokām, tas ir lēns un nogurdinošs; Ir viegli palaist garām ievainojamību lielajā kodu bāzē.
AI ir spēcīgs koda pārskatīšanā divu iemeslu dēļ: kods ir arī valoda, un AI labi atpazīst modeļus. AI var ātri atzīmēt bīstamus modeļus koda daļā (lietotāja ievadi ievietojot tieši vaicājumā, nešifrētu datu glabāšanu, trūkstošo ievades validāciju), izskaidrot, kāpēc katrs no tiem ir riskants, un ieteikt labojumus. Taču mākslīgais intelekts neredz visu koda darbības kontekstu (ievade var tikt notīrīta citā slānī), tā var izgudrot ievainojamību, kuras nav (viltus pozitīvs) vai nepamanīt reālu ievainojamību (viltus negatīvs), un vissvarīgākais ir tas, ka tā piedāvātais "labojums" var ieviest jaunu ievainojamību vai kļūdu. AI ir otrā acs un rādītājs koda pārskatīšanā; Izstrādātājs un drošības eksperts izlemj, vai atradums ir patiesa ievainojamība un vai labojums ir pareizs un drošs.
Koda pārskatīšanas soļi
- Piešķiriet darbības jomu un kontekstu. Kurā valodā, kādā ietvarā, kur šis kods ņem ievadi, kur tas dod izvadi, kurā slānī tas darbojas? Koda pārskatīšana bez konteksta rada kļūdaini pozitīvus rezultātus.
- Meklējiet bīstamus modeļus. Meklējiet zināmās AI ievainojamības klases (piemēram, OWASP Top 10): injekcija, autentifikācija, sensitīvu datu atklāšana, piekļuves kontrole.
- Katram atradumam jābūt pamatotam. Katram karogam: kura līnija, kura ievainojamības klase, kā to var izmantot, kādi ir pierādījumi. Nepamatots konstatējums netiek uztverts nopietni.
- Novērst viltus pozitīvu. Vai ievade patiešām tiek notīrīta, vai šis ceļš patiešām ir pieejams — pārbaudiet kontekstā.
- Pārbaudiet labojumu. Apstipriniet, ka AI ieteiktais ielāps tiešām aizver ievainojamību, neievieš jaunas ievainojamības/kļūdas un ir izturējis pārbaudi.
- Cilvēka piekrišana. Izstrādātājs + drošības eksperts pārskata atradumu un labo; Tādā veidā tas nonāk kodu krātuvē.
Noteikumi: SAST (Static Application Security Testing — statiskā drošības pārbaude, kas analizē pirmkodu, to nepalaižot). DAST (Dinamiska — dinamiskā testēšana, kas ārēji pārbauda darbojošos lietojumprogrammu). OWASP Top 10 ir standarta saraksts ar visbiežāk sastopamajām tīmekļa lietojumprogrammu ievainojamībām. Injekcija ir ievainojamība, ko izraisa lietotāja ievades interpretācija kā komanda/vaicājums (piemēram, SQL injekcija). Parametru vaicājums ir pareizā metode, kas novērš ievadi, atdalot ievadi no koda.
Kopējo ievainojamības klašu tabula
Neaizsargātības klase
Simptoms (kodā)
pareizais risinājums
AI lamatas
SQL injekcija
Ievades pievienošana vaicājumam
Parametrizēts vaicājums
Var ignorēt dezinfekciju
cieti kodēts noslēpums
Parole/ievadiet kodu
Slepenais seifs (velve), env
Viltus pozitīvs (paraugs/tests)
Vāja autentifikācija
Trūkst/nepareiza vadība
Jaudīga, centralizēta vadība
palaiž garām kontekstu
Bojāta piekļuves kontrole
Nav autorizācijas pārbaudes
Servera puses autorizācija
Nesaprot sarežģītu plūsmu
Sensitīvu datu izpaušana
Uzglabāšana/reģistrācija bez paroles
Šifrēšana, maskēšana
Nevar zināt kritiskumu
Nedroša serializācija
Deserializējiet neuzticamus datus
Droša parsēšana
Pietrūkst reta raksta
trīs mini futrāļi
1. gadījums — faktiskās injekcijas uztveršana. Izstrādātājs AI pārbauda datu piekļuves funkciju. AI atzīmē rindu, kurā lietotāja userId vērtība tiek savienota tieši SQL tekstā, un saka: "Šī ir klasiska SQL injekcija, pārvērtiet to par parametrizētu vaicājumu"; Nodrošina parauga korekciju. Izstrādātājs apstiprina, ka ievade citur nav tīrīta, pārbauda, vai tā ir reāla ievainojamība, ievieš ieteikto parametrizēto vaicājumu un uzraksta testu. AI uzsvēra ievainojamību; verifikācijas un labošanas testēšana tika veikta no izstrādātāja.
2. gadījums — viltus pozitīvs fiksēts noslēpums. AI failā redz rindiņu parole = "test1234" un saka "kritiska: kodēta parole". Izstrādātājs pārbauda kontekstu: tas ir vienības testa fails, fiktīvi testa dati, kas nav izlaisti ražošanā un nav pārnesti uz reālu sistēmu. Atklājums ir kļūdaini pozitīvs. Izstrādātājs to dokumentē, bet neveic nekādas darbības, jo tas nav īsts noslēpums. Nodarbība: AI "cietā noslēpuma" zīme ir jānovērš kontekstā; Ne katra virkne ir noslēpums.
3. gadījums — jauns ievainojamības labojums. AI ierosina XSS (cross-site skriptēšanas) ievainojamības labojumu; bet viņa ieteiktais kods izdzēš ievadi nepareizajā vietā un izlaiž izvades kodējumu citā apgabalā; Rezultātā plaisa pilnībā neaizveras. Drošības eksperts pārskata labojumu, pamana trūkstošo kodējumu un labo to pareizajā slānī. Nodarbība: AI ieteiktais ielāps nav automātiski drošs; Katrs labojums tiek pārskatīts un pārbaudīts.
Vāja uzvedne / spēcīga uzvedne
Vāja uzvedne:
Vai šajā kodā ir nepilnības, izlabojiet to: [kods]
Šī uzvedne nesniedz kontekstu (valodu, ietvaru, ievades avotu), neprasa pamatojumu, neapšauba kļūdaini pozitīvu un ir atvērta akli pieņemt AI radīto labojumu. AI sajauca gan reālas, gan neesošas ievainojamības pazīmes.
Spēcīga uzvedne:
Jūsu loma: palīgs, kurš izstrādātājam ir OTRĀ ACCE drošā koda pārskatīšanā.Lēmumu pieņemšana; apsvērt tieši piemēroto labojumu. Kods: [norādīt valodu/ietvaru].Konteksts: šī funkcija [ievades avots: piem. saņem [ārējo HTTP pieprasījumu], raksta uz [izejas galamērķi]. Tavs uzdevums: (1) atzīmējiet iespējamās ievainojamības ar OWASP klasi, norādiet rindas numuru + kāpēc riskanti + kā to izmantot + pierādījumus par katru, (2) katram atradumam uzrakstiet vismaz 1 kļūdaini pozitīvu scenāriju (piemēram, ja ievade ir sanitizēta citā slānī), (3) ieteikt labojumu, bet ar zīmi "[pārskatīt + rakstīt testu]"; Novērtējiet arī, vai labojums neievieš jaunas ievainojamības/kļūdas. Viltus ievainojamības pievienošana.[kods]
Spēcīga uzvedne sniedz kontekstu, pieprasa OWASP klasi un pierādījumus, apšauba kļūdaini pozitīvus rezultātus un atlīdzināšanas riskus, liek cilvēkiem pārskatīt.
Kopējamas uzvedņu veidnes
IEDARBĪBAS SKATĒŠANAS VEIDNE Izpētiet [valoda/ietvars] kodu OWASP Top 10. Katram iespējamajam atradumam: rindas numurs, ievainojamības klase, kāpēc tas ir riskanti, parauga izmantošana, pierādījumu stiprums (noteikts/iespējams/vājš). Konteksts: ievade [avots], izvade [mērķis]. Safabricētu atradumu pievienošana; Ja neesat pārliecināts, ierakstiet "[jābūt verificētam]". Kods: [ielīmēt]
VILTUS POZITĪVS NOVĒRŠANAS PARAUGS Lai atrastu šādu kodu, uzskaitiet scenārijus, kuros NAV reālas ievainojamības: vai ievadi var notīrīt citā slānī, vai šis ceļš ir pieejams, vai šī vērtība ir tests/paraugs, vai sistēma ir automātiski aizsargāta. Katram uzrakstiet, kā apstiprināt. Atrast: [ielīmēt]
LABOJUMS NOVĒRTĒŠANAS VEIDSIeteikt labojumu šādai ievainojamībai; pēc tam kritizējiet savu labojumu: (1) vai tas patiešām aizver ievainojamību, (2) vai tas ievieš jaunu ievainojamību/kļūdu, (3) kāds tests man jāraksta (pozitīvs un negatīvs gadījums), (4) veiktspējas/funkcionalitātes ietekme. Es pārskatīšu un pārbaudīšu labojumu. Ievainojamība + kods: [ielīmēt]
DROŠA RAKSTU MĀCĪBAS VEIDNE ievainojamības klasei [piem. SQL injekcijas] salīdzinoši parāda drošu rakstīšanas modeli un izplatītos kļūdainos modeļus šajā valodā/ietvarā. Vispārīgs noteikums + sniedziet koda piemēru; bet es vēlos, lai pirms tā ieviešanas manā kodā pajautātu kontekstu. Valoda/ietvars: [rakstīt]
Biežas kļūdas
- Pārskats bez konteksta. Bez valodas, ietvara un ievades/izvades konteksta mākslīgais intelekts sajauc gan reālus, gan neīstus atklājumus; Noteikti sniedziet kontekstu.
- Sajauc katru zīmi par īstu vājumu. AI rada viltus pozitīvus rezultātus (testa dati, ievade tiek iztīrīta citā slānī); Izsijājiet katru atradumu ar kontekstu.
- Akli piemērojot AI korekciju. Ieteicamais ielāps var radīt jaunas ievainojamības/kļūdas; pārskatīt un rakstīt testus.
- Uzticoties viltus negatīvajam. Pat ja AI saka "nav ievainojamības", pārbaudiet kritiskos ceļus pats; Statiskā skenēšana neatklāj katru ievainojamību.
- Koda/noslēpuma piešķiršana ārējam rīkam. Privāts kods un īsti noslēpumi (atslēga, parole) ir intelektuālais īpašums un ievainojamība; anonimizēt vai izmantot korporatīvos, izolētos rīkus.
Padoms. Izmantojot AI pārskatīšanas kodu, visefektīvākais filtrs ir katram atradumam pieprasīt “pierādījumu stiprumu” (noteikts/iespējams/vājš). Lielākā daļa konstatējumu, kas atzīmēti kā “vāji”, ir kļūdaini pozitīvi; jūs atvēlat savu enerģiju "pārliecinātajiem".
Uzmanību: AI piedāvātais drošības labojums nedrīkst nonākt noliktavā bez pārbaudes. Nepareizs "labojums" var gan atstāt atvērtu ievainojamību, gan izraisīt funkcionālu kļūdu ražošanā; Katrs ielāps iziet cauri pārskatīšanas un testēšanas vārtiem.
Rezumējot
Droša koda pārskatīšana ir lētākais veids, kā novērst ievainojamības, pirms tās nonāk ražošanā, un, tā kā kods ir valoda, mākslīgais intelekts šeit kļūst par spēcīgu otro aci: atzīmē bīstamus modeļus, izskaidro risku, iesaka labojumus. Taču AI neredz visu darbības kontekstu, rada viltus pozitīvus un viltus negatīvus rezultātus, un tā ieteiktais ielāps var ieviest jaunas ievainojamības. Tātad pārskatīšanai ir seši posmi (konteksts, pārbaude, pamatojums, viltus pozitīva izslēgšana, labojumu pārbaude, cilvēka apstiprinājums), un lēmumu pieņem izstrādātājs un drošības eksperts. Trīs principi: neviens atradums netiek interpretēts bez konteksta, katra zīme tiek likvidēta ar kontekstu, neviens labojums nenonāk krātuvē nepārbaudīts. Un kods/noslēpums nekad netiek nodots ārējam rīkam bez anonimizācijas.
Lietojumprogrammas uzdevums
Paņemiet koda fragmenta paraugu (vai nu noņemiet sensitīvās daļas no sava koda, vai koda paraugu ar ievainojamībām). Lūdziet AI to pārbaudīt, izmantojot veidni “Vulnerability Scanning”; Katram atradumam izmantojiet veidni "Viltus pozitīvā izslēgšana" un noņemiet īstos. Veiciet nopietnākā atraduma labošanu ar veidni "Sanācijas novērtējums", pārskatiet to pats un uzrakstiet vienu pozitīvu + vienu negatīvu testa gadījumu. Ņemiet vērā, cik daudz atradumu bija kļūdaini pozitīvi.
kontrolsaraksts
- [ ] Pirms koda pārskatīšanas es norādīju valodu, sistēmu un ievades/izvades kontekstu.
- [ ] Es prasīju rindas numuru, ievainojamības klasi, ekspluatācijas ceļu un pierādījumus katram atradumam.
- [ ] Es pārbaudīju katru atradumu, lai noteiktu kļūdaini pozitīvus rezultātus, ņemot vērā kontekstu.
- [ ] Es akli neizmantoju AI korekciju; Pārskatīju un uzrakstīju testu.
- [ ] Neskatoties uz izvadi "Nav ievainojamību", es pats pārbaudīju kritiskos ceļus.
- [ ] Es anonīmu kodu/noslēpumus vai izmantoju uzņēmuma izolētus rīkus.
- [ ] Esmu nodevis atklāšanu un labojumu, izmantojot izstrādātāja un drošības apstiprinājumu.