Každý rok se objeví několik desítek nových typů útoků a hackovacích technik na webové aplikace. V loňském roce jich bylo popsáno 31, pojďme si některé nové i starší útoky představit.
2. OWASP Top 10
The Open Web Application Security Project
www.owasp.org
http://hqscreen.com/comics-the-wasp-wallpaper-54781/
Organizace OWASP každé tři roky sestavuje hitparádu nejčastějších webových útoků, o kterých by měl
mít ponětí každý, kdo se o webovou bezpečnost aspoň trochu zajímá. OWASP kromě této hitparády také
ukazuje, jak se takovým útokům bránit, jejich web tedy stojí minimálně za prozkoumání.
3. OWASP Top 103 2007
1. Cross Site Scripting (XSS) ↑
2. Injection Flaws (SQL Injection) ↑
3. Malicious File Execution (RFI) ←
První tři místa z Top 10 2007 vypadala takto. Útoky XSS i SQL Injection si od předchozího
vydání v roce 2004 polepšily, Útok RFI (Remote File Inclusion) byl v hitparádě novinkou.
4. OWASP Top 103 2010
1. Injection (SQL, OS, LDAP) ↑
2. Cross Site Scripting (XSS) ↓
3. Broken Auth and Session Management ↑
V roce 2010 se pořadí na prvních třech příčkách trochu proházelo. SQL Injection a
podobné útoky se dostávají do vedení, útok XSS si pohoršil a nově se v první trojce
objevují útoky, které se dotýkají sessions (např, Session Hijacking, Session Fixation).
5. OWASP Top 103 2013
1. Injection (SQL, OS, LDAP) ↨
2. Broken Auth and Session Management ↑
3. Cross Site Scripting (XSS) ↓
Injection útoky (SQL Injection apod.) vedou hitparádu i v roce 2013, ale útoky týkající se
sessions a přihlašování si vyměňují příčku s Cross Site Scriptingem. Žádná velká změna,
nicméně opakování je matka moudrosti, pojďme si tedy SQL Injection a XSS znovu ukázat.
7. SQL Injection
„NT Web Technology Vulnerabilities“
Rain Forest Puppy (Jeff Forristal)
Phrack Magazine 1998
http://www.phrack.org/issues/54/8.html
phone.asp?name=rfp' select * from table1 --
Útok SQL Injection veřejně popsal Jeff Forristal vystupující pod přezdívkou Rain Forest
Puppy (zkráceně rfpuppy apod.) v článku o webových zranitelnostech Windows NT pro
Phrack Magazine již v roce 1998, tenkrát ještě jako bezejmenný útok.
8. ' OR 1=1; --
Útok spočívá v modifikaci SQL dotazů, které aplikace posílá databázovému serveru. Pokud
aplikace z kamer měřících rychlost bude tento útok umožňovat, tak řidič vozu s touhle
značkou pravděpodobně pokutu za rychlou jízdu v měřeném úseku nikdy nedostane.
9. SELECT jmeno, adresa
FROM vozidla
WHERE rz = '$prectena';
Kód zranitelné aplikace, která automaticky pošle pokutu tomu, kdo pod kamerami projel
rychleji, než je povoleno, může vypadat zjednodušeně třeba takto. V proměnné $prectena
je přečtená značka z auta (uživatelský vstup) a je jednoduše přímo vložena do SQL dotazu.
10. SELECT jmeno, adresa
FROM vozidla
WHERE rz = '1AM 1337';
1AM 1337
Takto vypadá dotaz odeslaný z aplikace na databázový server, když pod kamerou rychle
projede 1337 řidič vozu registrovaného v Praze. Za pár dní dostane poštou hezký pozdrav.
11. SELECT jmeno, adresa
FROM vozidla
WHERE rz = '' OR 1=1; --';
' OR 1=1; --
V případě, že kamera přečte tuhle značku, pak pokutu dostanou všichni majitelé vozů, v
lepším případě jenom ten první, ale rozhodně ne ten, kdo to auto řídil nebo vlastní.
Podmínce 1=1 vyhoví všechny záznamy a zbytek dotazu je zakomentován (pomocí --).
12. Když aplikace pro práci s databází používá knihovnu, která umožňuje posílat více příkazů
oddělených středníkem naráz, je možné čarovat. Pokud k tomu čaroděj má patřičná práva.
14. SELECT jmeno, adresa
FROM vozidla
WHERE rz = ?;
' OR 1=1; --
Prepared Statements
Jak se správně bránit proti útoku SQL Injection? Už konečně zapomeňte na nějaké
escapování a používejte raději prepared statements a vázání proměnných, které oddělují
dotaz od dat (uživatelského vstupu), takže z těch dat není možné dotaz již zpětně ovlivnit.
15. Cross Site Scripting (XSS)
„Script Injection“
David Ross, Microsoft, 1999
Veřejně: http://ha.ckers.org/cross-site-scripting.html
<a href=”form.asp?id=<script src=’evilscript.js’></script>”>…<a>
Cross Site Scripting poprvé popsal David Ross z Microsoftu v roce 1999 v jednom interním
dokumentu a nazval ho Script Injection. V roce 2000 útok dostal nové jméno a upravený
text Davida Rosse byl vydán veřejně. Dnes najdete jeho kopii na serveru ha.ckers.org.
16. Jedna z variant XSS vypadá například takto. To slovo Scripting v názvu je ale trochu
zavádějící, do stránky je totiž možné vložit jakýkoliv kousek HTML kódu, třeba obrázek.
18. < → <
> → >
" → "
' → '
& → &
Princip obrany proti XSS spočívá v převádění nebezpečných znaků na entity. Nejlepší je
tuto práci přenechat nějakému šablonovacímu systému, který to bude dělat automaticky.
Takovou ochranu je vhodné doplnit např. HTTP hlavičkou Content-Security-Policy.
19. 2013 …
Webová bezpečnost ale není jenom o hitparádě OWASP Top 10, SQL Injection a XSS.
Každý rok se objeví pár desítek nových webových hackovacích technik a typů útoků.
20. 2013 … 31
V roce 2013 jich bylo veřejně popsáno 31.
21. 2012 … 56
2011 … 51
2010 … 59
2009 … 82
V předchozích letech byla úroda dokonce ještě bohatší. Například v roce 2009 bylo veřejně
popsáno 82 nových hackovacích technik a útoků proti webovým aplikacím.
23. Spočívá v tom, že některé servery (MySQL, SSH) zobrazují ihned po připojení nějaký
pozdrav i přesto, že se k nim připojíte protokolem, kterému nerozumí. Útočník takto může
maskovat svoji identitu a IP adresu nebo prozkoumávat služby, na které se jinak nepřipojí.
25. Takto se dala zjistit verze nějakého SSH serveru pomocí XSPA. Na server
scanme.nmap.org se ve skutečnosti připojil W3C validátor, který skryl útočníkovu adresu.
27. <?xml version="1.0"?>
<!DOCTYPE foo [
<!ENTITY victim SYSTEM "http://…">
]>
<foo>
&victim;
</foo>
Útok XXE spočívá ve zneužití vlastnosti XML, která dovoluje parseru načítat definice entit
z lokálních ale i vzdálených souborů. Použití entity &victim; výše vyvolá požadavek na
vzdálený server a skryje identitu útočníka nebo naopak prozradí IP adresu XML parseru.
29. Lucky 13
CBC-mode encryption v
TLS
Ochrana? RC4!
V roce 2013 se hodně pozornosti věnovalo soukromí, odposlechům a také protokolu TLS.
Bylo popsáno několik útoků, kromě již poměrně známého BREACH to byl např. útok
Lucky 13, což je v podstatě timing side channel útok na samotnou TLS specifikaci. Jako
jedno z řešení se nabízí přestat používat šifry v režimu CBC a přejít na algoritmus RC4.
http://www.isg.rhul.ac.uk/tls/Lucky13.html
30. Zranitelnosti RC4
Získání části původních dat
Ochrana? CBC-mode!
(Viz Lucky 13)
Fajn, jenže ti samí lidé nalezli problém i v RC4, díky kterému je možné získat část
původních nezašifrovaných dat. Jedno z řešení je místo RC4 použít šifry v CBC režimu.
http://www.isg.rhul.ac.uk/tls/
31. Řešení
TLS 1.2 + AES-GCM
Galois/Counter Mode
Tohle kolečko RC4↔CBC má naštěstí pořádné řešení a tím je TLS 1.2 a nové AEAD šifry,
jako např. AES-GCM, kterou podporují prohlížeče Chrome 31, Firefox 27, IE11 a novější.
32. Django Auth
Denial-of-Service
PBKDF2
Zajímavostí objevenou v roce 2013 je například to, že webový framework Django sice
správně pro ukládání hesel používá PBKDF2, ale nijak neomezoval délku těch hesel a tak
když mu někdo poslal heslo dlouhé milion znaků, tak ho Django ověřoval minutu a když to
někdo udělal několikrát naráz, tak server jen ověřoval špatná hesla a přestal odpovídat.
Django nastavilo horní limit délky hesla na 4096 znaků, ale asi by bohatě stačilo i 1024.
https://www.djangoproject.com/weblog/2013/sep/15/security/
33. Autocomplete
CSS Hack
Pomocí automatického doplňování formulářů a skrytých polí je možné od uživatele bez
jeho vědomí vytáhnout mnohem více dat, např. jeho adresu a jméno při zadávání e-mailu.
Zkuste si to třeba v Chrome. I tenhle jednoduchý útok byl popsán v roce 2013.
https://yoast.com/research/autocompletetype.php