Top 10 ranjivosti prema OWASP s najnovijeg popisa iz 2021. godine su:
- A01:Broken Access Control
- A02:Cryptographic Failures
- A03:Injection
- A04:Insecure Design
- A05:Security Misconfiguration
- A06:Vulnerable and Outdated Components
- A07:Identification and Authentication Failures
- A08:Software and Data Integrity Failures
- A03:Security Logging and Monitoring Failures
- A10:Server Side Request Forgery
Svrha Top 10 ranjivosti je osvijestiti programere o sigurnosti web aplikacija sa ciljem da ti isti web programeri ublaže ili uklone (gdje je moguće) sigurnosne rizike. Idemo redom objasniti ranjivosti i načine njihovih ublažavanja. U primjerima ćemo se koristiti OWASP Juice Shop projektom kako bismo prikazali ranjivosti na stvarnim primjerima - za više informacija o Juice Shopu uzmite VIDI broj 333 ili pretražite owasp.org.
A01:2021-Broken Access Control
Što je kontrola pristupa? Kontrola pristupa je koncept koji onemogućava ili ograničava pristup određenim stranicama, aplikacijama tj. podacima. Osigurava da samo osobe koje imaju ovlaštenja ili prava mogu pristupiti određenim dijelovima stranica ili aplikacija.
Kako je istražiti? Jedan od načina je istražujući i mijenjajući URL neke stranice.
Slika 1. Istraživanje JavaScript koda u web pregledniku
Npr. u https://moja-stranica.hr/moji-detalji probati utipkati https://moja-stranica.hr/admin-detalji i vidjeti pokazuje li se admin stranica. Ako ne, znači da su kontrole dobro postavljane, ako da, stranica je ranjiva.
U OWASP Juice Shop aplikaciji možete pokušati istražiti rute. Kao što ste tražili i scoreboard u VIDI broju 333, ovdje možete ponovo istražiti JavaScript kod te vidjeti ima li zanimljivih ruta. Na slici 1 možemo vidjeti rutu administration, pa je idemo probati dodati na URL u aplikaciju.
Nakon unosa administration u URL dobili smo pristup svim registriranim korisnicima, što možemo vidjeti na slici 2.
Kako se zaštititi? Treba ograničiti pristup svim stranicama i resursima, te naknadno dodavati pristupe na zahtjev. Ako se bavite razvojem softvera, redovito testirajte svoje aplikacije s aspekta kontrole pristupa. Pokušajte se prijaviti na stranice na koje nemate pravo, razmišljajte „izvan-kutije“. Šaljite mailove upozorenja sistemskim administratorima koji će vidjeti ako neki korisnik pokušava pristupiti stranici na koju nema pravo.
Slika 2. Ups, vide se svi korisnici!
A02:2021-Cryptographic Failures
U ovoj ranjivosti dolazimo do problema starih kriptografskih algoritama ili, još gore, izostanak kriptiranja osjetljivih informacija kao što su financijski podaci (brojevi kreditnih kartica, krediti…), adrese, povijesti bolesti itd.
Kako istražiti? Podaci mogu biti kriptirani u prijenosu i mirovanju, pa uvijek promatrajte je li vam veza sigurna, odnosno da u URL-u postoji HTTPS veza, što označava da su podaci u prijenosu kriptirani. Za podatke u mirovanju je teže napraviti nekakvo istraživanje, a uvijek se sastoji od nekoliko koraka.
U Juice Shop projektu u VIDI broju 333 smo vidjeli kako možemo doći do osjetljivih podataka čitajući upute na stranici About Us gdje smo otkrili nezaštićeni dio URL naziva ftp. Na slici možemo vidjeti sadržaj ftp URL-a gdje između ostalog postoji i .bak datoteka, koja označava sigurnosnu kopiju. Pokušavajući je preuzeti, dolazi do greške i nemogućnosti preuzimanja, a ako upotrijebimo svoje znanje iz programiranja i Poison Byte koncept, možemo probati postaviti %00.md na kraj URL-a. Poison Byte će terminirati interpretaciju koda i ignorirati sve što se nalazi van njega, a u našem slučaju će se manifestirati na način da ćemo uspješno preuzeti .bak sigurnosnu kopiju. Otvarajući .bak, vidimo nekakve kodove koje možemo vidjeti na slici 3 krajnje desno. Budući da se datoteka zove coupons-2013.md.bak, pretpostavljamo da se radi o kodovima za kupone kojima ostvarujemo popust, pa ih idemo isprobati. Unoseći takve kodove, primijetili smo da niti jedan ne valja, pa je za pretpostaviti da su kriptirani. Kako se radi o JavaScript aplikaciji, a na ftp URL-u je dostupan i package.json, idemo ponoviti postupak s Poison Byte konceptom i provjeriti nalazi li se ovdje koja biblioteka za kriptiranje/enkodiranje.
Slika 3. FTP stranica i „skriveni“ kuponi
Guglajući sve pakete, uočili smo da postoji jedan paket koji se zove z85, a možemo ga vidjeti na slici 4.
Slika 4. package.json, manifest aplikacije
Jednostavnim istraživanjem smo ustanovili da se radi o enkodiranju ASCII85 (Z85 varijanta). Na slici 5 možemo vidjeti dekodirani kod u obliku JAN13-10. Idući korak je da se počastite i kupite nešto!
Kako se obraniti? Identificirati „mission critical“ tj. osjetljive podatke i mjesta na kojima se razmjenjuju i spremaju. Provjeriti da se podaci spremaju kriptirano, a da taj ključ kriptiranja nije na nekom javno dostupnom mjestu unutar organizacije. Kod podataka u prijenosu osigurati poslužitelje s antivirusnim zaštitama, a veze između njih kriptiranim prometom, odnosno HTTPS-om. Promet s Interneta je poželjno filtrirati pomoću vatrozida, WAF-ova (Web Application Firewall) i IDS/IPS rješenjima (Intrusion Detection/Intrusion Prevention Systems). Također treba provjeravati i često mijenjati lozinke, kriptografske ključeve, te raditi revizije svih dijelova vašeg sustava.
Slika 5. Dekodiran kupon
A03:2021-Injection
Kroz ovu ranjivost napadač pokušava prenijeti kod koji će se izvršiti u vašem sustavu sa ciljem da ošteti sustav i učini ga nedostupnim ili dobije neke korisne informacije. Najpoznatiji je SQL Injection koji izvršava maliciozni kod u bazi podataka.
Na slici 6 možemo vidjeti primjer iz Juice Shopa gdje je postavljen nestandardni tj. nepredviđeni ulaz u polje email – postavljen je SQL upit, što je rezultiralo neuobičajenom greškom i ispisom osjetljivih informacija koje vam govore kako sustav radi.
Kako se obraniti? Valja koristiti stroge tipove u programskom kodu (brojeve za brojeve, datume za datume, a ne tekst za sve), izbjegavati interpretaciju naredbi, koristiti pripremljene SQL procedure, koristiti predodređene izraze za sortiranje, a ne SQL ključne riječi i ne pokazivati greške o načinu funkcioniranja sustava.
Slika 6. Primjer iznuđene greške koja otkriva kako sustav radi, u ovom slučaju vraća kompletni SQL upit!
A04:2021-Insecure Design
Nesiguran dizajn je nova i apstraktna ranjivost u OWASP Top 10 ranjivostima, a i jedna od najtežih i najskupljih (često i nemogućih) za ispraviti.
Primjer ranjivosti je u samom dizajnu cijelog sustava, a OWASP na svojim stranicama navodi primjer o kino lancu gdje se omogućavaju grupne rezervacije, a uplata je potrebna samo za rezervacije iznad 15 sjedala. Zamislite da se iskoristi ranjivost, napadaču je potrebno napraviti 40 upita da rezervira 600 sjedala i time direktno utječe na prihod kino lanca. Bez grupnih rezervacija napadaču bi trebalo 600 upita da takvo nešto ostvari, što je teško i zamorno za napadača.
Kako se obraniti od nesigurnog dizajna? Jedan od načina je korištenje „Zero Trust Architecture“ koja ne vjeruje nikome. Za pristupe, autentifikacije i autorizacije, promjene u tokovima podataka i poslovnoj logici treba eksplicitno odobriti u razvojnom procesu i modelirati prijetnju. „Shift Left“ promoviraju sigurnosni stručnjaci, a odnosi se na to da se obrati više pozornosti na siguran dizajn softverskog sustava u ranim fazama softverskih projekata, a za siguran dizajn je potrebno i više od toga. Potrebno je pomaknuti modeliranje prijetnji već u fazu analize.
Siguran dizajn mora biti ugrađen u kulturu organizacije i svaki dio životnog ciklusa razvoja proizvoda.
OWASP je razvio projekt SAMM tj. Software Assurance Maturity Model koji pokušava ustanoviti sigurnosnu zrelost organizacije te korake kako bi se kultura sigurnosti stvorila ili nadogradila. Detalje možete provjeriti na https://owaspsamm.org/model/ .
A05:2021-Security Misconfiguration
Aplikacije su ranjive ako niste promijenili standardne postavke, odnosno očekujete da je sustav na kojem se nalaze siguran, što često nije slučaj. Može se napraviti najsigurnija aplikacija, ali ako su na poslužitelju ostale standardne postavke, aplikacija je ranjiva, samo preko drugog vektora napada.
Čest slučaj gdje se ne mijenjaju standardne postavke je u WordPress CMS. Naime, pretpostavljeno korisničko ime u tom sustavu je username, lozinka je password, a za administratora je admin. U Juice Shop-u na prethodnom primjeru vidjeli smo slučaj gdje greška sustava javlja puno informacija o načinu rada samog sustava (slika 6).
Kako se obraniti? Uvijek provjeriti koriste li se pretpostavljene postavke, je li softver nadograđen i jeste li isključili nepotrebne funkcionalnosti i ispisuju li se nepotrebne opisne greške.
Čest paradoks u sigurnosti je kada koristimo jako kompleksne sustave za vrlo jednostavne potrebe. Npr. ako trebamo mjeriti temperaturu u sobi, uzmemo Raspberry PI koji ima mnoštvo funkcionalnosti (pristup mreži, datotečnom sustavu…), a samim time i mnoštvo mogućih površina za napad, a koristimo samo komponentu za mjerenje temperature.
A06:2021-Vulnerable and Outdated Components
Ranjive i stare komponente su povezane s prethodnom ranjivosti koja nam prikazuje opasnosti loših i standardnih konfiguracija i postavki. Razvojni programeri često koriste jako puno komponenti u svojim projektima, postavljaju svoje aplikacije na poslužitelje s potencijalno starim softverom kojem je istekao životni ciklus ili ima poznate ranjivosti. Poanta je, kao i u prethodnoj ranjivosti, da je potrebno obratiti pozornost na cijeli ekosustav, a ne samo na jednu komponentu.
Kako se obraniti? Dobra praksa je korištenje SBOM-a (Software Bill Of Materials), odnosno popisa biblioteka uključenih u izgradnju aplikacije i/ili sustava, te postoje li ranjivosti za te biblioteke. To vrlo jednostavno možete analizirati pomoću gotovog softvera. OWASP također ima projekt koji se zove Dependency Track koji upravo to radi, te je otvorenog koda i dostupan svima, a možete ga preuzeti ovdje - https://dependencytrack.org/ .
12. prosinca 2023. je izašla vijest da je WordPress dodatak Backup Migration ranjiv na udaljeno izvršavanje koda te je ta ranjivost izložila 50.000 WordPress aplikacija, a što se moglo ukloniti s pozornom analizom uvođenja novih biblioteka.
A07:2021-Identification and Authentication Failures
Ovdje je napadaču cilj upasti u sustav kao neki od postojećih korisnika. Postiže se pogađanjem korisničkog imena i lozinke, krađom kolačića, identifikatora sesije ili tokena. Pogađanje može biti silom (brute force), pogađanjem standardnih vjerodajnica (WordPress username ili admin) ili socijalnim inženjeringom gdje napadač istražuje sve informacije o žrtvi isključivo putem javno dostupnih podataka na Internetu.
Kako se obraniti? Korištenjem multifaktorske autentifikacije, analizom i uklanjanjem standardnih vjerodajnica, redovitom rotacijom vjerodajnica za različite aplikacije, korištenjem softvera za upravljanje tajnama kao što su Vault od HashiCorpa, dizanje alarma na više pokušaja neuspjele prijave korisnika u sustav, uključivanjem sliding expiration-a kod višestrukog unosa krive lozinke, korištenjem (re)CAPTCHA-e, korištenjem različitih lozinki za različite servise, mreže i aplikacije, čime izbjegavamo kaskadne ranjivosti.
Korisna stranica je https://haveibeenpwned.com/, gdje možete provjeriti je li vaša email adresa bila u nekim slučajevima proboja podataka, a ako jest, brže-bolje promijenite sve lozinke!
A08:2021- Software and Data Integrity Failures
Nova kategorija u OWASP TOP 10 2021. godine. Napadaču je cilj podmetnuti dodatak, biblioteku ili komponentu u proces razvoja aplikacije odnosno kompilacije. Maliciozne biblioteke su često na javnim, neprovjerenim repozitorijima koda ili CDN-ovima (Content Delivery Network – servis koji služi za čuvanje statičkih resursa kao što su slike, datoteke, kod itd.).
Obranite se korištenjem digitalnih potpisa i izračunom kriptografskog sažetka. Kod preuzimanja svakog paketa softvera postoji sažetak preuzetog paketa kojeg možete provjeriti pomoću raznih alata ili vizualno. Kao i u ranjivim i starim komponentama, može se koristiti, između ostalog, OWASP alat Dependency Track kako bi se provjerile komponente za potencijalne ranjivosti.
Jedan od najpoznatijih napada je bio na tvrtku Solar Winds, odnosno njihov softver Orion. Napadači su u proces kompiliranja softvera ubacili svoj zloćudni kod koji je omogućavao udaljeno izvršavanje i tako utjecao na više od 18.000 kupaca Solar Windsa, među kojima su bile i razne agencije američke vlade.
A09:2021 – Security Logging and Monitoring Failures
Vrlo kompleksna ranjivost, a napadačima je cilj upasti u sustav. Kod kompleksnih napada napadači često prvo izviđaju što se može vidjeti „propalim“ pokušajima upada. Svi ti napadi su negdje zabilježeni, ali nije prepoznat uzorak. Problem nastaje što postoji izuzetno puno alarma (informacija, podataka) te se od šume ne vidi drvo. Kako to napraviti je postalo pravo umijeće. Čest slučaj je da tvrtke imaju ili previše informacija ili ih uopće nemaju.
Kada se radi o slučaju da nemaju, onda ne postoje dnevnički zapisi o prijavama u sustav, višestrukim neuspjelim pokušajima prijave, greškama i upozorenjima koja se događaju. U slučaju da sve to postoji, često je slučaj da se ti podaci spremaju lokalno kod aplikacija, te da su spremljeni na nestandardan način što otežava agregiranje, a posljedično onemogućava pravovremeno reagiranje i rješavanje problema.
Kako se obraniti? Treba definirati kritične točke sustava pomoću nekih od poznatih modela modeliranja prijetnji kao što je STRIDE; ujednačiti dnevničke zapise cijelog sustava kako bi se mogli jednako promatrati i filtrirati; koristiti centralno mjesto pohrane takvih podataka, uključiti različite dnevničke zapise za reviziju vrlo bitnih informacija; koristiti pametan nadzor odnosno SIEM (Security Information and Event Management) alate kao što je Splunk; prepoznati uzorak napada i proaktivno djelovati npr. blokiranjem sumnjivih aktivnosti u stvarnom vremenu.
Poznati gubitak podataka se dogodio američkoj organizaciji Target koja je unatoč implementiranom sofisticiranom alatu Fire Eye za nadzor zapisa pretrpjela gubitak preko 40 milijuna računa o kreditnim i debitnim karticama.
A10:2021 – Server-Side Request Forgery (SSRF)
Ova ranjivost se iskorištava kada aplikacija dohvaća podatke s resursa treće strane, a da ne provjeri URL s kojeg dohvaća. Danas je teško zamisliti neku web stranicu ili aplikaciju koja ne dohvaća resurse na taj način, a ta ranjivost potencijalno može zaobići sve današnje popularne mehanizme zaštite kao što su vatrozid i VPN. Napadač pošalje URL koji prolazi kroz javno objavljenu aplikaciju kao unos. Druga aplikacija (servis, baza podataka) koja nije objavljena na webu preuzima podatke s navedenog URL-a, a na taj način javlja povjerljive informacije iz zaštićene mreže kroz legitiman promet. Uz povjerljive informacije napadači na taj način mogu skenirati portove i vidjeti arhitekturu interne mreže, kreirati DOS napade (Denial Of Service) ili izvršiti RCE napade (Remote Code Execution).
Kako se obraniti? Obrana može biti na više razina, a ako se radi o mrežnoj razini moguće je na vatrozidu napraviti listu dopuštenih resursa (whitelisting), koristiti WAF (Web Application Firewall) tj. pametan način nadzora prometa, a što se tiče aplikacijskog sloja treba provjeriti unos, sanirati ulaz (provjera i uklanjanje HTML oznaka) i onemogućiti HTTP preusmjeravanja.
Daljnji koraci
Ako želite pomoći svojim razvojnim timovima u osvještavanju ranjivosti i standardiziranju aplikativne sigurnosti, OWASP Top 10 je idealno uvodno štivo. Problem u standardiziranju prema OWASP Top 10 je što nije svaka ranjivost konkretno provjerljiva kao što i inače bude u dokumentima o standardizaciji. No organizacija OWASP se pobrinula i za to te postoji projekt OWASP ASVS (Application Security Verification Standard) koji se može koristiti u svim fazama životnog ciklusa razvoja softvera za sigurnosno testiranje i siguran razvoj web aplikacija.
MITRE
Uz OWASP postoji starija i veća organizacija MITRE koja katalogizira i kategorizira ranjivosti u programskoj podršci općenito. Lista ranjivosti organizacije MITRE zove se CWE Top 20 (Common Weaknesses Enumeration). Svaka ranjivost na OWASP Top 10 listi također je mapirana na CWE ranjivosti.