Senhas são talvez o elo mais fraco em qualquer sistema de segurança existente hoje em dia. Nem sempre o administrador, que tem conhecimento de questões relacionadas à segurança da informação, pode acompanhar o usuário e garantir que ele faça uma escolha de senha segura. Muitas vezes, nem mesmo quando se define regras para senhas pode-se ter 100% de certeza que uma senha segura será a escolhida. Por exemplo, imagine que você definiu uma regra que requer que seja escolhida uma senha de no mínimo 8 caracteres, letras maiúsculas e minúsculas e números. Se o seu usuário escolher algo como “Pedro123″ você continuará a ter uma senha insegura.
Mas o pior lado dessa estória é que o atacante também sabe que senhas são inseguras e muito frequentemente se aproveita desse fato para ganhar acesso ilegal ao seu sistema. A técnica mais simples utilizada por usuários maliciosos é o brute forcing. Neste post, vou definir o que é brute force e também vou mostrar a ferramenta THC Hydra utilizada em ataques deste tipo.
O que é o brute force?
Traduzindo ao pé da letra, brute force significa “força bruta“. O uso mais comum deste ataque é para descobrir senhas testando todas as possibilidades possíveis (combinando todos os caracteres existentes). Caso o atacante descubra algum padrão nas senhas, isso pode facilitar um pouco a vida dele pois ele poderá gerar senhas que seguem esse padrão definido pelo alvo. Neste contexto, quanto mais curta e simples a senha, mais rápido ela será adivinhada.
Outros contextos em que frequentemente se utiliza força bruta é para fazer a enumeração de nomes de usuário e de registros DNS de uma zona específica (permitindo assim que você mapeie a rede mais facilmente). Um exemplo de ferramenta de enumeração de DNS é o Fierce.
Obviamente, o atacante não fica criando as senhas de cabeça e tentando uma a uma no formulário de login! :) Primeiro ele cria uma wordlist, que nada mais é do que um arquivo texto com milhares de palavras geradas automaticamente, uma por linha. Esta wordlist geralmente é criada por programas especializados ou baixada da Internet.
Já falei sobre dois desses programas aqui no blog:
- Crunch
- WYD
Ambos geram wordlists, porém, baseados em coisas diferentes: o Crunch utiliza padrões definidos por você para criar as senhas; o WYD lê textos de sites e dos arquivos presentes no site para encontrar palavras e gerar wordlists. Cada um é mais apropriado em situações diferentes, porém ambos são ferramentas extremamente úteis. Leia os posts indicados acima e veja a diferença entre as ferramentas.
Após criar a wordlist, você deve encontrar uma ferramenta que permita a você testá-la contra um serviço específico. O THC Hydra suporta vários serviços diferentes como POP3, Telnet, SSH, etc. O TSGrinder é uma ferramenta desenvolvida especificamente para brute force no Terminal Services de máquinas rodando Windows. Neste post vou mostrar como utilizar o THC Hydra.
O THC Hydra
A ferramenta que vou utilizar aqui para ilustrar um ataque brute force é o THC Hydra. Esta é uma ferramenta desenvolvida pelo grupo alemão THC há alguns anos já, que melhorou muito com o passar do tempo. A distribuição Linux Backtrack já possui esta ferramenta instalada e configurada, pronta para o uso. Caso você não tenha acesso a esta distribuição, você ainda pode fazer o download e realizar toda a configuração da ferramenta você mesmo (o que acaba dando um certo trabalho!).
O site oficial para download da ferramenta é o http://freeworld.thc.org/thc-hydra/. A versão mais nova é a 5.8, lançada em 29 de setembro de 2010. Além de ser bem simples de utilizá-lo, o Hydra tem muitas funcionalidades disponíveis (geralmente, habilitadas através de opções específicas na hora da compilação). Alguns dos serviços que ele suporta:
- Telnet
- Formulários HTTP/HTTPS
- SSH
- MySQL
- PostgreSQL
- MSSQL
- SMB
- LDAP2 e LDAP3
- FTP
- SNMP
- CVS
- VNC
Entre vários outros. Além disso, a ferramenta está licenciada sob a GPLv3 garantindo a disponibilidade do código para uso de qualquer natureza e também permitindo que você aprenda como a ferramenta funciona para modificá-la de acordo com as suas necessidades.
A ferramenta já vem toda instalada e configurada (inclusive com interface gráfica) no Back Track, porém obviamente você pode fazer o download do código-fonte e compilá-la em qualquer distribuição atual. Basta fazer o download do pacote no site citado anteriormente e seguir as instruções no arquivo README.
Exemplo de ataque a um servidor FTP
Como primeiro exemplo, vou mostrar como atacar um servidor FTP. Vou considerar que você já utilizou o WYD ou o Crunch para gerar a sua wordlist (ou que já possui uma wordlist pronta para uso), que você já compilou e instalou o Hydra (ou que está utilizando o Back Track) e que você está fazendo isso em seu próprio servidor ou em um servidor sobre o qual você tenha autoridade. NÃO FAÇA ISTO EM SERVIDORES DE TERCEIROS: isto é um crime passivo de processo criminal. Crie uma máquina virtual com o serviço que você quer analisar para seguir estas instruções.
Neste primeiro exemplo, vamos utilizar o Hydra via linha de comando. Antes de iniciar o ataque, você precisa dar algumas informações ao Hydra:
- Localização da sua wordlist;
- Endereço IP do servidor;
- Nome de usuário ou arquivo contendo nomes de usuários para testar durante o ataque;
- Qual o serviço que será atacado (FTP, SSH, Telnet, etc).
Na linha de comando, ficaria assim:
# hydra -l pedro -P senhas.txt 10.0.0.2 ftp
Pronto, agora o Hydra vai começar a rodar e, quando encontrar a senha correta irá escrevê-la na tela para você. A saída do comando seria mais ou menos essa:
Hydra v5.4 (c) 2006 by van Hauser / THC – use allowed only for legal purposes.
Hydra (http://www.thc.org) starting at 2010-12-14 20:22:53
[DATA] 16 tasks, 1 servers, 42 login tries (l:1/p:42), ~2 tries per task
[DATA] attacking service ftp on port 21
[STATUS] attack finished for 10.0.0.2 (waiting for childs to finish)
[21][ftp] host: 10.0.0.2 login: pedro password: pedro
Hydra (http://www.thc.org) finished at 2010-12-14 20:23:10
Como você pode ver, a senha correta para o usuário “pedro” é “pedro”. Algumas outras opções úteis do Hydra são:
- -R: reinicia um ataque interrompido anteriormente do ponto em que ele parou, ou seja, não recomeça o ataque do zero;
- -s PORTA: utiliza o número de porta informado para atacar o serviço. Isto só é necessário caso o serviço não esteja sendo executado na porta padrão;
- -L ARQUIVO: utiliza um arquivo contendo vários logins;
- -p SENHA: utiliza a senha especificada ao invés de ficar lendo várias senhas de um arquivo;
- -e ns: checagens adicionais. “n” para senha nula (em branco) e “s” para tentar o login como a senha.
No próximo exemplo, vamos atacar o FTP utilizando o xHydra, a interface gráfica do Hydra.
Exemplo de ataque a um servidor FTP utilizando a interface gráfica
Repito as mesmas recomendações que fiz anteriormente: NÃO faça isso em servidores de terceiros. Instale uma máquina virtual e faça os testes todos nela!
Para iniciar o xHydra, digite o seguinte comando:
# xhydra
A primeira aba selecionada é a “Target”. Aqui você deve definir as informações sobre a máquina a ser atacada:
- Em “Single Target” você pode definir o IP do servidor a ser atacado. Se for atacar mais de um servidor por vez, clique em “Target List” e digite os IP’s na caixa de texto;
- Em “Port” digite a porta na qual o serviço está escutando;
- Em “Protocol” escolha o protocolo adequado (FTP, HTTP, HTTPS, SSH, etc);
- Selecione “Use SSL” se você quiser forçar o uso do SSL durante as conexões;
- Selecione “Be verbose” se você quiser aumentar a quantidade de informações exibidas na tela;
- Selecione “Show attempts” se você quiser que ele mostre todas as tentativas, mesmo as que não funcionaram;
- Selecione “Debug” para exibir informações que lhe ajudem a resolver algum problema que você esteja tendo.
Feitas as configurações na aba “Target”, passe para a próxima aba “Passwords”.
Aqui, você vai encontrar as seguintes opções:
- Em “Username” digite o nome de usuário cuja senha você está tentando descobrir;
- Em “Username List” digite o caminho para o arquivo que contém os nomes de usuário cujas senhas você quer descobrir. Só é útil se você quiser a senha de mais de um usuário;
- Em “Password” digite a senha a ser tentada;
- Em “Password List” digite o caminho para a sua wordlist;
- Selecione “Use colon separated file” se você tiver um arquivo no formato “login:senha”;
- Selecione “Try login as password” para testar o login na senha;
- Selecione “Try empty password” para testar a senha em branco.
Configurada a aba “Passwords”, vamos para a aba “Tuning”.
Aqui, você terá as seguintes opções:
- “Number of tasks” define a quantidade de threads que o programa irá utilizar para trabalhar. Quanto mais threads, menos tempo levará para adivinhar a senha porém mais recursos serão consumidos;
- O campo “Timeout” define o tempo que o Hydra vai ficar esperando por uma resposta do servidor antes de desistir e seguir para a próxima tentativa;
- Selecione “Exit after first found pair” para fazer com que o Hydra pare o trabalho no primeiro conjunto de usuários e senhas válidos;
- Se você precisar passar por um proxy para poder realizar o serviço, selecione o método correto para o Hydra se conectar: No Proxy, HTTP Method ou CONNECT Method. A opção correta vai depender do seu proxy;
- No campo “Proxy” digite o IP e a porta do servidor proxy da sua rede;
- Selecione “Proxy needs authentication” se você precisar de um usuário e senha para poder utilizar o proxy. Digite as credenciais nas caixas de texto localizadas abaixo.
Agora, podemos partir para a aba “Specific”.
Na aba “Specific” você só precisa alterar algum parâmetro para algum módulo específico. Por exemplo, para atacar formulários HTTP você precisa colocar o domínio e o caminho para a página a ser testada; para o SNMP você deve escolher a versão correta, etc. Depois que alterar tudo, passe para a aba “Start”.
Na aba “Start” você não tem opções a modificar, aqui você executa o ataque e verifica as mensagens exibidas pelo software:
Como você pode ver, as informações exibidas aqui são as mesmas que seriam exibidas na linha de comando.
Conclusão
Como você pode imaginar, adivinhas senhas não é um processo rápido. Você vai precisar gastar muito tempo no mesmo alvo até conseguir algum resultado. Porém, esta é uma boa forma de você identificar usuários que estão utilizando senhas muito fracas em algum sistema gerenciado por você e tomar alguma ação antes que seja tarde demais.
Mas como se defender deste tipo de ataque?
Isso é até que simples. A primeira providência que você precisa tomar é garantir que todos os seus usuários estejam utilizando uma senha forte. Uma senha pode ser considerada forte quando tem pelo menos 9 caracteres, símbolos especiais (como !, #, @, etc), letras maiúsculas e minúsculas e números. Também é interessante que a senha seja aleatória pois caso alguma informação pessoal sua seja utilizada na senha (como número de conta do banco, nome de sua esposa, marido, filhos, pai, mãe, etc) fica mais fácil para o atacante descobri-la. Você pode utilizar um gerador de senhas aleatórias como o oferecido pelo software KeePass.
Outra providência que você pode tomar é se livrar das senhas! :) Alguns softwares permitem outros tipos de autenticação mais difíceis de serem atacados, como o uso de certificados de segurança. Aqui no blog eu já escrevi um post sobre como utilizar certificados de segurança para logar no SSH. Além do SSH, alguns outros serviços permitem o uso deste certificado.
Além disso, também utilize um software que bloqueie o IP de origem depois de um determinado número de tentativas de login falhadas. Vários serviços podem ser protegidos por estes softwares, como o FTP e o SSH, por exemplo. Uma outra boa idéia, é utilizar o SSL para evitar que senhas possam ser sniffadas na sua rede.
É isso, agora é só testar os seus servidores para garanti que está tudo seguro e tomar as providências citadas anteriormente para deixar o seu ambiente ainda mais seguro. :)
Creditos:Pedro Pereira
Onde eu baixo o HYDRA para windows ?
ResponderExcluirNo próprio site do Hydra você pode conseguir. De uma conferida.
ExcluirValeu