Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS

30
Aspectos de Segurança Prof. Adriano Teixeira de Souza

Transcript of Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS

Page 1: Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS

Aspectos de Segurança

Prof. Adriano Teixeira de Souza

Page 2: Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS

A maioria é causada pelo ser humano e intencional

Inicialmente os hackers eram adolescentes ou estudantes que participavam de um jogo

Atualmente as falhas de segurança podem representar grandes prejuízos para as empresas

Os hackers tornaram-se prossionais

Proteger os dados corporativos torna-se questão de sobrevivência para as empresas

Prof. Adriano Teixeira de Souza

Page 3: Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS

Transmissão/Armazenamento seguro de informação ◦ Uso de Criptografia

Recentes ◦ Impedimento de acesso (denial of service attack)

Ataque massivo sobre servidores

◦ Segurança em Código Móvel

Como confiar em código vindo do exterior?

Afetar consistência, desempenho, disponibilidade, etc.

Prof. Adriano Teixeira de Souza

Page 4: Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS

Os princípios básicos de segurança em sistemas de comunicação compreendem:

◦ Confidencialidade - tem por objetivo proteger a informação intercambiada prevenindo-a de acessos não autorizados;

◦ Integridade - deve garantir a veracidade da informação protegendo-a de modicações não autorizadas;

◦ Autenticidade - visa garantir a identidade dos parceiros do intercâmbio através da autenticação dos usuários;

◦ Disponibilidade - objetiva prevenir interrupções na operação da rede garantindo a disponibilidade do uso da informação.

Prof. Adriano Teixeira de Souza

Page 5: Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS

Os usuários estão interconectados com as suas aplicações distribuídas através de redes abertas não-conáveis que podem ser compartilhadas por outros usuários, os quais não estão autorizados a acessar determinados sistemas. Assim sendo é necessário identicar e autenticar o usuário que solicitar conexão ao sistema bem como vericar se ele possui autorização para acessar os recursos solicitados.

A identicação é o processo inicial para vericar se esse usuário está cadastrado ao sistema; normalmente essa identificação é realizada através de um user-id.

Prof. Adriano Teixeira de Souza

Page 6: Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS

A autenticação é a etapa seguinte na qual o usuário deverá provar sua identidade. Antigamente este processo era sinônimo de password, porém atualmente podemos classificar os métodos de autenticação do usuário em três categorias:

◦ Algo que o usuário conheça - o sistema indaga por uma informação que o usuário tenha conhecimento, sendo o caso típico da password;

◦ Algo que o usuário possua - o sistema solicita a apresentação de algo físico que o usuário tenha, podendo ser desde um simples cartão magnético até sofisticados dispositivos eletrônicos;

◦ Algo que o usuário seja - esta categoria está relacionada como os sistemas biométricos que são métodos automatizados para vericar a identidade de uma pessoa, baseando-se em alguma característica fisiológica ou comportamental.

Prof. Adriano Teixeira de Souza

Page 7: Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS

Vulnerabilidade ◦ São erros no projeto ou configuração dos Sistemas Computacionais

que podem ser exploradas para se produzir falhas intencionais ou não.

Ataque ◦ São investidas contra os Sistemas Computacionais para explorar as

suas vulnerabilidades e causar falhas intencionais.

◦ Podem assumir varias formas: destruição, modificação, roubo, revelação da informação ou interrupção de serviços.

Prof. Adriano Teixeira de Souza

Page 8: Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS

Ataque ◦ Personificação: uma entidade faz-se passar por outra.

◦ Replay: uma mensagem, ou parte dela, é capturada, armazenada e posteriormente retransmitida.

◦ Modificação: o conteúdo de uma mensagem é alterado.

◦ Recusa ou Impedimento de Serviço: interrupção de algum serviço (geração de mensagens em grande quantidade).

◦ Ataques Internos: um usuário executa uma operação não autorizada para o mesmo.

◦ Armadilhas (trapdoor): uma entidade legitima é substituída por outra alterada.

Prof. Adriano Teixeira de Souza

Page 9: Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS

Ataque (continuação)

◦ Cavalos de Tróia: entidade falsa produz o mesmo serviço que a legitima com o intuito de se camuar e executa uma operação adicional não autorizada.

◦ Spoofing: interceptação da comunicação entre dois hosts por um host não autorizado.

Prof. Adriano Teixeira de Souza

Page 10: Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS

Ataque (continuação)

◦ Snifing: usa o principio da propagação da mensagem através do meio físico para “ouvir" todos as mensagens que nele trafegar. Normalmente este tipo de ataque é usado na preparação de outros ataques.

Prof. Adriano Teixeira de Souza

Page 11: Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS

Regras e práticas para proteger informações e recursos.

◦ Nível de sensibilidade da informação (o quê?, quem?).

◦ Identidade do usuário.

Política dos 4P

◦ Paranóica: tudo é negado.

◦ Prudente: tudo é proibido exceto o que for explicitamente permitido.

◦ Permissiva: tudo é permitido exceto o que for explicitamente proibido.

◦ Promiscua: tudo é permitido.

Prof. Adriano Teixeira de Souza

Page 12: Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS

Autenticidade: garantir-se que um usuário é realmente quem se diz ser e as ações a ele atribuídas tenham sido realmente de sua autoria.

Confidencialidade: usuários autorizados tenham acesso as informações devidas e ninguém mais.

Integridade: garante que um documento autentico não foi alterando acidentalmente ou intencionalmente ou que esteja sendo reutilizado sem que seja percebido.

Disponibilidade: continuidade dos seus serviços acessíveis aos usuários autorizados.

Prof. Adriano Teixeira de Souza

Page 13: Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS

Autenticação

Prof. Adriano Teixeira de Souza

Page 14: Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS

Controle de Acesso

◦ Access Control List: lista com a identicação do usuário ou processo e suas permissões para cada objeto.

◦ Capabilities: lista para cada usuário ou processo com a identicação do objeto e suas permissões.

◦ Access Control Matriz: é uma matriz onde as linhas são compostas pelos usuários, as colunas por objetos e os elementos são listas de permissões (Capability X ACL).

Prof. Adriano Teixeira de Souza

Page 15: Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS

Criptografia: transformar um texto em claro em um texto criptografado através de um método de criptografia.

O método de criptografia é confiável e seguro quando ele é de

domínio público ◦ Criptograa Simétrica: a chave utilizada para criptografar um texto é a

mesma para descriptografa-lo.

DES (Data Encryption Standard)

◦ Criptografia Assimétrica: a chave para criptografar uma mensagem é diferente da chave para descriptografa-la.

RSA (Rivest, Shamir e Adleman)

Outros métodos e padrões (Assinatura digital, Messages Digests - MD5, etc.)

Prof. Adriano Teixeira de Souza

Page 16: Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS

Ao desenvolver um aplicativo “seguro”, devemos considerar:

◦ Criação/Configuração de um repositório de usuários;

◦ Tela para capturar login/senha usuário;

◦ Funcionalidade que efetua a validação do login/senha no repositório;

◦ Funcionalidade que verifica se usuário tem permissão de acesso ao recurso solicitado;

◦ Em caso de falta de permissão ou login/senha inválido, exibe uma mensagem/exception ao usuário.

Prof. Adriano Teixeira de Souza

Page 17: Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS

Podemos utilizar os seguintes níveis de segurança: ◦ Sem segurança: sistema totalmente aberto, não requer um

usuário válido;

◦ Nível básico: o usuário precisa informar login e senha, porém o sistema não tem criptografia;

◦ Nível intermediário: as informações login e senha são criptografadas, porém o restante não;

◦ Nível avançado: tudo é criptografado com chaves;

◦ Nível máximo: tudo é criptografado e o usuário “prova” sua identidade através de um certificado digital;

Prof. Adriano Teixeira de Souza

Page 18: Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS

JEE suportada todos os níveis e permite o desenvolvimento de aplicativos seguros através de:

◦ Segurança programada: o código é totalmente responsável por toda a segurança;

◦ Segurança declarada: delegamos o controle de segurança para o container;

◦ Segurança mista: declaramos o básico, programamos o avançado;

Prof. Adriano Teixeira de Souza

Page 19: Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS

Java Authentication and Authorization Service.

Consiste no mecanismo de Autenticação e Autorização de Usuários, baseado em uma identidade e role(s) (perfil de acesso) associado(s).

Utilizando JAAS podemos restringir o acesso a uma aplicação Java, limitando acesso a uma url, método de um componente EJB ou Conteúdo de uma tela do usuário.

O mecanismo possibilita uma abordagem declarativa ou programática, dando a possibilidade de um desacoplamento entre segurança e regras de negócio.

Prof. Adriano Teixeira de Souza

Page 20: Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS

Totalmente compatível com o padrão JEE, ou seja, sua aplicação será portável em qualquer servidor Java EE.

É baseado em módulos de autenticação, que implementam uma API padrão e disponibilizam soluções compatíveis com diferentes repositórios.

Exemplo: Banco de Dados, Servidores LDAP, Arquivos XML, Domains Servers (Ex. NT), etc.

Prof. Adriano Teixeira de Souza

Page 21: Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS

Visualizando possibilidades …

Prof. Adriano Teixeira de Souza

Page 22: Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS

Passo 1 - Configurando o Módulo de Autenticação

Prof. Adriano Teixeira de Souza

<!--

Exemplo: File Login Module

Arquivo: %JBOSS_HOME%\server\default\conf\login-config.xml

-->

<application-policy name="exemplojaas">

<authentication>

<login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule" flag="required">

<module-option name="usersProperties">props/exemplo-jaas-users.properties</module-option>

<module-option name="rolesProperties">props/exemplo-jaas-roles.properties</module-option>

</login-module>

</authentication> </application-policy>

Page 23: Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS

Passo 2 – Protegendo Web Container

Prof. Adriano Teixeira de Souza

<!—

Define Formulário de login (login-config).

Arquivo: WEB-INF\web.xml

-->

<login-config>

<auth-method>FORM</auth-method>

<realm-name>ExemploJAAS</realm-name>

<form-login-config>

<form-login-page>/loginpage.do</form-login-page>

<form-error-page>/loginfail.do</form-error-page>

</form-login-config> </login-config>

Page 24: Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS

Passo 2 – Protegendo Web Container

Prof. Adriano Teixeira de Souza

<!—

Define a constraint de seguranca para as actions do sistema.

Arquivo: WEB-INF\web.xml

-->

<security-constraint>

<web-resource-collection>

<web-resource-name>ExemploJAAS</web-resource-name>

<description>Mapeamento da acoes do sistema</description>

<url-pattern>/homepage.do</url-pattern>

<url-pattern>/funcionario.do</url-pattern>

</web-resource-collection>

<auth-constraint>

<role-name>supervisor</role-name>

<role-name>gerente</role-name>

<role-name>operador</role-name>

</auth-constraint> </security-constraint>

Page 25: Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS

Passo 2 – Protegendo Web Container

Prof. Adriano Teixeira de Souza

<!—

Define os Roles do sistema.

Arquivo: WEB-INF\web.xml

-->

<security-role>

<description>Perfil Supervisor</description>

<role-name>supervisor</role-name>

</security-role>

<security-role>

<description>Perfil Gerente</description>

<role-name>gerente</role-name>

</security-role>

<security-role>

<description>Perfil Operador</description>

<role-name>operador</role-name> </security-role>

Page 26: Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS

Passo 2 – Protegendo Web Container

Prof. Adriano Teixeira de Souza

<!—

Arquivo de Configuração do JBoss.

Arquivo: WEB-INF\jboss-web.xml

-->

<jboss-web>

<security-domain>java:/jaas/exemplojaas</security-domain>

<context-root>/ExemploJAASWeb</context-root>

<use-session-cookies>true</use-session-cookies> </jboss-web>

Page 27: Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS

Passo 3 – Protegendo EJB Container

Prof. Adriano Teixeira de Souza

<!—

EJB 3.0 - Via annotation (Java5 ou superior)

Definição da classe

-->

@Stateless

@DeclareRoles({"supervisor","gerente","operador"})

public class FuncionarioServiceImpl implements FuncionarioService {

@Resource

private SessionContext context;

... }

Page 28: Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS

Passo 3 – Protegendo EJB Container

Prof. Adriano Teixeira de Souza

<!—

@PermitAll

Todos os usuários válidos para o EJB tem acesso ao método.

Exemplo: "supervisor","gerente” e "operador"

-->

@PermitAll

public List<Funcionario> listAll() {

... }

Page 29: Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS

Passo 3 – Protegendo EJB Container

Prof. Adriano Teixeira de Souza

<!—

@RolesAllowed

Somente usuários definidos na assinatura do método.

-->

@RolesAllowed({"supervisor","gerente"})

public void save(Funcionario funcionario) throws LimiteSalarioException {

...

}

@RolesAllowed("supervisor")

public void delete(Integer idFuncionario) {

... }

Page 30: Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS

Passo 3 – Protegendo EJB Container

Prof. Adriano Teixeira de Souza

<!—

Segurança Programática.

Exemplo: Somente o supervisor pode definir um salário acima de R$ 10.000,00

-->

@RolesAllowed({"supervisor","gerente"})

public void save(Funcionario funcionario) throws LimiteSalarioException {

if ((!context.isCallerInRole("supervisor") &&

(funcionario.getSalario() > 10000.0d))){

throw new LimiteSalarioException("limite.salario.exception");

} }