# Clickjacking

O clickjacking (classificado como um ataque de correção da interface do usuário) é uma brecha em segurança de rede que, por meio de técnicas maliciosas, induz o usuário a clicar em algo diferente do que o usuário percebe, potencialmente revelando informações confidenciais ou permitindo que outras pessoas assumam o controle de seu computador. O clickjacking geralmenta está por trás de objetos aparentemente inócuos, incluindo páginas da web que estão sobrepostos sob um ou mais frames. Este é também um exemplo de problema do deputado confuso, em que um computador é enganado e faz uso indevido de sua autoridade.

## Origem

Em 2002, notou-se que era possível carregar uma camada transparente em uma página da web e fazer com que a entrada do usuário afetasse a camada transparente sem que o usuário percebesse. No entanto, isso foi ignorado principalmente como uma questão importante até 2008. Em 2008, Jeremiah Grossman e Robert Hansen descobriram que o Adobe Flash Player podia ser clicado, permitindo que um invasor ganhasse acesso ao computador sem o conhecimento do usuário. O termo clickjacking foi cunhado por Grossman e Hansen, uma aglutinação das palavras click (clique) e hijacking (sequestro). À medida que mais ataques de natureza semelhante foram descobertos, o foco do termo "reparação de interface do usuário" foi alterado para descrever a categoria desses ataques, em vez de apenas o clickjacking propriamente dito.

## Implementação

Para implementar essa técnica, são utilizadas várias metodologias, como frame-busting, falsificação e múltiplos uso de cursor e elementos HTML (iframes). Basicamente, a operação é composta de duas etapas. Primeiro, um atacante cria uma página da web maliciosa que contém um objeto (por exemplo, o botão de curtir do Facebook) de um site legítimo. Então, esse objeto é colocado invisivelmente e sobreposto sob outro objeto visível e legítimo. Em segundo lugar, o atacante atrai uma possível vítima para clicar no elemento invisível por meio de uma mensagem visível e atraente, que é exibida próxima ao objeto invisível no iframe. Assim, quando a mensagem é clicada, a ação é ativada no objeto que está invisivelmente posicionado dentro do iframe.
Os recursos de exibição de elementos do lado do navegador são feitos geralmente com HTML, JavaScript e CSS. São alteradas as propriedades do objeto, como por exemplo, a opacidade, que pode ser definido para um valor muito baixo, tornando-o quase invisível para a vítima. A página maliciosa, então, induz a vítima a clicar em elementos da interface gráfica (GUI) visíveis, que sobrepõem páginas legítimas invisíveis carregadas em iframes. Se a vítima clicar em um elemento GUI visível fornecido pelo atacante, isso resulta em uma ação na página legítima e pode causar ações indesejadas.
Ataques de clickjacking têm sido realizados para executar várias atividades indesejadas, incluindo a publicação de mensagens não solicitadas em redes sociais (Facebook, Twitter), curtir ou não curtir o perfil de uma pessoa em uma rede social sem o conhecimento da vítima, e controlar as configurações da câmera de um computador por meio de plugins do Adobe Flash.

## Classificação de clickjacking

Os ataques de clickjacking podem ser classificados em três tipos: manipulação do dispostivo de exibição, modificação da localização do ponteiro e modificação do tempo do evento.

### Manipulação do dispostivo de exibição

Neste médodo, um usuário acredita em um elemento falso da página. Um exemplo desse método pode ser aplicado a técnicas que tem como objetivo inflar o número de curtidas de uma determinada página no Facebook. Essa prática também é conhecida como likejacking. O botão de "Curtir" é carregado e ocultado em um iframe de uma página controlada por um invasor. Este iframe pode ser ocultado por meio de CSS (z-index) e elementos HTML (geralmente uma tag div), mas contém o iframe verdadeiro que carrega um objeto clicável, nesse caso, o objeto "Curtir" do Facebook. Para atrair a vítima a clicar no elemento, o atacante coloca uma mensagem atrativo no iframe.
Exemplo de código em HTML:

### Modificação da localização do ponteiro

Nesta técnica, é criado um cursor falso na página por meio da alteração de propriedade no CSS. Assim, é mostrado um cursor falso na página para induzir a vítima a clicar. Essa técnica é conhecida como cursorjacking. Essa técnica pode estar atrelada a técnica de manipulação do dispostivo de exibição para clicar em um elemento não requisitado.
Modificação do tempo do evento
Está técnica se aproveita dos milisegundos que ser humano demora para responder a uma mudança visual. Esse tempo é usado para disparar um ataque que demora milisegundos. O atacante pode mudar a posição dos alvo após um primeiro clique, além de alterar as propriedades do CSS.

## Tipos de clickjacking

* Clássico: funciona principalmente através de um navegador da web.
* Likejacking: é usado especificamente para aumentar o número de curtidas em redes sociais, como o Facebook, com um botão falso sobreposto ao botão de "curtir". Nesse caso, uma página oculta é colocada sobre a página original. Embora invisível, essa página contém um botão de "curtir" sob outro botão. Por exemplo, se o botão de "curtir" estiver escondido sob o botão de "download", toda vez que o usuário fizer o download, uma nova curtida será registrada.
* Aninhado: clickjacking adaptado para afetar o Google+.
* Cursorjacking: manipula a aparência e a localização do cursor.
* MouseJacking: injeta entrada de teclado ou mouse, via link RF remoto.
* Sem navegador: não usa navegador.
* Cookiejacking: rouba cookies de navegadores.
* Filejacking: capaz de configurar o dispositivo afetado como um servidor de arquivos.
* Ataque do gerenciador de senhas: clickjacking que utiliza uma vulnerabilidade na capacidade de preenchimento automático dos navegadores
* Arrasta e solta: é oferecido uma interface gráfica geralmente na forma de um jogo em que objetivo é é colocar algo em um determinado lugar, arrastando algum objeto. Dessa forma, o usuário fornece informações importantes pela simples ação de arrastar e soltar. Isso é possivel com a ajuda de iframes acoplados atrás das opções dessa ação.
* Design de interface do usuário: é estruturado uma interface para exibir diversas opções na tela com vários cursores móveis, com a intenção de confundir o usuário sobre o local correto para clicar. Ao clicar de maneira equivocada, o usuário acidentalmente permite a injeção do código malicioso, permitindo a execução bem-sucedida do ataque.

## Prevenção
### Navegadores não gráficos

Embora possam exigir um conteúdo restrito da web e a necessidade de conhecimentos técnicos, navegadores como Lynx podem prevenir ataques de clickjacking, já que esses ataques exploram a interface gráfica do usuário.

### Plugins

Plugins, como NoScript, podem ser utilizados para filtrar códigos JavaScript e HTML, garantindo que nenhuma página oculta seja embutida na página principal. O plugin Pro Click também é capaz de detectar ataques de clickjacking. Ele intercepta e analisa solicitações feitas pelo navegador e verifica se o código JavaScript é vulnerável ao ataque. Após a análise, ele permite que a solicitação seja processada no navegador (lado do cliente).

## Soluções
### Implementação de frames com assinaturas

Atribuir uma assinatura única a cada frame do site pode ser uma solução de evitar um ataque de clickjacking. Isso ajuda a regular a criação dos frames, pois ao enviar um método de requisição POST, ela é alterada com a adição de um índice no rodapé do frame pelo servidor, mantendo a autenticidade da página. Caso o invasor tente modificar a página durante a requisição, um alerta é gerado e o site é recarregado. Esse ataque pode ser feito por meio de técnicas, como o Man in the Middle (homem no meio), onde o invasor intercepta a comunicação. A intervenção é detectada e o cliente é protegido contra o ataque. O número de frames gerados em sites dinâmicos pode ser coletado no lado do cliente e verificado por meio da geração de um código hash que contabiliza a quantidade de frames utilizados.

### Política de Mesma Origem (Same Origin Policy)

Outra solução para prevenir clickjacking é utilizar a política da mesma origem, que pode ser implementada com um token associado à URL da página em questão. Esse token pode ser verificado no momento da execução dos frames. Um controle sobre as requisições POST e GET do site pode identificar se a requisição foi alterada ou se a página não foi carregada a partir da origem legítima, desconectando a conexão e enviando uma nova requisição ao servidor. Caso um invasor tente sobrepor um frame malicioso à página original, essa intervenção será detectada e bloqueada. O JavaScript pode ser usado para carregar a página diretamente no navegador e verificar se o código foi alterado.

### Detecção baseada em aprendizado de máquina

O aprendizado de máquina pode ser utilizado para prevenir clickjacking por meio da adaptação motora. O tempo de resposta de um usuário normal é de cerca de 500 ms e é geralmente o tempo que é usado para o ataque malicioso disparar. O invasor pode exibir um botão durante esse intervalo e executar código malicioso. Um exemplo é um jogo no qual o usuário clica em um objeto que muda de cor na tela para ganhar pontos. O invasor pode usar essa técnica para enganar o usuário e executar um clique malicioso. A solução envolve capturar a imagem da tela por modelos de aprendizado de máquina e enviá-la para o processamento no servidor. Se houver mudanças na página, o frame superior é bloqueado imediatamente, protegendo o usuário.