150 likes | 253 Views
Aspectos de Segurança. Autenticação e Controle de Acesso. Ricardo Cavalcanti roc3@cin.ufpe.br. Jobson Ronan jrjs@cin.ufpe.br. 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
E N D
Aspectos de Segurança Autenticação e Controle de Acesso Ricardo Cavalcanti roc3@cin.ufpe.br Jobson Ronan jrjs@cin.ufpe.br
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.
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
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
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
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
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
Autenticação com JAAS Servidor J2EE Rede Cliente (programador) 1:new() 2:getConfiguration() 7:login() 3:getAppConfigurationEntry() LoginContext (container) Configuration (container) 4:return a list of loginModules () 5:new() 6:inicialize() 8:login() 9:commit() Um ou mais LoginModule (programador) Subject (container) Config File (programador) 10:add Credentials
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
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.
Autorização Programática • Escrever lógica de segurança • Métodos isCallerInRole e getCallerPrincipal a partir do EJBContext • Declarar as Security Roles abstratas que o bean irá utilizar • No Deployment descriptor <security-role-ref> e <role-name> dentro do nó do bean. • Mapear Abstract Roles em Actual Roles • O deployer deve definir os nomes reais dos Roles • <role-link> dentro do nó do bean e <security-role> dentro de <assembly-descriptor>
Autorização declarativa • Declare as permissões dos métodos • Dentro de <assembly-descriptor> • Declare as Security Roles • Semelhante ao método Programático • Mapear Abstract Roles em Actual Roles • Semelhante ao método Programático
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>
Propagação da segurança • A identidade do Principal é propagada por todos os beans • A identidade do cliente é ignorada e outra é propagada <entity> (...) <security-identity> <use-caller-identity /> <security-identity> </entity> <security-identity> <run-as> <role-name>admin</role-name> </run-as> <security-identity>
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