Aspectos de Segurança Autenticação e Controle de Acesso Ricardo Cavalcanti Jobson Ronan
2 Introdução Um sistema seguro garante que Nenhum evento danoso pode ocorrer com seus recursos (base de dados, processos etc.) 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 Não pretende chegar num estado de segurança absoluta IMPORTANTE: não se empolgue desenvolvendo seus próprios sistemas de segurança.
3 Conceitos Fundamentais Autenticação Principal: a entidade autenticada Login e senha; assinatura digital; Autorização Checar a os privilégios do Principal para o uso dos recursos Proteção à Integridade dos Dados 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
4 Segurança em Webapps Autenticação: descrita no web.xml HTTP Básico e Disgest, Form-Based ou HTTPS Autorização Declarativa no web.xml Programática isUserInRole e getUserPrincipal Confidencialidade e Integridade De alto nível no web.xml
5 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
6 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
7 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
8 Rede Autenticação com JAAS Cliente (programador) Servidor J2EE LoginContext (container) Configuration (container) Subject (container) Config File (programador) Um ou mais LoginModule (programador) 1:new() 7:login() 5:new() 6:inicialize() 8:login() 9:commit() 10:add Credentials 2:getConfiguration() 3:getAppConfigurationEntry() 4:return a list of loginModules ()
9 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
10 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.
11 Autorização Programática 1. Escrever lógica de segurança Métodos isCallerInRole e getCallerPrincipal a partir do EJBContext 2. Declarar as Security Roles abstratas que o bean irá utilizar No Deployment descriptor e dentro do nó do bean. 3. Mapear Abstract Roles em Actual Roles O deployer deve definir os nomes reais dos Roles dentro do nó do bean e dentro de
12 Autorização declarativa 1. Declare as permissões dos métodos Dentro de 2. Declare as Security Roles Semelhante ao método Programático 3. Mapear Abstract Roles em Actual Roles Semelhante ao método Programático
13 Exemplo... administrators BankEJB * managers BankEJB changeAccount String managers...
14 Propagação da segurança A identidade do Principal é propagada por todos os beans A identidade do cliente é ignorada e outra é propagada (...) admin
15 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