Java Web Security

1.383 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.383
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

×