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
Download

j2ee_pcc_10_seguranca