Workshop Segurança JEE
AgendaApresentação
Conceitos segurança JEE
Desenvolvendo: RAD
Implementação, testes
Demo
Java Authorization Contract for Containers JACC
Demo
Infraestrutura
Introdução a segurança de serviços webApresentação
3o pilar da Qualidade da Aplicação Funcionalidade
 Performance
SegurançaProblemasOs aplicativos Web são o alvo n° 1 dos hackers que buscam explorar vulnerabilidades
 Os aplicativos são implantados com vulnerabilidades
 Configurações de baixa segurança expõem as empresas à perdas de negócios
 Os requisitos regulatórios de PCI exigem a segurança de aplicativo
 80% dos custos de desenvolvimento são gastos na identificação e correção de defeitosBenefíciosReduz o risco de interrupção, desfiguração ou roubo de dados associados com aplicativos Web
 Assessora e monitora conformidade da política de segurança em toda a empresa
 Melhora a conformidade com as normas do setor e exigências regulatórias (por exemplo PCI)
 Melhora a capacidade de integrar aplicativos críticos do negócio
 Teste e controle automatizados durante todo o ciclo de vida do desenvolvimento, reduzindo os custos de segurança a longo prazo.Motivações e objetivosControle de acesso incorporado nas aplicações pode falhar
Impacto no ciclo de desenvolvimento da aplicação
Limitação dos componentes desenvolvido internamente
Custo e prazo de atualização dos componentes
Modelo de autorização relativamente complicado
Falta de auditoria
Usar solução de mercado
Velocidade na colocação de novas aplicações
Aumentar controle de acesso – Diminuir falhas
Transparente para as aplicações
Auditoria de acesso
Gerenciamento unificado das políticasCiclo de vida da aplicação
Arquitetura lógicaWeb ContainerWebSEALAutorizaçãoServidor PolíticasEJBContainer
Conceitos de Segurança JEE
Modelo de segurança JEEA segurança das aplicações JEE é implementada usando papeis de segurança (Role)
Os papeis de segurança são aplicados nos componentes Web e EJB métodos EJB ou URIs WebA Segurança pode ser especificada de 2 maneiras: Declarativa em tempo de  configuração, através dos  ‘deployment descriptors’ Programática utilizando as APIS padrões em tempo de desenvolvimentoA associação dos usuários e dos grupos com os papeis JEE é geralmente feito no momento da instalação da aplicação (deploy)ProcessoMétodoEJBBobPapel-PermissãoLigaçãoMétodoEJBAdministradorAnaMétodoEJBEnterprise Java BeanSolicitanteServletCorretoresjspgif,cssAtendenteSeguradosComponentesWebRole Segurança JEEUsuários/Grupos
Modelo de autorização baseado em papelQuais papeis são permitidos?EJB: roles necessários dos métodos
Servlet/jsp: roles necessários nas security constraintsAcessoautorizadoLista de papeisSIMAlgum igual?RequisiçãoautenticadaQuais papeis são atribuídos? Obter nome do usuário/grupo nos credenciais
Obter os roles atribuídos a esse usuário/grupo NÃOLista de papeisAcessonegado
MapeamentoApplication Deployment DescriptorGrupo  Mapeamento               usuáriosUsuárioRecurso  Mapeamento RoleUsuárioUsuárioUsuárioUsuárioRoleMetodo EJBRoleGrupoURI WebGrupoUsuárioRole  Mapeamento 	PrincipalDefinido pelo programador da aplicaçãoDefinido pelo instalador da aplicação
Mapeamento Processos (antigo-novo)CadastrarpapelRU2ETrustPapel RAPermissãoPapel RU456Cadastrar usuárioAssociar Papel RU ao usuário1Cadastrar permissão com descritor da aplicaçãoCadastrar papel RA e associar permissãoAssociar papel RA e papel RU3UsuárioGerenciadorLDAPsincronizaçãoColocar usuário no grupoRAD-Security EditorDeploy-scriptRole JEERecurso JEEGrupo RU
Implementando a Segurança JEE
Segurança EJB declarativaImplementação de segurança declarativa com AnnotationLista de annotations EJB@DeclareRoles@DenyAll@PermitAll@RolesAllowed@RunAs
Segurança EJB declarativaImplementação de segurança declarativa com AnnotationRestrigir acesso ao EJB de sessão Donateimport javax.annotation.security.DeclareRoles;import javax.annotation.security.RolesAllowed;....@DeclareRoles( { "DMANAGERS_ROLE", "DUSERS_ROLE" })public class DonateBean implements DonateBeanInterface, ...... {@RolesAllowed( { "DMANAGERS_ROLE","DUSERS_ROLE" })public void donateToFund(Employee employee, Fund fund, int hours) .........@RolesAllowed( { "DMANAGERS_ROLE","DUSERS_ROLE" })public String donateToFund(int employeeId, String fundName, int hours) {
Deployment descriptor EJBejb-jar.xml (diretório DonateEJB/ejbModule/META-INF) imediatamente antes do tag </ejb-jar.xml> <assembly-descriptor>	<security-role>		<role-name>DMANAGERS_ROLE</role-name>	</security-role>	<security-role>		<role-name>DUSERS_ROLE</role-name>	</security-role>	<method-permission>		<role-name>DUSERS_ROLE</role-name>		<role-name>DMANAGERS_ROLE</role-name>		<method>		         <ejb-name>DonateBean</ejb-name>		         <method-name>donateToFund</method-name>		</method>	</method-permission></assembly-descriptor>Utilizar o editor de Segurança do RAD para auxilioSegurança Web declarativaImplementação de segurança declarativa com AnnotationLista de annotations Web@DeclareRoles@RunAs
Segurança WEBEditor de segurança do RAD:	Restringir o  acesso a páginas Web com segurança declarativa
Informações de segurançaO editor de segurança insere as seguintes informações no arquivo web.xml:A restrição de segurança <security-constraint>  é o elemento base  que contém:O elemento <web-resource-collection> define os privilegios de acesso a um conjunto de recursos. Este elemento pode especificar padrões de URL e métodos HTTP.
O elemento  <auth-constraint> define quais são os roles necessários para acessar esse conjunto de recursos Web.
O elemento  <security-role> declare os nomes dos roles utilizados nos elementos security-constraint.<security-constraint>	<display-name>ALLAUTHENTICATED_ROLEConstraint</display-name>		<web-resource-collection>		<web-resource-name>ALLAUTHENTICATED_ROLECollection</web-resource-name>			<url-pattern>/faces/FindEmployee.jsp</url-pattern>			<url-pattern>/FindEmployee.faces</url-pattern>			<url-pattern>/FindEmployee.jsp</url-pattern>			<http-method>GET</http-method>			<http-method>PUT</http-method>			<http-method>HEAD</http-method>			<http-method>TRACE</http-method>			<http-method>POST</http-method>			<http-method>DELETE</http-method>			<http-method>OPTIONS</http-method>		</web-resource-collection>		<auth-constraint>			<description>Auto generated Authorization Constraint</description>			<role-name>ALLAUTHENTICATED_ROLE</role-name>		</auth-constraint></security-constraint><security-role>	<description>	</description>	<role-name>DUSERS_ROLE</role-name></security-role>web.xml
Configurar roles do EAR e mapeamento de roles - 1Próximo slide
Configurar roles do EAR e mapeamento de roles - 2
Teste da segurança declarativa EJB com JUnit
Código para segurançaSystem.setProperty("com.ibm.SSL.ConfigURL", propDir +"ssl.client.props");System.setProperty("java.security.auth.login.config", propDir +"wsjaas_client.conf");System.setProperty("com.ibm.CORBA.ConfigURL",propDir +"sas.client.props");Definir SSL, JAAS e SAS (Secure Authentication Services)Propriedades necessárias para acessar o servidorctx.lookup("");Conectar ao Contexto inicial para carregar o Realm default e  carregar as informações necessárias ao Security ServerLoginContext lc = new LoginContext("WSLogin",new WSCallbackHandlerImpl("DNARMSTRONG", "xxxxxxxx"));lc.login();final Subject subject = lc.getSubject();System.out.println("subject=" + subject.toString());WSSubject.setRunAsSubject(subject);Criar o contexto do login, fazer o login, e colocar o usuário autenticado como o usuário default para este thread de execução
Teste de segurançaem EJB
Teste a segurança declarativa EJB com Universal Test Client (UTC)
Teste da segurança declarativa WebMapeamento
Teste da segurança declarativa Webcom o usuário DGADAMS
Testar o acesso com o usuário DNARMSTRONG
Implementar segurança programática numa página Web<h:outputTextvalue="ROLES: "/><h:outputTextvalue="EDITOR"rendered="#{rich:isUserInRole('EDITOR')}"/><h:outputTextvalue="LEITOR"rendered="#{rich:isUserInRole('LEITOR')}"/><h:outputTextvalue="DIRETOR"rendered="#{rich:isUserInRole('DIRETOR')}"/><h:outputTextvalue="GERENTE"rendered="#{rich:isUserInRole('GERENTE')}"/>
DEMO

Workshop05

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
    Java Authorization Contractfor Containers JACC
  • 8.
  • 9.
  • 10.
    Introdução a segurançade serviços webApresentação
  • 11.
    3o pilar daQualidade da Aplicação Funcionalidade
  • 12.
  • 13.
    SegurançaProblemasOs aplicativos Websão o alvo n° 1 dos hackers que buscam explorar vulnerabilidades
  • 14.
    Os aplicativossão implantados com vulnerabilidades
  • 15.
    Configurações debaixa segurança expõem as empresas à perdas de negócios
  • 16.
    Os requisitosregulatórios de PCI exigem a segurança de aplicativo
  • 17.
    80% doscustos de desenvolvimento são gastos na identificação e correção de defeitosBenefíciosReduz o risco de interrupção, desfiguração ou roubo de dados associados com aplicativos Web
  • 18.
    Assessora emonitora conformidade da política de segurança em toda a empresa
  • 19.
    Melhora aconformidade com as normas do setor e exigências regulatórias (por exemplo PCI)
  • 20.
    Melhora acapacidade de integrar aplicativos críticos do negócio
  • 21.
    Teste econtrole automatizados durante todo o ciclo de vida do desenvolvimento, reduzindo os custos de segurança a longo prazo.Motivações e objetivosControle de acesso incorporado nas aplicações pode falhar
  • 22.
    Impacto no ciclode desenvolvimento da aplicação
  • 23.
    Limitação dos componentesdesenvolvido internamente
  • 24.
    Custo e prazode atualização dos componentes
  • 25.
    Modelo de autorizaçãorelativamente complicado
  • 26.
  • 27.
  • 28.
    Velocidade na colocaçãode novas aplicações
  • 29.
    Aumentar controle deacesso – Diminuir falhas
  • 30.
  • 31.
  • 32.
    Gerenciamento unificado daspolíticasCiclo de vida da aplicação
  • 33.
  • 34.
  • 35.
    Modelo de segurançaJEEA segurança das aplicações JEE é implementada usando papeis de segurança (Role)
  • 36.
    Os papeis desegurança são aplicados nos componentes Web e EJB métodos EJB ou URIs WebA Segurança pode ser especificada de 2 maneiras: Declarativa em tempo de configuração, através dos ‘deployment descriptors’ Programática utilizando as APIS padrões em tempo de desenvolvimentoA associação dos usuários e dos grupos com os papeis JEE é geralmente feito no momento da instalação da aplicação (deploy)ProcessoMétodoEJBBobPapel-PermissãoLigaçãoMétodoEJBAdministradorAnaMétodoEJBEnterprise Java BeanSolicitanteServletCorretoresjspgif,cssAtendenteSeguradosComponentesWebRole Segurança JEEUsuários/Grupos
  • 37.
    Modelo de autorizaçãobaseado em papelQuais papeis são permitidos?EJB: roles necessários dos métodos
  • 38.
    Servlet/jsp: roles necessáriosnas security constraintsAcessoautorizadoLista de papeisSIMAlgum igual?RequisiçãoautenticadaQuais papeis são atribuídos? Obter nome do usuário/grupo nos credenciais
  • 39.
    Obter os rolesatribuídos a esse usuário/grupo NÃOLista de papeisAcessonegado
  • 40.
    MapeamentoApplication Deployment DescriptorGrupo Mapeamento usuáriosUsuárioRecurso  Mapeamento RoleUsuárioUsuárioUsuárioUsuárioRoleMetodo EJBRoleGrupoURI WebGrupoUsuárioRole  Mapeamento PrincipalDefinido pelo programador da aplicaçãoDefinido pelo instalador da aplicação
  • 41.
    Mapeamento Processos (antigo-novo)CadastrarpapelRU2ETrustPapelRAPermissãoPapel RU456Cadastrar usuárioAssociar Papel RU ao usuário1Cadastrar permissão com descritor da aplicaçãoCadastrar papel RA e associar permissãoAssociar papel RA e papel RU3UsuárioGerenciadorLDAPsincronizaçãoColocar usuário no grupoRAD-Security EditorDeploy-scriptRole JEERecurso JEEGrupo RU
  • 42.
  • 43.
    Segurança EJB declarativaImplementaçãode segurança declarativa com AnnotationLista de annotations EJB@DeclareRoles@DenyAll@PermitAll@RolesAllowed@RunAs
  • 44.
    Segurança EJB declarativaImplementaçãode segurança declarativa com AnnotationRestrigir acesso ao EJB de sessão Donateimport javax.annotation.security.DeclareRoles;import javax.annotation.security.RolesAllowed;....@DeclareRoles( { "DMANAGERS_ROLE", "DUSERS_ROLE" })public class DonateBean implements DonateBeanInterface, ...... {@RolesAllowed( { "DMANAGERS_ROLE","DUSERS_ROLE" })public void donateToFund(Employee employee, Fund fund, int hours) .........@RolesAllowed( { "DMANAGERS_ROLE","DUSERS_ROLE" })public String donateToFund(int employeeId, String fundName, int hours) {
  • 45.
    Deployment descriptor EJBejb-jar.xml(diretório DonateEJB/ejbModule/META-INF) imediatamente antes do tag </ejb-jar.xml> <assembly-descriptor> <security-role> <role-name>DMANAGERS_ROLE</role-name> </security-role> <security-role> <role-name>DUSERS_ROLE</role-name> </security-role> <method-permission> <role-name>DUSERS_ROLE</role-name> <role-name>DMANAGERS_ROLE</role-name> <method> <ejb-name>DonateBean</ejb-name> <method-name>donateToFund</method-name> </method> </method-permission></assembly-descriptor>Utilizar o editor de Segurança do RAD para auxilioSegurança Web declarativaImplementação de segurança declarativa com AnnotationLista de annotations Web@DeclareRoles@RunAs
  • 46.
    Segurança WEBEditor desegurança do RAD: Restringir o acesso a páginas Web com segurança declarativa
  • 47.
    Informações de segurançaOeditor de segurança insere as seguintes informações no arquivo web.xml:A restrição de segurança <security-constraint> é o elemento base que contém:O elemento <web-resource-collection> define os privilegios de acesso a um conjunto de recursos. Este elemento pode especificar padrões de URL e métodos HTTP.
  • 48.
    O elemento <auth-constraint> define quais são os roles necessários para acessar esse conjunto de recursos Web.
  • 49.
    O elemento <security-role> declare os nomes dos roles utilizados nos elementos security-constraint.<security-constraint> <display-name>ALLAUTHENTICATED_ROLEConstraint</display-name> <web-resource-collection> <web-resource-name>ALLAUTHENTICATED_ROLECollection</web-resource-name> <url-pattern>/faces/FindEmployee.jsp</url-pattern> <url-pattern>/FindEmployee.faces</url-pattern> <url-pattern>/FindEmployee.jsp</url-pattern> <http-method>GET</http-method> <http-method>PUT</http-method> <http-method>HEAD</http-method> <http-method>TRACE</http-method> <http-method>POST</http-method> <http-method>DELETE</http-method> <http-method>OPTIONS</http-method> </web-resource-collection> <auth-constraint> <description>Auto generated Authorization Constraint</description> <role-name>ALLAUTHENTICATED_ROLE</role-name> </auth-constraint></security-constraint><security-role> <description> </description> <role-name>DUSERS_ROLE</role-name></security-role>web.xml
  • 50.
    Configurar roles doEAR e mapeamento de roles - 1Próximo slide
  • 51.
    Configurar roles doEAR e mapeamento de roles - 2
  • 52.
    Teste da segurançadeclarativa EJB com JUnit
  • 53.
    Código para segurançaSystem.setProperty("com.ibm.SSL.ConfigURL",propDir +"ssl.client.props");System.setProperty("java.security.auth.login.config", propDir +"wsjaas_client.conf");System.setProperty("com.ibm.CORBA.ConfigURL",propDir +"sas.client.props");Definir SSL, JAAS e SAS (Secure Authentication Services)Propriedades necessárias para acessar o servidorctx.lookup("");Conectar ao Contexto inicial para carregar o Realm default e carregar as informações necessárias ao Security ServerLoginContext lc = new LoginContext("WSLogin",new WSCallbackHandlerImpl("DNARMSTRONG", "xxxxxxxx"));lc.login();final Subject subject = lc.getSubject();System.out.println("subject=" + subject.toString());WSSubject.setRunAsSubject(subject);Criar o contexto do login, fazer o login, e colocar o usuário autenticado como o usuário default para este thread de execução
  • 54.
  • 55.
    Teste a segurançadeclarativa EJB com Universal Test Client (UTC)
  • 56.
    Teste da segurançadeclarativa WebMapeamento
  • 57.
    Teste da segurançadeclarativa Webcom o usuário DGADAMS
  • 58.
    Testar o acessocom o usuário DNARMSTRONG
  • 59.
    Implementar segurança programáticanuma página Web<h:outputTextvalue="ROLES: "/><h:outputTextvalue="EDITOR"rendered="#{rich:isUserInRole('EDITOR')}"/><h:outputTextvalue="LEITOR"rendered="#{rich:isUserInRole('LEITOR')}"/><h:outputTextvalue="DIRETOR"rendered="#{rich:isUserInRole('DIRETOR')}"/><h:outputTextvalue="GERENTE"rendered="#{rich:isUserInRole('GERENTE')}"/>
  • 60.