Mike Wiesner | SpringSource



Java Web Security
Über mich

  » Senior Consultant bei SpringSource
    Germany
  » IT-Security Consulting / Reviews
  » Acegi-/Spring-Consu...
Agenda

  » Security Patterns?
  » Sicherheit in Java
  » Der besste Zeitpunkt
  » Tipps & Tools
  » Testing




Mike Wies...
Security Patterns?

  » Techniken gegen verbreitete
    Angriffsmuster
       » SQL-Injection, Parameter Tampering, Man in...
Security Patterns?

  » Techniken gegen verbreitete
    Angriffsmuster
       » SQL-Injection, Parameter Tampering, Man in...
Security Patterns?

  » Techniken gegen verbreitete
    Angriffsmuster
       » SQL-Injection, Parameter Tampering, Man in...
Ein Beispiel

  » Häufigste Ursache für
    Sicherheitsprobleme?




Mike Wiesner | SpringSource | Security-Patterns prakt...
Ein Beispiel

  » Häufigste Ursache für
    Sicherheitsprobleme?




Mike Wiesner | SpringSource | Security-Patterns prakt...
Ein Beispiel

  » Häufigste Ursache für
    Sicherheitsprobleme?

  » Fehlende Eingabevalidierung!




Mike Wiesner | Spri...
SQL Injection


                        Internet                 Webserver

                                              ...
SQL Injection


                        Internet                 Webserver

                                              ...
Tainted Variables

  » Ungeprüfte Variablen welche beim
    Zielsystem schaden verursachen
       » Datenbanken, Prozessau...
Agenda

  » Security Patterns?
  » Sicherheit in Java
  » Der besste Zeitpunkt
  » Tipps & Tools
  » Testing




Mike Wies...
Sichere Plattform

  » Striktes Data Typing
  » Automatische Speicherverwaltung
  » Bytecode Überprüfung
  » Sicheres Clas...
Kryptografie

  » Umfangreiche API
       » Signaturen, Digest, Ciphers, Authentication,
         etc.
  » Umfangreiche Al...
Java VM Sandbox

  » Zugriffsrechte der Anwendung können
    eingeschränkt werden
       » Dateisystem, Netzwerk, etc.
  »...
Public Key Infrastructure (PKI)

  » Tools und APIs für PKI sind vorhanden
  » X.509, PKIX, OCSP
  » Keystores
  » Certifi...
Dann ist ja alles klar, oder?

  » JDK bietet hauptsächlich Low-Level-
    Security




Mike Wiesner | SpringSource | Secu...
Dann ist ja alles klar, oder?

  » JDK bietet hauptsächlich Low-Level-
    Security
  » Immernoch viel generischer Code
  ...
Dann ist ja alles klar, oder?

  » JDK bietet hauptsächlich Low-Level-
    Security
  » Immernoch viel generischer Code
  ...
Dann ist ja alles klar, oder?

  » JDK bietet hauptsächlich Low-Level-
    Security
  » Immernoch viel generischer Code
  ...
Agenda

  » Security Patterns?
  » Sicherheit in Java
  » Der besste Zeitpunkt
  » Tipps & Tools
  » Testing




Mike Wies...
Der beste Zeitpunkt ist ...




Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt   16
Der beste Zeitpunkt ist ...


  » ... am Schluss!

  » = Security Last




Mike Wiesner | SpringSource | Security-Patterns...
Warum?


  » Weil andere Ding entscheidender sind:

       » Security bringt wenig User-Feedback
       » 100% sicher, abe...
Warum?


  » Weil sich Anforderungen ändern:

       » Security muss immer „mitgeändert“ werden
       » Erschwert das Tes...
Also kein Gedanke an Security?

  » Doch! Grundprinzipien gelten immer:
       » Validierung
       » einfache Laufzeitumg...
Ist das nicht mehr Aufwand?

  » Nicht mit dem richtigen Tools

       » Meißtens sogar weniger
       » Einfacheres teste...
Agenda

  » Security Patterns?
  » Sicherheit in Java
  » Der besste Zeitpunkt
  » Tipps & Tools
  » Testing




Mike Wies...
Am Rande erwähnt...

  » Logische Trennung von Web und Services




Mike Wiesner | SpringSource | Security-Patterns prakti...
Am Rande erwähnt...

  » Logische Trennung von Web und Services
  » Überprüfung der Schichtenaufrufe mit
    AspectJ (im C...
Am Rande erwähnt...

  » Logische Trennung von Web und Services
  » Überprüfung der Schichtenaufrufe mit
    AspectJ (im C...
Am Rande erwähnt...

  » Logische Trennung von Web und Services
  » Überprüfung der Schichtenaufrufe mit
    AspectJ (im C...
Wo implementieren?


                                         Aufrufer




                                         Method...
Wo implementieren?


                                         Aufrufer                     Security




                  ...
Wo implementieren?


                                        Aufrufer




                                        Methode ...
Wo implementieren?


                                        Aufrufer



                                         Security...
AspectJ

  » Security als Aspekt
       » Automatische Durchführung vor dem
         Methodenaufruf
  » Nachträgliches Hin...
Spring

  » Security als Aspekt
       » Mit Spring AOP
  » Nachträgliches Hinzufügen kein Problem
  » Einfacher als Aspec...
Spring Security (Acegi)

  » Benutzt AspectJ und Spring
  » Nachträgliches Hinzufügen kein Problem
  » Funktionert mit Spr...
Authentifizierung mit Spring Security

  » Provider
       » LDAP, Datenbank, InMemory, JA-SIG CAS,
         CA Siteminder...
Autorisierung

  » Ist das gut?
      SecurityManager sm =
      System.getSecurityManager();
      if (sm.isUserInRole(qu...
Ist das gut?

  » Implementierungen müssen vorhanden
    sein
  » Wird immer mitgetestet
  » Abhängigkeit zur API
  » Vert...
Aufrufer                    Security                 Service
                                 Interceptor



             ...
Aufrufer                    Security                 Service
                                 Interceptor                 ...
Aufrufer                    Security                 Service
                                 Interceptor                 ...
URL Filter

  » DEMO




Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt   34
Reicht das aus?

  » URLs sind keine 1 zu 1 Beziehung zu
    Resourcen
       » Webframeworks, Filter, Druckausgaben, etc....
Wo dann?

  » Am besten beim Service
  » Ab hier trennen sich die Wege zu HTML,
    Webservices, AJAX, etc.
  » Methodenau...
Methoden Filter

  » DEMO




Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt   37
Und wie war das nochmal mit Validierung?

  » DEMO




Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt...
Mögliche Lösungen

  » JdbcPreparedStatement
       » Datenbank baut das Query zusammen
       » Hoffentlich nicht mit „+“...
Oder nochmal absichern

  » Defense in Depth:
       » Prüfung der gleichen Regeln ...
       » ... auf verschiedenene Ebe...
Ein Beispiel

      select * from orders where owner =
      <user> and subject = x

      x = „Meine Bestellung“

      x...
Zusätzliche Prüfung mit Spring Security

                                                       Authentication Instance
  ...
Instanzbasierte Rechte

  » DEMO




Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt   43
Agenda

  » Security Patterns?
  » Sicherheit in Java
  » Der besste Zeitpunkt
  » Tipps & Tools
  » Testing




Mike Wies...
Testing

  » Bugs bei „zu vielen“ Funktionen werden
    nicht gemeldet!

  » Umfangreiche Security-Tests mit JUnit und
   ...
Business Code Tests
                 Aufrufer                    Security                 Service
                        ...
Business Code Tests
                 Aufrufer                                             Service




                    ...
Security Tests
                 Aufrufer                    Security                 Service
                             ...
Security Tests
                 Aufrufer                    Security
                                           Intercepto...
Integrations Tests

  » Z.B. mit FIT (Framework for Integration
    Tests)




Mike Wiesner | SpringSource | Security-Patt...
Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt   49
Fazit

  » Java bietet bereits viel Security-
    Grundlagen
  » Spring Security und AspectJ erweitern und
    vereinfache...
Nächste SlideShare
Wird geladen in …5
×

Java Web Security

1.424 Aufrufe

Veröffentlicht am

Wie sicher sind Java-Webanwendungen und auf was muss man achten?

Veröffentlicht in: Technologie
0 Kommentare
1 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

Keine Downloads
Aufrufe
Aufrufe insgesamt
1.424
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
15
Aktionen
Geteilt
0
Downloads
0
Kommentare
0
Gefällt mir
1
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Java Web Security

  1. 1. Mike Wiesner | SpringSource Java Web Security
  2. 2. Über mich » Senior Consultant bei SpringSource Germany » IT-Security Consulting / Reviews » Acegi-/Spring-Consulting » Trainings » mike.wiesner@springsource.com Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 2
  3. 3. Agenda » Security Patterns? » Sicherheit in Java » Der besste Zeitpunkt » Tipps & Tools » Testing Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 3
  4. 4. Security Patterns? » Techniken gegen verbreitete Angriffsmuster » SQL-Injection, Parameter Tampering, Man in the middle, etc. Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 4
  5. 5. Security Patterns? » Techniken gegen verbreitete Angriffsmuster » SQL-Injection, Parameter Tampering, Man in the middle, etc. » Gute Idee, aber wenig Frameworks die dabei helfen Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 4
  6. 6. Security Patterns? » Techniken gegen verbreitete Angriffsmuster » SQL-Injection, Parameter Tampering, Man in the middle, etc. » Gute Idee, aber wenig Frameworks die dabei helfen » Viel generischer Code Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 4
  7. 7. Ein Beispiel » Häufigste Ursache für Sicherheitsprobleme? Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 5
  8. 8. Ein Beispiel » Häufigste Ursache für Sicherheitsprobleme? Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 5
  9. 9. Ein Beispiel » Häufigste Ursache für Sicherheitsprobleme? » Fehlende Eingabevalidierung! Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 5
  10. 10. SQL Injection Internet Webserver Daten- bank Spring Suche Client select * from ... where betreff = 'Spring' Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 6
  11. 11. SQL Injection Internet Webserver Daten- bank x'; drop table ... Suche Client select * from ... where betreff = 'x'; drop table ... Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 7
  12. 12. Tainted Variables » Ungeprüfte Variablen welche beim Zielsystem schaden verursachen » Datenbanken, Prozessausführungen, etc. » Abhilfe: Validierung » Und zwar auf Serverseite » HTML Selectboxen, Hidden Fields, etc. sind kein wirksamer Schutz! Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 8
  13. 13. Agenda » Security Patterns? » Sicherheit in Java » Der besste Zeitpunkt » Tipps & Tools » Testing Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 9
  14. 14. Sichere Plattform » Striktes Data Typing » Automatische Speicherverwaltung » Bytecode Überprüfung » Sicheres Classloading (getrennte Classloader möglich) Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 10
  15. 15. Kryptografie » Umfangreiche API » Signaturen, Digest, Ciphers, Authentication, etc. » Umfangreiche Algorithmen » RSA, DSA, AES, SHA, MD5, RC4, ... » Erweiterbar (z.B. durch Bouncy Castle) » ElGamal, OpenPGP, J2ME Implementierungen Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 11
  16. 16. Java VM Sandbox » Zugriffsrechte der Anwendung können eingeschränkt werden » Dateisystem, Netzwerk, etc. » Bei Programmfehler ist das der zweite Sicherheitszaun » Wird auch bei Applets/Webstart benutzt. Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 12
  17. 17. Public Key Infrastructure (PKI) » Tools und APIs für PKI sind vorhanden » X.509, PKIX, OCSP » Keystores » Certificate Stores Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 13
  18. 18. Dann ist ja alles klar, oder? » JDK bietet hauptsächlich Low-Level- Security Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 14
  19. 19. Dann ist ja alles klar, oder? » JDK bietet hauptsächlich Low-Level- Security » Immernoch viel generischer Code notwendig Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 14
  20. 20. Dann ist ja alles klar, oder? » JDK bietet hauptsächlich Low-Level- Security » Immernoch viel generischer Code notwendig » Hier können Fallen lauern! Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 14
  21. 21. Dann ist ja alles klar, oder? » JDK bietet hauptsächlich Low-Level- Security » Immernoch viel generischer Code notwendig » Hier können Fallen lauern! » Oder man vergisst es einfach ;-) Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 14
  22. 22. Agenda » Security Patterns? » Sicherheit in Java » Der besste Zeitpunkt » Tipps & Tools » Testing Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 15
  23. 23. Der beste Zeitpunkt ist ... Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 16
  24. 24. Der beste Zeitpunkt ist ... » ... am Schluss! » = Security Last Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 16
  25. 25. Warum? » Weil andere Ding entscheidender sind: » Security bringt wenig User-Feedback » 100% sicher, aber keine Funktionen? Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 17
  26. 26. Warum? » Weil sich Anforderungen ändern: » Security muss immer „mitgeändert“ werden » Erschwert das Testen Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 18
  27. 27. Also kein Gedanke an Security? » Doch! Grundprinzipien gelten immer: » Validierung » einfache Laufzeitumgebung » Vorsicht bei generischen Schnittstellen » Aber kein Gedanke an: » Authentifizierung » Rechteprüfung Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 19
  28. 28. Ist das nicht mehr Aufwand? » Nicht mit dem richtigen Tools » Meißtens sogar weniger » Einfacheres testen ohne Security » Security muss nicht ständig mitgeändert werden Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 20
  29. 29. Agenda » Security Patterns? » Sicherheit in Java » Der besste Zeitpunkt » Tipps & Tools » Testing Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 21
  30. 30. Am Rande erwähnt... » Logische Trennung von Web und Services Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 22
  31. 31. Am Rande erwähnt... » Logische Trennung von Web und Services » Überprüfung der Schichtenaufrufe mit AspectJ (im Compiler) Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 22
  32. 32. Am Rande erwähnt... » Logische Trennung von Web und Services » Überprüfung der Schichtenaufrufe mit AspectJ (im Compiler) » kontrollierte Flow-Steuerung im Web mit Spring WebFlow Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 22
  33. 33. Am Rande erwähnt... » Logische Trennung von Web und Services » Überprüfung der Schichtenaufrufe mit AspectJ (im Compiler) » kontrollierte Flow-Steuerung im Web mit Spring WebFlow » Separierung der Module mit Spring Dynamic Modules for OSGi Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 22
  34. 34. Wo implementieren? Aufrufer Methode Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 23
  35. 35. Wo implementieren? Aufrufer Security Methode Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 24
  36. 36. Wo implementieren? Aufrufer Methode Security Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 25
  37. 37. Wo implementieren? Aufrufer Security Methode Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 26
  38. 38. AspectJ » Security als Aspekt » Automatische Durchführung vor dem Methodenaufruf » Nachträgliches Hinzufügen kein Problem » Compile-Time Security » Erfordert einiges an Einarbeitung » Schreiben von generischem Code notwendig Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 27
  39. 39. Spring » Security als Aspekt » Mit Spring AOP » Nachträgliches Hinzufügen kein Problem » Einfacher als AspectJ » Keine Compile-Time Security » Schreiben von generischem Code notwendig » Nur für Spring-Beans Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 28
  40. 40. Spring Security (Acegi) » Benutzt AspectJ und Spring » Nachträgliches Hinzufügen kein Problem » Funktionert mit Spring AOP und AspectJ, aber wenig direkter Kontakt damit » Kein generischer Code, oft reicht Konfiguration Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 29
  41. 41. Authentifizierung mit Spring Security » Provider » LDAP, Datenbank, InMemory, JA-SIG CAS, CA Siteminder, OpenId, JOSSO, JCaptcha » Methoden » Basic, X509 (SSL), Form, Rich-Client, ... » Leicht erweiterbar / anpasspar » Feingranulare Strategy-Implementierungen » Konfiguration via Spring Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 30
  42. 42. Autorisierung » Ist das gut? SecurityManager sm = System.getSecurityManager(); if (sm.isUserInRole(quot;ROLE_USERquot;)) { // do something } else { throw new AccessDeniedException(„No Access“); } Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 31
  43. 43. Ist das gut? » Implementierungen müssen vorhanden sein » Wird immer mitgetestet » Abhängigkeit zur API » Verteilte Abhängigkeit zur Rollenbeschreibung / Rechtesystem » Mit Security Last: » Nur Businesslogik wird implementiert! Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 32
  44. 44. Aufrufer Security Service Interceptor Aufruf Security Check Exception Auruf Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 33
  45. 45. Aufrufer Security Service Interceptor Business Aufruf Security Check Exception Auruf Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 33
  46. 46. Aufrufer Security Service Interceptor Business Aufruf Security Check Security Exception Auruf Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 33
  47. 47. URL Filter » DEMO Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 34
  48. 48. Reicht das aus? » URLs sind keine 1 zu 1 Beziehung zu Resourcen » Webframeworks, Filter, Druckausgaben, etc. » URLs können sich ändern » URL alleine reicht oft nicht (AJAX) » Filter auf Parameter sehr schwierig! Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 35
  49. 49. Wo dann? » Am besten beim Service » Ab hier trennen sich die Wege zu HTML, Webservices, AJAX, etc. » Methodenaufrufe sind 1 zu 1 » Entweder mit Annotations oder via XML @Secured(„PERM_ADMIN_OP“) public void adminOp(); Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 36
  50. 50. Methoden Filter » DEMO Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 37
  51. 51. Und wie war das nochmal mit Validierung? » DEMO Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 38
  52. 52. Mögliche Lösungen » JdbcPreparedStatement » Datenbank baut das Query zusammen » Hoffentlich nicht mit „+“ » Generische Validatoren » HDIV (Zustände) » OWASP Stinger (Blacklist) » Fachspezifische Whitelists » Spring MVC Validatoren, Commons Validators Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 39
  53. 53. Oder nochmal absichern » Defense in Depth: » Prüfung der gleichen Regeln ... » ... auf verschiedenene Ebenen » ... mit verschiedenen Techniken » Z.B. SQL und Java Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 40
  54. 54. Ein Beispiel select * from orders where owner = <user> and subject = x x = „Meine Bestellung“ x = „1 or 1=1“ Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 41
  55. 55. Zusätzliche Prüfung mit Spring Security Authentication Instance Domain Object Instance (Benutzer + Rechte) AclProvider Permissions (READ, WRITE, ...) Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 42
  56. 56. Instanzbasierte Rechte » DEMO Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 43
  57. 57. Agenda » Security Patterns? » Sicherheit in Java » Der besste Zeitpunkt » Tipps & Tools » Testing Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 44
  58. 58. Testing » Bugs bei „zu vielen“ Funktionen werden nicht gemeldet! » Umfangreiche Security-Tests mit JUnit und Fit notwendig Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 45
  59. 59. Business Code Tests Aufrufer Security Service Interceptor Aufruf Security Check Exception Auruf Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 46
  60. 60. Business Code Tests Aufrufer Service Auruf Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 46
  61. 61. Security Tests Aufrufer Security Service Interceptor Aufruf Security Check Exception Auruf Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 47
  62. 62. Security Tests Aufrufer Security Interceptor Aufruf Security Check Exception Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 47
  63. 63. Integrations Tests » Z.B. mit FIT (Framework for Integration Tests) Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 48
  64. 64. Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 49
  65. 65. Fazit » Java bietet bereits viel Security- Grundlagen » Spring Security und AspectJ erweitern und vereinfachen diese nochmals » Ohne weitere Abhängigkeiten im Code zu schaffen » Anwendbar für jede Java-Anwendung Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 50

×