sistemas distribuídos - aspectos de segurança em sistemas distribuídos e jaas

Post on 08-Jun-2015

3.319 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Aspectos de Segurança

Prof. Adriano Teixeira de Souza

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

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

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

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

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

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

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

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

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

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

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

Autenticação

Prof. Adriano Teixeira de Souza

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

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

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

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

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

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

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

Visualizando possibilidades …

Prof. Adriano Teixeira de Souza

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>

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>

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>

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>

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>

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;

... }

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() {

... }

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) {

... }

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");

} }

top related