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
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(quot;ROLE_USERquot;)) {
// 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
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
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
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
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