# Ataque de autenticação

Ataque de Autenticação (em inglês, Attacking Authentication) é uma das forma de descobrir e explorar falhas de segurança em aplicações web. O ataque de autenticação tem como meta explorar o processo de login de uma página na web. A autenticação é utilizada nas páginas webs, para verificar a identidade de um usuário, serviço ou aplicação.

## Falhas de projeto em mecanismos de autenticação

A funcionalidade de autenticação está sujeita a mais falhas de projeto do que qualquer outro mecanismo de segurança comumente empregadas em aplicações web. Isso inclui a funcionalidade principal de login e também as mais periféricas funções de autenticação relacionados, tais como registro de usuário, mudança de senha e recuperação de conta. Mecanismos de autenticação contêm uma riqueza de diferentes vulnerabilidades, tanto de projeto quanto de implementação, o que um atacante pode aproveitar para obter acesso não autorizado. Estes vão desde defeitos óbvios, tais como senhas ruins e suscetibilidade, a ataques de força bruta, para os problemas mais obscuros dentro da lógica de autenticação. Dentre as falhas de projeto e implementação em mecanismos de autenticação, destacam-se:
* Senhas fracas
* Força bruta de login
* Mensagens de erro detalhadas
* Transmissão vulnerável de credenciais
* Funcionalidade de alterar a senha
* Funcionalidade "lembre-me" da senha
* Funcionalidade "me mantenha conectado"
* Funcionalidade representação de usuário
* Validação incompleta de credenciais
* Nomes de usuários não-exclusivos
* Nomes de usuários previsíveis
* Senhas iniciais previsíveis
* Distribuição insegura de credenciais

### Senhas fracas

Muitas aplicações web utilizam nenhum ou um mínimo de controle sobre a qualidade das senhas do usuário. É comum encontrar aplicações que permitem senhas que são:
* Muito curta ou em branco
* Palavras de dicionário ou nomes
* O mesmo que o nome de usuário
* Ainda definido para um valor default
As etapas que os hackers seguem para descobrir todas as regras em matéria de qualidade de senha, são:
* Procurar na página web por qualquer regra ou política de senha.
* Realizar cadastros tentando registrar várias contas com diferentes tipos de senhas fracas para descobrir as regras que estão em vigor.
* Ao ter controle de uma única conta e a alteração de senha estiver habilitada, tentar modificar a senha para vários valores considerados fracos.

### Força bruta de login

A força bruta de login acontece quando um atacante insere senhas diferentes no processo de autenticação de uma página web. A funcionalidade de login apresenta um convite aberto para um atacante tentar adivinhar nomes de usuários e senhas e, portanto, obter acesso não autorizado à aplicação. Se o aplicativo permite que um atacante faça várias tentativas de login com senhas diferentes até que ele consiga realizar o login com sucesso, é uma aplicação altamente vulnerável, até mesmo para um atacante amador que entra manualmente com alguns nomes de usuário e senhas comuns em seu próprio navegador.
Compromissos recentes de sites de alto perfil têm proporcionado o acesso a centenas de milhares de senhas do mundo real que foram armazenadas em texto simples ou usando força bruta. Aqui estão as senhas mais populares do mundo real:
* password/senha
* nome da aplicação
* 12345678
* qwerty
* abc123
* 111111
* monkey
* 12345
* letmein (do inglês "let me in", e em português, "deixe-me entrar")
* admin/administrator/administrador

### Mensagens de erro detalhadas

Um típico formulário de autenticação pede ao usuário que ele digite duas informações: usuário e senha. Algumas aplicações solicitam mais informações como data de nascimento, um lugar memorável, ou um PIN.
Quando uma tentativa de login falhar, você pode inferir que pelo menos uma parte da informação estava incorreta. No entanto, se o aplicativo informa qual parte da informação era inválido, você pode explorar esse comportamento para diminuir consideravelmente a eficácia do mecanismo de login. No caso mais simples, onde um login exige um nome de usuário e senha, um aplicativo pode reagir a uma falha de login, indicando se a razão para o fracasso era um nome de usuário desconhecido ou a senha errada.

### Transmissão vulnerável de credenciais

Se um aplicativo usa uma conexão HTTP criptografado para transmitir as credenciais de autenticação, um intruso que está devidamente posicionado na rede pode, naturalmente, interceptá-los. Dependendo da localização do usuário, os potenciais bisbilhoteiros podem residir:
* Em rede local do usuário
* No departamento de TI do usuário
* No ISP do usuário
* No backbone da Internet
* Dentro do ISP que hospeda o aplicativo
* Dentro do departamento de TI que gere a aplicação

### Funcionalidade de alterar a senha

Surpreendentemente, muitas aplicações web não fornecem qualquer maneira para os usuários mudar suas senhas. No entanto, esta funcionalidade é necessária para um mecanismo de autenticação bem concebido. Existem duas razões para isto:
* A mudança periódica forçada de senhas reduz a ameaça de comprometimento da senha. Isso reduz a janela na qual uma determinada senha pode ser alvo de um ataque de adivinhação. E também reduz a janela em que uma senha comprometida pode ser usado sem a detecção pelo intruso.
* Os usuários que suspeitam que suas senhas podem ter sido comprometidas precisam ser capazes de mudar rapidamente a sua senha para reduzir a ameaça de uso não autorizado.