
Professionaalse tegevuse kÀigus seisavad arendajad, pentesterid ja turvamehed silmitsi selliste protsessidega nagu haavatavuste haldamine (VM) ja (turvaline) SDLC.
Nende fraaside taga peituvad erinevad praktika- ja tööriistakogumid, mis on omavahel seotud, kuigi nende kasutajad on erinevad.
Tehniline edusamm ei ole veel jĂ”udnud sinnamaani, et ĂŒks tööriist suudaks asendada inimest infrastruktuuri ja tarkvara turvalisuse analĂŒĂŒsimisel.
On huvitav mÔista, miks see nii on ja milliste probleemidega silmitsi seistakse.
Protsessid
Haavatavuste haldamise protsess (Vulnerability Management) on ette nÀhtud infrastruktuuri turvalisuse pidevaks jÀlgimiseks ja patch-haldamiseks.
Secure SDLC protsess (turvaline arendustsĂŒkkel) on mĂ”eldud rakenduse turvalisuse toetamiseks arenduse ja kasutuse ajal.
Selle protsessi sarnane osa on haavatavuste hindamise protsess, mis hÔlmab haavatavuste skaneerimist.
Peamine erinevus VM ja SDLC skaneerimise vahel on see, et esimeses juhtumis on eesmÀrgiks tuvastada teadaolevaid haavatavusi kolmandate osapoolte tarkvaras vÔi konfiguratsioonis. NÀiteks vananenud Windowsi versioon vÔi SNMP vaikeparool.
Teises juhtumis on eesmÀrgiks avastada haavatavusi mitte ainult kolmandate osapoolte komponentides (sÔltuvustes), vaid eelkÔige uue toote koodis.
See tekitab erinevusi tööriistades ja lĂ€henemistes. Minu arvates on uute haavatavuste leidmise ĂŒlesanne rakenduses oluliselt huvitavam, kuna see ei piira end versioonide sĂ”rmeenamiste, bannerite kogumise, paroolide proovima ja nii edasi.
Kvaliteetsete automatiseeritud rakenduste haavatavuste skaneerimise jaoks on vajalikud algoritmid, mis arvestavad rakenduse semantikat, selle otstarvet ja spetsiifilisi ohte.
Infrastruktuuri skannerit on sageli vĂ”imalik asendada ajastiga, nagu vĂ€ljendas . MĂTE on selles, et statistiliselt vĂ”ite arvestada oma infrastruktuuri haavatavaks, kui te ei ole seda uuendanud nĂ€iteks kuu aega.
Tööriistad
Skaneerimist, nagu ka turvalisuse analĂŒĂŒsi, saab teostada nii musta kasti kui ka valge kasti meetodil.
Black Box
Blackbox skaneerimise puhul peab tööriist suudma suhelda teenusega lÀbi samade liideste, mida kasutavad kasutajad.
Infrastruktuuri skannerid (nt Tenable Nessus, Qualys, MaxPatrol, Rapid7 Nexpose jne) otsivad avatud vĂ”rguporte, koguvad "bĂ€nnereid", mÀÀravad paigaldatud tarkvara versioonid ja otsivad oma teadmistebaasist teavet nende versioonide haavatavuste kohta. Samuti pĂŒĂŒavad nad avastada konfiguratsiooni vigu, nagu vaikeparoolid vĂ”i avatud juurdepÀÀs andmetele, nĂ”rgad SSL-krĂŒptod jne.
Veebirakenduste skannerid (nt Acunetix WVS, Netsparker, Burp Suite, OWASP ZAP jne) oskavad samuti tuvastada tuntud komponente ja nende versioone (nt CMS, raamistikud, JS-raamatukogud). Skanneri peamised sammud on kraulimine ja fuzzing.
Kraulimise kÀigus kogub skanner teavet olemasolevate rakenduse liideste ja HTTP-parameetrite kohta. Fuzzingu kÀigus sisestatakse kÔikidesse avastatud parameetritesse muudetud vÔi genereeritud andmed, et provotseerida viga ja avastada haavatavus.
Sellised rakenduste skannerid kuuluvad DAST ja IAST klassidesse â vastavalt dĂŒnaamiline ja interaktiivne rakenduste turvatestimine.
Valge kasti
Valge kasti skannimisega on rohkem erinevusi.
VM protsessi raames antakse skanneritele (nt Vulners, Incsecurity Couch, Vuls, Tenable Nessus jne) sageli juurdepÀÀs sĂŒsteemidele, tehes autentitud skanni. Nii saab skanner laadida paigaldatud paketid ja konfiguratsiooni parameetrid otse sĂŒsteemist, mitte ei arva neid vĂ”rgu teenuste bĂ€nnereilt.
Skannimine on tÀpsem ja tÀielikum.
Kui rÀÀkida valge kasti skannimisest (nt CheckMarx, HP Fortify, Coverity, RIPS, FindSecBugs jne) rakenduste puhul, siis rÀÀgitakse tavaliselt koodi staatilisest analĂŒĂŒsist ja vastavate SAST klassi tööriistade kasutamisest â staatiline rakenduste turvatestimine.
Probleemid
Skannimisega seondub palju probleeme! Enamikuga neist puutun ma isiklikult kokku teenuse osutamise raames skannimise ja turvalise arendamise protsesside loomisel ning turvaanalĂŒĂŒsi teostamisel.
Toon vÀlja 3 peamist probleemigruppi, mida kinnitavad ka vestlused inseneride ja IT-turbeosakondade juhtidega erinevates ettevÔtetes.
Veebirakenduste skannimise probleemid
- Rakendamise keerukus. Skannerid tuleb konfigureerida ja kohandada igas rakenduses, et luua testikeskkond skannimiseks ning integreerida see CI/CD protsessi, et see oleks tÔhus. Vastasel juhul on see kasutu formaalne protseduur, mis toob vÀlja vaid valehÀireid.
- Skannimise kestus. Skannerid ei suuda isegi 2019. aastal hĂ€sti hallata liideste dedupikatsiooni ja vĂ”ivad mitu pĂ€eva skannida tuhat lehte, millel on 10 parameetrit, pidamata neid erinevateks, hoolimata sellest, et need on ĂŒhesuguse koodi all. Samas on toote tootmisfaasi viimise otsus arendusprotsessi kĂ€igus vajalik kiiresti teha.
- Piinlikud soovitused. Skannerid annavad piisavalt ĂŒldisi soovitusi, ning arendajal ei pruugi alati kiirelt selguda, kuidas vĂ€hendada riski, ja mis veelgi olulisem, kas seda tuleks teha kohe vĂ”i oodata.
- Destruktiivne mĂ”ju rakendusele. Skannerid vĂ”ivad pĂ”hjustada rakendusele DoS-rĂŒnnaku ning vĂ”ivad genereerida suures koguses entiteete vĂ”i muuta olemasolevaid (nt luua kĂŒmneid tuhandeid blogikommentaare), seetĂ”ttu ei tohiks skannimist tootmisfasXin ilma pĂ”hjuseta alustada.
- Madala kvaliteediga haavatavuste avastamine. Skannerid kasutavad tavaliselt fikseeritud kogumit koormusi (âpayloadsâ) ning vĂ”ivad kergesti jĂ€tta avastamata haavatavuse, mis ei sobitu nende tuntud rakenduse kĂ€itumise stsenaariumisse.
- Skanneri arusaam rakenduse funktsioonidest. Skannerid ei tea iseenesest, mis on âinternetipankâ, âmakseâ, âkommentaarâ. Nende jaoks eksisteerivad vaid lingid ja parameetrid, mistĂ”ttu palju vĂ”imalikke Ă€riloogika haavatavusi jÀÀb tĂ€ielikult katmata, nad ei suuda tuvastada kahekordset arveldamist, vaadata kellegi andmeid ID kaudu vĂ”i muuta saldot ĂŒmardamise kaudu.
- Skanneri arusaam lehtede semantikast. Skannerid ei oska lugeda KKK-sid, ei oska tuvastada captchasid, nad ei mĂ”ista iseenesest, kuidas registreerida ning et tuleb uuesti sisse logida, et âlog outiâ nuppu ei tohi vajutada ning kuidas peaks muutma parameetrite vÀÀrtuste allkirjastamist. Tulemuseks vĂ”ib enamik rakendusest ĂŒldse skannimata jÀÀda.
Probleemid lÀhtekoodi skannimisel.
- ValehĂ€ired. Statiline analĂŒĂŒs on keeruline ĂŒlesanne, mille lahendamisel tuleb sageli teha mitmeid kompromisse. Tihti tuleb ohverdada tĂ€psus, ja isegi kallid ettevĂ”tte skannerid esitavad tohutult valehĂ€ireid.
- Rakendamise keerukus. Statilise analĂŒĂŒsi tĂ€psuse ja tĂ€ielikkuse suurendamiseks on vaja tĂ€iustada skaneerimisreegleid, ning nende reeglite kirjutamine vĂ”ib olla liiga töömahukas. MĂ”nikord on lihtsam leida kĂ”ik kohad koodis, kus on mingi bugi, ja neid parandada, kui kirjutada reegel selle tuvastamiseks.
- SĂ”ltuvuste toetuse puudumine. Suured projektid sĂ”ltuvad suurest hulgast raamatutest ja raamistikest, mis laiendavad programmeerimiskeele vĂ”imalusi. Kui skanneri teadmistebaasis pole teavet nende raamistike ohtlike kohtade (âsinksâ) kohta, muutub see pime koht, ja skanner ei suuda isegi koodi mĂ”ista.
- Skannimise kestus. Haavatavuste leidmine koodist on keeruline ĂŒlesanne ka algoritmide mĂ”istes. SeetĂ”ttu vĂ”ib protsess venida ja nĂ”uda samas olulisi arvutusressursse.
- Madala katvuse probleem. Hoolimata ressursside tarbimisest ja skaneerimise pikkusest peavad SAST-tööriistade arendajad siiski tegema kompromisse ning analĂŒĂŒsima mitte kĂ”iki olekuid, milles programm vĂ”ib viibida.
- Leidude korduvuse kĂŒsimus. Konkreetse rea ja kutsumise jungli nĂ€itamine, mis toob kaasa haavatavuse, on suurepĂ€rane, kuid sageli ei anna skanner piisavalt teavet, et kontrollida haavatavuse olemasolu vĂ€ljastpoolt. LĂ”ppude lĂ”puks vĂ”ib puudus olla ka surnud koodis, mis on rĂŒndaja jaoks kĂ€ttesaamatu.
Infrastruktuuri skaneerimise probleemid.
- Ebapiisav inventuur. Suurtel infrastruktuuridel, eriti geograafiliselt jagatud, on tihti kĂ”ige raskem mĂ”ista, milliseid hoste tuleb skandeerida. TeisisĂ”nu, skaneerimise ĂŒlesanne on tihedalt seotud varade haldamise ĂŒlesandega.
- Halb prioriteetimine. VÔrgu skannerid esitavad sageli palju tulemusi puudustega, mis praktikas ei ole ekspluateeritavad, kuid formaalselt on nende riskitase kÔrge. Tarbija saab aruande, mida on raske tÔlgendada, ja pole selge, mida tuleb kÔigepealt parandada.
- Piinlikud soovitused. Skannimise teadmistebaasis on sageli ainult vĂ€ga ĂŒldine teave haavatavuste ja nende parandamise viiside kohta, seega peavad administraatorid kasutama Google'i. Olukord on veidi parem valgekarvaliste skanneritega, mis vĂ”ivad anda konkreetse kĂ€su parandamiseks.
- KĂ€sitöö. Infrastruktuurides vĂ”ib olla palju sĂ”lmi, mis tĂ€hendab potentsiaalselt palju puudujÀÀke, mille aruanded tuleb igas iteratsioonis kĂ€sitsi lĂ€bi vaadata ja analĂŒĂŒsida.
- Halb katvus. Infrastruktuuri skannimise kvaliteet sĂ”ltub otseselt teadmistest haavatavuste ja tarkvaraversioonide kohta. Siiski, , isegi turuliidritel ei ole teadmistest tĂ€ielikku ĂŒlevaadet ning tasuta lahenduste andmebaasides on palju teavet, mida turuliidritel ei ole.
- Patchimise probleemid. KĂ”ige sagedamini hĂ”lmab haavatavuste patchimine infrastruktuuris paketi vĂ€rskendamist vĂ”i konfiguratsioonifaili muutmist. Suur probleem on see, et sĂŒsteem, eriti vanad sĂŒsteemid, vĂ”ivad vĂ€rskendamise tĂ”ttu ettearvamatult kĂ€ituda. Sisuliselt tuleb teha integraatsiooniteste elavas infrastruktuuris tootmises.
LĂ€hteviisid.
Kuidas siis olla?
Rohkem nÀiteid ja seda, kuidas paljude nimetatud probleemidega vÔidelda, selgitan jÀrgmistes osades, aga praegu toon vÀlja peamised suunad, millega saab töötada:
- Erinevate skannimisvahendite agregatsioon. Korralikult kasutades mitmeid skannere, on vÔimalik saavutada mÀrkimisvÀÀrne teadmisteteabe ja detekteerimise kvaliteedi suurenemine. VÔib leida isegi rohkem haavatavusi, kui kogutud kÔikides skannerites eraldi, samal ajal saades tÀpsemalt hinnata riski taset ja anda rohkem soovitusi.
- SAST ja DAST integreerimine. DAST katvust ja SAST tÀpsust saab suurendada nende vahelise teabe vahetamise kaudu. Algfailidest saab teavet olemasolevate marsruutide kohta ning DAST abil saab kontrollida, kas haavatavus on vÀljastpoolt nÀhtav.
- Machine Learningâą. Aastal 2015 andsin ma (ja ) statistika rakendamise kohta, et anda skanneritele hĂ€kkeri intuitsioon ja kiirendada nende mĂ€rkimisprotsesse. See on kindlasti toiduks tulevase automaatse turvaseisu analĂŒĂŒsi arendamiseks.
- IAST integreerimine automaattestide ja OpenAPI-ga. CI/CD-pipeline'i raames on vÔimalik luua skaneerimisprotsess, mis pÔhineb HTTP-proksina töötavatel tööriistadel ja funktsionaalsetel testidel, mis töötavad HTTP-pÔhiselt. OpenAPI/Swagger testid ja lepingud annavad skaneerijale vajalikku teavet andmevoogude kohta ja vÔimaldavad skannida rakendust erinevates olekutes.
- Ăige konfigureerimine. Iga rakenduse ja infrastruktuuri jaoks tuleb luua sobiv skaneerimisprofiil, mis arvestab liideste arvu ja iseloomu ning kasutatavaid tehnoloogiaid.
- Skaneerijate kohandamine. Tihti ei ole rakendust vĂ”imalik skaneerida ilma skaneerija tĂ€iendava töötlemiseta. NĂ€iteks makse vĂ€rav, kus iga pĂ€ring peab olema allkirjastatud. Ilma vĂ€rava protokolli konnektori kirjutamiseta skaneerijad saadavad vale allkirjaga pĂ€ringud. Samuti on vajalik kirjutada spetsialiseeritud skaneerijad teatud tĂŒĂŒpi puuduste, nĂ€iteks:
- Riskide juhtimine. Erinevate skaneerijate kasutamine ja vĂ€liste sĂŒsteemidega, nagu varahalduse ja Ă€hvarduste juhtimise integreerimine, vĂ”imaldab kasutada riskitaseme hindamiseks mitmesuguseid parameetreid, nii et juhtkond saab objektiivse ĂŒlevaate arenduse vĂ”i infrastruktuuri turvaseisundist.
JÀtkake jÀlgimist ja hÀirime haavatavuste skaneerimist!
Allikas: habr.com
