02/09/2012
O pyrit serve para quebrar senhas WPA/WPA2-PSK. A grande diferença é o suporte a paralelismo massivo, com CUDA e OpenCL. Como hoje em dia praticamente qualquer placa de vídeo suporta pelo menos uma dessas tecnologias, podemos tirar proveito disso para acelerar tremendamente a quebra das senhas.

O Scappy é uma ferramenta / biblioteca em python para fazer mágica com redes. Dê uma olhada na documentação dele para ter uma idéia do que ele é capaz de fazer. O Pyrit precisa dele para analizar pcaps e outras funções.
O Scappy depende de alguns pacotes do Python, que, por sua vez, dependem de algumas bibliotecas do sistema.
Vamos começar pelos pacotes do sistema, pelo Homebrew. Se você ainda não tem ele instalado, siga as instruções do site e instale. Você vai precisar do XCode com as command line tools instaladas.
$ brew install readline
$ brew install gnuplot --pdf
$ brew install libdnet
Atualmente, a libdnet não vai instalar o módulo do python, mesmo passando a opção --with-python. Vamos instalar manualmente então.
$ wget http://libdnet.googlecode.com/files/libdnet-1.12.tgz
$ tar xvzf libdnet-1.12.tgz
$ cd libdnet-1.12
$ ./configure
$ make
$ cd python
$ sudo python setup.py install
Atente para o fato de que não rodamos make install, para não sobrescrever a versão instalada pelo homebrew. Apenas instalamos a biblioteca para o Python.
Também precisamos da pylibpcap, que não está disponível pelo pip.
$ wget http://dfn.dl.sourceforge.net/sourceforge/pylibpcap/pylibpcap-0.6.2.tar.gz
$ tar xvzf pylibpcap-0.6.2.tar.gz
$ cd pylibpcap-0.6.2
$ sudo python setup.py install
Agora vamos instalar algumas bibliotecas do Python que estão disponíveis pelo pip. Caso não tenha o pip instalado, basta rodar sudo easy_install pip.
$ sudo pip install PyX
$ sudo pip install gpw gnuplot-py
$ sudo pip install readline
$ sudo pip install pcapy
Atualmente está meio complicado instalar o Scapy como biblioteca, por algum motivo. O zip e o tar.gz do site parecem estar incompletos. Por sorte, é relativamente fácil instalar pela fonte.
O repositório mercurial do Scapy não tem respondido muito bem, então a dica é baixar com wget -c para continuar automaticamente um download que esteja falhando.
$ wget -c http://hg.secdev.org/scapy/archive/tip.zip -O tip.zip
$ unzip tip.zip
$ cd scapy-*
$ sudo python setup.py install
Você pode verificar que está tudo okay rodando sudo scapy no terminal. (O Scapy precisa de root para enviar pacotes.)
Fenrir ~ » sudo scapy
WARNING: No route found for IPv6 destination :: (no default route?)
Welcome to Scapy (2.2.0-dev)
>>>
O erro de rota IPv6 é normal. Se você tem uma rota IPv6, bom pra você.
Finalmente, vamos instalar o Pyrit. O OSX já tem todas as dependências para o pacote básico. Só precisamos instalar a SDK do CUDA caso tenhamos uma placa NVidia. Instale os três pacotes disponíveis na página. Se sua máquina tem uma placa de vídeo ATi, o suporte a OpenCL já está instalado. A SDK do CUDA, para placas NVidia, cuida do OpenCL também. Vamos por partes.
Baixe o pyrit, o cpyrit-cuda (se seu sistema suportar cuda) e o cpyrit-opencl (se seu sistema não suportar opencl, nem perca seu tempo).
Para cada um deles, descompacte e rode
$ python setup.py build
$ sudo python setup.py install
Provavelmente o cpyrit-cuda não vai compilar corretamente. Para consertar isso, rode:
$ sudo ln -s /usr/local/cuda/lib/libcuda.dylib /usr/lib/libcuda.dylib
E compile novamente.
Agora você pode rodar pyrit list_cores e verificar que está tudo funcionando.
No meu hackintosh (com uma NVidia 550Ti), o resultado é este:
Fenrir ~ » pyrit list_cores
Pyrit 0.4.0 (C) 2008-2011 Lukas Lueg http://pyrit.googlecode.com
This code is distributed under the GNU General Public License v3+
The following cores seem available...
#1: 'CUDA-Device #1 'GeForce GTX 550 Ti''
#2: 'OpenCL-Device 'GeForce GTX 550 Ti''
#3: 'CPU-Core (SSE2)'
#4: 'CPU-Core (SSE2)'
#5: 'CPU-Core (SSE2)'
#6: 'CPU-Core (SSE2)'
#7: 'CPU-Core (SSE2)'
#8: 'CPU-Core (SSE2)'
No meu MacBook Pro, que tem uma Radeon 6770M, o resultado é:
Niflheim ~ » pyrit list_cores
Pyrit 0.4.0 (C) 2008-2011 Lukas Lueg http://pyrit.googlecode.com
This code is distributed under the GNU General Public License v3+
The following cores seem available...
#1: 'OpenCL-Device 'ATI Radeon HD 6770M''
#2: 'CPU-Core (SSE2)'
#3: 'CPU-Core (SSE2)'
#4: 'CPU-Core (SSE2)'
#5: 'CPU-Core (SSE2)'
#6: 'CPU-Core (SSE2)'
#7: 'CPU-Core (SSE2)'
#8: 'CPU-Core (SSE2)'
O MacBook Pro tem um processador Sandy Bridge, então deveria suportar instruções AES mas, por algum motivo, não está funcionando aqui. Se alguém souber de mais informações a respeito, me avise.
Você pode verificar que está tudo funcionando no Pyrit com o Scapy entrando no diretório test e rodando pyrit -r wpa2psk-linksys.dump.gz analyze.
Se estiver tudo okay, a princípio você deve estar apto a crackear senhas.
Não esqueça de trocar para a VGA dedicada se você tem um MacBook Pro!
Caso você esteja capturando pacotes com o KisMAC, você precisará disto para que o Pyrit leia seus dumps:
{% gist 3615507 %}
Utilize a versão do Trunk (atualmente r407) do KisMAC para melhores resultados no Mountain Lion.
A grande sacada do Pyrit é utilizar OpenCL e CUDA para gerar tabelas de hashes offline (e muito rápido), e então consultar elas para crackear as senhas. Tabelas e consulta deve lembrar banco de dados. Vamos utilizar o PostgreSQL.
Primeiro, se você não tem o PostgreSQL, instale-o através do homebrew: brew install postgres
Depois de instalado, é uma boa idéia fazer com que ele inicie com o sistema:
$ launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
$ cp /usr/local/Cellar/postgresql/9.1.4/homebrew.mxcl.postgresql.plist ~/Library/LaunchAgents/
$ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Melhor ainda é fechar ele no Firewall. Mas isso deixo como exercício para o leitor.
Vamos criar um banco de dados para o Pyrit:
$ createuser pyrit
$ createdb --owner=pyrit pyrit
Diga não para as três perguntas do primeiro comando. Isto vai criar um usuário sem senha, então cuidado. É possível criar um com senha, mas não vou entrar nisso.
Agora edite seu ~/.pyrit/config:
default_storage = postgres://pyrit:@127.0.0.1/pyrit
Para que o pyrit se conecte com o Postgres, são necessárias mais duas bibliotecas:
sudo pip install SQLAlchemy
sudo pip install psycopg2
Rode novamente pyrit eval e verifique que ele está conectando com o banco de dados.
Niflheim ~ » pyrit eval
Pyrit 0.4.0 (C) 2008-2011 Lukas Lueg http://pyrit.googlecode.com
This code is distributed under the GNU General Public License v3+
Connecting to storage at 'postgres://127.0.0.1/pyrit'... connected.
Passwords available: 4081
ESSID '2WIRE972' : 4081 (100.00%)
ESSID 'linksys' : 4081 (100.00%)
Agora é só importar sua wordlist favorita (pyrit -i wordlist.gz import_passwords), adicionar os SSIDs contra os quais você quer crackear (pyrit -e ESSID create_essid) e gerar os hashes (aí que entra o CUDA/OpenCL): pyrit batch.
Minha wordlist tem 871MB.
Fenrir ~/Downloads » unzip m3g9tr0n_Passwords_WordList_CLEANED.zip
Archive: m3g9tr0n_Passwords_WordList_CLEANED.zip
creating: m3g9tr0n_Passwords_WordList_CLEANED/
inflating: m3g9tr0n_Passwords_WordList_CLEANED/eNtr0pY_ALL_sort_uniq.dic
Fenrir ~/Downloads » cd m3g9tr0n_Passwords_WordList_CLEANED
Fenrir Downloads/m3g9tr0n_Passwords_WordList_CLEANED » l
total 1784712
drwxr-xr-x 3 pedrovanzella staff 102 Aug 29 15:55 .
drwx------+ 15 pedrovanzella staff 510 Sep 3 22:27 ..
-rw-r--r--@ 1 pedrovanzella staff 913769464 Aug 29 15:46 eNtr0pY_ALL_sort_uniq.dic
Fenrir Downloads/m3g9tr0n_Passwords_WordList_CLEANED » du -ch
871M .
871M total
Importando pro banco de dados:
Fenrir Downloads/m3g9tr0n_Passwords_WordList_CLEANED » pyrit -i eNtr0pY_ALL_sort_uniq.dic import_passwords
Pyrit 0.4.0 (C) 2008-2011 Lukas Lueg http://pyrit.googlecode.com
This code is distributed under the GNU General Public License v3+
Connecting to storage at 'postgres://127.0.0.1/pyrit'... connected.
83653572 lines read. Flushing buffers.... .
All done.
Tamanho no banco de dados:
Fenrir ~ » psql pyrit
psql (9.1.4)
Type "help" for help.
pyrit=# SELECT pg_size_pretty(pg_database_size('pyrit'));
pg_size_pretty
----------------
504 MB
(1 row)
pyrit=# \q
504MB, menor que o original, o que é bom.
Agora gerar os hashes para um essid que eu já adicionei (linksys).
Fenrir ~ » time pyrit batch
Pyrit 0.4.0 (C) 2008-2011 Lukas Lueg http://pyrit.googlecode.com
This code is distributed under the GNU General Public License v3+
Connecting to storage at 'postgres://127.0.0.1/pyrit'... connected.
Working on ESSID 'linksys'
Processed all workunits for ESSID 'linksys'; 23625 PMKs per second.d.
Batchprocessing done.
pyrit batch 27726.81s user 901.39s system 699% cpu 1:08:15.53 total
1 Hora para processar 67 milhões de senhas. 23625 PMKs. Está bom, mas ainda tem como melhorar, acredito eu.
E o banco de dados, agora:
Fenrir ~ » psql pyrit 2 ↵
psql (9.1.4)
Type "help" for help.
pyrit=# SELECT pg_size_pretty(pg_database_size('pyrit'));
pg_size_pretty
----------------
3141 MB
(1 row)
pyrit=# \q
3GB, consideravelmente maior.
E para crackear uma senha?
Fenrir pyrit-0.4.0/test » pyrit -r wpa2psk-linksys.dump.gz attack_db
Pyrit 0.4.0 (C) 2008-2011 Lukas Lueg http://pyrit.googlecode.com
This code is distributed under the GNU General Public License v3+
Connecting to storage at 'postgres://127.0.0.1/pyrit'... connected.
Parsing file 'wpa2psk-linksys.dump.gz' (1/1)...
Parsed 14 packets (14 802.11-packets), got 1 AP(s)
Picked AccessPoint 00:0b:86:c2:a4:85 ('linksys') automatically.
Attacking handshake with Station 00:13:ce:55:98:ef...
Tried 22497971 PMKs so far (32.7%); 2060686 PMKs per second.
The password is 'dictionary'.
Aí que o Postgres brilha. 2 milhões de PMKs por segundo testadas. Senha descoberta em menos de 1 minuto (fora a uma hora de trabalho pra construir a tabela, claro).
blog comments powered by Disqus