Seções iMasters
Redes e Servidores

Plano de Vulnerabilidades para aplicações web em nível de aplicação

Uma solução segura é aquela que identifica todas as suas possíveis vulnerabilidades, implementando mecanismos que tenham o objetivo de reduzir qualquer tipo de danos caso ela seja vítima de um ataque. As vulnerabilidades estão espalhadas em todas as camadas da solução Rede, Servidores e Aplicação:

  • Rede: roteadores, firewall e switch.
  • Servidores: HTTP, Componentes Web, Componentes de Negócio e SGDB.
  • Aplicação: entrada de dados, autenticação, autorização, configurações, acesso a dados, manipulação de parâmetros, exceções e auditoria.

Qualquer fraqueza em qualquer ponto da solução pode ser explorada por um atacante. Dentro desse assunto, eu gostaria de publicar meu Plano de Vulnerabilidades para aplicações web em nível de aplicação.

Ou seja, é o levantamento resumido da maioria das possíveis vulnerabilidades que arquitetos, projetistas e programadores devem estar cientes no momento de construir suas aplicações. As camadas de rede e de servidores são de responsabilidade de infra, ficando fora do escopo deste artigo.

Cada vulnerabilidade de aplicação está classificada de acordo sua aplicabilidade, na qual eu apresento uma breve descrição e as possíveis soluções adotadas.

Para um melhor entendimento, retirei qualquer detalhe de tecnologia/framework, fazendo com que o leitor possa facilmente entender e, assim, tomar medidas cabíveis dentro do seu próprio projeto.

O objetivo desse plano é ser usado como um pente fino, no qual qualquer desenvolvedor possa sistematicamente refinar sua solução antes de colocá-la em produção.

Entrada de dados

Ataque: Buffer Overflow.

  • Descrição: Consiste no atacante explorar o sistema de entrada de informações do sistema enviando dados maliciosos.
  • Solução: Usar uma política de validação sistemática relacionado com: tipo de dados, tamanho, formato e intervalo.


Ataque:
 XSS Script.

  • Descrição: Consiste no atacante explorar o sistema de entrada de informações do sistema enviando comandos maliciosos em: DHTML e JavaScript para serem executados nos navegadores.
  • Solução: Usar uma política de validação sistemática relacionada com: tipo de dados, tamanho, formato, intervalo e para informações de natureza texto puras validar e rejeitar códigos maliciosos. Defina sua White List.

Ataque: XSS Script.

  • Descrição: Consiste no atacante explorar o sistema de entrada de informações do
    sistema enviando comandos maliciosos em: DHTML e JavaScript para serem
    executados nos navegadores.
  • Solução: Todos os dados de sistema ou do banco de dados devem ser interpretados e
    renderizados nas páginas como texto e não como tecnologias de
    apresentação.

Ataque: SQL Injection.

  • Descrição: Consiste no atacante explorar o sistema de entrada de informações do sistema enviando comandos SQL maliciosos.
  • Solução: Utilizar somente comandos SQL pré-compilados na camada de persistência.

Ataque: JavaScript Off.

  • Descrição: Consiste no atacante desviar das validações na camada de visão, desligando JavaScript durante as requisições.
  • Solução: As validações podem ser feitas na maquina do cliente (navegador), mas
    devem ser replicadas ou somente centralizadas na camada visão ou de
    negócio da aplicação. Nunca confie nos dados enviados pelo cliente ou naqueles dentro do protocolo HTTP.

Autenticação

Ataque: Brute Force.

  • Descrição: Consiste no atacante utilizar recursos automatizados para descobrir
    senhas de usuários. O atacante usa uma base de senhas pré-configuradas.
  • Solução: Política de senhas fortes e bloquear logicamente o usuário após exceder o numero limite de tentativas.

Ataque: Dictionary.

  • Descrição: Política de senhas fortes – que consiste no atacante utilizar recursos automatizados para descobrir
    senhas de usuários. O atacante usa uma base de informações previamente
    configuradas de acordo com o perfil do usuário, juntamente com algum
    algoritmo computacional que gera combinações variáveis de tentativas.
  • Solução: Bloquear logicamente o usuário após exceder o numero limite de tentativas.

Ataque: Session Hijacking.

  • Descrição: Consiste no atacante, de posse de determinadas ferramentas, sequestrar o identificador de sessão do usuário durante o trafico HTTP.
  • Solução: Usar canal criptografado HTTPS, disponibilizar nas aplicações mecanismos para que o usuário autenticado
    possa terminar a sessão, colocando neles o habito de usar, além de reduzir ao máximo o tempo de duração da sessão.

Ataque: Session Replay.

  • Descrição: Consiste no atacante conseguir de alguma forma (vírus, trojan, horse ou
    worms) o identificador da sessão do usuário autenticado. O vírus
    instalado no PC do usuário autenticado envia o identificador para o
    atacante que está fora da rede do usuário vítima.
  • Solução: O sistema deve vincular a sessão do usuário autenticado com o seu IP origem e verificar a cada requisição HTTP.

Ataque: Session Replay.

  • Descrição: Consiste no atacante conseguir de alguma forma (vírus, trojan, horse ou
    worms) o identificador da sessão do usuário autenticado. O vírus
    instalado no PC do usuário autenticado envia o identificador para o
    atacante que está dentro da rede do usuário vítima.
  • Solução: O sistema deve requisitar uma senha de identificação (a mesma de senha
    de login ou outra senha de operação, podendo ser um cartão de senhas ou
    token randômicos) a cada operação crítica de negócio.

Ataque: Key Logger.

  • Descrição: Consiste no atacante conseguir de alguma forma (vírus, trojan, horse ou
    worms) a senha do usuário autenticado. O vírus instalado no PC do
    usuário intercepta todas as teclas pressionadas no teclando durante a
    utilização do sistema.
  • Solução: O sistema deve requisitar a senha de autenticação de forma que não use o teclado, oferecendo um teclado virtual.

Ataque: Mouse Logger.

  • Descrição: Consiste no atacante conseguir de alguma forma (vírus, trojan, horse ou
    worms) a senha do usuário autenticado. O vírus instalado no PC do
    usuário intercepta e copia os pedaços das áreas visuais pressionadas
    pelo mouse.
  • Solução: O teclado virtual oferecido pelo sistema deve ser embaralhado a cada
    acesso, e as informações do teclado virtual (letras, números ou qualquer
    caracteres) oferecidas pelo sistema devem ser apagadas quando o usuário
    passar mouse sobre elas.

Autorização

Ataque: Disclouse of Confidential Data e Data Tampering.

  • Descrição: Consiste no atacante sendo um usuário autenticado ou não ter acesso a recursos, processos ou informações restritas.
  • Solução: Fazer a validação de perfil de acesso no momento que cada recurso,
    processo ou informações for requisitado. Opcionalmente, pode também
    ser inibido o mecanismo de acesso (links, menus, botões, etc), que faz a
    ponte de invocação e execução.


Ataque: Worflow Undue.

  • Descrição: Consiste no usuário furar uma sequência de páginas pertencente a um workflow de negócio através de bookmark.
  • Solução: Usar o padrão Syncronized Token para controlar todos os workflows existentes na aplicação.


Ataque: Overlapping Transaction.

  • Descrição: Consiste no usuário sobrepor informações de outro usuário indevidamente.
  • Solução: Identificar e aplicar a abordagem de Optimistic lock nestas transações.

Acesso aos dados

Ataque: Data Tampering.

  • Descrição: Consiste no atacante, de posse de determinadas ferramentas, alterar as informações dentro dos pacotes durante o trafegado HTTP.
  • Solução: Usar canal criptografado HTTPS.

Manipulação de parâmetros

Ataque: Query String Manipulation.

  • Descrição: Consiste no atacante enviar informações maliciosas dentro da URL do HTTP GET.
  • Solução: Criptografe os dados do GET, faça validações em todos os dados vindouros do GET ou nunca use esta abordagem, armazenando as informações na sessão do usuário.

Ataque: Form Field Manipulation.

  • Descrição: Consiste no atacante enviar informações maliciosas dentro de campos HTML hidden e read-only, não esperado pela aplicação.
  • Solução: Repita sempre que necessário as validações de campos deste tipo cada interação HTTP ou nunca use esta abordagem, armazenando as informações na sessão do usuário.

Ataque: Cookie Manipulation.

  • Descrição: Consiste no atacante enviar informações maliciosas dentro dos cookies usados pela aplicação.
  • Solução: Use criptografia HMAC cookie para guardar valores importantes para
    aplicação, use cookies para guardar informações que não tenham impacto
    na aplicação ou nunca use esta abordagem, armazenando as informações na
    sessão do usuário.

Ataque: Header Manipulation.

  • Descrição: Consiste no atacante enviar ou manipular informações dentro do HTTP Header.
  • Solução: Nunca baseie decisões de sistema nos headers HTTP, porque eles podem ser facilmente falsificados.

Gerenciamento de exceções

Ataque: Implementation Details.

  • Descrição: Consiste na aplicação expor detalhes infraestruturais fornecedores,
    versão de plataformas, nomes de servidores, comandos SQL, configurações
    de banco de dados etc que podem ser usados de diversas formas por
    qualquer atacante.
  • Solução: A aplicação deve apresentar uma mensagem genérica de exceção quando
    qualquer problema de runtime vier acontecer, usando a abordagem de
    Logger para registrar os determinados de erros técnicos e
    infraestruturais.

Auditoria e Logging

Ataque: Falta de mecanismo para auditoria.

  • Descrição: Consiste no usuário malicioso ou não operar na aplicação que está desprovida de qualquer tipo de auditoria.
  • Solução: A aplicação deve usar algum mecanismo de auditoria que registre as
    operações criticas, gerando, no mínimo, os dados de usuário, processo,
    data/hora.

Para aqueles interessados em maiores informações sobre segurança em aplicações web, eu sugiro a leitura do PDF Improving Web Application Security Threats and Countermeasures da Microsoft. O artigo fica aberto para outras sugestões de vulnerabilidades e contra-medidas.

Comente também

2 Comentários

Jader

“em nível de aplicação”?
O português correto seria
no nível da aplicação

Por favor

Qual a sua opinião?