2. 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
3. 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
4. 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
5. 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
6. 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
7. 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
8. 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
9. 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
10. 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
11. 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
12. 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
13. Autenticação
Prof. Adriano Teixeira de Souza
14. 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
15. 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
16. 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
17. 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
18. 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
19. 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
20. 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
21. Visualizando possibilidades …
Prof. Adriano Teixeira de Souza
22. Passo 1 - Configurando o Módulo de Autenticação
<!--
Exemplo: File Login Module
Arquivo: %JBOSS_HOME%serverdefaultconflogin-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>
Prof. Adriano Teixeira de Souza
23. Passo 2 – Protegendo Web Container
<!—
Define Formulário de login (login-config).
Arquivo: WEB-INFweb.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>
Prof. Adriano Teixeira de Souza
24. Passo 2 – Protegendo Web Container
<!—
Define a constraint de seguranca para as actions do sistema.
Arquivo: WEB-INFweb.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>
Prof. Adriano Teixeira de Souza
25. Passo 2 – Protegendo Web Container
<!—
Define os Roles do sistema.
Arquivo: WEB-INFweb.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>
Prof. Adriano Teixeira de Souza
26. Passo 2 – Protegendo Web Container
<!—
Arquivo de Configuração do JBoss.
Arquivo: WEB-INFjboss-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>
Prof. Adriano Teixeira de Souza
27. Passo 3 – Protegendo EJB Container
<!—
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;
...
}
Prof. Adriano Teixeira de Souza
28. Passo 3 – Protegendo EJB Container
<!—
@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() {
...
}
Prof. Adriano Teixeira de Souza
29. Passo 3 – Protegendo EJB Container
<!—
@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) {
...
}
Prof. Adriano Teixeira de Souza
30. Passo 3 – Protegendo EJB Container
<!—
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");
}
}
Prof. Adriano Teixeira de Souza