Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Java Web Security

1,435 views

Published on

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

Published in: Technology
  • Be the first to comment

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

×