Java Web Security

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    Favorites, Groups & Events

    Java Web Security - Presentation Transcript

    1. Mike Wiesner | SpringSource Java Web Security
    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. Agenda » Security Patterns? » Sicherheit in Java » Der besste Zeitpunkt » Tipps & Tools » Testing Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 3
    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. 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. 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. Ein Beispiel » Häufigste Ursache für Sicherheitsprobleme? Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 5
    8. Ein Beispiel » Häufigste Ursache für Sicherheitsprobleme? Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 5
    9. Ein Beispiel » Häufigste Ursache für Sicherheitsprobleme? » Fehlende Eingabevalidierung! Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 5
    10. SQL Injection Internet Webserver Daten- bank Spring Suche Client select * from ... where betreff = 'Spring' Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 6
    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. 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. Agenda » Security Patterns? » Sicherheit in Java » Der besste Zeitpunkt » Tipps & Tools » Testing Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 9
    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. 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. 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. 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. Dann ist ja alles klar, oder? » JDK bietet hauptsächlich Low-Level- Security Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 14
    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. 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. 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. Agenda » Security Patterns? » Sicherheit in Java » Der besste Zeitpunkt » Tipps & Tools » Testing Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 15
    23. Der beste Zeitpunkt ist ... Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 16
    24. Der beste Zeitpunkt ist ... » ... am Schluss! » = Security Last Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 16
    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. Warum? » Weil sich Anforderungen ändern: » Security muss immer „mitgeändert“ werden » Erschwert das Testen Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 18
    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. 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. Agenda » Security Patterns? » Sicherheit in Java » Der besste Zeitpunkt » Tipps & Tools » Testing Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 21
    30. Am Rande erwähnt... » Logische Trennung von Web und Services Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 22
    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. 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. 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. Wo implementieren? Aufrufer Methode Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 23
    35. Wo implementieren? Aufrufer Security Methode Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 24
    36. Wo implementieren? Aufrufer Methode Security Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 25
    37. Wo implementieren? Aufrufer Security Methode Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 26
    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. 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. 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. 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. Autorisierung » Ist das gut? SecurityManager sm = System.getSecurityManager(); if (sm.isUserInRole(\"ROLE_USER\")) { // do something } else { throw new AccessDeniedException(„No Access“); } Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 31
    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. Aufrufer Security Service Interceptor Aufruf Security Check Exception Auruf Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 33
    45. Aufrufer Security Service Interceptor Business Aufruf Security Check Exception Auruf Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 33
    46. Aufrufer Security Service Interceptor Business Aufruf Security Check Security Exception Auruf Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 33
    47. URL Filter » DEMO Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 34
    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. 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. Methoden Filter » DEMO Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 37
    51. Und wie war das nochmal mit Validierung? » DEMO Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 38
    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. 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. 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. 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. Instanzbasierte Rechte » DEMO Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 43
    57. Agenda » Security Patterns? » Sicherheit in Java » Der besste Zeitpunkt » Tipps & Tools » Testing Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 44
    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. Business Code Tests Aufrufer Security Service Interceptor Aufruf Security Check Exception Auruf Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 46
    60. Business Code Tests Aufrufer Service Auruf Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 46
    61. Security Tests Aufrufer Security Service Interceptor Aufruf Security Check Exception Auruf Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 47
    62. Security Tests Aufrufer Security Interceptor Aufruf Security Check Exception Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 47
    63. Integrations Tests » Z.B. mit FIT (Framework for Integration Tests) Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 48
    64. Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt 49
    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

    + Mike WiesnerMike Wiesner, 2 years ago

    custom

    645 views, 0 favs, 0 embeds more stats

    Wie sicher sind Java-Webanwendungen und auf was mus more

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 645
      • 645 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 0
    • Downloads 0
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories