Добивки:
- Способност да се користи вештачката интелигенција како второ око и да се означат пропустите на класата OWASP (вбризгување, тврда тајна, контрола на пристап) во кодот со давање контекст
- Способност да се елиминираат лажните позитиви произведени од вештачката интелигенција со контекст и да се спречи третирање на секое откритие како вистинска ранливост без да се потврди
- Способност да се препознае дека поправката предложена од вештачката интелигенција може да воведе нови пропусти/бубачки и да ја помине секоја закрпа низ портата за преглед и тестирање
Ранливостите во софтверот се меѓу најскапите пропусти бидејќи тие се вградени во производот од самиот почеток и дистрибуирани до милиони корисници. Безбедниот преглед на кодот е процес на читање на изворниот код линија по линија и фаќање на пропусти - инјектирање SQL, ранливост за автентикација, тврдокодирана лозинка, погрешно овластување - пред да влезат во производство. Кога се прави со рака, тоа е бавно и заморно; Лесно е да се пропушти ранливост во голема база на кодови.
Вештачката интелигенција е моќна при преглед на кодот поради две причини: кодот е исто така јазик, а вештачката интелигенција е добра во препознавање на шаблони. Вештачката интелигенција може брзо да ги означи опасните обрасци во дел од кодот (ставајќи го внесувањето на корисникот директно во барањето, нешифрираното складирање на податоци, недостасува валидација на влезот), да објасни зошто секој од нив е ризичен и да предложи исправка. Но, вештачката интелигенција не го гледа целиот оперативен контекст на кодот (влезот може да се брише на друг слој), може да измисли ранливост што не постои (лажно позитивно) или да пропушти вистинска ранливост (лажно негативно), и што е најважно, „поправката“ што ја предлага може да воведе нова ранливост или грешка. AI е второ око и покажувач во прегледот на кодот; Програмерот и експертот за безбедност одлучуваат дали наодот е вистинска ранливост и дали поправката е точна и безбедна.
Чекори на преглед на кодот
- Дајте опсег и контекст. Кој јазик, која рамка, каде овој код зема влез, каде дава излез, на кој слој работи? Прегледот на кодот без контекст произведува лажни позитиви.
- Скенирајте за опасни обрасци. Пребарајте познати класи на ранливост на вештачката интелигенција (како што е OWASP Top 10): инјектирање, автентикација, откривање чувствителни податоци, контрола на пристап.
- Нека секое откритие е оправдано. За секое знаме: која линија, која класа на ранливост, како може да се искористи, кои се доказите. Неоправданиот наод не се сфаќа сериозно.
- Елиминирајте ги лажно позитивните. Дали влезот всушност се брише, дали таа патека е навистина достапна - проверете со контекст.
- Потврдете ја исправката. Потврдете дека лепенката препорачана од вештачката интелигенција всушност ја затвора ранливоста, не воведува нови пропусти/бубачки и дека го поминала тестирањето.
- Човечко одобрување. Програмер + експерт за безбедност го разгледува наодот и го поправа; Така влегува во складиштето за кодови.
Услови: SAST (Static Application Security Testing — статичко безбедносно тестирање кое го анализира изворниот код без да го стартува). DAST (Динамично — динамично тестирање што ја тестира апликацијата што работи надворешно). OWASP Top 10 е стандардна листа на најчести пропусти на веб-апликации. Вбризгувањето е ранливост предизвикана од толкување на корисничкиот влез како команда/прашање (на пр. SQL инјекција). Параметризраното барање е правилен метод кој го спречува инјектирањето со одвојување на влезот од кодот.
Табела на вообичаени класи на ранливост
Класа на ранливост
Симптом (во код)
правилно решение
Замката на вештачката интелигенција
SQL инјекција
Спојување на влез во барањето
Параметризирано барање
Може да ја игнорира санацијата
тврдо кодирана тајна
Лозинка/клуч во кодот
Таен сеф (свод), завист
Лажно позитивен (примерок/тест)
Слаба автентикација
Недостасува/неправилна контрола
Моќна, централизирана контрола
промаши контекст
Неисправна контрола на пристап
Нема проверка на овластување
Овластување од страна на серверот
Не го разбира сложениот тек
Откривање на чувствителни податоци
Складирање/логирање без лозинка
Енкрипција, маскирање
Не можам да ја познавам критичноста
Несигурна серијализација
Десеријализирајте неверодостојни податоци
Безбедно парсирање
Промаши ретка шема
три мини футроли
Случај 1 - Фаќање на вистинската инјекција. Инвеститорот има AI да ја испита функцијата за пристап до податоци. Вештачката интелигенција ја означува линијата каде што вредноста на userId од корисникот е поврзана директно во текстот на SQL и вели „ова е класично инјектирање SQL, претворете го во параметрирано барање“; Обезбедува корекција на примерокот. Програмерот потврдува дека влезот не е саниран на друго место, потврдува дека е вистинска ранливост, го имплементира предложеното параметрирано барање и пишува тест. ВИ ја истакна ранливоста; тестирањето за верификација и корекција дојде од развивачот.
Случај 2 - Лажно позитивна фиксна тајна. Вештачката интелигенција ја гледа линијата лозинка = „test1234“ во датотека и вели „критична: лозинка со тврд код“. Програмерот го проверува контекстот: ова е единица тест-датотека, лажни податоци за тестирање, кои не се пуштени во производство и не се пренесуваат во вистински систем. Наодот е лажно позитивен. Програмерот го документира ова, но не презема акција бидејќи не е вистинска тајна. Поука: Знакот „тврда тајна“ на вештачката интелигенција мора да се елиминира според контекстот; Не секоја низа е тајна.
Случај 3 - Поправка на нова ранливост. Вештачката интелигенција предлага поправка за ранливоста на XSS (скриптирање меѓу страници); но кодот што тој го предлага го брише влезот на погрешно место и го прескокнува кодирањето на излезот во друга област; Како резултат на тоа, јазот не се затвора целосно. Експертот за безбедност ја прегледува поправката, го забележува кодирањето што недостасува и го поправа на правилниот слој. Лекција: Закрпата што вештачката интелигенција ја препорачува не е автоматски безбедна; Секоја поправка е прегледана и тестирана.
Слаб промпт / Силен промпт
Слаба навестување:
Дали има дупка во овој код, поправете ја: [code]
Овој потсетник не дава контекст (јазик, рамка, влезен извор), не бара оправдување, не го доведува во прашање лажно позитивното и е отворено за слепо прифаќање на корекцијата што ја произведува вештачката интелигенција. Вештачката интелигенција измешала знаци и за вистинска и за непостоечка ранливост.
Моќен потсетник:
Вашата улога: асистент кој е ВТОРО ОКО на развивачот при преглед на безбеден код. Донесување одлуки; разгледајте го директно применетото решение. Код: [наведете јазик/рамка]. Контекст: оваа функција [влезен извор: на пр. прима [надворешно барање HTTP], запишува на [излезна дестинација]. Ваша задача: (1) означете ги можните пропусти со класата OWASP, наведете број на линија + зошто е ризично + како да се искористи + докази за секоја, (2) напишете најмалку 1 лажно позитивно сценарио за секој наод (на пр. ако влезот е саниран во друг слој), (3) предложете исправка, но со знакот „[преглед + запише тест]“; Исто така, проценете дали поправката воведува нови пропусти/бубачки. Додавање лажна ранливост.[code]
Силното известување дава контекст, бара класа и докази за OWASP, поставува прашања за лажно позитивни и ризици од санација, принудува човечки преглед.
Шаблони за копирање на брзините
ШАБОР ЗА СКЕНИРАЊЕ ЗА РАНЛИВОСТ Испитајте го кодот за [јазик/рамковен] за OWASP Топ 10. За секој можен наод: број на линија, класа на ранливост, зошто е ризично, искористување на примерокот, сила на докази (извесна/веројатна/слаба). Контекст: влез [извор], излез [цел]. Додавање на измислени наоди; Ако не сте сигурни, напишете „[мора да се потврди]“. Код: [залепи]
ЛАЖНО ПОЗИТИВЕН ДЕЛ ЗА ЕЛИМИНАЦИЈА За следното наоѓање код, наведете ги сценаријата во кои НЕ постои вистинска ранливост: дали може да се исчисти влезот на друг слој, дали оваа патека е достапна, дали оваа вредност е тест/примерок, дали рамката е автоматски заштитена. Напишете како да потврдите за секој од нив. Наоѓање: [залепи]
ПОПРАВЕТЕ ГО шаблонот за ЕВАЛУАЦИЈА Препорачај поправка за следната ранливост; потоа критикувајте ја вашата сопствена поправка: (1) дали навистина ја затвора ранливоста, (2) дали воведува нова ранливост/бубачка, (3) каков тест треба да напишам (позитивен и негативен случај), (4) влијание врз перформансите/функционалноста. Ќе го прегледам и тестирам поправката. Ранливост + код: [залепи]
БЕЗБЕДЕН шаблон за настава за класата на ранливост [на пр. SQL injection] компаративно покажува безбедна шема за пишување и вообичаени погрешни обрасци во овој јазик/рамка. Општо правило + дај пример за код; но сакам да го прашате контекстот пред да го имплементирате во мојот код. Јазик/рамка: [напиши]
Вообичаени грешки
- Преглед без контекст. Без јазик, рамка и влезно/излезен контекст, вештачката интелигенција ги збунува и реалните и лажните наоди; Бидете сигурни да дадете контекст.
- Помешање на секој знак за вистинска слабост. Вештачката интелигенција произведува лажни позитиви (податоци за тестирање, влез исчистен на друг слој); Просеј го секој наод со контекст.
- Слепо примена на корекција на вештачката интелигенција. Препорачаната закрпа може да воведе нови пропусти/бубачки; прегледуваат и пишуваат тестови.
- Верување на лажно негативно. Дури и ако вештачката интелигенција вели „нема ранливости“, испитајте ги критичните патеки сами; Статичкото скенирање не ја открива секоја ранливост.
- Давање на кодот/тајната на надворешната алатка. Приватниот код и вистинските тајни (клуч, лозинка) се интелектуална сопственост и ранливост; анонимизирајте или користете корпоративни, изолирани алатки.
Совет: Кога го имате кодот за преглед на вештачката интелигенција, најефикасен филтер е да побарате „јачина на докази“ (одредена/веројатна/слаба) за секој наод. Повеќето наоди означени како „слаби“ се лажно позитивни; ја распределувате вашата енергија на „сигурните“.
Внимание: предложената безбедносна поправка на вештачката интелигенција не треба да влезе во складиштето без да биде тестирана. Неточната „поправка“ може и да ја остави отворена ранливоста и да доведе до функционална грешка во производството; Секој лепенка поминува низ портата за преглед и тестирање.
Сумирано
Безбедното прегледување на кодот е најевтиниот начин да се фатат ранливостите пред да влезат во производство, а бидејќи кодот е јазик, вештачката интелигенција станува моќно второ око овде: означува опасните обрасци, објаснува ризик, предлага поправки. Но, вештачката интелигенција не го гледа целиот оперативен контекст, произведува лажни позитиви и лажни негативни, а лепенката што ја препорачува може да воведе нови пропусти. Значи, прегледот има шест чекори (контекст, скрининг, оправдување, лажно позитивна елиминација, проверка на поправки, човечко одобрување) и одлуката е на развивачот и на експертот за безбедност. Три принципи: ниту едно откритие не се толкува без контекст, секој знак се елиминира со контекст, ниту едно поправање не оди во складирање непроверено. И кодот/тајната никогаш не се дава на надворешна алатка без анонимизација.
Задача за апликација
Земете примерок фрагмент од код (или отстранување чувствителни делови од вашиот сопствен код или примерок код со пропусти). Вештачката интелигенција нека ја испита со шаблонот „Скенирање на ранливост“; Применете го шаблонот „Лажно позитивна елиминација“ за секој наод и елиминирајте ги вистинските. Преземете ја исправката на најсериозниот наод со шаблонот „Евалуација за санација“, прегледајте го сами и напишете еден позитивен + еден негативен тест случај. Забележете колку наоди беа лажни позитивни.
листа за проверка
- [ ] Ги дадов јазикот, рамката и влезно/излезниот контекст пред да го прегледам кодот.
- [ ] Побарав број на линија, класа на ранливост, патека на експлоатација и докази за секој наод.
- [ ] Го прегледав секој наод за лажни позитиви со контекст.
- [ ] Не ја применив слепо корекцијата на вештачката интелигенција; Разгледав и напишав тест.
- [ ] И покрај излезот „Без ранливост“, јас самиот ги испитав критичните патеки.
- [ ] Го анонимизирав кодот/тајните или користев корпоративно изолирано алатки.
- [ ] Го поминав откритието и поправав преку програмер + безбедносно одобрение.