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
fonte:http://www.brutalsecurity.com.br
0 comentários:
Postar um comentário