rodrigo cândido da silva. comentar os principais conceitos sobre segurança e demonstrar a...
TRANSCRIPT
Rodrigo Cândido da Silva
Comentar os principais conceitos sobre segurança e demonstrar a implementação de segurança da plataforma Java EE.
Segurança◦ Objetivos da Segurança◦ Princípios de Segurança◦ Algumas Soluções de Segurança
Plataforma Java EE JAAS
◦ Autenticação◦ Autorização◦ Utilização
Conclusões
“Um mecanismo de Segurança da Informação providencia meios para reduzir as vulnerabilidades existentes em um Sistema de Informação.”
Autenticação Autorização Auditoria Confidencialidade Integridade Disponibilidade Não Repudiação
Proteger os ativos; Garantir os princípios da segurança durante
todo o ciclo de vida da informação; Evitar que ameaças explorem as
vulnerabilidades; Evitar ou conter os ataques; Gerenciar e reduzir os riscos; Garantir a segurança da informação em
qualquer meio.
F DFonte de
InformaçãoDestino daInformação
Fluxo Normal
F D
Interrupção
F D
InterceptaçãoI
F D
Modificação
M
F D
Fabricação
F
IP Filtering Network Address Translation (NAT) IP Security (IPSec) SOCKS Secure Sockets Layer (SSL) Application Proxies Firewalls Secure Electronic Transactions (SET) …
Serviços oferecidos pelos containers:◦ Escalabilidade◦ Gestão de memória, ciclo de vida de objetos e estado de
objetos◦ Conexões, Transações, Serviço de nomes
◦Segurança◦ Tolerância a falhas◦ Integração◦ WebServices◦ Clustering◦ Alta disponibilidade ◦ Confiabilidade◦ …
Java Authentication and Authorization Service (JAAS); Mecanismo de Autenticação e Autorização de
Usuários, baseado em uma identidade e role(s) (perfil de acesso) associado(s);
Totalmente compatível com o padrão Java EE; Restringe 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;
Possibilita uma abordagem declarativa ou programática, dando a possibilidade de um desacoplamento entre segurança e regras de negócio.
Aplicação
Login Context
Login Modules – São “plugáveis” e não interferem nos algorítimos de negócio implementados...
LDAPLoginModule
DataBaseLoginModule
NTLoginModule
Active Directory MySQL NT Server
HTTP Basic Authentication
Form-Based Authentication
HTTPS Client Authentication
Digest Authentication
Passo 1 - Configurando o LoginModule
<!-- 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 – Definindo o Tipo de Autenticação
<!— 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 3 – Protegendo o Web Container
<!— 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> </auth-constraint>
</security-constraint>
Passo 4 – Protegendo o EJB Container
<!— EJB 3.0 - Via annotation (Java5 ou superior) Definição da classe-->@Stateless@DeclareRoles({"supervisor","gerente","operador"})public class FuncionarioServiceImpl implements FuncionarioService {
@RolesAllowed("supervisor")public void delete(Integer idFuncionario) {}
@RolesAllowed({"supervisor","gerente"})public void save(Funcionario funcionario) throws LimiteSalarioException { if ((!context.isCallerInRole("supervisor") && (funcionario.getSalario() > 10000.0d))){ throw new LimiteSalarioException("limite.salario.exception");}}
}
JAAS fornece uma estrutura simples, produtiva e integrada com a plataforma Java;
JAAS não implementa toda estrutura de segurança necessária à uma aplicação. Portanto, ele deve ser combinado com outros mecanismos (SSL, Firewalls, Proxies, etc).
?