A tecnologia de segurança Java inclui um grande conjunto de ferramentas, APIs, protocolos e mecanismos de segurança. Incluem criptografia, infraestrutura de chave pública, comunicação, autenticação e controle de acesso. Tanta é a riqueza que para descrever o uso de cada uma delas tornaria o artigo mais extenso.
Qualquer fraude que resulte em perda de dados pessoais (endereço, senhas, informações bancárias e outros) é um problema sério de segurança de aplicação.
Acesso não autorizado de informação pessoal que é sigilosa e restrita a pessoas tem com intenção prejudicar ou enriquecer alguma das partes.
Discutir sobre esse assunto é importante para refletir questões que somente tomamos conhecimento quando estão sendo abordados em mídias (televisão e jornais) e que ficamos preocupado depois do fato ter acontecido.
Por que preciso me preocupar com aplicações seguras?
Alguns dos motivos para se preocupar com segurança de aplicações Web:
• 75% dos ataques acontecem na camada de aplicação (Gartner)
• 90% dos sites estão vulneráveis a ataques (Watchfire)
• 80% das organizações irão experimentar um incidente de segurança (Gartner)
• Dados de clientes, cartões e outros podem ser obtidos em alguns ataques
• Roubo de identidade
• Violação de privacidade
• Sua empresa e seu cliente podem ter a imagem desgastada e alto prejuízo financeiro
Muitas vezes, as aplicações permitem ataques por falta de conhecimento e mau uso da tecnologia no desenvolvimento do software. Mesmo com a existência de um firewall, é necessário que os desenvolvedores de TI se preocupem com detalhes de segurança para não permitir esse tipo de falha.
Segurança Java e vulnerabilidades em aplicações Web:
1. X-Site scripting
2. Injection Flaws
3. Insecure Direct Object Reference
4. Malicious File Execution
5. Cross Site Request Forgery (CSRF)
6. Armazenamento Criptográfico Inseguro
7. Comunicação insegura
8. Tratamento de Erros inapropriados
9. Falha de restrição de Acesso a URLs.
Não é tão incomum quanto parece encontrar aplicações com falhas básicas de segurança, como armazenamento de senhas em banco de dados sem criptografia. Mesmo que seja de conhecimento geral que nenhum sistema seja 100% seguro, é possível minimizar os riscos e aumentar o nível de segurança nas aplicações Java.
Para a alegria dos desenvolvedores que trabalham com a linguagem da Oracle, há um grande número de ferramentas e APIs, diminuindo muito o número de ataques quando bem utilizadas.
Ferramentas e bibliotecas podem dificultar o acesso do possível atacante
Funcionalidade: Plataforma
Objetivo: Construir funcionalidade de segurança na linguagem no compilador e na máquina virtual (Tipagem de dados forte, gerênciamento automático de memória, verificacação do bytecode)
Benefício: Provém uma plataforma confiável e segura para desenvolver e executar aplicações.
API/Ferramenta: A especificação da linguagem Java
Funcionalidade: Criptografia
Objetivo: Suporte aos algoritmos padrões incluindo RSA, DAS, AES, Triple DES, SHA, PKCS#5, RC2 e RC4. Suporte ao token PKCS#11
Benefício: Implementação do algoritmo independente
API/Ferramenta: JCA e JCE
Funcionalidade: Autenticação e controle de acesso
Objetivo: Abstrai APIs de autenticação que podem ser incorporadas em mecanismos de “login” em uma arquitetura “plugável”. Uma API de política e permissões que permitem o desenvolvedor criar e ao administrador gerenciar acesso a aplicação.
Benefício: Permite autenticação single sing-on
API/Ferramenta: Java Security Architecture, Java Authentication and Authorization Service (JAAS), Policy Implementation and Syntax e Signature Timestamp Support
A autenticação é o processo para determinar a identidade do usuário. Em Java, podemos realizar esse processo por configuração do servidor de aplicação.
Na Figura 1 podemos observar o processo de autenticação do usuário por senha, porém somente o “login” na aplicação não é suficiente para o nível de segurança.
O acesso a cada página ou URL da aplicação deve conter um perfil associado, o qual poderá ou não acessá-lo.
Outro ponto: Sempre verificar se a sessão inicializada no “login” da aplicação continua válido. Definir um tempo máximo para invalidar a sessão é um processo importante, pois o usuário pode deixar a aplicação em execução e não realizar nenhuma operação. Quando esse tempo, definido em configuração da aplicação, acontecer, automaticamente o usuário deverá ser obrigado a realizar o “login” na aplicação.
Invalidar a sessão no momento de realizar uma saída “logout” na aplicação é obrigatório, além de beneficiar o servidor de aplicação realizando uma limpeza dos objetos que estavam armazenados na sessão do usuário.
Funcionalidade: Segurança de comunicação
Objetivo: APIs e implementações para os seguintes padrões de protocolo de comunicação de segurança: TLS, SSL, Kerberos e SASL. Completo suporte para HTTPS sobre SSL/TLS também está incluso.
Benefício: Autentica pontos sobre redes inseguras e protege a integridade dos dados transmitidos
API/Ferramenta: JSSE, Java GSS-API e Java SASL APIFuncionalidade: Chave pública (PKI)
Objetivo: Ferramenta para gerenciar certificado e chaves, com suporte para os seguintes algoritmos (CRLs) X.509, PKIX, OCSP, PKCS#11, PKCS#12, LDAP e java.util.Collection
Benefício: Facilita o desenvolvimento da complexidade de PKI.
API/Ferramenta: X.509, Java CertPath API, On-Line Certificate Status Protocol e Java PKCS#11
Escrever aplicações utilizando segurança permite ao desenvolvedor implementar sistemas mais seguros, assim como a administradores gerenciá-las, restringindo acessos e autorizações ao sistema.
Levando em consideração esses aspectos discutidos no artigo, é inevitável de entrega e a utilização de uma aplicação mais segura.
Questione:
- Qual cliente gostaria de que informações bancarias, CPF ou endereço fosse de conhecimento por pessoas não autorizadas?
- O site que você está realizando compras on-line, armazena informação de seu cartão de crédito?
- Quem garante que essa informação não está criptografada?
- Será que um funcionário da empresa, sem boas intenções, não poderia utilizar de seu cartão para realizar uma compra?
Para acompanhar mais conteúdos como este, assine nossa newsletter: