SlideShare a Scribd company logo
1 of 65
Mike Wiesner | SpringSource



Java Web Security
Ü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
Agenda

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




Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt   3
Security Patterns?

  » Techniken gegen verbreitete
    Angriffsmuster
       » SQL-Injection, Parameter Tampering, Man in
         the middle, etc.




Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt   4
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
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
Ein Beispiel

  » Häufigste Ursache für
    Sicherheitsprobleme?




Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt   5
Ein Beispiel

  » Häufigste Ursache für
    Sicherheitsprobleme?




Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt   5
Ein Beispiel

  » Häufigste Ursache für
    Sicherheitsprobleme?

  » Fehlende Eingabevalidierung!




Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt   5
SQL Injection


                        Internet                 Webserver

                                                                       Daten-
                                                                        bank
Spring                         Suche



         Client
                                                            select * from ...
                                                            where betreff =
                                                                'Spring'
 Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt      6
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
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
Agenda

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




Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt   9
Sichere Plattform

  » Striktes Data Typing
  » Automatische Speicherverwaltung
  » Bytecode Überprüfung
  » Sicheres Classloading (getrennte
    Classloader möglich)




Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt   10
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
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
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
Dann ist ja alles klar, oder?

  » JDK bietet hauptsächlich Low-Level-
    Security




Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt   14
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
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
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
Agenda

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




Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt   15
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 praktisch angewandt   16
Warum?


  » Weil andere Ding entscheidender sind:

       » Security bringt wenig User-Feedback
       » 100% sicher, aber keine Funktionen?




Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt   17
Warum?


  » Weil sich Anforderungen ändern:

       » Security muss immer „mitgeändert“ werden
       » Erschwert das Testen




Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt   18
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
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
Agenda

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




Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt   21
Am Rande erwähnt...

  » Logische Trennung von Web und Services




Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt   22
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
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
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
Wo implementieren?


                                         Aufrufer




                                         Methode


Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt   23
Wo implementieren?


                                         Aufrufer                     Security




                                        Methode


Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt              24
Wo implementieren?


                                        Aufrufer




                                        Methode                       Security


Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt              25
Wo implementieren?


                                        Aufrufer



                                         Security




                                        Methode


Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt   26
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
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
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
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
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
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
Aufrufer                    Security                 Service
                                 Interceptor



                      Aufruf
                                           Security Check




                   Exception


                                                    Auruf




Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt   33
Aufrufer                    Security                 Service
                                 Interceptor                          Business

                      Aufruf
                                           Security Check




                   Exception


                                                    Auruf




Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt   33
Aufrufer                    Security                 Service
                                 Interceptor                          Business

                      Aufruf
                                           Security Check             Security


                   Exception


                                                    Auruf




Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt   33
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.
  » URLs können sich ändern
  » URL alleine reicht oft nicht (AJAX)
       » Filter auf Parameter sehr schwierig!




Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt   35
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
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   38
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
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
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
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
Instanzbasierte Rechte

  » DEMO




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

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




Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt   44
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
Business Code Tests
                 Aufrufer                    Security                 Service
                                           Interceptor



                                 Aufruf
                                                     Security Check




                              Exception


                                                              Auruf




Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt             46
Business Code Tests
                 Aufrufer                                             Service




                                                Auruf




Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt             46
Security Tests
                 Aufrufer                    Security                 Service
                                           Interceptor



                                 Aufruf
                                                     Security Check




                              Exception


                                                              Auruf




Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt             47
Security Tests
                 Aufrufer                    Security
                                           Interceptor



                                 Aufruf
                                                     Security Check




                              Exception




Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt   47
Integrations Tests

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




Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt   48
Mike Wiesner | SpringSource | Security-Patterns praktisch angewandt   49
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

More Related Content

Viewers also liked

0u trouver l_argent-cp
0u trouver l_argent-cp0u trouver l_argent-cp
0u trouver l_argent-cpdesintocx
 
Ejb advanced2010
Ejb advanced2010Ejb advanced2010
Ejb advanced2010hrzandi
 
Inde barrières exemple
Inde barrières exempleInde barrières exemple
Inde barrières exempleBenoit Teppe
 
calameo-deber
calameo-debercalameo-deber
calameo-deberNatasol
 
Hang son doong cavern 29 april2011
Hang son doong cavern 29 april2011Hang son doong cavern 29 april2011
Hang son doong cavern 29 april2011Nguyen Thoai
 
Présentation de l'Appcelerator Platform au Meetup Titanium Paris
Présentation de l'Appcelerator Platform au Meetup Titanium ParisPrésentation de l'Appcelerator Platform au Meetup Titanium Paris
Présentation de l'Appcelerator Platform au Meetup Titanium ParisDamien Laureaux
 
Taugen die DRG's als Managementinstrument?- Holger Baumann (Hôpital de l'Ile,...
Taugen die DRG's als Managementinstrument?- Holger Baumann (Hôpital de l'Ile,...Taugen die DRG's als Managementinstrument?- Holger Baumann (Hôpital de l'Ile,...
Taugen die DRG's als Managementinstrument?- Holger Baumann (Hôpital de l'Ile,...Paianet - Connecting Healthcare
 
In chile 2011 version fr
In chile 2011 version frIn chile 2011 version fr
In chile 2011 version frMR_Berthiaume
 
ID&DG DRAWINGS 1000 HOUSING PROJECT NASERIYA
ID&DG DRAWINGS 1000 HOUSING PROJECT NASERIYAID&DG DRAWINGS 1000 HOUSING PROJECT NASERIYA
ID&DG DRAWINGS 1000 HOUSING PROJECT NASERIYAID&DG Ltd. Middle East
 

Viewers also liked (15)

2.0 webmin
2.0 webmin2.0 webmin
2.0 webmin
 
Essai rp
Essai rpEssai rp
Essai rp
 
0u trouver l_argent-cp
0u trouver l_argent-cp0u trouver l_argent-cp
0u trouver l_argent-cp
 
Pour une fiscalité du numérique juste et équitable en France
Pour une fiscalité du numérique juste et équitable en FrancePour une fiscalité du numérique juste et équitable en France
Pour une fiscalité du numérique juste et équitable en France
 
Ejb advanced2010
Ejb advanced2010Ejb advanced2010
Ejb advanced2010
 
Inde barrières exemple
Inde barrières exempleInde barrières exemple
Inde barrières exemple
 
calameo-deber
calameo-debercalameo-deber
calameo-deber
 
Graphiques du bilan 2012 Point de Contact
Graphiques du bilan 2012 Point de ContactGraphiques du bilan 2012 Point de Contact
Graphiques du bilan 2012 Point de Contact
 
Hang son doong cavern 29 april2011
Hang son doong cavern 29 april2011Hang son doong cavern 29 april2011
Hang son doong cavern 29 april2011
 
Foot us
Foot usFoot us
Foot us
 
Présentation de l'Appcelerator Platform au Meetup Titanium Paris
Présentation de l'Appcelerator Platform au Meetup Titanium ParisPrésentation de l'Appcelerator Platform au Meetup Titanium Paris
Présentation de l'Appcelerator Platform au Meetup Titanium Paris
 
Taugen die DRG's als Managementinstrument?- Holger Baumann (Hôpital de l'Ile,...
Taugen die DRG's als Managementinstrument?- Holger Baumann (Hôpital de l'Ile,...Taugen die DRG's als Managementinstrument?- Holger Baumann (Hôpital de l'Ile,...
Taugen die DRG's als Managementinstrument?- Holger Baumann (Hôpital de l'Ile,...
 
In chile 2011 version fr
In chile 2011 version frIn chile 2011 version fr
In chile 2011 version fr
 
Fi bi partiel 3
Fi bi partiel 3Fi bi partiel 3
Fi bi partiel 3
 
ID&DG DRAWINGS 1000 HOUSING PROJECT NASERIYA
ID&DG DRAWINGS 1000 HOUSING PROJECT NASERIYAID&DG DRAWINGS 1000 HOUSING PROJECT NASERIYA
ID&DG DRAWINGS 1000 HOUSING PROJECT NASERIYA
 

Similar to Java Web Security

IT-Sicherheit und agile Entwicklung? Geht das? Sicher!
IT-Sicherheit und agile Entwicklung? Geht das? Sicher!IT-Sicherheit und agile Entwicklung? Geht das? Sicher!
IT-Sicherheit und agile Entwicklung? Geht das? Sicher!Carsten Cordes
 
Automatisierung von Security Test im Build-Prozess
Automatisierung von Security Test im Build-ProzessAutomatisierung von Security Test im Build-Prozess
Automatisierung von Security Test im Build-Prozessx-celerate
 
DevOpsCon 2016 - Continuous Security Testing - Stephan Kaps
DevOpsCon 2016 - Continuous Security Testing - Stephan KapsDevOpsCon 2016 - Continuous Security Testing - Stephan Kaps
DevOpsCon 2016 - Continuous Security Testing - Stephan KapsStephan Kaps
 
Measuring The Security Of Web Applications (Owasp Germany 2008)
Measuring The Security Of Web Applications (Owasp Germany 2008)Measuring The Security Of Web Applications (Owasp Germany 2008)
Measuring The Security Of Web Applications (Owasp Germany 2008)sebastianschinzel
 
SAP Infotag: Security / Erlebe-Software 07-2014
SAP Infotag: Security / Erlebe-Software 07-2014SAP Infotag: Security / Erlebe-Software 07-2014
SAP Infotag: Security / Erlebe-Software 07-2014Erlebe Software
 
Ruby On Rails - 3. Rails Addons
Ruby On Rails - 3. Rails AddonsRuby On Rails - 3. Rails Addons
Ruby On Rails - 3. Rails AddonsJakob
 
Webinar Cyberangriff - Abwehrmöglichkeiten
Webinar Cyberangriff - AbwehrmöglichkeitenWebinar Cyberangriff - Abwehrmöglichkeiten
Webinar Cyberangriff - AbwehrmöglichkeitenA. Baggenstos & Co. AG
 
Webinar Cyberangriff - Abwehrmöglichkeiten
Webinar Cyberangriff - AbwehrmöglichkeitenWebinar Cyberangriff - Abwehrmöglichkeiten
Webinar Cyberangriff - AbwehrmöglichkeitenA. Baggenstos & Co. AG
 
Outpost24 webinar mit oder ohne agenten
Outpost24 webinar   mit oder ohne agentenOutpost24 webinar   mit oder ohne agenten
Outpost24 webinar mit oder ohne agentenOutpost24
 
INTEGRATION VON SECURITY-CHECKS IN DIE CI-PIPELINE
INTEGRATION VON SECURITY-CHECKS IN DIE CI-PIPELINEINTEGRATION VON SECURITY-CHECKS IN DIE CI-PIPELINE
INTEGRATION VON SECURITY-CHECKS IN DIE CI-PIPELINEOPEN KNOWLEDGE GmbH
 
Splunk Discovery Köln - 17-01-2020 - Security Operations mit Splunk
Splunk Discovery Köln - 17-01-2020 - Security Operations mit SplunkSplunk Discovery Köln - 17-01-2020 - Security Operations mit Splunk
Splunk Discovery Köln - 17-01-2020 - Security Operations mit SplunkSplunk
 
End-to-End Hochverfügbarkeit by Michal Soszynski
End-to-End Hochverfügbarkeit by Michal SoszynskiEnd-to-End Hochverfügbarkeit by Michal Soszynski
End-to-End Hochverfügbarkeit by Michal SoszynskiCarsten Muetzlitz
 

Similar to Java Web Security (13)

IT-Sicherheit und agile Entwicklung? Geht das? Sicher!
IT-Sicherheit und agile Entwicklung? Geht das? Sicher!IT-Sicherheit und agile Entwicklung? Geht das? Sicher!
IT-Sicherheit und agile Entwicklung? Geht das? Sicher!
 
Automatisierung von Security Test im Build-Prozess
Automatisierung von Security Test im Build-ProzessAutomatisierung von Security Test im Build-Prozess
Automatisierung von Security Test im Build-Prozess
 
DevOpsCon 2016 - Continuous Security Testing - Stephan Kaps
DevOpsCon 2016 - Continuous Security Testing - Stephan KapsDevOpsCon 2016 - Continuous Security Testing - Stephan Kaps
DevOpsCon 2016 - Continuous Security Testing - Stephan Kaps
 
Measuring The Security Of Web Applications (Owasp Germany 2008)
Measuring The Security Of Web Applications (Owasp Germany 2008)Measuring The Security Of Web Applications (Owasp Germany 2008)
Measuring The Security Of Web Applications (Owasp Germany 2008)
 
SAP Infotag: Security / Erlebe-Software 07-2014
SAP Infotag: Security / Erlebe-Software 07-2014SAP Infotag: Security / Erlebe-Software 07-2014
SAP Infotag: Security / Erlebe-Software 07-2014
 
Ruby On Rails - 3. Rails Addons
Ruby On Rails - 3. Rails AddonsRuby On Rails - 3. Rails Addons
Ruby On Rails - 3. Rails Addons
 
Webinar Cyberangriff - Abwehrmöglichkeiten
Webinar Cyberangriff - AbwehrmöglichkeitenWebinar Cyberangriff - Abwehrmöglichkeiten
Webinar Cyberangriff - Abwehrmöglichkeiten
 
Webinar Cyberangriff - Abwehrmöglichkeiten
Webinar Cyberangriff - AbwehrmöglichkeitenWebinar Cyberangriff - Abwehrmöglichkeiten
Webinar Cyberangriff - Abwehrmöglichkeiten
 
Outpost24 webinar mit oder ohne agenten
Outpost24 webinar   mit oder ohne agentenOutpost24 webinar   mit oder ohne agenten
Outpost24 webinar mit oder ohne agenten
 
Wsd pentesting workshop
Wsd pentesting workshopWsd pentesting workshop
Wsd pentesting workshop
 
INTEGRATION VON SECURITY-CHECKS IN DIE CI-PIPELINE
INTEGRATION VON SECURITY-CHECKS IN DIE CI-PIPELINEINTEGRATION VON SECURITY-CHECKS IN DIE CI-PIPELINE
INTEGRATION VON SECURITY-CHECKS IN DIE CI-PIPELINE
 
Splunk Discovery Köln - 17-01-2020 - Security Operations mit Splunk
Splunk Discovery Köln - 17-01-2020 - Security Operations mit SplunkSplunk Discovery Köln - 17-01-2020 - Security Operations mit Splunk
Splunk Discovery Köln - 17-01-2020 - Security Operations mit Splunk
 
End-to-End Hochverfügbarkeit by Michal Soszynski
End-to-End Hochverfügbarkeit by Michal SoszynskiEnd-to-End Hochverfügbarkeit by Michal Soszynski
End-to-End Hochverfügbarkeit by Michal Soszynski
 

Java Web Security

  • 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(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
  • 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