Aspectos de Segurança Autenticação e Controle de Acesso Ricardo Cavalcanti [email protected] Jobson Ronan [email protected] Introdução Um sistema seguro garante que Segurança não é apenas TI Envolve controles físicos (portas e cadeados) Políticas de não compartilhamento de senha É difícil dizer se um sistema é seguro ou não Segurança de um sistema, na verdade, visa à segurança do sistema Nenhum evento danoso pode ocorrer com seus recursos (base de dados, processos etc.) Não pretende chegar num estado de segurança absoluta IMPORTANTE: não se empolgue desenvolvendo seus próprios sistemas de segurança. 2 Conceitos Fundamentais Autenticação Autorização Checar a os privilégios do Principal para o uso dos recursos Proteção à Integridade dos Dados Principal: a entidade autenticada Login e senha; assinatura digital; Prevenir ou pelo menos detectar modifição nos dados (i.e. através de um canal de comunicação) Proteção à confidencialidade dos Dados Prevenir divulgação imprópria da informação 3 Segurança em Webapps Autenticação: descrita no web.xml HTTP Básico e Disgest, Form-Based ou HTTPS Autorização Declarativa • <sercurity-constraint> no web.xml Programática • isUserInRole e getUserPrincipal Confidencialidade e Integridade De alto nível no web.xml 4 Segurança em EJB Resume-se a Autenticação e Autorização Até EJB 1.1 não havia uma maneira portável de Autenticação Desde EJB 2.0 é possível utilizar a API JAAS – Java Authentication and Authorization Service Controle de acesso Através de security policies Programática ou declarativa 5 JAAS – Visão geral Permite autenticação e autorização de usuários em java Permite o log on de usuários no sistema sem distinção do sistema de segurança de baixo nível A implementação (i.e. do servidor de aplicação)determina se suas credenciais são autênticas O suporte a sistemas de segurança mais avançados depende do servidor Independentemente, não altera o código da aplicação 6 Candidatos à utilização de JAAS Uma aplicação stand alone que faz acesso a um EJB, cujo usuário deve prover credenciais ao sistema. Uma aplicação web na qual o usuário fornece as credenciais através de HTTP Básico e Disgest, Form-Based, HTTPS ou um Certificado Uma vez autenticado através de JAAS o cliente pode fazer chamadas aos métodos seguramente 7 Autenticação com JAAS Cliente (programador) Rede Servidor J2EE 1:new() 7:login() LoginContext (container) 5:new() 2:getConfiguration() 3:getAppConfigurationEntry() 4:return a list of loginModules () Configuration (container) 6:inicialize() 8:login() 9:commit() Um ou mais LoginModule (programador) Subject (container) Config File (programador) 10:add Credentials 8 Autorização com JAAS Após a autenticação, o cliente necessita se autorizar para ter acesso aos métodos do bean Pode ser declarativa ou programática É necessário definir security roles Apenas Declarativamente Papeis que relacionam permissões de operações e usuários 9 Secutiry Roles As permissões de executar operações são associadas a roles. Papéis desempenhados por usuários Um usuário vinculado a uma role recebe todas as permissões atribuídas a esta role. 10 Autorização Programática Escrever lógica de segurança 1. Métodos isCallerInRole e getCallerPrincipal a partir do EJBContext Declarar as Security Roles abstratas que o bean irá utilizar 2. No Deployment descriptor <security-role-ref> e <role-name> dentro do nó do bean. Mapear Abstract Roles em Actual Roles 3. O deployer deve definir os nomes reais dos Roles <role-link> dentro do nó do bean e <security-role> dentro de <assembly-descriptor> 11 Autorização declarativa 1. Declare as permissões dos métodos 2. Declare as Security Roles 3. Dentro de <assembly-descriptor> Semelhante ao método Programático Mapear Abstract Roles em Actual Roles Semelhante ao método Programático 12 Exemplo ... <assembly-descriptor> <method-permission> <role-name>administrators</role-name> <method> <ejb-name>BankEJB</ejb-name> <method-name>*</method-name> </method> </method-permission> <method-permission> <role-name>managers</role-name> <method> <ejb-name>BankEJB</ejb-name> <method-name>changeAccount</method-name> <method-params>String</method-params> </method> </method-permission> <security-role> <role-name>managers</role-name> </security-role> </assembly-descriptor> ... </ejb-jar> 13 Propagação da segurança A identidade do Principal é propagada por todos os beans <entity> (...) <security-identity> <use-caller-identity /> <security-identity> </entity> A identidade do cliente é ignorada e outra é propagada <security-identity> <run-as> <role-name>admin</role-name> </run-as> <security-identity> 14 Declarativa ou Programática? Declarativa Vantagem: Simplicidade e menor acoplamento Desvantagem: menor controle Programática Quando maior controle é necessário Instance level Authorization: saegurança ligada à regra de negócio 15