Vetor 5: Ataques de Domínio Cruzado
3.3 Funcionalidade dos Filtros
3.3.6 Filtro A6: Ataques baseados em A6
Este é o ataque mais explorado na literatura, e não seria diferente demandar funcionalida- des com um maior número de questões e comportamentos inseguros a serem considerados. Ao todo são 3 fluxos distintos, descritos na Figura 3.13,3.14 e3.15, para a filtragem com o intuito de minimizar os ataques relacionados à exposição de dados sensíveis, que são falhas não intencionas ocorridas no processo de desenvolvimento da aplicação. O primeiro fluxo, apresentado na Figura3.13, é dedicado às questões de armazenamento de dados sensíveis através de recursos do HTML5, que irá capturar o conteúdo da página a
ser exibida ao usuário, através do método onCompleted do WebRequest.
Uma vez que um mesmo computador possa ser compartilhado por diversas pessoas, uma aplicação que utiliza a API WebStorage [19] de forma imprudente, como armaze- nar dados sensíveis, como número de cartões de crédito ou estado de sessões, através do LocalStorage [19], acaba comprometendo a segurança dos dados de seus usuários. Diferente de Cookies, o LocalStorage não criptografa os dados, portanto não deve ser utilizado para armazenar informações sensíveis que deveriam constar apenas no escopo de sessão da aplicação, ou seja, no SessionStorage [19], que garante a exclusão dos dados no momento em que a sessão for encerrada.
A estruturação das informações no LocalStorage são baseadas em parâmetros com chave e valor, conforme descrito na especificação. Uma vez detectada a utilização suspeita, a Extensão irá bloquear o recurso utilizado. Da mesma forma do WebSQL descrito no filtro A2, os dados do LocalStore também podem ser explorados, caso o site em questão tenha alguma vulnerabilidade de XSS. O mesmo vale para armazenamento utilizando o IndexDBOWA(2013c). Esses recursos são acessíveis pela Extensão da API storage.
Figura 3.13 Primeiro processo de Filtragem de Exposição de Dados Sensíveis (A6). O segundo fluxo, apresentado na Figura 3.14, é voltado para as questões de trans- missão de conteúdos através de Cookies e cabeçalhos HTTP e a utilização de HTTPS. A filtragem de exploração de dados sensíveis é baseada na biblioteca OWASP ESAPI, que possui checagens e prevenções deste tipo de cenário, analisando o tráfego desse
tipo de dados. O objetivo é verificar se um determinado tráfego do cabeçalho HTTP é considerado inseguro como, por exemplo, exposição de cookies persistentesOWA(2013e). Outro exemplo é checar se um determinado serviço trafega sem utilizar HTTPS, ou WSS para WebSocket, para dados de um usuário com parâmetros críticos, como authorization.
A checagem do protocolo de comunicação se faz possível na própria URL, e a captura do cabeçalho é realizada utilizando o método onBeforeSendHeaders do WebRequest. Além disso, uma vez que o navegador identifica que o certificado HTTPS de um deter- minado site foi expirado, muitas vezes os usuários declaram consentimento e desejam prosseguir o processo, tornando-se vitimas em potencial para ataques Man-in-The-Middle, em que um atacante pode interceptar a comunicação ou mesmo se passar por um site ou serviço remoto.
Figura 3.14 Segundo processo de Filtragem de Exposição de Dados Sensíveis (A6). E por fim, o terceiro fluxo, apresentado na Figura3.15, busca minimizar comportamen- tos perigosos, principalmente quando são realizados em um computador compartilhado por diversos usuários, muito comum em locais públicos como em laboratórios ou as conhecidas Lan Houses. A filtragem é baseada em buscar elementos na tela que manipu- lem os dados sensíveis do usuário, considerando dois aspectos: responsáveis em prover proteções aos dados do usuário, e que possam ocasionar armazenamento inseguro.
Aprofundando mais aos detalhes sobre as funcionalidades nesses aspectos, no primeiro caso a extensão realizará uma busca pelo botão "deslogar", que em algumas aplicações há variações no termo, como "logout", "sair", entre outros. Esse tipo de comportamento
Figura 3.15 Terceiro processo de Filtragem de Exposição de Dados Sensíveis (A6).
será tratado em um dicionário de palavras-chave com possíveis variações para o link ou botão "deslogar". Uma vez identificado o elemento, a Extensão irá realçar o botão ou link em questão e se programar para notificar ao usuário, sugerindo ao mesmo que acione o elemento sempre que o navegador for fechado abruptamente. Caso esse elemento não seja encontrado, a Extensão também irá agendar uma notificação ao usuário, para que ele certifique-se que efetuou o devido logon.
A Notificação será disparada quando o navegador ou a aba for fechada no método window.onbeforeunload via JS que será adicionada através de DOM pela Extensão e também será exibida através da API notifications, que utiliza o sistema operacional para efetuar notificações do systray. No segundo aspecto é realizada uma análise de elementos, muitas vezes representados como um checkbox, que realiza a criação de um cookie na máquina para lembrar a autenticação em acessos futuros. O mais agravante é que muitas aplicações insistem em trazer para o usuário essa opção já selecionada por padrão, e geralmente a mesma situa-se após o botão de confirmar a operação, fazendo que em alguns casos este elemento passe despercebido ao usuário.
Nesse mesmo contexto, outro vetor é o salvamento automático no navegador de informações sensíveis inseridas em formulários. A prevenção está em identificar campos como login, email, número do cartão de crédito, e principalmente, o elemento do tipo password. Identificado esses elementos, será analisado se esses possuem o atributo autocomplete definidos como "off". Uma vez esse atributo ausente ou definido como on, o navegador irá questionar ao usuário se ele deseja que essas informações sejam armazenadas, e alguns casos o mesmo poderá confirmar, podendo acarretar em um acesso
indevido por outra pessoa que utilizar o navegador no mesmo computador.
De posse do conteúdo de resposta, a extensão, pela ação "Modificar Elementos do Formulário"conforme ilustrado na Figura3.15, irá desmarcar as opções de lembrete de autenticação, além de adicionar o atributo autocomplete com valor "off"nos elementos encontrados, tudo através de DOM, e repassará ao usuário a resposta modificada.