RESISTENCIA ZINE ed. 01 01/07/03 Tilly -> tilly@linuxmail.org ############################## ####### FINGERPRINTING ####### ############################## INDICE: 1 -> Introduçao 2 -> Tipos 2.1 -> Manipulaçao de Fragmentaçao 2.2 -> FIN 2.3 -> Janela Inicial do TCP 2.4 -> Flag Falso 2.5 -> Bit nao Fragmentar 2.6 -> Valor ACK 2.7 -> ICMP 2.7.1 -> Campo IP 2.7.1.1 -> Tamanho 2.7.1.2 -> Checksum 2.7.2 -> Cabeçalhos IP de pacotes ICMP respondidos 2.7.2.1 -> Campo ID(entificaçao) 2.7.2.2 -> TTL (Time-To-Live) 2.7.2.3 -> TOS (Type-Of-Service) 2.7.3 -> Cabeçalhos ICMP de pacotes ICMP respondidos 2.7.3.1 -> Tamanho das mensagens de erro 2.7.3.2 -> Repetiçao de mensagens de erro 2.7.4 -> Outros 2.7.4.1 -> Valores de campos diferentes de zero em "ICMP echo request" 2.7.4.2 -> Outras mensagens 3 -> Problemas 4 -> Ferramentas 5 -> Referencias 6 -> Fim ========= (1) INTRODUÇAO ========== Tenho notado que muitas pessoas usam programas como "nmap" para descobrir o sistema operacional do host alvo, mas poucas sabem como isso funciona. Eh o esquema "sabe como usar, nao sabe como fazer". Nao estou dizendo que eh preciso saber fazer um programa como o nmap, mas sim saber como funciona. A obtençao do fingerprinting (impressao, assinatura) eh uma tecnica extremamente poderosa e muito confiavel, uma vez que cada desenvolvedor faz diferentes implementaçoes nas pilhas TCP/IP do seu SO. Em outras palavras, cada Sistema Operacional tem uma identidade, como todo cidadao. Sabendo das diferenças de um sistema para outro, podemos obter o SO que esta rodando. Ha apenas um porem: essa tecnica exige pelo menos uma porta aberta. ATENÇAO: essa explicaçoes servem para a versao do IP 4 (IPv4). ============== (2) TIPOS ============== Ha varias maneiras de obter o fingerprinting, citarei algumas delas: (2.1) Manipulaçao de Fragmentaçao -> citado por Thomas Ptacek e Tim Newsham. Cada pilha TCP/IP manipula os fragmentos diferentemente. Algumas, por exemplo, quando os fragmentos sao remontados, sobrescrevem os dados antigos com os novos, ou o contrario. Sabendo como os pacotes sao remontados, podemos saber qual eh o SO; (2.2) FIN -> quando um pacote FIN eh enviado a uma porta aberta, o comportamento certo do host alvo eh nao responder. Mas alguns SO repondem com um FIN/ACK , como o Windows NT; (2.3) Tamanho da Janela Inicial do TCP -> verifica-se o tamanho inical da janela de pacotes retornados do host alvo; (2.4) Flag Falso -> verifica-se o flag configurado retornado do host alvo. No caso do Linux, responde configurado em 1 no seu pacote de resposta; (2.5) Bit nao fragmentar -> verifica-se o bit nao fragmentar, que alguns SO configuram para obter um melhor desempenho; (2.6) Valor ACK -> verifica-se o campo ACK do TCP/IP. Em alguns SO, devolvem o numero de sequencia enviado, e em outros, o [numero de sequencia] + [1]; (2.7) ICMP -> fingerprinting baseado em ICMP, consiste, basicamente, em fazer de 1 a 4 testes para descobrir o sistema operacional do alvo ou, melhor dizendo, analisar as mensagens ICMP respondidas do host alvo. O ICMP eh uma implementaçao do IP. Foi acrescentado para informar os erros ou fornecer informaçoes sobre ocorrencias inesperadas. Ou seja, ele permite que roteadores enviem mensagens de erro/controle aos outros roteadores/hosts, alem de possibilitar a comunicaçao entre o software do IP em uma maquina com o software do IP de outra maquina. Quando ocorre algum problema previsto pelo ICMP, a mensagem ICMP descrevendo a situaçao eh preparada e entregue ateh a camada IP (veja abaixo em "Campo IP"), que adiciona `a mensagem ICMP o cabeçalho IP e envia ao emissor do datagrama com o qual ocorreu o erro. Abaixo estah um esquema do do encapsulamento da mensagem ICMP em um datagrama IP: ________________________________ | MENSAGEM ICMP | -------------------------------- ===== ===== ===== ________________________________________________________________ | CABEÇALHO IP | | DADOS IP | ----------------------------------------------------------------- ====== ====== ====== ____________________________________________________ | CABEÇALHO DO QUADRO | | DADOS DO QUADRO | ----------------------------------------------------- (2.7.1) Campo IP O IP eh o serviço mais importante de uma rede, e consiste, basicamente, em um sistema de entrega de pacotes. Eh considerado um sistema de transmissao sem conexao, e nao- confiavel, pois a entrega desses pacotes nao eh garantida. Ou seja, este pacote pode ser perdido, reproduzido, pode atrasar-se ou ser entregue com problemas, mas o serviço nao detectara isso, e nem ira informar ao transmissor e nem ao receptor. Eh considerado sem transmissao porque cada pacote eh independente dos outros, ou seja, cada pacote enviado pode trafegar por diferentes caminhos. Abaixo esta a organizaçao dos campos em um datagrama, que sera muito util para entender as explicaçoes que seguem: 0 1 2 3 4 8 16 24 31 ________________________________________________________________________________________________________________________ VERS | HLEN | TIPO DE SERVIÇO (TOS) | COMPRIMENTO TOTAL | ------------------------------------------------------------------------------------------------------------------------ IDENTIFICAÇAO (ID) | FLAGS | DESLOCAMENTO DO FRAGMENTO | ------------------------------------------------------------------------------------------------------------------------ TEMPO DE VIDA (TTL) | PROTOCOLO | CHECKSUM | ------------------------------------------------------------------------------------------------------------------------ ENDEREÇO IP DE ORIGEM | ------------------------------------------------------------------------------------------------------------------------ ENDEREÇO IP DE DESTINO | ------------------------------------------------------------------------------------------------------------------------ OPÇOES IP (se houver) | PADDING | ------------------------------------------------------------------------------------------------------------------------ DADOS | ------------------------------------------------------------------------------------------------------------------------ ... | ------------------------------------------------------------------------------------------------------------------------ Nao irei aprofundar sobre esse assunto. Se voce nao sabe como funcionam esses campos, procure pela Internet textos sobre TCP/IP. Recomendo que, a medida que voce for lendo as explicaçoes abaixo, tambem de uma olhada nesses campos. (2.7.1.1) Tamanho O tamanho do campo IP pode variar entre alguns SO's. Na familia BSD, por exemplo, eh adicionado 20 bytes no tamanho do campo IP. Alguns outros, diminuem 20 bytes e, outros, nao adicionam e nao diminuem, apenas repetem o campo. (2.7.1.2) Checksum (verificaçao da soma do cabeçalho) Neste campo, alguns SO's irao calcular erroneamente, enquanto outros apenas irao zerar ele. Alguns outros irao repeti-lo. (2.7.2) Cabeçalhos IP de pacotes ICMP respondidos (2.7.2.1) Campo ID(entificaçao) (linux 2.4.0 - 2.4.4) Essas versoes do linux farao um pedido de examinaçao ICMP (ICMP query request) para configurar o valor deste campo. OBS: isso ja foi corrigido no kernel 2.4.5 adiante. (2.7.2.2) TTL (Time-To-Live -> Tempo de vida) Este campo determina quanto tempo, em segundos (maximo de 255 segundos), o datagrama IP pode permanecer no sistema de interligaçao em redes. Os roteadores/hosts que processam datagramas precisam diminuir o campo TTL a medida que o tempo passa e remover o datagrama da interligaçao quando seu tempo expira (valor do campo igual a zero). Temos dois valores no TTL. Um, para consultar mensagens ICMP, outro, para responder as consultas. A verificaçao desses valores podera nos ajudar a descobrir o SO do host alvo. (2.7.2.3) TOS (Type-Of-Service -> Tipo de Serviço) O uso do TOS com mensagens ICMP eh diferente entre mensagens de erro ICMP (destination unreachable, source quench, redirect, time exceeded e parameter problem), mensagens de consulta (echo, router solicitation, timestamp, information request, address mask request), e mensagens de respostas (echo reply, router advertisement, timestamp reply, information reply, address mask reply). O RFC 1349 dita algumas regras: -> Uma mensagem de erro ICMP eh sempre enviada com o valor TOS padrao (0); -> Uma mensagem de solicitaçao ICMP pode ser enviada com qualquer valor no TOS; -> Uma mensagem de resposta ICMP eh enviada com o mesmo valor no TOS que foi usado na mensagem de solicitaçao ICMP. Alguns SO's irao ignorar o RFC e repetirao a mensagem de resposta ICMP. (2.7.3) Cabeçalhos ICMP de pacotes ICMP respondidos (2.7.3.1) Tamanho das Mensagens de erro As mensagens ICMP de erro contem um cabeçalho IP, um ICMP e alguns dados do datagrama original. Mais ou menos assim: ______________________________________________________________________________ | | | | | CABEÇALHO IP | CABEÇALHO ICMP | DADOS | | | | | ------------------------------------------------------------------------------ Segundo o RFC 792, somente 8 octetos (64 bits) do datagrama original sao incluidos nas mensagens ICMP de erro. Porem, o RFC 1122, que foi lançado depois, recomenda 576 octetos, muito mais do que o primeiro. Alguns sistemas operacionais seguem o RFC antigo (incluem 8 octetos nas mensagens ICMP de erro). Ja outros, como o Linux/HPUX 11.x, Solaris e MacOS, irao adicionar mais octetos. (2.7.3.2) Repetiçao de mensagens de erro No envio de uma mensagem ICMP de erro, algumas implementaçoes na pilha poderiam alterar os cabeçalhos IP e alguns dados do protocolo, repetindo a mensagem de erro. Desde entao, programadores diferenciam a pilha TCP/IP para cada SO. Fazendo uma analise dessa diferenças, podemos fazer algumas suposiçoes sobre o SO do host alvo. (2.7.4) Outros (2.7.4.1) Valores de campos diferentes de zero em "ICMP echo request" Quando mandamos um valor no campo ICMP diferente de zero em um pedido "ICMP echo", o SO que ira nos responder, como Windows, ira mandar uma resposta a esse pedido com um valor no campo ICMP igual a zero. Outros SO's irao repetir o valor do campo ICMP que nos usamos no nosso pedido. Esquema disso com um Windows: ________________________ __________________ | | ===========================================>(nosso pedido) | | | LINUX | | WINDOWS | | (localhost) | (resposta com campo ICMP dif. de zero)<==================== | (host alvo) | | | | | ------------------------ -------------------- (2.7.4.2) Outras mensagens -> ICMP timestamp request -> ICMP Information request -> ICMP address mask request Algumas pilhas TCP/IP suportam estas mensagens e respondem algumas dessas consultas. ============= (3) PROBLEMAS ============= Embora muito eficiente, esta tecnica pode nao dar certo, sendo que eh possivel alterar o codigo fonte ou alterar um parametro de um sistema operacional para mudar algumas caracteristicas da pilha. Mas isso pode afetar a funcionalidade do sistema operacional, entao, isso nao eh muito usado. ============= (4) FERRAMENTAS ============ Linux: NMAP O nmap eh um scanneador de portas, mas eh possivel tambem usa-lo para identificar o sistema operacional do host alvo. Se voce nao tem ele instalado, essa eh uma boa hora para instala-lo. [root@Tilly home]#nmap -O 200.213.30.42 Starting nmap V. 2.54BETA30 ( www.insecure.org/nmap/ ) Interesting ports on 200.213.30.42 : Port State Service 22 open ssh 25 open smtp Remote operating system guess: Linux 2.1.19 - 2.2.17 Uptime 0.001 days (since Tue Jun 24 10:11:40 2003) Nmap run completed -- 1 IP address (1 host up) scanned in 1 second [root@Tilly home]# Como podemos ver, ele nos indica o sistema operacional (Linux 2.1.19 - 2.2.17), alem de nos mostrar as portas abertas. Windows: WINFINGERPRINT Este programa tambem eh muito completo, uma vez que lhe da opçoes diferentes, nao soh de fingerprinting. Veja mais em REFERENCIAS. ============== (5) REFERENCIAS ============= NMAP: http://insecure.org/nmap WINFINGERPRINT: http://winfingerprint.sourceforge.net/ http://www.larkware.com/Articles/FingerprintingWindows.html http://www.phrack.org Arquitetura TCP/IP (Cristiano Alan Torres) Hackers Expostos - Makron Books ================= (6) FIM =================== Bom pessoal, termino aqui mais um texto para a comunidade hacker do Brasil. Voces puderam perceber que demorei bastante para escrever a zine 01, e tambem que soh escrevi este texto, nessa ediçao. Mas voces sabem... o estudo eh uma coisa seria, alem de que tenho outros compromissos. Espero (novamente) lançar a ediçao 02 o mais rapido possivel. Vou ter um tempo de folga em alguns dias, e vou trabalhar bastante em cima do Zine. No mais, ouçam Bob Marley! :P Tilly -> tilly@linuxmail.org Resistencia Zine ed. 01 01/07/03