Vienetas 7 / 11

Saugi kodo peržiūra ir statinė analizė: pažeidžiamumų radimas naudojant dirbtinį intelektą

Pelnas:

  • Galimybė naudoti dirbtinį intelektą kaip antrą akį ir pažymėti OWASP klasės pažeidžiamumą (įpurškimas, kietoji paslaptis, prieigos kontrolė) kode suteikiant kontekstą
  • Galimybė pašalinti dirbtinio intelekto sukurtus klaidingus teigiamus duomenis atsižvelgiant į kontekstą ir neleisti kiekvieną radinį traktuoti kaip tikrą pažeidžiamumą jo nepatvirtinus
  • Gebėjimas atpažinti, kad dirbtinio intelekto pasiūlytas pataisymas gali įnešti naujų pažeidžiamumų/klaidų ir perduoti kiekvieną pataisą per peržiūros ir testavimo vartus

Programinės įrangos pažeidžiamumai yra vieni iš brangiausių pažeidžiamumų, nes jie yra įterpti į produktą nuo pat pradžių ir platinami milijonams vartotojų. Saugi kodo peržiūra – tai procesas, kai eilutę po eilutės nuskaitomas šaltinio kodas ir pažeidžiamos spragos – SQL injekcija, autentifikavimo pažeidžiamumas, užkoduotas slaptažodis, neteisingas autorizavimas – prieš pradedant jas gaminti. Kai atliekama rankomis, tai yra lėta ir varginanti; Nesunku nepastebėti didelės kodų bazės pažeidžiamumo.

AI yra galingas kodo peržiūroje dėl dviejų priežasčių: kodas taip pat yra kalba, o AI gerai atpažįsta šabloną. Dirbtinis intelektas gali greitai pažymėti pavojingus šablonus kodo dalyje (vartotojo įvestis tiesiogiai įtraukiama į užklausą, nešifruota duomenų saugykla, trūkstamas įvesties patvirtinimas), paaiškinti, kodėl kiekvienas yra rizikingas, ir pasiūlyti pataisymą. Tačiau AI nemato viso kodo veikimo konteksto (įvestis gali būti išvalyta kitame lygyje), jis gali sugalvoti pažeidžiamumą, kurio nėra (klaidingas teigiamas) arba praleisti tikrą pažeidžiamumą (klaidingas neigiamas), o svarbiausia, jo siūlomas „taisymas“ gali įnešti naują pažeidžiamumą ar klaidą. AI yra antroji akis ir kodo peržiūros rodyklė; Kūrėjas ir saugos ekspertas nusprendžia, ar radinys yra tikras pažeidžiamumas ir ar pataisymas yra teisingas ir saugus.

Kodo peržiūros žingsniai

  1. Suteikite apimtį ir kontekstą. Kokia kalba, kokia sistema, kur šis kodas priima įvestį, kur duoda išvestį, kuriame lygyje jis veikia? Kodo peržiūra be konteksto pateikia klaidingus teigiamus rezultatus.
  2. Nuskaitykite pavojingus raštus. Ieškokite žinomų AI pažeidžiamumo klasių (pvz., OWASP Top 10): injekcijos, autentifikavimo, jautrių duomenų atskleidimo, prieigos kontrolės.
  3. Pateisinkite kiekvieną atradimą. Kiekvienai vėliavai: kokia eilutė, kokia pažeidžiamumo klasė, kaip ją galima išnaudoti, kokie yra įrodymai. Į nepagrįstą išvadą nėra žiūrima rimtai.
  4. Pašalinkite klaidingą teigiamą rezultatą. Ar įvestis iš tikrųjų išvalyta, ar tas kelias tikrai pasiekiamas – patikrinkite kontekstą.
  5. Patikrinkite pataisymą. Patvirtinkite, kad AI rekomenduojama pataisa iš tikrųjų pašalina pažeidžiamumą, neįtraukia naujų pažeidžiamumų / klaidų ir praėjo testavimą.
  6. Žmogaus pritarimas. Kūrėjas + saugos ekspertas peržiūri radinį ir pataiso; Taip jis patenka į kodų saugyklą.

Sąlygos: SAST (Static Application Security Testing – statinis saugos testavimas, kuris analizuoja šaltinio kodą jo nepaleidžiant). DAST (dinaminis – dinaminis testavimas, kuris išbando veikiančią programą išoriškai). OWASP Top 10 yra standartinis dažniausiai pasitaikančių žiniatinklio programų pažeidžiamumų sąrašas. Įterpimas yra pažeidžiamumas, atsirandantis dėl vartotojo įvesties interpretavimo kaip komandos / užklausos (pvz., SQL įterpimas). Parametrinė užklausa yra teisingas metodas, neleidžiantis įterpti, atskiriant įvestį nuo kodo.

Įprastų pažeidžiamumo klasių lentelė

Pažeidžiamumo klasė

Simptomas (kode)

teisingas sprendimas

AI spąstai

SQL injekcija

Įvesties sujungimas į užklausą

Parametrizuota užklausa

Gali ignoruoti dezinfekciją

sunkiai užkoduota paslaptis

Slaptažodis/įvesti kodą

Slaptas seifas (skliauto), env

Klaidingai teigiamas (mėginys / testas)

Silpnas autentifikavimas

Trūksta/netinkamas valdymas

Galingas, centralizuotas valdymas

pasigenda konteksto

Sugedusi prieigos kontrolė

Jokio įgaliojimo patikrinimo

Serverio pusės autorizacija

Nesupranta sudėtingo srauto

Jautrių duomenų atskleidimas

Saugojimas / registravimas be slaptažodžio

Šifravimas, maskavimas

Negali žinoti kritiškumo

Nesaugus serializavimas

Deserizuoti nepatikimus duomenis

Saugus analizavimas

Praleidžia retą modelį

trys mini dėklai

1 atvejis – tikrosios injekcijos sugavimas. Kūrėjas turi AI ištirti duomenų prieigos funkciją. AI pažymi eilutę, kurioje vartotojo ID reikšmė sujungiama tiesiai į SQL tekstą ir sako: „Tai klasikinis SQL įterpimas, paverskite jį parametrizuota užklausa“; Teikia mėginio korekciją. Kūrėjas patvirtina, kad įvestis kitur nebuvo išvalyta, patikrina, ar tai tikras pažeidžiamumas, įgyvendina siūlomą parametrizuotą užklausą ir parašo testą. AI pabrėžė pažeidžiamumą; tikrinimo ir taisymo testavimas buvo atliktas iš kūrėjo.

2 atvejis – klaidingai teigiama, ištaisyta paslaptis. AI faile mato slaptažodžio = "test1234" eilutę ir sako "kritinis: užkoduotas slaptažodis". Kūrėjas tikrina kontekstą: tai vieneto bandomasis failas, netikri bandymo duomenys, nepaleisti į gamybą ir neperkelti į realią sistemą. Išvada yra klaidingai teigiama. Kūrėjas tai dokumentuoja, bet nesiima veiksmų, nes tai nėra tikra paslaptis. Pamoka: AI „kietos paslapties“ ženklas turi būti pašalintas atsižvelgiant į kontekstą; Ne kiekviena eilutė yra paslaptis.

3 atvejis – naujas pažeidžiamumo pataisymas. AI siūlo pataisyti XSS (kryžminio scenarijaus rašymo) pažeidžiamumą; bet jo siūlomas kodas išvalo įvestį netinkamoje vietoje ir praleidžia išvesties kodavimą kitoje srityje; Dėl to atotrūkis visiškai neužsidaro. Saugos ekspertas peržiūri pataisą, pastebi trūkstamą kodavimą ir pataiso jį tinkamame lygyje. Pamoka: AI rekomenduojamas pleistras nėra automatiškai saugus; Kiekvienas pataisymas yra peržiūrimas ir išbandytas.

Silpnas raginimas / Stiprus raginimas

Silpnas raginimas:

Ar šiame kode yra spragų, pataisykite ją: [kodas]

Šis raginimas nepateikia konteksto (kalbos, sistemos, įvesties šaltinio), nereikalauja pagrindimo, nekvestionuoja klaidingo teigiamo teiginio ir yra atviras aklai priimti AI padarytą pataisymą. AI sumaišė ir tikro, ir neegzistuojančio pažeidžiamumo požymius.

Galingas raginimas:

Jūsų vaidmuo: asistentas, kuris yra ANTRA AKIS kūrėjui saugioje kodo peržiūroje.Sprendimų priėmimas; apsvarstykite tiesiogiai taikomą pataisą. Kodas: [nurodyti kalbą/sistemą].Kontekstas: ši funkcija [įvesties šaltinis: pvz. gauna [išorinę HTTP užklausą], rašo į [išvesties paskirties vietą]. Jūsų užduotis: (1) pažymėkite galimus pažeidžiamumus naudodami OWASP klasę, nurodykite eilutės numerį + kodėl rizikinga + kaip išnaudoti + kiekvieno radinio įrodymus, (2) parašykite bent 1 klaidingai teigiamą scenarijų kiekvienam radiniui (pvz., jei įvestis išvalyta kitame sluoksnyje), (3) pasiūlykite pataisymą, bet su ženklu „[peržiūrėti + rašyti testą]“; Taip pat įvertinkite, ar pataisymas neįtraukia naujų pažeidžiamumų / klaidų. Pridedamas netikras pažeidžiamumas.[kodas]

Stiprus raginimas pateikia kontekstą, prašo OWASP klasės ir įrodymų, klausia klaidingų teiginių ir ištaisymo rizikos, verčia žmogų peržiūrėti.

Kopijuojami raginimo šablonai

PAŽEIDŽIMŲ NUSKAITYMO ŠABLONAS Išnagrinėkite [kalba/framework] OWASP Top 10 kodą. Kiekvienam galimam atradimui: eilutės numeris, pažeidžiamumo klasė, kodėl tai rizikinga, pavyzdžio išnaudojimas, įrodymų stiprumas (tikslas / tikėtinas / silpnas). Kontekstas: įvestis [šaltinis], išvestis [taikinys]. Sugalvotų išvadų pridėjimas; Jei nesate tikri, įveskite „[būtina patvirtinti]“. Kodas: [įklijuoti]

NETEISINGAS TEIGIAMAS PAŠALINIMO PAVYZDYS Norėdami rasti šį kodą, išvardykite scenarijus, kuriuose NĖRA tikro pažeidžiamumo: ar įvestis gali būti išvalyta kitame lygyje, ar šis kelias pasiekiamas, ar ši vertė yra testas / pavyzdys, ar sistema yra automatiškai apsaugota. Parašykite, kaip patvirtinti kiekvieną. Rasti: [įklijuoti]

PASTATYMAS VERTINIMO ŠABLONISRekomenduokite pataisyti toliau nurodytą pažeidžiamumą; tada kritikuokite savo pataisą: (1) ar ji tikrai pašalina pažeidžiamumą, (2) ar įveda naują pažeidžiamumą / klaidą, (3) kokį testą turėčiau parašyti (teigiamas ir neigiamas atvejis), (4) poveikis našumui / funkcionalumui. Aš peržiūrėsiu ir išbandysiu pataisą. Pažeidžiamumas + kodas: [įklijuoti]

SAUGUS MOKYMO ŠABLONAS, skirtas pažeidžiamumo klasei [pvz.,. SQL injekcija] palyginti rodo saugų spausdinimo šabloną ir bendrus klaidingus šablonus šioje kalboje / sistemoje. Bendroji taisyklė + pateikite kodo pavyzdį; bet noriu, kad paklaustumėte konteksto prieš įdiegdami jį į mano kodą. Kalba / sistema: [rašyti]

Dažnos klaidos

  • Apžvalga be konteksto. Be kalbos, sistemos ir įvesties / išvesties konteksto AI painioja tiek tikrus, tiek klaidingus duomenis; Būtinai pateikite kontekstą.
  • Sumaišyti kiekvieną ženklą tikru silpnumu. AI pateikia klaidingus teigiamus rezultatus (bandymo duomenys, įvestis išvalyta kitame lygyje); Atsijokite kiekvieną radinį su kontekstu.
  • Aklai taikant AI korekciją. Rekomenduojama pataisa gali sukelti naujų pažeidžiamumų / klaidų; peržiūrėti ir parašyti testus.
  • Pasitikėjimas klaidingu neigiamu. Net jei AI sako „nėra pažeidžiamumų“, patys ištirkite kritinius kelius; Statinis nuskaitymas neaptinka visų pažeidžiamumų.
  • Kodo / paslapties suteikimas išoriniam įrankiui. Privatus kodas ir tikros paslaptys (raktas, slaptažodis) yra intelektinė nuosavybė ir pažeidžiamumas; anonimizuoti arba naudoti įmonės, izoliuotus įrankius.
Patarimas: naudojant AI peržiūros kodą, efektyviausias filtras yra prašyti „įrodymų stiprumo“ (tam tikras / tikėtinas / silpnas) kiekvienam radiniui. Dauguma „silpnų“ išvadų yra klaidingai teigiami; savo energiją skiriate „tikriems“.
Atsargiai: AI siūlomas saugos pataisymas neturėtų patekti į sandėlį neišbandytas. Neteisingas „pataisymas“ gali palikti atvirą pažeidžiamumą ir sukelti funkcinę gamybos klaidą; Kiekvienas pleistras praeina per peržiūros ir testavimo vartus.

Apibendrinant

Saugi kodo peržiūra yra pigiausias būdas sugauti pažeidžiamumą prieš jas pradedant gaminti, o kadangi kodas yra kalba, dirbtinis intelektas čia tampa galinga antrąja akimi: žymi pavojingus modelius, paaiškina riziką, siūlo pataisymus. Tačiau AI nemato viso veikimo konteksto, pateikia klaidingus teigiamus ir klaidingus neigiamus rezultatus, o jos rekomenduojamas pleistras gali įnešti naujų pažeidžiamumų. Taigi peržiūra turi šešis etapus (kontekstas, patikra, pagrindimas, klaidingai teigiamų rezultatų pašalinimas, pataisos patikrinimas, žmogaus patvirtinimas), o sprendimą priima kūrėjas ir saugos ekspertas. Trys principai: nė vienas radinys nėra interpretuojamas be konteksto, kiekvienas ženklas pašalinamas su kontekstu, joks pataisymas nepatenka į saugyklą nepatikrintas. Ir kodas / paslaptis niekada neduodama išoriniam įrankiui be anonimiškumo.

Taikymo užduotis

Paimkite kodo fragmento pavyzdį (pašalinkite jautrias dalis iš savo kodo arba kodo pavyzdį su pažeidžiamumu). Leiskite dirbtiniam intelektui jį ištirti naudojant „Pažeidžiamumo nuskaitymo“ šabloną; Kiekvienam radiniui pritaikykite šabloną „Klaidingai teigiamas pašalinimas“ ir pašalinkite tikrus. Paimkite rimčiausio radinio taisymą naudodami šabloną „Pataisos įvertinimas“, patys peržiūrėkite ir parašykite vieną teigiamą + vieną neigiamą testo atvejį. Atkreipkite dėmesį, kiek išvadų buvo klaidingai teigiamų.

kontrolinis sąrašas

  • [ ] Prieš peržiūrėdamas kodą pateikiau kalbą, sistemą ir įvesties / išvesties kontekstą.
  • [ ] Kiekvienam radiniui paprašiau eilutės numerio, pažeidžiamumo klasės, išnaudojimo kelio ir įrodymų.
  • [ ] Kiekvieną radinį patikrinau, ar nėra klaidingų teigiamų rezultatų, atsižvelgdamas į kontekstą.
  • [ ] Aš aklai netaikiau AI pataisos; Peržiūrėjau ir parašiau testą.
  • [ ] Nepaisant išvesties „Nėra pažeidžiamumų“, pats išnagrinėjau kritinius kelius.
  • [ ] Aš anonimizuojau kodą / paslaptis arba naudojau įmonės izoliuotus įrankius.
  • [ ] Atradimą ir pataisymą perdaviau kūrėjo ir saugos patvirtinimu.