zisky:
- Schopnosť používať umelú inteligenciu ako druhé oko a označiť zraniteľnosti triedy OWASP (injekcia, prísne tajné informácie, kontrola prístupu) v kóde poskytnutím kontextu
- Schopnosť eliminovať falošné poplachy produkované umelou inteligenciou v kontexte a zabrániť tomu, aby sa každý nález považoval za skutočnú zraniteľnosť bez jej overenia
- Schopnosť rozpoznať, že oprava navrhnutá umelou inteligenciou môže priniesť nové zraniteľnosti/chyby a prejsť každú opravu cez kontrolnú a testovaciu bránu
Zraniteľnosti v rámci softvéru patria medzi najdrahšie zraniteľnosti, pretože sú od začiatku zabudované do produktu a distribuované miliónom používateľov. Zabezpečená kontrola kódu je proces čítania zdrojového kódu riadok po riadku a zachytenie zraniteľných miest – SQL vstrekovanie, zraniteľnosť autentifikácie, pevne zakódované heslo, nesprávna autorizácia – predtým, ako sa dostanú do produkcie. Keď sa to robí ručne, je to pomalé a únavné; Je ľahké prehliadnuť zraniteľnosť vo veľkej kódovej základni.
AI je pri kontrole kódu výkonná z dvoch dôvodov: kód je tiež jazyk a AI je dobrá v rozpoznávaní vzorov. Umelá inteligencia dokáže rýchlo označiť nebezpečné vzory v kúsku kódu (vloženie používateľského vstupu priamo do dotazu, nešifrované ukladanie údajov, chýbajúce overenie vstupu), vysvetliť, prečo je každý rizikový, a navrhnúť opravu. Umelá inteligencia však nevidí celý prevádzkový kontext kódu (vstup môže byť vyčistený na inej vrstve), môže vymyslieť zraniteľnosť, ktorá neexistuje (falošne pozitívna) alebo prehliadnuť skutočnú zraniteľnosť (falošne negatívna), a čo je najdôležitejšie, „oprava“, ktorú navrhuje, môže priniesť novú zraniteľnosť alebo chybu. AI je druhým okom a ukazovateľom pri kontrole kódu; Vývojár a bezpečnostný expert rozhodnú, či je nález skutočnou zraniteľnosťou a či je oprava správna a bezpečná.
Kroky kontroly kódu
- Uveďte rozsah a kontext. Ktorý jazyk, ktorý rámec, kde tento kód berie vstup, kde poskytuje výstup, na ktorej vrstve funguje? Kontrola kódu bez kontextu vytvára falošné pozitíva.
- Vyhľadajte nebezpečné vzory. Vyhľadajte známe triedy zraniteľnosti AI (napríklad OWASP Top 10): vstrekovanie, overovanie, zverejňovanie citlivých údajov, kontrola prístupu.
- Nechajte každý nález zdôvodniť. Pre každý príznak: ktorý riadok, ktorá trieda zraniteľnosti, ako sa dá zneužiť, aké sú dôkazy. Neodôvodnené zistenie sa neberie vážne.
- Odstráňte falošne pozitívne. Je vstup skutočne vyčistený, je táto cesta skutočne prístupná - skontrolujte kontext.
- Overte opravu. Potvrďte, že oprava odporúčaná AI skutočne uzaviera zraniteľnosť, nezavádza nové zraniteľnosti/chyby a prešla testovaním.
- Ľudský súhlas. Vývojár + odborník na bezpečnosť preskúma nález a opravu; Takto sa dostane do úložiska kódov.
Termíny: SAST (Static Application Security Testing — statické testovanie bezpečnosti, ktoré analyzuje zdrojový kód bez jeho spustenia). DAST (Dynamic — dynamické testovanie, ktoré externe testuje spustenú aplikáciu). OWASP Top 10 je štandardný zoznam najbežnejších zraniteľností webových aplikácií. Injekcia je zraniteľnosť spôsobená interpretáciou používateľského vstupu ako príkazu/dotazu (napr. SQL injection). Parametrizovaný dotaz je správna metóda, ktorá zabraňuje vstrekovaniu oddelením vstupu od kódu.
Tabuľka bežných tried zraniteľnosti
Trieda zraniteľnosti
Symptóm (v kóde)
správne riešenie
Pasca AI
SQL injekcia
Vstup do dopytu sa pripája
Parametrizovaný dopyt
Môže ignorovať sanitáciu
pevne zakódované tajomstvo
Heslo/zadajte kód
Tajný trezor (trezor), env
Falošne pozitívny (vzorka/test)
Slabá autentifikácia
Chýbajúce/nesprávne ovládanie
Výkonné, centralizované ovládanie
uniká kontext
Chybná kontrola prístupu
Žiadna kontrola autorizácie
Autorizácia na strane servera
Nerozumie zložitému toku
Zverejňovanie citlivých údajov
Ukladanie/protokolovanie bez hesla
Šifrovanie, maskovanie
Nemožno poznať kritickosť
Nezabezpečená serializácia
Deserializácia nespoľahlivých údajov
Bezpečná analýza
Chýba vzácny vzor
tri mini prípady
Prípad 1 – Zachytenie skutočnej injekcie. Vývojár má AI preskúmať funkciu prístupu k údajom. AI označí riadok, v ktorom je hodnota userId od používateľa zreťazená priamo do textu SQL, a hovorí „toto je klasická injekcia SQL, premeňte ju na parametrizovaný dotaz“; Poskytuje korekciu vzorky. Vývojár potvrdí, že vstup nebol dezinfikovaný inde, overí, že ide o skutočnú zraniteľnosť, implementuje navrhovaný parametrizovaný dotaz a napíše test. AI zdôraznila zraniteľnosť; overovacie a opravné testovanie pochádzalo od vývojára.
Prípad 2 – Falošne pozitívny fixné tajomstvo. AI vidí v súbore riadok password = „test1234“ a povie „kritické: heslo zakódované napevno“. Vývojár skontroluje kontext: toto je súbor testovania jednotky, fiktívne testovacie údaje, ktoré nie sú uvoľnené do produkcie a nie sú prenesené do skutočného systému. Nález je falošne pozitívny. Vývojár to zdokumentuje, ale nepodnikne žiadne kroky, pretože to nie je skutočné tajomstvo. Ponaučenie: Znak „tvrdého tajomstva“ AI musí byť eliminovaný kontextom; Nie každý reťazec je tajomstvom.
Prípad 3 – Nová oprava zraniteľnosti. AI navrhuje opravu zraniteľnosti XSS (cross-site scripting); ale kód, ktorý navrhuje, vymaže vstup na nesprávnom mieste a preskočí kódovanie výstupu v inej oblasti; V dôsledku toho sa medzera úplne neuzavrie. Bezpečnostný expert skontroluje opravu, všimne si chýbajúce kódovanie a opraví ho na správnej vrstve. Lekcia: Oprava, ktorú odporúča AI, nie je automaticky bezpečná; Každá oprava je kontrolovaná a testovaná.
Slabá výzva / Silná výzva
Slabá výzva:
Je v tomto kóde medzera, opravte ju: [kód]
Táto výzva neposkytuje žiadny kontext (jazyk, rámec, vstupný zdroj), nežiada zdôvodnenie, nespochybňuje falošne pozitívne a je otvorená slepo akceptovať opravu, ktorú vytvorila AI. AI zmiešala známky skutočnej aj neexistujúcej zraniteľnosti.
Výkonná výzva:
Vaša úloha: asistent, ktorý je DRUHÝM OKOM pre vývojárov pri zabezpečenej kontrole kódu. Rozhodovanie; považovať opravu za priamo použitú. Kód: [špecifikujte jazyk/rámec].Kontext: táto funkcia [zdroj vstupu: napr. prijme [externú HTTP požiadavku], zapíše do [výstupného cieľa]. Vaša úloha: (1) označte možné zraniteľnosti pomocou triedy OWASP, uveďte číslo riadku + prečo riskantné + ako zneužiť + dôkazy pre každý z nich, (2) napíšte aspoň 1 falošne pozitívny scenár pre každý nález (napr. ak je vstup dezinfikovaný v inej vrstve), (3) navrhnite opravu, ale so znakom „[recenzia + test zápisu]“; Tiež zhodnoťte, či oprava prináša nové zraniteľnosti/chyby. Pridanie falošnej zraniteľnosti.[code]
Silná výzva dáva kontext, žiada triedu OWASP a dôkazy, spochybňuje falošne pozitívne výsledky a riziká nápravy, núti človeka preskúmať.
Kopírovateľné šablóny výziev
ŠABLONA SKENOVANIA ZRANITEĽNOSTI Preskúmajte [jazyk/rámec] kód pre OWASP Top 10. Pre každý možný nález: číslo riadku, trieda zraniteľnosti, prečo je to riskantné, zneužitie vzorky, sila dôkazov (istý/pravdepodobný/slabý). Kontext: vstup [zdroj], výstup [cieľ]. Pridávanie vymyslených zistení; Ak si nie ste istý, napíšte „[musí byť overené]“. Kód: [prilepiť]
FALOŠNÝ POZITÍVNY VZOR VYLUČOVANIA Pre nasledujúce zistenie kódu uveďte scenáre, v ktorých NIE JE skutočná zraniteľnosť: mohol by byť vstup vyčistený na inej vrstve, je táto cesta prístupná, je táto hodnota testom/vzorkou, je rámec automaticky chránený. Pri každom napíšte, ako potvrdiť. Nájdenie: [prilepiť]
OPRAVIŤ ŠABLONU HODNOTENIA odporúčame opravu nasledujúcej chyby zabezpečenia; potom kritizujte svoju vlastnú opravu: (1) skutočne odstráni zraniteľnosť, (2) predstaví novú zraniteľnosť/chybu, (3) aký test by som mal napísať (pozitívny a negatívny prípad), (4) vplyv na výkon/funkčnosť. Opravu skontrolujem a otestujem. Chyba + kód: [prilepiť]
ŠABLONA VÝUČBY ZABEZPEČENÉHO VZORU pre triedu zraniteľnosti [napr. SQL injection] porovnateľne ukazujú bezpečný vzor písania a bežné chybné vzory v tomto jazyku/rámci. Všeobecné pravidlo + uveďte príklad kódu; ale chcem, aby ste sa spýtali na kontext predtým, ako ho implementujete do môjho kódu. Jazyk/rámec: [písať]
Časté chyby
- Recenzia bez kontextu. Bez jazyka, rámca a vstupno/výstupného kontextu AI zamieňa skutočné aj falošné zistenia; Nezabudnite uviesť kontext.
- Pomýliť si každé znamenie so skutočnou slabosťou. AI vytvára falošné pozitíva (testovacie údaje, vstup vyčistený na inej vrstve); Preosiať každý nález s kontextom.
- Slepá aplikácia korekcie AI. Odporúčaná oprava môže priniesť nové zraniteľnosti/chyby; kontrolovať a písať testy.
- Dôverovať falošne negatívnemu. Aj keď AI hovorí „žiadne zraniteľnosti“, preskúmajte kritické cesty sami; Statické skenovanie neodhalí každú zraniteľnosť.
- Odovzdanie kódu/tajomstva externému nástroju. Súkromný kód a skutočné tajomstvá (kľúč, heslo) sú duševné vlastníctvo a zraniteľnosť; anonymizovať alebo používať firemné izolované nástroje.
Tip: Keď máte kontrolný kód AI, najúčinnejším filtrom je požiadať o „silu dôkazu“ (istú/pravdepodobnú/slabú) pre každý nález. Väčšina nálezov označených ako „slabé“ je falošne pozitívnych; svoju energiu prideľujete tým „istým“.
Upozornenie: Bezpečnostná oprava navrhovaná AI by sa nemala dostať do skladu bez otestovania. Nesprávna „oprava“ môže ponechať zraniteľnosť otvorenú a viesť k funkčnej chybe vo výrobe; Každá oprava prechádza kontrolou a testovaním.
V súhrne
Bezpečná kontrola kódu je najlacnejší spôsob, ako zachytiť zraniteľné miesta pred ich uvedením do produkcie, a keďže kód je jazyk, AI sa tu stáva silným druhým okom: označuje nebezpečné vzory, vysvetľuje riziko, navrhuje opravy. Umelá inteligencia však nevidí celý prevádzkový kontext, vytvára falošné pozitíva a falošné negatívy a oprava, ktorú odporúča, môže priniesť nové zraniteľnosti. Kontrola má teda šesť krokov (kontext, skríning, odôvodnenie, falošne pozitívna eliminácia, overenie opravy, schválenie človekom) a rozhodnutie je na vývojárovi a odborníkovi na bezpečnosť. Tri princípy: žiadny nález nie je interpretovaný bez kontextu, každý znak je eliminovaný s kontextom, žiadna oprava nejde do úložiska netestovaná. A kód/tajomstvo sa nikdy neodovzdá externému nástroju bez anonymizácie.
Aplikačná úloha
Vezmite si vzorový útržok kódu (buď odstráňte citlivé časti z vlastného kódu alebo vzorový kód s chybami zabezpečenia). Nechajte to AI preskúmať pomocou šablóny „Skenovanie zraniteľnosti“; Na každý nález aplikujte šablónu „False Positive Elimination“ a odstráňte tie skutočné. Urobte opravu najzávažnejšieho nálezu pomocou šablóny „Hodnotenie nápravy“, sami si to prezrite a napíšte jeden pozitívny + jeden negatívny testovací prípad. Všimnite si, koľko zistení bolo falošne pozitívnych.
kontrolný zoznam
- [ ] Pred skontrolovaním kódu som dal jazyk, rámec a vstupno/výstupný kontext.
- [ ] Požiadal som o číslo riadku, triedu zraniteľnosti, cestu zneužitia a dôkazy pre každý nález.
- [ ] Každý nález som skrínoval na falošne pozitívne výsledky s kontextom.
- [ ] Nepoužil som slepo korekciu AI; Skontroloval som a napísal test.
- [ ] Napriek výstupu „Žiadne zraniteľnosti“ som sám preskúmal kritické cesty.
- [ ] Anonymizoval som kód/tajomstvá alebo som použil firemné izolované nástroje.
- [ ] Prešiel som objavom a opravou prostredníctvom vývojára + bezpečnostného schválenia.