Saída (Output)

Qualquer ferramenta de segurança só é útil se a saída que ela gera também o for. Testes e algorítmos complexos são de pouco valor se não forem apresentados de uma forma organizada e compreensível. Dado o número de formas que o Nmap é utilizado pelas pessoas e por outros softwares, nenhum formato irá agradar a todos. Então o Nmap oferece diversos formatos incluindo o modo interativo para humanos lerem diretamente e o XML para fácil interpretação por um software.

Além de oferecer diversos formatos de saída, o Nmap fornece opções para controlar a verbosidade da saída assim como as mensagens de depuração. Os tipos de saída podem ser enviados para a saída padrão (standard output) ou para arquivos, o qual o Nmap pode acrescentar ou então sobrescrever. Arquivos de saída também podem ser utilizados para se retomar rastreios(scans) abortados.

O Nmap torna a saída disponível em cinco formatos diferentes. O default é chamado de saída interativa (interactive output) e é enviada para a saída padrão (stdout). Há também a saída normal (normal output) que é similar à interativa excepto pelo facto de mostrar menos informações e alertas sobre a execução uma vez que se espera que seja feita uma análise somente após o rastreio(scan) completar, ao invés de interativamente.

A saída XML é um dos tipos de saída mais importantes pois permite a conversão para HTML, é facilmente analisada por programas como a interface gráfica do Nmap ou pode ser importada em banco de dados.

Os dois tipos restantes de saída são a simples saída para o grep (grepable output) que inclui a maioria das informações de um anfitrião(host)-alvo em uma única linha e a s4íd4 sCRiPt KiDDi3 (sCRiPt KiDDi3 0utPUt) para usuários que se consideram 1r4d0z (|<-r4d).

Embora a saída interativa seja a default e não tenha associada nenhuma opção de linha de comando, as outras quatro opções de formato utilizam a mesma sintaxe. Elas recebem um argumento que é o nome do arquivo onde os resultados devem ser armazenados. Formatos múltiplos podem ser especificados mas cada formato só pode ser especificado uma vez. Por exemplo, pode querer armazenar a saída normal para seu uso enquanto grava a saída XML do mesmo rastreio(scan) para análise utilizando programas. Você pode fazer isso com as opções -oX myscan.xml -oN myscan.nmap. Embora este capítulo use nomes simples como myscan.xml por uma questão de brevidade, nomes mais descritivos normalmente são recomendados. Os nomes escolhidos são uma questão de preferência pessoal, embora eu use nomes longos que incorporam da data do rastreio(scan) e uma palavra ou duas que descrevam o rastreio(scan), colocados em um diretório com o nome da empresa que eu estou rastreando.

Mesmo que essas opções gravem os resultados em arquivos, o Nmap ainda assim mostra a saída interativa na stdout como de costume. Por exemplo, o comando nmap -oX myscan.xml target grava em XML no myscan.xml e enche a saída padrão com os mesmos resultados interativos que teria mostrado se a opção -oX não tivesse sido especificada. Você pode mudar isso passando um caracter hífen como argumento de um dos tipos de formato. Isso faz com que o Nmap desactive a saída interativa e apenas grave os resultados no formato que especificou para a saída padrão. Dessa forma, o comando nmap -oX - target irá enviar apenas a saída XML para a stdout. Erros sérios ainda podem ser mostrados na saída padrão de erros, stderr.

Ao contrário de alguns argumentos do Nmap o espaço em branco entre a flag da opção (como a -oX) e o nome do arquivo ou hífen é obrigatório. Se omitir as flags e informar argumentos como -oG- ou -oXscan.xml, uma característica de compatibilidade retroactiva do Nmap irá causar a criação de arquivos de saída do tipo normal format chamados G- e Xscan.xml respectivamente.

O Nmap também oferece opções para controlar a verbosidade do rastreio(scan) e para acrescentar informações nos arquivos de saída ao invés de sobrepor. Todas essas opções estão descritas abaixo.

Formatos de Saída do Nmap
-oN <especificaçãodearquivo> (Saída normal)

Solicita que a saída normal (normal output) seja direcionada para o arquivo informado. Conforme discutido acima, é um pouco diferente da saída interativa (interactive output).

-oX <especificaçãodearquivo> (Saída em XML)

Solicita que a saída em XML (XML output) seja direcionada para o arquivo informado. O Nmap inclui uma definição do tipo de documento (document type definition, DTD) que permite que os analisadores (parsers) XML validem a saida em XML do Nmap. Embora seja primeiramente voltada para ser usada por programas também pode ajudar os humanos a interpretar a saída em XML do Nmap. A DTD define os elementos válidos do formato e geralmente enumera os atributos e valores que eles podem receber. A última versão está sempre disponível em https://nmap.org/data/nmap.dtd.

O XML oferece um formato estável que é facilmente interpretado por software. Interpretadores (parsers) XML gratuitos estão disponível para as principais linguagens de computador, incluindo C/C++, Perl, Python e Java. As pessoas até já escreveram extensões para a maioria dessas linguagens para manipular a saída e a execução especificamente do Nmap. Exemplos são o Nmap::Scanner e o Nmap::Parser em Perl CPAN. Em quase todos os casos em que uma aplicação não-trivial faz interface com o Nmap, o XML é o formato preferido.

A saída XML faz referência a uma folha de estilo que pode ser usada para formatar os resultados em HTML. A forma mais fácil de se utilizar isso é simplesmente carregar a saída XML em um navegador web como o Firefox ou o IE. Por default, isso só irá funcionar na máquina onde rodou o Nmap (ou em uma máquina similarmente configurada) devido ao caminho (path) do sistema de arquivos (filesystem) gravado de forma inalterável do nmap.xsl. Veja a opção --stylesheet para ver uma forma de criar um arquivo XML portável que possa ser interpretado como um HTML em qualquer máquina conectada à web.

-oS <especificaçãodearquivo> (S4íd4 ScRipT KIdd|3)

A saída script kiddie é como a saída interativa, com a diferença de ser pós-processada para atender melhor ao "hacker de elite" ('l33t HaXXorZ') que antigamente rejeitava o Nmap devido ao uso consistente de maiúsculas e minúsculas e a grafia correta. Pessoas sem senso de humor devem observar que esta opção serve para se fazer graça dos script kiddies antes de me lixar por estar, supostamente, ajudando-os.

-oG <especificaçãodearquivo> (Saída para o grep)

Este formato de saída é mencionado por último porque está deprecado. O formato de saída XML é muito mais poderoso e é bastante adequado para usuário avançados. O XML é um padrão para o qual existem dezenas de excelentes interpretadores (parsers) disponíveis, enquanto que a saída para o grep é um quebra-galho feito por mim. O XML é estensível para suportar novas características do Nmap conforme elas forem lançadas, por outro lado, sempre tenho que omitir essas novas características da saída para o grep por falta de onde colocá-las.

Apesar disso a saída para o grep é bastante popular. É um formato simples que lista cada anfitrião(host) em uma linha e pode ser pesquisado de forma trivial e interpretado por qualquer ferramenta padrão do Unix como o grep, awk, cut, sed, diff e Perl. Eu mesmo uso-a para testes rápidos feitos na linha de comando. Descobrir todos os anfitriões(hosts) com a porta ssh aberta ou que estão com o SO Solaris requer apenas um simples grep para identificá-los, concatenado via pipe a um comando awk ou cut para mostrar os campos desejados.

A saída para o grep consiste de comentários (linhas começadas com o símbolo #) e linhas-alvo. Uma linha-alvo inclui uma combinação de 16 campos rotulados, separados por tab e seguidos por dois-pontos. Os campos são Host, Portas (Ports),Protocolos (Protocols), Estado Ignorado (Ignored State), SO (OS), Índice de Seqüência (Seq Index), IPID e Estado (Status).

O campo mais importante é normalmente Portas (Ports), que fornece detalhes de cada porta interessante. É uma lista com a relação de portas separada por vírgula. Cada porta representa uma porta interessante e tem o formato de sete sub-campos separados por barra (/). Esses sub-campos são: Número da Porta (Port number), Estado (State), Protocolo (Protocol), Proprietário (Owner), Serviço (Service), informação sobre o SunRPC (SunRPC info) e informação sobre a Versão (Version info).

Assim como na saída XML, esta página man não permite que se documente o formato todo. Uma visão mais detalhada sobre o formato de saída para o grep do Nmap está disponível em http://www.unspecific.com/nmap-oG-output.

-oA <nome-base> (Saída para todos os formatos)

Para facilitar pode especificar -oA <nome-base> para armazenar os resultados de rastreio(scan) nos formatos normal, XML e para o grep de uma só vez. Eles são armazenados nos arquivos <nome-base>.nmap, <nome-base>.xml e <nome-base>.gnmap, respectivamente. Como na maioria dos programas pode colocar como prefixo nos nomes de arquivos o caminho de um diretório como ~/nmaplogs/foocorp/ no UNIX ou c:\hacking\sco no Windows.

Opções de Verbosidade e depuração (debugging)
-v (Aumenta o nível de verbosidade)

Aumenta o nível de verbosidade fazendo com que o Nmap mostre mais informações sobre o progresso do rastreio(scan). Portas abertas são mostradas conforme são encontradas e estimativas de tempo para o término são fornecidas quando o Nmap acha que um rastreio(scan) irá demorar mais do que alguns minutos. Use duas vêzes para uma verbosidade ainda maior. Usar mais do que duas vêzes não surte nenhum efeito.

A maioria das alterações afectam apenas a saída interactiva e algumas também afectam a saída normal e script kiddie. Os outros tipos de saída foram feitos para serem processados por máquinas, então o Nmap pode dar informações bastante detalhadas por default nesse formatos sem cansarem o usuário humano. Entretanto, existem algumas mudanças nos outros modos onde o tamanho da saída pode ser reduzido substancialmente pela omissão de alguns detalhes. Por exemplo, uma linha de comentário na saída para o grep que fornece uma lista de todas as portas rastreadas só é mostrada no modo verboso porque ela pode ser bem longa.

-d [nível] (Aumenta ou estabelece o nível de depuração)

Se mesmo o modo verboso não fornece dados suficientes para si, o modo de depuração está disponível para inundá-lo com muito mais! Assim como na opção de verbosidade (-v), a depuração é habilitada com uma flag na linha de comando (-d) e o nível de depuração pode ser aumentado especificando-a múltiplas vêzes. Alternativamente pode estabelecer o nível de depuração fornecendo um argumento para o -d. Por exemplo, -d9 estabelece o nível nove. Esse é efectivamente o nível mais alto e irá produzir milhares de linhas a menos que execute um rastreio(scan) muito simples com poucas portas e alvos.

A saída da depuração é útil quando há a suspeita de um bug no Nmap ou se está simplesmente confuso com o que o Nmap está fazendo e porquê. Como esta opção é na maioria das vêzes destinada a programadores, as linhas de depuração nem sempre são auto-explicativas. Pode obter algo como: Timeout vals: srtt: -1 rttvar: -1 to: 1000000 delta 14987 ==> srtt: 14987 rttvar: 14987 to: 100000. Se não entender alguma linha suas únicas opções serão ignorá-la, procurar no código-fonte ou pedir ajuda na lista de discussão de desenvolvimento (nmap-dev). Algumas linhas são auto-explicativas mas as mensagens ficam cada vez mais obscuras conforme o nível de depuração é aumentado.

--packet-trace (Rastreia pacotes e dados enviados e recebidos)

Faz com que o Nmap moste um sumário de todos os pacotes enviados ou recebidos. Isto é bastante usado para depuração mas também é uma forma valiosa para novos usuário entenderem exatamente o que o Nmap está fazendo por debaixo dos panos. Para evitar mostrar milhares de linhas, pode querer especificar um número limitado de portas a rastrear(scan) como -p20-30. Se tudo o que lhe interessa for saber o que se passa no subsistema de detecção de versão, use o --version-trace.

--iflist (Lista as interfaces e rotas)

Mostra a lista de interfaces e rotas do sistema conforme detectados pelo Nmap. Isto é útil para depurar problemas de roteamento ou erro de configuração de dispositivo (como, por exemplo, no caso do Nmap tratar uma conexão PPP como se fosse uma Ethernet).

Opções diversas (miscellaneous) de saída
--append-output (Acrescenta no arquivo de saída ao invés de sobrepor)

Quando especifica um nome de arquivo na flag de formato de saída, como -oX ou -oN, esse arquivo é sobreposto por default. Se preferir manter o conteúdo existente no arquivo e acrescentar os novos resultados, especifique a opção --append-output. Todos os arquivos de saída especificados na execução do Nmap terão os resultados acrescidos ao invés de sobrepostos. Isso não funciona bem com os dados de rastreio(scan) para XML (-oX) pois o arquivo resultante não será adequadamente interpretado até que consserte manualmente.

--resume <nomedoarquivo> (Retoma um rastreio(scan) abortado)

Algumas execuções extensas do Nmap podem levar muito tempo, na ordem de dias. Tais rastreios(scans) nem sempre rodam até o fim. Podem haver restrições que impeçam que o Nmap seja executado durante o horário de expediente, a rede pode cair, a máquina onde o Nmap está a ser executado pode sofrer um reboot planeado ou não, ou o Nmap pode simplesmente travar. O administrador que está executando o Nmap poderia cancelá-lo por qualquer outra razão bastando teclar ctrl-C. Reiniciar um rastreio(scan) inteiro do começo pode ser indesejável. Felizmente se forem mantidos logs normais (-oN) ou para o grep (-oG), o usuário pode pedir que o Nmap continue o rastreio(scan) do alvo que estava verificando quando a execução foi interrompida. Simplesmente especifique a opção --resume e informe o arquivo da saída normal/para o grep como argumento. Nenhum outro argumento é permitido, pois o Nmap analisa o arquivo de saída e usa os mesmos argumentos especificados anteriormente. Basta chamar o Nmap com nmap --resume <nomedoarquivodelog>. O Nmap irá acrescentar os novos resultados ao arquivo de dados especificado na execução anterior. Essa retomada de execução não suporta o formato de saída XML porque combinar as duas execuções em um arquivo XML válido seria difícil.

--stylesheet <caminho ou URL> (Informa a folha de estilo XSL usada para transformar a saída XML)

O Nmap vem com uma folha de estilo (stylesheet) chamada nmap.xsl para visualizar ou traduzir a saída XML em HTML. A saída XML inclui uma diretiva xml-stylesheet que mostra para o nmap.xml onde ele foi inicialmente instalado pelo Nmap (ou para o diretório corrente no Windows). Simplesmente carregue a saída XML do Nmap em um navegador moderno e ele deve conseguir achar o nmap.xsl no sistema de arquivos e utilizá-lo para interpretar os resultados. Se desejar utilizar uma folha de estilo diferente, especifique-a como um argumento para --stylesheet. Deve informar o caminho completo ou a URL. Uma chamada comum é --stylesheet https://nmap.org/data/nmap.xsl . Isso diz ao navegador para carregar a versão mais actual da folha de estilo da Insecure.Org. Isso torna mais fácil ver os resultados em uma máquina que não tenha o Nmap instalado (e consequentemente o nmap.xsl). A URL é normalmente mais útil mas a localização nmap.xsl num sistema de ficheiros(filesystem) local é usada por default por questões de privacidade.

--no-stylesheet (Omite do XML a declaração da folha de estilo XSL)

Especifique esta opção para evitar que o Nmap associe qualquer folha de estilo XSL à saída XML. A directiva xml-stylesheet é omitida.