script alert 42
TRANSCRIPT
"><script>alert(42);</script>
Magyar Attila @athoshun
ELTE, 2011. 12. 01.
"><script>alert(42);</script>
Információbiztonság általában Webes biztonság
Üzemeltetés Fejlesztés
További játszanivaló
Disclaimer
Nem script-kiddie képző!!!
Információbiztonság általában
Confidentality Integrity Availability Authenticity Non-repudiation Tudatos kockázatvállalás Leggyengébb láncszem
WWW
P0WN3D!
A kommunikáció támadása: MITM
HTTPS
HTTP over SSL/TLS
A kiszolgáló támadása
Üzemeltetés
Buffer overflow, 0-day exploit DEP, ASLR CVE (http://cve.mitre.org/)
DoS, dDoS Router, tűzfal, IDS
WAF
Demó: debug mód
Debug mód
Az éles rendszer ne a kimenetben teregesse ki a fejlesztőknek szóló hibaüzeneteket!
Demó: input validáció
Input validáció
Az adat a felhasználótól érkezik
Input validáció
Az adat a felhasználótól AZ ÖRDÖGTŐL érkezik
Demó: file inclusion
File inclusion
GET /?page=../logs/access.log HTTP/1.1
$page = 'pages/' . $_GET['page'];if (!is_file($page)) $page = 'pages/default.php';
include $page;// include 'pages/../logs/access.log'
Demó: file inclusion vs. user agent
File inclusion
GET /?page=../logs/access.log HTTP/1.1
$page = 'pages/' . $_GET['page'];if (!is_file($page)) $page = 'pages/default.php';
include $page;// include 'pages/../logs/access.log'
File inclusion
Front Controller, routing, keretrendszerek, stb. A kereket már feltalálták!
Demó: file feltöltés
File feltöltés
Nagyon veszélyes! Validáció tartalom alapján, a HTTP kérés
hamisítható! EXIF fejlécben meglepetés?
Kovertáljunk! (Ésszel!) Bütykölt kép file 100000x100000-es mérettel a
fejlécben? Bütykölt kép file exploittal?
Demó: SQLi
SQLi
mysql_query( "SELECT * FROM users WHERE" . " name='$name' AND password='$password';");
// $name = "admin"// $password = "a' OR '1'='1"//// SELECT * FROM users WHERE// name='admin' AND password='a' OR '1'='1';
SQLi
Prepared statement! (SQL quote-olás/escape-elés)
$stmt = $pdo->prepare( "SELECT * FROM users" . " WHERE name=:name AND password=:password;");
$stmt->bindParam(':name', $name);$stmt->bindParam(':password', $password);
SQLi :-D
Demó: SQLi, UNION
SQLi, UNION
http://vulnshop.localhost:8085/?page=product.php&id=42
/?page=product.php&id=' UNION SELECT 111,CONCAT(name,':',password),333,444 FROM users WHERE name='admin';--
Jelszavak tárolása
Ellenőrzéshez elég a jelszó egy hash-e (kriptográfiai hash, pl. SHA-1)
Születésnap-paradoxon Rainbow table Saltolás!
$hash = sha1($password . $salt); $hash = sha1($password . $name . $salt)
A felhasználó támadása
Demó: CSRF
CSRF
Alice-nek van élő munkamenet cookie-ja Bob webshopjától
CSRF
Alice-nek van élő munkamenet cookie-ja Bob webshopjától
Alice pl. egy facebook üzenetben lévő linket követve megnyitja Mallory weboldalát
CSRF
Alice-nek van élő munkamenet cookie-ja Bob webshopjától
Alice pl. egy facebook üzenetben lévő linket követve megnyitja Mallory weboldalát
Mallory JavaScriptjei a cookie-t same origin policy miatt nem látják :-)
CSRF
Alice-nek van élő munkamenet cookie-ja Bob webshopjától
Alice pl. egy facebook üzenetben lévő linket követve megnyitja Mallory weboldalát
Mallory JavaScriptjei a cookie-t same origin policy miatt nem látják, AJAX sem megy :-)
De űrlapot POST-olni tudnak Bob webshopjának! :-( A böngészőnek a cél domainhez tartozó cookie-kat
is küldenie kell Bob webshopja érvényes munkamenet cookie-val
érvényes POST kérést kap Alice böngészőjétől
CSRF token
Követeljünk meg egy azonosítót minden HTTP kérésben a session cookie-n kívül is, a kérés törzsében!
Pl. minden formban egy „kellőképpen” véletlenszerűen generált token, amit a szerveroldal a munkamenetben is tárol
Egy HTTP kérés feldolgozása a token ellenőrzésével kezdődik
Mallory JavaScriptjei nem tudják a CSRF tokent megszerezni, a same origin policy miatt :-)
Demó: XSS
XSS
A beinjektált HTML/JS kóddal a támadó (szinte) bármit megtehet, amit az oldalt betöltő felhasználó
Böngészők XSS filterei nem sokat érnek A view rétegben a view rétegnek megfelelő
quote-olás kell! htmlspecialchars(), htmlentities() urlencode() json_encode() ...
XSS: BeEF
http://beefproject.com Ha már benn van a vállalati intranetben egy
XSS, idő kérdése, míg egy kliens ugróponttá válik
Eszköztár
Ami támadásra jó, az jó tesztelésre is: netcat tcpdump, Wireshark nmap JohnTheRipper Nessus, OpenVAS Metasploit BeEF BackTrack Linux
Olvasnivaló
OWASP: https://www.owasp.org OWASP Top10
BuheraBlog: http://buhera.blog.hu BalaBit OpenAcademy 2011. májusi előadása:
http://youtu.be/CoCItL3cMPU
Hacktivity: https://hacktivity.com Wargame: http://www.hackthissite.org/ GIYF: Google Is Your Friend :-)
Ami kimaradt
Spam (CAPTCHA) Clickjacking Apache/mod_rewrite és társai REST, egyéb API megvalósítások
Miért kezdődik a GMail minden AJAX válasza így? while(1); ###START###
Social engineering Böngésző pluginek, böngésző bugok ...
Példakódok, diák
Kód: https://github.com/attilammagyar Diák: http://www.slideshare.net/athoshun
„We only have to be lucky once. You will have to be lucky always.” (IRA)
?
Köszönöm