Ease of Security. Über mich. Senior Consultant bei Interface21 Germany. Acegi-/Spring-Consulting. Trainings. IT-Security Consulting



Ähnliche Dokumente
Spring Security 2.0. Mike Wiesner SpringSource Germany

Benutzerauthentifizierung und Zugriffsschutz mit JAAS

EJBs und Sicherheit. Vorlesung: Applikationsserver. Prof. Dr. Ch. Reich furtwangen.de furtwangen.

1. Integration von Liferay & Alfresco 2. Single Sign On mit CAS

Der lokale und verteilte Fall

Application Frameworks

Single-Sign-On mit Java und Kerberos. Michael Wiesner, SOFTCON IT-Service GmbH

Clientkonfiguration für Hosted Exchange 2010

Frankfurt,

Struts 2 Das Imperium schlägt zurück?

LDAP Konfiguration nach einem Update auf Version 6.3 Version 1.2 Stand: 23. Januar 2012 Copyright MATESO GmbH

Folgende Voraussetzungen für die Konfiguration müssen erfüllt sein:

Seite Out-Of-Band-Authentifizierung (OOBA) 8.1 Einleitung

Anleitung Grundsetup C3 Mail & SMS Gateway V

How-to: HTTP Proxy mit Radius Authentifizierung an einem Windows 2003 Server. Securepoint Security System Version 2007nx

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, Java Forum Stuttgart 2007

Konfiguration VLAN's. Konfiguration VLAN's IACBOX.COM. Version Deutsch

Externe Authentifizierung. Externe Authentifizierung IACBOX.COM. Version Deutsch

Version Deutsch In diesem HOWTO wird beschrieben wie Sie Ihren Gästen die Anmeldung über eine SMS ermöglichen.

Design Patterns 2. Model-View-Controller in der Praxis

2. Einrichtung der ODBC-Schnittstelle aus orgamax (für 32-bit-Anwendungen)

OP-LOG

Authentication Policy. Konfigurationsbeispiel ZyXEL ZyWALL USG-Serie. Juni 2010 / HAL

anleitung für einen 2Wire- Account im Microsoft Outlook 2007

Albert HAYR Linux, IT and Open Source Expert and Solution Architect. Open Source professionell einsetzen

SharePoint Demonstration

EJB Beispiel. JEE Vorlesung 10. Ralf Gitzel

B E N U T Z E R D O K U M E N TA T I O N ( A L E P H I N O

Öffnen Sie den Internet-Browser Ihrer Wahl. Unabhängig von der eingestellten Startseite erscheint die folgende Seite in Ihrem Browserfenster:

Benachrichtigungsmöglichkeiten in SMC 2.6

HOSTED EXCHANGE 2013 IN OUTLOOK EINRICHTE N

B E N U T Z E R D O K U M E N TA T I O N ( A L E P H I N O

teamsync Kurzanleitung

Anleitung für den Zugriff auf Mitgliederdateien der AG-KiM

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

10. Berechtigungsverwaltung Grundlagen der Programmierung II (Java)

Anleitung auf SEITE 2

oder ein Account einer teilnehmenden Einrichtung also

Infinigate (Schweiz) AG. Secure Guest Access. - Handout -

Security. Stefan Dahler. 4. Internet Verbindung. 4.1 Einleitung

Diese Anleitung erläutert die Einrichtung des Active Directory Modus im DNS-343.

Handbuch. timecard Connector Version: REINER SCT Kartengeräte GmbH & Co. KG Goethestr Furtwangen

Sie müssen sich für diesen Fall mit IHREM Rechner (also zeitgut jk o.ä.) verbinden, nicht mit dem Terminalserver.

Shibboleth IdP-Erweiterungen an der Freien Universität Berlin

Schedulingund Thread-Ausführer

Einrichten eines Postfachs mit Outlook Express / Outlook bis Version 2000

JSP vs. PHP. Ein persönlicher Vergleich. EQUIcon Software GmbH Jena, Jörg Spilling Frankfurter Treffen Agenda

Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen. Alexander Schunk Marcel Teuber Henry Trobisch

eduroam mit SecureW2 unter Windows 7 Stand: 27. Januar 2015

Neuerungen bei Shibboleth 2

SSH Authentifizierung über Public Key

Auszug aus JAX-WS Folien

BusinessMail X.400 Webinterface Gruppenadministrator V2.6

Lizenzen auschecken. Was ist zu tun?

Benutzung eines Login Modules zur Authentifizierung unter JBoss 4.0.5

INTERNET UND MMS MIT DEM QTEK2020 MARCO 28. MÄRZ 04

Step by Step Webserver unter Windows Server von Christian Bartl

Sie finden im Folgenden drei Anleitungen, wie Sie sich mit dem Server der Schule verbinden können:

FritzCall.CoCPit Schnelleinrichtung

OFFLINE SYNCHRONISATION - ENIQ ACCESSMANAGEMENT PROGRAMMIER-CLIENT (ENIQ DEVICEMANAGEMENT) EINRICHTEN INSTALLATION DER SQL SERVER INSTANZ

Er musste so eingerichtet werden, dass das D-Laufwerk auf das E-Laufwerk gespiegelt

estos UCServer Multiline TAPI Driver

KURZANLEITUNG CYBERDUCK MIT CLOUD OBJECT STORAGE

Installationsanleitung dateiagent Pro

Daten-Synchronisation zwischen dem ZDV-Webmailer und Outlook ( ) Zentrum für Datenverarbeitung der Universität Tübingen

s zu Hause lesen

IEEE 802.1x Authentifizierung. IEEE 802.1x Authentifizierung IACBOX.COM. Version Deutsch

Anlegen eines virtuellen http Server unter Exchange 2003 mittels HOSTNAME

Objektorientierte Programmierung

Drägerware.ZMS/FLORIX Hessen

Aktivierung von Makros in den Erfassungshilfen

Version Deutsch In diesem HOWTO wird beschrieben wie Sie Ihr vorhandenes PMS-System mit der IAC-BOX verbinden und konfigurieren.

Identity & Access Management in der Cloud

Hinweise zum Update des KPP Auswahltools (Netzwerkinstallation) auf Version 7.2

Shellfire L2TP-IPSec Setup Windows XP

Anleitung mtan (SMS-Authentisierung) mit SSLVPN.TG.CH

Veröffentlichung und Absicherung von SharePoint Extranets

Folgende Voraussetzungen für die Konfiguration müssen erfüllt sein:

1. Bearbeite Host Netzgruppen

STRATO Mail Einrichtung Microsoft Outlook

mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank

Dieses Dokument soll dem Administrator helfen, die ENiQ-Software als Client auf dem Zielrechner zu installieren und zu konfigurieren.

" -Adresse": Geben Sie hier bitte die vorher eingerichtete Adresse ein.

ITT WEB-Service DEMO. Kurzbedienungsanleitung

Outlook Express: Einrichtung Account

Benutzung eines Login Modules zur Authentifizierung unter JBoss 5.0

NEWSLETTER // AUGUST 2015

Step by Step VPN unter Windows Server von Christian Bartl

IBM Software Demos Tivoli Provisioning Manager for OS Deployment

Übungen zur Softwaretechnik

Zugriff auf OWA Auf OWA kann über folgende URLs zugegriffen werden:

Einrichten eines POP-Mailkontos unter Thunderbird Mail DE:

FIREBIRD BETRIEB DER SAFESCAN TA UND TA+ SOFTWARE AUF MEHR ALS EINEM COMPUTER

Download unter:

Inhalt Einführung Was ist SAML Wozu braucht man SAML Wo wird SAML verwendet kleine Demo SAML. Security Assertion Markup Language.

Verteidigung gegen SQL Injection Attacks

Matrix42. Matrix42 Cloud Trial Erste Schritte. Version

Transkript:

Ease of Security Java Forum Stuttgart 2007 Mike Wiesner, Interface21 Über mich Senior Consultant bei Interface21 Germany Acegi-/Spring-Consulting Trainings IT-Security Consulting mwiesner@interface21.com

Agenda Acegi vs. Spring Security Authentifizierung Web-Sicherheit Methoden-Sicherheit Instanz-Sicherheit Single-Sign-On Testing Fazit Acegi vs. Spring Security Ursprünglich: Acegi Security System for Spring Entwicklung getrennt von Spring durch Ben Alex Acegi ist eine Firma von Ben Alex Ab Version 1.1: Spring Security Entwicklung zusammen mit Spring durch Interface21 Ben Alex arbeitet nun bei Interface21

Einsatz von Security-Frameworks Eigenes Framework Web Container 9% 11% Andere 11% Kommerziell 2% JAAS 13% Acegi 54% Spring User Group Umfrage Was ist Spring Security? Ein Sicherheitsframework auf Basis von Spring Spring Security verwendet also Spring Muss die Anwendung selbst Spring verwenden?

Spring Anwendung? Portable service abstractions AOP Simple Objects IoC Was davon ist nötig? Anwendung muss nichts von Spring verwenden Alle Web-Anwendung (JSF, Struts, JSP, Spring MVC) Nahezu alle Java-Anwendungen Integration und Abstraktion für JAAS möglich Nur Spring Security selbst benötigt Spring zur Konfiguration

Wieso brauchen wir das, es gibt doch JAAS? LoginModules sind Closed-Source Callback Handler stören mehr als sie nutzen Konfiguration immer für komplette JVM Konfiguration über Umgebungsvariablen Wenig Autorisierungsmöglichkeiten Abhängigkeiten zum Application Server Keine Trennung von Businesscode und Securitycode Schlechte Testbarkeit Agenda Acegi vs. Spring Security Authentifizierung Web-Sicherheit Methoden-Sicherheit Instanz-Sicherheit Single-Sign-On Testing Fazit

JAAS JAAS-Login LDAP Login Module Kerberos Login Module Fordert Eingaben Fordert Eingaben Callback Handler Callback Handler öfnet holt sich LDAP-Anmeldung Benutzername User1 öfnet Kerberos Ticket LDAP-Anmeldung Abbrechen OK Kennwort **** Abbrechen OK Authentifizierung mit JAAS LoginContext lc = new LoginContext("loginConf", new TextCallbackHandler()); lc.login(); String principal = ((Principal) lc.getsubject ().getprincipals().iterator().next()).getname();

Authentifizierung mit JAAS loginconf { com.sun.security.auth.module.ldaploginmodule REQUIRED userprovider="ldap:///cn=users,dc=example,dc=com" authidentity="{username}" userfilter="(uid={username})" }; #> java... -Djava.security.auth.login.config=conf/ simple.conf... JAAS Callback Handler LoginModule benötigt Eingaben und fragt beim Callback Handler nach Callback Handler fordert Eingaben vom Benutzer (Vorbild war hier PAM) Probleme bei Webanwendungen und Client-/ Serveranwendungen! Lösung: Callback Handler bekommt Datenobjekt

Authentifizierung mit JAAS public class MyCallbackHandler implements CallbackHandler { private String password; private String username; public MyCallbackHandler(String password, String username) { this.password = password; this.username = username; } public void handle(callback[] callbacks) throws IOException, UnsupportedCallbackException { Callback cb; for (int i = 0; i < callbacks.length; i++) { cb=callbacks[i]; if (cb instanceof NameCallback) { NameCallback namecallback = (NameCallback) cb; namecallback.setname(username); } else if (cb instanceof PasswordCallback) { PasswordCallback passwordcallback = (PasswordCallback) cb; passwordcallback.setpassword(password.tochararray()); } else { throw new UnsupportedCallbackException(cb, "Only NameCallback and PasswordCallback supported"); } } } } Spring Security öffnet LDAP-Anmeldung Benutzername User1 Kennwort **** Anwendung erzeugt Kerberos Token Abbrechen OK Daten Authentication Manager sucht aus LDAP Provider Kerberos Provider

Authentifizierung mit Spring Security ApplicationContext ctx = new ClassPathXmlApplicationContext("springsecurity.xml"); AuthenticationManager manager = (AuthenticationManager) ctx.getbean("authmanager"); Authentication auth = manager.authenticate(new UsernamePasswordAuthenticationToken(benutzername, passwort)); User principal = (User) auth.getprincipal();

Authentifizierung mit Spring Security <bean id="usersearch" class="...filterbasedldapusersearch"> <constructor-arg value=""/> <constructor-arg value="(uid={0})"/> <constructor-arg ref="initialdircontextfactory" /> <property name="searchsubtree" value= true /> </bean> <bean id="ldaprolefetcher" class="...defaultldapauthoritiespopulator"> <constructor-arg ref="initialdircontextfactory" /> <constructor-arg value="ou=groups" /> <property name="grouproleattribute" value="cn" /> </bean> Authentifizierung mit Spring Security Auswahl des passenden Providers anhand von Eingaben und nicht umgekehrt Unabhängig von der Technologie/Umgebung Mehrere Konfigurationen in einer JVM möglich Keine Umgebungsvariablen nötig Feingranulare Authentication Provider für DAO (InMemory, JDBC), Siteminder, CAS, X509, LDAP, Testing, JAAS

Agenda Acegi vs. Spring Security Authentifizierung Web-Sicherheit Methoden-Sicherheit Instanz-Sicherheit Single-Sign-On Testing Fazit Web-Sicherheit mit JAAS/Tomcat <tomcat-users> <role rolename="tomcat"/> <role rolename="role1"/> <role rolename="manager"/> <user username="tomcat" password="tomcat" roles="tomcat,manager"/> <user username="both" password="tomcat" roles="tomcat,role1"/> <user username="role1" password="tomcat" roles="role1"/> </tomcat-users>

Web-Sicherheit mit JAAS/Tomcat <security-constraint> <web-resource-collection> <web-resource-name>test</web-resource-name> <url-pattern>/html/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>manager</role-name> </auth-constraint> </security-constraint> <security-role> <role-name>manager</role-name> </security-role> <login-config> <auth-method>basic</auth-method> <realm-name>test</realm-name> </login-config> Web-Sicherheit mit Spring Security

Web-Sicherheit mit Spring Security <bean id="filtersecurityinterceptor" class="...filtersecurityinterceptor"> <property name="authenticationmanager" ref="authenticationmanager" /> <property name="accessdecisionmanager" ref="accessdecisionmanager" /> <property name="objectdefinitionsource"><value> CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON PATTERN_TYPE_APACHE_ANT /admin/**=role_admin </value></property> </bean> Vorteile Spring Security Webanwendung ist unabhängig von Spring Umfangreichere URL-Patterns (ANT, RegExp) Unabhängig vom Container Konfiguration an einer Stelle Kann auch aus Datenbank kommen Unterstützung von BASIC, Form, Digest, X509, Remember-Me, Captchas, CAS, (SPNEGO)

Agenda Acegi vs. Spring Security Authentifizierung Web-Sicherheit Methoden-Sicherheit Instanz-Sicherheit Single-Sign-On Testing Fazit Methoden-Sicherheit mit JAAS SecurityManager sm = System.getSecurityManager(); if (sm!= null) { try { sm.checkpermission(new PropertyPermission ("my.perm", "read")); } catch (SecurityException e) { // No permission } } if (request.isuserinrole("role_user")) { // do something }

Methoden-Sicherheit mit JAAS Nur programmatisch Vermischung des Businesscodes vom Securitycode Keine zentrale Verwaltung/Übersicht Kann leicht vergessen werden Ausname: EJB Security Constraints Annotations Aber dann Abhängig von EJB! Methoden-Sicherheit mit Spring Security <bean id="securityinterceptor" class="...aspectjsecurityinterceptor"> <property name="authenticationmanager".../> <property name="accessdecisionmanager"... /> <property name="objectdefinitionsource"><value> BeanToSecure.adminOp=ROLE_ADMIN BeanToSecure.userOp=ROLE_USER,ROLE_ADMIN </value></property> </bean>

Methoden-Sicherheit mit Spring Security <bean id="mysecurityaspect" class="...mysecurityaspect" factory-method="aspectof"> <property name="securityinterceptor" ref="securityinterceptor"/> </bean> Methoden-Sicherheit mit Spring Security public aspect MySecurityAspect { private AspectJSecurityInterceptor securityinterceptor; } pointcut domainobjectinstanceexecution(): execution(public * BeanToSecure.*(..))...

Methoden-Sicherheit mit Spring Security deklarativ zentrale Verwaltung/Übersicht getrennt vom Businesscode Businesscode ist nicht Abhängig von Spring Kann leicht angepasst werden Funktioniert auch in der SE und ohne SecurityManager Aspekte werden einkompiliert Auch mit Annotations möglich! Agenda Acegi vs. Spring Security Authentifizierung Web-Sicherheit Methoden-Sicherheit Instanz-Sicherheit Single-Sign-On Testing Fazit

Instanz-Sicherheit Zugri!sregeln hängen oft von Instanzen ab, z.b. Benutzer dürfen eigene Objekte lesen und schreiben Benutzer dürfen fremde Objekte nur lesen Gruppenleiter dürfen Objekte von Gruppenmitglieder lesen und schreiben Instanz-Sicherheit mit JAAS Nur programmatisch im Businesscode Abhängigkeit des Businesscodes vom Securitycode Keine zentrale Verwaltung/Übersicht Kann leicht vergessen werden EJBs bieten auch nichts an

Instanz-Sicherheit mit Spring Security ObjectDefinitionSource erweitern um z.b. BeanToSecure.save=ROLE_USER,ACL_BTS_SAVE Zusätzlicher ACL-Voter zum Role-Voter Methoden-Eingaben/-Ausgaben werden vom ACL-Provider geprüft Zugri! wird gewährt bzw. Exception geworfen Rückgabewerte werden transparent gefiltert ACL sind sozusagen dynamische Rollen Agenda Acegi vs. Spring Security Authentifizierung Web-Sicherheit Methoden-Sicherheit Instanz-Sicherheit Single-Sign-On Testing Fazit

Single Sign On mit JAAS Keine Out-Of-The-Box Lösung SSO mit Kerberos nur in Verbindung mit GSS-API Betri!t z.b. Microsoft ADS Keine Web-SSO Unterstützung SSO mit Spring Security Out-Of-The-Box Unterstützung für Web-SSO mit JA-SIG CAS und Siteminder Integrationen möglich für: Web-SSO mit Kerberos/SPNEGO SSO mit Kerberos und automatischer Principal- Propagierung über RMI und HTTP OpenID (Sandboxcode)

CAS mit Spring Security Spring Security ohne CAS Acegi Authentication Provider LDAP User Details Service Oracle Rollen/ Rechte

Spring Security mit CAS Acegi CAS CAS Provider Acegi CAS Bridge User Details Service LDAP Authentication Provider Rollen/ Rechte Oracle CAS mit Spring Security CAS-Client integriert in Spring Security CAS Authentication Provider Bridge Spring Security Provider in CAS verwendbar CAS führt nur Authentifizierung durch Autorisierung über UserDetailsService

Kerberos/SPNEGO mit Spring Security SPNEGO = Single Sign On über den Browser z.b. in Windows Netzwerken SPNEGO Authentication Provider SPNEGO Entry Point SPNEGO ServletFilter Autorisierung über UserDetailsService Agenda Acegi vs. Spring Security Authentifizierung Web-Sicherheit Methoden-Sicherheit Instanz-Sicherheit Single-Sign-On Testing Fazit

Testing mit JAAS Businesscode-Tests: Security-Code wird immer mit getestet Login erforderlich Security-Tests: Kein getrenntes Testen von Autorisierung und Authentifizierung möglich Keine fertigen Test Login Modules Businesscode wird immer mit getestet! Kein separates Testen möglich da Code vermischt ist. Testing mit Acegi Businesscode-Tests: Security kann vollständig abgeschaltet werden (Aspekte entfernen) Kein Login Erforderlich Securitycode-Tests: Getrenntes Testen von Authentifizierung und Autorisierung (TestingAuthenticationProvider) Businesscode muss nicht ausgeführt werden! Getrenntes testen durch Code-Trennung möglich

Fazit Spring Security... setzt kein Spring im Anwendungscode voraus ist abhängig vom Businesscode und nicht andersrum ist durch die feingranulare Struktur leicht anpassbar und erweiterbar bietet bereits sehr viel Out-Of-The-Box vereinfacht das Testen kann gemeinsam mit JAAS eingesetzt werden funktioniert in jeder Umgebung ist komplett Open Source (Apache Lizenz) professioneller Support vorhanden Wie geht s weiter? Spring Security 2.0 (M1 im Juli 2007) Spring Security Namespace Hierarchische Rollen Single Sign On Verbesserungen Spring LDAP Integration

Security Namespace <bean id="authenticationprocessingfilter" class="org.acegisecurity.ui.webapp.authenticationprocessingfilter"> <property name="authenticationmanager" ref="authenticationmanager"/> <property name="authenticationfailureurl" value="/login.jsp"/> <property name="defaulttargeturl" value="/"/> </bean> <security:authentication-form id="authenticationprocessingfilter" " authenticationmanager="authenticationmanager" " errorformurl="/login.jsp" " defaulttargeturl="/"/> Wo geht s weiter? Homegage: http://www.springsecurity.org Spring User Group Germany http://groups.google.com/group/sugg Forum http://forum.springframework.org

Buch zum Film Spring Security Das Acegi Security System professionell einsetzen ISBN: 3-939084-26-3 Mike Wiesner Herbst 2007