OWASP Top 10

Co je OWASP?

OWASP (Open Web Application Security Project) je komunita, která mapuje zranitelnosti webových aplikací a vytváří otevřené bezpečnostní standardy. V této kapitole si ukážeme v zjednodušené podobě tzv. OWASP Top 10 list, který obsahuje 10 nejčastějších zranitelností ve webových aplikacích.

A01:2021-Broken Access Control

Access Control neboli řízení přístupu zajišťuje, že uživatelé nemohou konat mimo jejich definované oprávnění. Například že se nepřihlásíme na cizí účet bez znalosti hesla. Pokud tyto pravidla nejsou správně implementována, může docházet k úniku dat, neoprávněným úpravám nebo smazáním dat apod. Mezi nejčastější zranitelnosti v této kategorii patří:

  • Ve výchozím nastavení nejsou oprávnění zamítnuta, tedy všichni uživatelé, i neoprávnění mají plná oprávnění

  • Možnost obejít daná oprávnění za pomocí úpravy URL, HTML nebo manipulace s aplikací

  • Možnost přístupu k cizímu účtu bez autorizace

  • API bez vymezených oprávnění pro metody POST, PUT, DELETE

  • EoP - Elevation of privilege, zvýšení oprávnění

  • Možnost přistupovat na stránky vyžadující zvýšená oprávnění, bez těchto oprávnění při znalosti přímé cesty

  • Manipulace s JWT nebo cookie

Jak se bránit?

  • Kromě veřejných zdrojů zamítnout ve výchozím nastavení přístup

  • Každý zdroj by měl mít svého vlastníka

  • Politika řízení přístupu by měla být implementována jednou a poté používána napříč aplikací

  • Všechny incidenty logovat, aby se mohly případné chyby rychle identifikovat a odstranit

  • Invalidovat session po odhlášení

Příklady

Scénář #1

Například máme uživatelský panel na stránce /panel a pro administrátora /adminpanel, pokud ale náš administrátorský panel neověřuje oprávnění uživatele, může útočník jednoduše navštívit /adminpanel a získá přístup k celému systému.

Scénář #2

Aplikace používá neověřený parametr acct při přístupu na uživatelský účet. Pokud útočník jednoduše tento parametr změní, může získat přístup k jakémukoliv účtu. Například pomocí této URL může získat přístup k účtu administrátora.

https://nasestranka.cz/app/accountInfo?acct=admin

A02:2021-Cryptographic Failures

V této kategorii se nachází zranitelnosti, které souvisí s bezpečností ukládání a přenosu dat. Při přenosu a ukládání důvěrných dat jako hesla, čísla kreditních karet apod. je nutné tyto data šifrovat a také zvolit správný šifrovací standard pro danou úroveň důvěrnosti. Mezi nejčastější zranitelnosti v této kategorii patří:

  • Důvěrná data uložená nezašifrovaná

  • Využívání zastaralých šifrovacích standardů

  • Nevynucování šifrování

  • Neověřování certifikátů

  • Špatná implementace šifrování

Jak se bránit?

  • Identifikujte důvěrná data a ty šifrujte

  • Ukládejte důvěrná data pouze nezbytně dlouhou dobu

  • Nepoužívejte nešifrované protokoly jako HTTP, FTP apod. pro přenos důvěrných dat

  • Hesla ukládejte zahashovaná silnými standardy

  • Nepoužívejte zastaralé šifrovací standardy

A03:2021-Injection

V této kategorii nalezneme zranitelnosti, ve kterých je možné manipulovat s webovou aplikací za pomocí neošetřených uživatelských vstupů. Patří sem například SQL injection, OS command injection, Cross-site scripting (XSS) a další mnohé druhy injection.

Jak se bránit?

Nikdy nevěřte uživatelskému vstupu, pro každý uživatelský vstup je nutné zvolit správnou metodu ošetření daného vstupu.

SQL injection

SQL injection je druh útoku napadení SQL databáze vsunutím kódu do neošetřeného vstupu a vykonání vlastní akce na databázi (např. DELETE, ALTER apod.)

Například takto může vypadat zranitelná část kódu

SELECT * FROM uzivatele WHERE jmeno = '" + zadaneJmeno + "';

Pokud uživatel zadá svoje jméno, v databázi se normálně vybere daný uživatel. Pokud však například zadá nějakou podmínku, třeba ' or '1'='1 podmínka bude splněna vždy a vypíšou se všichni uživatelé v tabulce.

OS command injection

Jedná se o identický princip jako u SQL injection, akorát místo změny SQL příkazu, injection upravuje příkaz terminálu. K tomu se využívají například znaky | & apod.

Cross-site scripting (XSS)

Cross-site scripting (XSS) je zranitelnost založena na možnosti vsunout do dynamické webové stránky vlastní skript pomocí neošetřeného uživatelského vstupu. Díky tomu můžeme ovlivnit chod webové stránky, ale i například krást citlivá data jako například session cookies dalších uživatelů.

Typy XSS

Non-persistent (reflected)

Tento typ XSS je založen na úpravě části URL, která se interpretuje do stránky jako její součást. Naše příkladová stránka poskytuje vyhledávání za pomocí parametru ?q, při vyhledání se vyhledané heslo ukáže na stránce. Naše stránka nemá žádnou orchanu a tím pádem můžeme tento vstup využít, jelikož se skript do stránky umístí stejně jako vyhledané heslo. Naše URL by pak mohla vypadat například takto:

https://nasestranka.cz/priklad.html?q=Test<script>alert(‘Úspěšné XSS’);</script>
Persistent

V tomto případě se uživatelský vstup ukládá na stránku dlouhodobě, například jako komentáře v diskusích na novinkách. Toho opět můžeme využít pro naše XSS, pokud do nezabezpečené stránky umístíme například tento komentář:

Náš úžasný komentář<script>alert(‘Úspěšné XSS’);</script>

Tím přidáme do stránky nejen komentář, ale i skript, který se spustí pokaždé, když si někdo danou diskusi otevře.

DOM based

Tento typ XSS je specifický tím, že funguje kompletně na straně klienta. Je velmi podobný reflected XSS, ale kód je reflektovaný v JavaScriptu umístěného na stránce.

A04:2021-Insecure Design

Tato kategorie popisuje zranitelnosti týkající se samotné architektury aplikace. Například, že eshop dovoluje masivní skupování grafických karet za pomocí robotů což může značně poškodit jméno firmy.

A05:2021-Security Misconfiguration

Do této kategorie se řadí zranitelnosti způsobené špatnou konfigurací. Nejčastěji se jedná o:

  • Zbytečně otevřené porty

  • Povolené/nainstalované nepoužívané služby

  • Nezměněná výchozí hesla

  • Zobrazování příliš informativní znění chyb uživateli

  • Při vylepšení infrastruktury nejsou použity nejnovější bezpečností funkce

  • Bezpečnostní funkce nejsou povoleny nebo nejsou správně nastaveny

Jak se bránit?

  • Instalujte pouze nezbytně nutné komponenty

  • Pravidelně auditujte nastavení týkající se bezpečnosti aplikace

A06:2021-Vulnerable and Outdated Components

Jak název napovídá, tato kategorie obsahuje zranitelnosti týkající se neaktualizovaných komponent, nebo komponent se známými chybami. Naše aplikace je pravděpodobně zranitelná, pokud:

  • Neznáme verze komponent použitých v aplikaci

  • Víme, že používáme zranitelnou, neaktualizovanou komponentu nebo komponentu s ukončenou podporou

  • Aplikaci pravidelně neskenujeme pro zranitelnosti

Jak se bránit?

  • Odstraňte nepotřebné závislosti, funkce, komponenty, soubory a dokumentaci

  • Mějte přehled o instalovaných komponentech

  • Komponenty získávejte pouze z ověřených zdrojů

  • Monitorujte komponenty pro zranitelnosti, obzvlášť ty, které nejsou již podporovány

A07:2021-Identification and Authentication Failures

Zde nalezneme zranitelnosti týkající se ověřování identity uživatele. Aplikace je zranitelná pokud:

  • Dovoluje automatické zkoušení hesel nebo prolamování hesel hrubou silou

  • Dovoluje používání slabých hesel (např. admin, heslo apod.)

  • Používá slabé metody resetování přihlašovacích údajů (např. pomocí bezpečností otázky)

  • Nepoužívá vůbec nebo používá slabé dvoufázové ověření

  • Ukládá hesla nehashovaná nebo slabě hashovaná

  • Špatně nakládá se sessions (Neinvaliduje se při odhlášení, používá se vícekrát, je součástí URL)

Jak se bránit?

  • Kde je to možné používejte multifázové ověření

  • Nepoužívejte výchozí hesla

  • Používejte kontroly pro slabá hesla

  • Limitujte počet neplatných pokusů při přihlašování

  • Používejte bezpečný správce sessions

A08:2021-Software and Data Integrity Failures

Tato kategorie obsahuje zranitelnosti způsobené porušením datové nebo software integrity. Je to především důsledkem neověřování digitálních podpisů, používání neověřených zdrojů nebo nedostatečné či chybějící procesy kontroly software.

Jak se bránit?

  • Používejte digitální podpisy nebo podobné mechaniky pro ověření integrity software a dat.

  • Zkontrolujte, že používáte důvěryhodné zdroje

  • Používejte procesy pro kontrolu integrity software ve vývoji

A09:2021-Security Logging and Monitoring Failures

Zde nalezneme zranitelnosti způsobené nedostatečným nebo chybějícím monitoringem a logováním. Mezi nedostatečné řadíme:

  • Události důležité pro bezpečnostní audit nejsou logovány

  • Záznamy nejsou dostatečně podrobné nebo dostatečně jasné

  • Aplikace a API nejsou monitorovány pro podezřelé aktivity

  • Pro důležité události nejsou nastaveny upozornění

  • Aplikace nedokáže detekovat útoky v reálném čase

Jak se bránit?

  • Logujte všechny přihlášení, přístupy a ověřování vstupů

  • Logujte v jednotném srozumitelném formátu

  • Na důležité akce nastavte upozornění

  • Zajistěte, aby důležité akce byly auditovatelné

A10:2021-Server-Side Request Forgery

Tato zranitelnost nastává když aplikace načítá externí zdroj a nevaliduje URL zadanou uživatelem. To dovoluje útočníkovi donutit aplikaci odeslat neočekávaný požadavek, i přesto, že je chráněna pomocí firewallu nebo pomocí jiného ACL (Access control list, seznam pro řízení přístupu).

Kompletní znění OWASP Top 10 v angličtině

Stránky projektu OWASP Top 10

results matching ""

    No results matching ""