Добици:
- Могућност коришћења вештачке интелигенције као другог ока и означавање рањивости класе ОВАСП (убризгавање, чврста тајна, контрола приступа) у коду давањем контекста
- Способност да се елиминишу лажни позитивни резултати које производи вештачка интелигенција са контекстом и спречи третирање сваког налаза као стварне рањивости без потврђивања
- Способност препознавања да исправка коју је предложила вештачка интелигенција може да уведе нове рањивости/грешке и да сваку закрпу прође кроз капију за преглед и тестирање
Рањивости унутар софтвера спадају међу најскупље рањивости јер су уграђене у производ од почетка и дистрибуиране милионима корисника. Безбедни преглед кода је процес читања изворног кода ред по ред и откривања рањивости — СКЛ ињекције, рањивости аутентификације, тврдо кодиране лозинке, нетачне ауторизације — пре него што крену у производњу. Када се ради ручно, то је споро и заморно; Лако је пропустити рањивост у великој бази кода.
АИ је моћан у прегледу кода из два разлога: код је такође језик, а АИ је добра у препознавању образаца. АИ може брзо да означи опасне обрасце у делу кода (стављање корисничког уноса директно у упит, складиштење нешифрованих података, пропуштање валидације уноса), објасни зашто је сваки ризичан и предложи решење. Али АИ не види цео оперативни контекст кода (унос се можда брише на другом слоју), може измислити рањивост која не постоји (лажно позитивно) или пропустити стварну рањивост (лажно негативна), и што је најважније, „поправка“ коју предлаже може увести нову рањивост или грешку. АИ је друго око и показивач у прегледу кода; Програмер и стручњак за безбедност одлучују да ли је налаз права рањивост и да ли је исправка тачна и безбедна.
Кораци прегледа кода
- Дајте обим и контекст. Који језик, који оквир, где овај код узима улаз, где даје излаз, на ком слоју ради? Преглед кода без контекста производи лажне позитивне резултате.
- Скенирајте опасне обрасце. Потражите познате класе рањивости АИ (као што је ОВАСП Топ 10): убризгавање, аутентификација, откривање осетљивих података, контрола приступа.
- Нека сваки налаз буде оправдан. За сваку заставу: која линија, која класа рањивости, како се може искористити, који су докази. Неоправдан налаз се не схвата озбиљно.
- Елиминишите лажно позитивне. Да ли се унос заиста брише, да ли је тај пут заиста доступан - проверите у контексту.
- Проверите исправку. Потврдите да закрпа коју препоручује АИ заправо затвара рањивост, не уводи нове рањивости/грешке и да је прошла тестирање.
- Људско одобрење. Програмер + стручњак за безбедност прегледа налаз и исправку; Тако улази у спремиште кодова.
Услови: САСТ (Статиц Апплицатион Сецурити Тестинг — статичко тестирање безбедности које анализира изворни код без његовог покретања). ДАСТ (Динамичко — динамичко тестирање које екстерно тестира покренуту апликацију). ОВАСП Топ 10 је стандардна листа најчешћих рањивости веб апликација. Ињекција је рањивост узрокована тумачењем корисничког уноса као команде/упита (нпр. СКЛ ињекција). Параметризовани упит је исправан метод који спречава убризгавање одвајањем уноса од кода.
Табела уобичајених класа рањивости
Класа рањивости
Симптом (у коду)
право решење
АИ замка
СКЛ ињекција
Спајање уноса у упит
Параметризовани упит
Може игнорисати дезинфекцију
тврдо шифрована тајна
Лозинка/кључ у коду
Тајни сеф (трезор), окр
Лажно позитиван (узорак/тест)
Слаба аутентификација
Недостаје/нетачна контрола
Снажна, централизована контрола
пропушта контекст
Неисправна контрола приступа
Нема провере овлашћења
Ауторизација на страни сервера
Не разуме сложени ток
Откривање осетљивих података
Складиштење/регистровање без лозинке
Шифровање, маскирање
Не могу знати критичност
Небезбедна серијализација
Десериализујте непоуздане податке
Сигурно рашчлањивање
Недостаје ретки образац
три мини кофера
Случај 1 — Хватање стварне ињекције. Програмер има АИ да испита функцију приступа подацима. АИ означава линију где је вредност усерИд од корисника спојена директно у СКЛ текст и каже „ово је класична СКЛ ињекција, претворите је у параметризовани упит“; Омогућава корекцију узорка. Програмер потврђује да унос није дезинфикован на другом месту, проверава да је стварна рањивост, имплементира предложени параметризовани упит и пише тест. АИ је истакао рањивост; Тестирање верификације и исправке је стигло од програмера.
Случај 2 — Лажна позитивна фиксна тајна. АИ види ред за лозинку = „тест1234“ у датотеци и каже „критично: тврдо кодирана лозинка“. Програмер проверава контекст: ово је фајл тест јединица, лажни тест подаци, који није пуштен у производњу и није пренет на прави систем. Налаз је лажно позитиван. Програмер то документује, али не предузима ништа јер то није права тајна. Поука: Знак АИ „тврда тајна“ мора бити елиминисан контекстом; Није сваки низ тајна.
Случај 3 — Нова исправка рањивости. АИ предлаже исправку за КССС (цросс-сите сцриптинг) рањивост; али код који он предлаже брише унос на погрешном месту и прескаче кодирање излаза у другој области; Као резултат, јаз се не затвара у потпуности. Стручњак за безбедност прегледа исправку, примећује кодирање које недостаје и поправља га на исправном слоју. Лекција: Закрпа коју АИ препоручује није аутоматски безбедна; Свака поправка се прегледа и тестира.
Слаби промпт / Јаки промпт
Слабо обавештење:
Постоји ли рупа у овом коду, поправите је: [код]
Овај упит не даје контекст (језик, оквир, извор уноса), не тражи оправдање, не доводи у питање лажно позитиван резултат и отворен је за слепо прихватање исправки коју је произвела АИ. АИ је мешао знакове и стварне рањивости и непостојеће.
Снажан упит:
Ваша улога: помоћник који је ДРУГО ОКО програмеру у безбедном прегледу кода. Доношење одлука; размотрите директно примењену поправку. Код: [наведите језик/оквир].Контекст: ова функција [извор уноса: нпр. прима [екстерни ХТТП захтев], уписује на [излазно одредиште]. Ваш задатак: (1) означите могуће рањивости са ОВАСП класом, дајте број реда + зашто је ризично + како искористити + доказ за сваки, (2) напишите најмање 1 лажно позитиван сценарио за сваки налаз (нпр. ако је унос дезинфикован у другом слоју), (3) предложите исправку, али са знаком "[преглед + тест писања]"; Такође процените да ли исправка уводи нове рањивости/грешке. Додавање лажне рањивости.[цоде]
Снажан упит даје контекст, тражи ОВАСП класу и доказе, доводи у питање лажно позитивне резултате и ризике санације, приморава људе да прегледају.
Шаблони упита који се могу копирати
ШАБЛОНА ЗА СКЕНИРАЊЕ РАЊИВОСТИ Испитајте [језик/оквир] код за ОВАСП Топ 10. За сваки могући налаз: број реда, класа рањивости, зашто је ризично, експлоатација узорка, јачина доказа (извесно/вероватно/слабо). Контекст: улаз [извор], излаз [циљ]. Додавање фабрикованих налаза; Ако нисте сигурни, откуцајте „[мора бити верификован]“. Шифра: [налепи]
ЛАЖНО ПОЗИТИВНИ УБРАЗАЦ ЕЛИМИНАЦИЈЕ За следећи налаз кода, наведите сценарије у којима НЕМА стварне рањивости: да ли се унос може обрисати на другом слоју, да ли је ова путања доступна, да ли је ова вредност тест/узорак, да ли је оквир аутоматски заштићен. Напишите како да потврдите за сваку од њих. Проналажење: [налепи]
ФИКС ЕВАЛУАТИОН ТАМПЛАТЕРПрепоручите исправку за следећу рањивост; затим критикујте сопствену исправку: (1) да ли заиста затвара рањивост, (2) да ли уводи нову рањивост/буг, (3) који тест треба да напишем (позитиван и негативан случај), (4) утицај на перформансе/функционалност. Прегледаћу и тестирати исправку. Рањивост + код: [налепи]
ШАБЛОНА ЗА НАСТАВУ СЕЦУРЕ ПАТТЕРН за класу рањивости [нпр. СКЛ ињекција] компаративно показују безбедно куцање и уобичајене погрешне обрасце у овом језику/оквиру. Опште правило + дати пример кода; али желим да питате контекст пре него што га имплементирате у мој код. Језик/оквир: [писати]
Уобичајене грешке
- Преглед без контекста. Без језика, оквира и улазно/излазног контекста, АИ збуњује и стварне и лажне налазе; Обавезно дајте контекст.
- Погрешити сваки знак за праву слабост. АИ производи лажне позитивне резултате (тестни подаци, улаз очишћен на другом слоју); Просејте сваки налаз са контекстом.
- Слепо примењујући корекцију АИ. Препоручена закрпа може увести нове рањивости/грешке; прегледати и написати тестове.
- Веровање лажно негативном. Чак и ако АИ каже „нема рањивости“, сами испитајте критичне путеве; Статичко скенирање не открива сваку рањивост.
- Давање кода/тајне спољном алату. Приватни код и стварне тајне (кључ, лозинка) су интелектуална својина и рањивост; анонимизирати или користити корпоративне, изоловане алате.
Савет: Када имате код за преглед АИ, најефикаснији филтер је да тражите „јаку доказа“ (извесно/вероватно/слабо) за сваки налаз. Већина налаза означених као „слаби“ су лажно позитивни; своју енергију додељујете онима „сигурним“.
Опрез: безбедносна исправка коју је предложила АИ не би требало да уђе у складиште без тестирања. Нетачна „поправка“ може и оставити рањивост отвореном и довести до функционалне грешке у производњи; Свака закрпа пролази кроз капију за преглед и тестирање.
Укратко
Безбедан преглед кода је најјефтинији начин да се открију рањивости пре него што буду у производњи, а пошто је код језик, вештачка интелигенција овде постаје моћно друго око: означава опасне обрасце, објашњава ризик, предлаже исправке. Али АИ не види цео оперативни контекст, производи лажне позитивне и лажне негативне, а закрпа коју препоручује може да уведе нове рањивости. Дакле, преглед има шест корака (контекст, скрининг, оправдање, лажно позитивно елиминисање, верификација исправке, људско одобрење) и одлука је на програмеру и стручњаку за безбедност. Три принципа: ниједан налаз се не тумачи без контекста, сваки знак се елиминише са контекстом, ниједан поправак не иде у складиште непроверен. А код/тајна се никада не даје спољном алату без анонимизације.
Задатак апликације
Узмите пример исечка кода (или уклањање осетљивих делова из сопственог кода или пример кода са рањивостима). Нека га АИ испита помоћу шаблона „Скенирање рањивости“; Примените шаблон „Лажно позитивно елиминисање“ за сваки налаз и елиминишите праве. Узмите исправку најозбиљнијег налаза са шаблоном „Евалуација санације“, прегледајте га сами и напишите један позитиван + један негативан тест случај. Обратите пажњу колико је налаза било лажно позитивних.
контролна листа
- [ ] Дао сам језик, оквир и улазно/излазни контекст пре прегледа кода.
- [ ] Тражио сам број линије, класу рањивости, путању експлоатације и доказе за сваки налаз.
- [ ] Проверио сам сваки налаз за лажне позитивне резултате са контекстом.
- [ ] Нисам слепо применио корекцију АИ; Прегледао сам и написао тест.
- [ ] Упркос излазу „Нема рањивости“, лично сам испитао критичне путеве.
- [ ] Анонимизовао сам код/тајне или користио корпоративне изоловане алате.
- [ ] Прошао сам откривање и исправку кроз одобрење програмера + безбедносно одобрење.