Üksus 7 / 11

Turvaline koodide ülevaatus ja staatiline analüüs: tehisintellekti abil haavatavuste leidmine

Kasu:

  • Võimalus kasutada tehisintellekti teise silmana ja märgistada koodis OWASP-klassi haavatavused (süstimine, kõva saladus, juurdepääsukontroll), andes konteksti
  • Võimalus kõrvaldada tehisintellekti tekitatud valepositiivsed tulemused kontekstiga ja vältida iga leiu käsitlemist tõelise haavatavusena ilma seda kinnitamata
  • Võimalus ära tunda, et tehisintellekti pakutud parandus võib tuua kaasa uusi turvaauke/vigu ja lasta iga paiga läbi ülevaatuse ja testimise värava

Tarkvaras olevad haavatavused on ühed kõige kallimad haavatavused, kuna need on tootesse algusest peale manustatud ja levitatud miljonitele kasutajatele. Turvaline koodi ülevaatus on protsess, mille käigus loetakse lähtekoodi rida rea ​​haaval ja tuvastatakse haavatavused – SQL-i süstimine, autentimise haavatavus, kõvakodeeritud parool, vale autoriseerimine – enne kui need tootmisse lähevad. Käsitsi tehes on see aeglane ja väsitav; Suures koodibaasi haavatavusest on lihtne mööda vaadata.

AI on koodi ülevaatamisel võimas kahel põhjusel: kood on ka keel ja AI on hea mustrituvastuses. AI saab kiiresti märgistada ohtlikud mustrid koodijupis (kasutaja sisestamine otse päringusse, krüptimata andmete salvestamine, sisendi valideerimise puudumine), selgitada, miks igaüks neist on riskantne, ja soovitada lahendust. Kuid AI ei näe koodi kogu töökonteksti (sisend võidakse kustutada teises kihis), see võib leiutada puuduva haavatavuse (valepositiivne) või tõelise haavatavuse vahele jätta (valenegatiivne) ja mis kõige tähtsam, selle pakutud "parandus" võib tuua kaasa uue haavatavuse või vea. AI on koodi ülevaatamisel teine ​​silm ja osuti; Arendaja ja turbeekspert otsustavad, kas leid on tõeline haavatavus ning kas parandus on õige ja ohutu.

Koodi ülevaatuse etapid

  1. Andke ulatus ja kontekst. Mis keeles, mis raamistikus, kus see kood sisendi võtab, kust annab väljundi, millisel kihil see töötab? Koodi ülevaatus ilma kontekstita annab valepositiivseid tulemusi.
  2. Otsige ohtlikke mustreid. Otsige teadaolevaid AI haavatavuse klasse (nt OWASP Top 10): süstimine, autentimine, tundlike andmete avalikustamine, juurdepääsu kontroll.
  3. Kas iga leid on õigustatud. Iga lipu puhul: milline rida, milline haavatavuse klass, kuidas seda saab ära kasutada, millised on tõendid. Põhjendamatut leidu ei võeta tõsiselt.
  4. Kõrvaldage valepositiivne. Kas sisend on tegelikult kustutatud, kas see tee on tõesti juurdepääsetav – kontrollige konteksti.
  5. Kinnitage parandus. Veenduge, et tehisintellekti soovitatud plaaster sulgeb haavatavuse, ei too kaasa uusi turvaauke/vigu ja on testimise läbinud.
  6. Inimese heakskiit. Arendaja + turbeekspert vaatab leiu üle ja parandab; Nii siseneb see koodihoidlasse.

Tingimused: SAST (Static Application Security Testing – staatiline turbetest, mis analüüsib lähtekoodi ilma seda käivitamata). DAST (dünaamiline – dünaamiline testimine, mis testib töötavat rakendust väliselt). OWASP Top 10 on kõige levinumate veebirakenduste haavatavuste standardloend. Süstimine on haavatavus, mille põhjustab kasutaja sisendi tõlgendamine käsu/päringuna (nt SQL-i süstimine). Parameetriline päring on õige meetod, mis takistab sisestamist, eraldades sisendi koodist.

Levinud haavatavuse klasside tabel

Haavatavuse klass

Sümptom (koodis)

õige lahendus

AI lõks

SQL-i süstimine

Sisestuse ühendamine päringuga

Parameetriline päring

Võib ignoreerida desinfitseerimist

kõvasti kodeeritud saladus

Parool/sisestage kood

Salakapp (võlv), env

Valepositiivne (proov/test)

Nõrk autentimine

Puuduv/vale juhtseade

Võimas, tsentraliseeritud juhtimine

igatseb konteksti

Vigane juurdepääsukontroll

Autoriseerimiskontrolli pole

Serveripoolne autoriseerimine

Ei mõista keerulist voolu

Tundlike andmete avaldamine

Paroolivaba salvestus/logimine

Krüpteerimine, maskeerimine

Kriitilisust ei oska tunda

Ebaturvaline serialiseerimine

Deserialiseerige ebausaldusväärsed andmed

Turvaline sõelumine

Puudub haruldane muster

kolm minikarpi

Juhtum 1 – tegeliku süsti püüdmine. Arendaja laseb AI-l andmetele juurdepääsu funktsiooni uurida. AI tähistab rida, kus kasutaja userId väärtus on ühendatud otse SQL-teksti ja ütleb: "See on klassikaline SQL-i süstimine, muutke see parameetritega päringuks"; Pakub näidisparandust. Arendaja kinnitab, et sisendit pole mujal puhastatud, kontrollib, et tegemist on tõelise haavatavusega, rakendab soovitatud parameetritega päringu ja kirjutab testi. AI tõstis esile haavatavuse; kontroll- ja parandustestid tuli arendajalt.

Juhtum 2 – valepositiivne fikseeritud saladus. AI näeb failis rida parooli = "test1234" ja ütleb "kriitiline: kõvakodeeritud parool". Arendaja kontrollib konteksti: see on üksuse testfail, näiv testandmed, mida ei ole tootmisse välja antud ega teisaldatud reaalsesse süsteemi. Leid on valepositiivne. Arendaja dokumenteerib selle, kuid ei võta midagi ette, kuna see pole tõeline saladus. Õppetund: AI märk "kõva saladus" tuleb konteksti järgi kõrvaldada; Mitte iga string pole saladus.

Juhtum 3 – uus haavatavuse parandus. AI pakub välja XSS-i (saitideülese skriptimise) haavatavuse parandamise; kuid tema pakutud kood kustutab vales kohas oleva sisendi ja jätab väljundkodeeringu teises piirkonnas vahele; Selle tulemusena ei sulgu lõhe täielikult. Turvaekspert vaatab paranduse üle, märkab puuduvat kodeeringut ja parandab selle õigel kihil. Õppetund: AI soovitatud plaaster ei ole automaatselt turvaline; Iga parandus vaadatakse üle ja testitakse.

Nõrk viip / Tugev viip

Nõrk viip:

Kas selles koodis on lünk, parandage see: [kood]

See viip ei anna konteksti (keel, raamistik, sisendallikas), ei küsi põhjendust, ei sea kahtluse alla valepositiivsust ja on avatud tehisintellekti tehtud paranduse pimesi aktsepteerimiseks. AI segas märke nii tõelisest kui ka olematust haavatavusest.

Võimas viip:

Sinu roll: assistent, kes on arendajale TEINE SILM turvalisel koodiülevaatusel.Otsuste tegemine; kaaluge paranduse otse rakendamist. Kood: [määrake keel/raam].Kontekst: see funktsioon [sisendallikas: nt. võtab vastu [välise HTTP päringu], kirjutab [väljundsihtkohta]. Teie ülesanne: (1) märgistage OWASP klassiga võimalikud haavatavused, andke rea number + miks riskantne + kuidas kasutada + tõendid iga leiu kohta, (2) kirjutage iga leiu kohta vähemalt 1 valepositiivne stsenaarium (nt kui sisend on desinfitseeritud teises kihis), (3) soovitage parandus, kuid märgiga "[ülevaatus + kirjutage test]"; Samuti hinnake, kas parandus toob kaasa uusi turvaauke/vigu. Võltshaavatavuse lisamine.[kood]

Tugev viip annab konteksti, küsib OWASP klassi ja tõendeid, seab kahtluse alla valepositiivsed tulemused ja heastamisriskid, sunnib inimesi üle vaatama.

Kopeeritavad viipade mallid

HAVATATAVUSE SKANNI MALL. Uurige [keel/raamistik] OWASP Top 10 koodi. Iga võimaliku leiu jaoks: rea number, haavatavuse klass, miks see on riskantne, näidis ärakasutamine, tõendite tugevus (kindel/tõenäoline/nõrk). Kontekst: sisend [allikas], väljund [sihtmärk]. Fabritseeritud leidude lisamine; Kui te pole kindel, tippige "[peab olema kinnitatud]". Kood: [kleebi]

VALEPOSITIIVNE ELIMINEERIMISMUSTER Järgmise koodi leidmiseks loetlege stsenaariumid, mille puhul EI OLE tõelist haavatavust: kas sisendit saab kustutada mõnes teises kihis, kas see tee on juurdepääsetav, kas see väärtus on test/näidis, kas raamistik on automaatselt kaitstud. Kirjutage igaühe jaoks, kuidas kinnitada. Leidmine: [kleebi]

PARANDAGE HINDAMISE MALLS soovitage järgmise haavatavuse parandamist; seejärel kritiseerige oma parandust: (1) kas see tõesti sulgeb haavatavuse, (2) kas see toob sisse uue haavatavuse/vea, (3) millise testi peaksin kirjutama (positiivne ja negatiivne juhtum), (4) mõju jõudlusele/funktsionaalsusele. Vaatan paranduse üle ja katsetan. Haavatavus + kood: [kleebi]

TURVALINE MUSTRI ÕPETUSMALL haavatavuse klassi jaoks [nt. SQL-i süstimine] näitavad selles keeles/raamistikus suhteliselt ohutut tippimismustrit ja levinud ekslikke mustreid. Üldreegel + anna koodinäide; kuid ma tahan, et te küsiksite konteksti enne selle minu koodis rakendamist. Keel/raamistik: [kirjutada]

Levinud vead

  • Ülevaade ilma kontekstita. Ilma keele, raamistiku ja sisend-/väljundkontekstita ajab tehisintellekt segamini nii tegelikud kui ka võltsitud leiud; Andke kindlasti kontekst.
  • Segada iga märki tõelise nõrkusega. AI annab valepositiivseid tulemusi (testiandmed, sisend puhastatakse teisest kihist); Sõeluge iga leid kontekstiga.
  • AI-paranduse pimesi rakendamine. Soovitatav plaaster võib tuua kaasa uusi turvaauke/vigu; testid üle vaadata ja kirjutada.
  • Usaldades vale negatiivset. Isegi kui AI ütleb "haavatavusteta", uurige ise kriitilisi teid; Staatiline skannimine ei tuvasta iga haavatavust.
  • Koodi/saladuse andmine välisele tööriistale. Privaatkood ja tõelised saladused (võti, parool) on intellektuaalomand ja haavatavus; anonüümseks muuta või kasutada ettevõtte isoleeritud tööriistu.
Näpunäide: tehisintellekti ülevaatuse koodi kasutamisel on kõige tõhusam filter küsida iga leiu kohta "tõendite tugevust" (kindel/tõenäoline/nõrk). Enamik "nõrgaks" märgitud leide on valepositiivsed; jaotate oma energia "kindlatele".
Ettevaatust: AI pakutud turvaparandus ei tohiks lattu siseneda ilma testimiseta. Vale "parandus" võib nii haavatavuse avatuks jätta kui ka tuua kaasa funktsionaalse vea tootmises; Iga plaaster läbib ülevaatuse ja testimise värava.

Kokkuvõttes

Turvaline koodiülevaatus on odavaim viis turvaaukude tuvastamiseks enne nende tootmist ja kuna kood on keel, muutub tehisintellekt siin võimsaks teiseks silmaks: märgib ohtlikke mustreid, selgitab riske, soovitab parandusi. Kuid AI ei näe kogu töökonteksti, annab valepositiivseid ja valenegatiivseid tulemusi ning selle soovitatud plaaster võib tuua kaasa uusi haavatavusi. Seega on ülevaatusel kuus etappi (kontekst, sõelumine, põhjendamine, valepositiivne kõrvaldamine, paranduse kontrollimine, inimese heakskiit) ning otsuse teevad arendaja ja turbeekspert. Kolm põhimõtet: ühtegi leidu ei tõlgendata ilma kontekstita, iga märk elimineeritakse koos kontekstiga, ükski parandus ei lähe talletusse testimata. Ja koodi/saladust ei anta kunagi välisele tööriistale ilma anonüümsuseta.

Rakenduse ülesanne

Võtke näidiskoodilõik (kas eemaldage oma koodist tundlikud osad või turvaaukudega näidiskood). Laske tehisintellektil seda malliga „Haavatavuse skaneerimine” uurida; Rakendage iga leiu jaoks malli "Valepositiivne kõrvaldamine" ja kõrvaldage tegelikud. Võtke kõige tõsisema leiu parandus "Parandushinnangu" malliga, vaadake see ise üle ja kirjutage üks positiivne + üks negatiivne testjuhtum. Pange tähele, kui paljud leiud olid valepositiivsed.

kontrollnimekiri

  • [ ] Andsin enne koodi ülevaatamist keele, raamistiku ja sisendi/väljundi konteksti.
  • [ ] Küsisin iga leiu kohta rea ​​numbrit, haavatavuse klassi, ärakasutamise teed ja tõendeid.
  • [ ] Kontrollisin iga leiu konteksti arvestades valepositiivseid tulemusi.
  • [ ] Ma ei rakendanud pimesi tehisintellekti parandust; Vaatasin üle ja kirjutasin testi.
  • [ ] Vaatamata väljundile "Haavatavusteta", uurisin ise kriitilisi teid.
  • [ ] Muutsin koodi/saladused anonüümseks või kasutasin ettevõtte isoleeritud tööriistu.
  • [ ] Olen läbinud avastamise ja paranduse arendaja ja turvalisuse kinnituse kaudu.