Saída (Output)

Qualquer ferramenta de segurança só é útil se a saída que ela gera também o for. Testes e algoritmos 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, bem como das 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 scans abortados.

O Nmap torna a saída disponível em cinco formatos diferentes. O padrão é 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 exceto pelo fato 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 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 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 padrão 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, você pode querer armazenar a saída normal para seu uso enquanto grava a saída XML do mesmo 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 a data do scan e uma palavra ou duas que descrevam o scan, colocados em um diretório com o nome da empresa que eu estou escaneando.

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 desative a saída interativa e apenas grave os resultados no formato que você 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 você omitir as flags e informar argumentos como -oG- ou -oXscan.xml, uma característica de compatibilidade retroativa 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 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 saída 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 à 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 padrão, isso só irá funcionar na máquina onde você 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. Utilize a opção --webxml ou --stylesheet para criar arquivos XML portáveis que podem ser interpretados 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 aos "hackers de elite" (l33t HaXXorZ) que antigamente rejeitavam 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 xingar 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 é extensí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 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. Em mesmo uso-a para testes rápidos feitos na linha de comando. Descobrir todos os hosts com a porta ssh aberta ou que estão rodando o 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 formato)

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

-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 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 scan irá demorar mais do que alguns minutos. Use duas vezes para uma verbosidade ainda maior. Usar mais do que duas vezes não surte nenhum efeito.

A maioria das alterações afetam apenas a saída interativa, e algumas também afetam 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 padrão 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 escaneadas 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 você, 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 vezes. Alternativamente, você pode estabelecer o nível de depuração fornecendo um argumento para o -d. Por exemplo, -d9 estabelece o nível nove. Esse é efetivamente o nível mais alto e irá produzir milhares de linhas, a menos que você execute um 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 você simplesmente está confuso com o que o Nmap está fazendo e por quê. Como esta opção é, na maioria das vezes, destinada a desenvolvedores, a linhas de depuração nem sempre são auto-explicativas. Você pode obter algo como: Timeout vals: srtt: -1 rttvar: -1 to: 1000000 delta 14987 ==> srtt: 14987 rttvar: 14987 to: 100000. Se você não entender uma 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 mostre 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 baixo dos panos. Para evitar mostrar milhares de linhas, você pode querer especificar um número limitado de portas a escanear, 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 caracterização de dispositivo (como, por exemplo, no caso do Nmap tratar uma conexão PPP como se fosse uma Ethernet).

--log-errors (Registrar os erros/avisos em um arquivo de sáida em modo normal)

Avisos e erros mostrados pelo Nmap normalmente aparecem apenas na tela (saída interativa), deixando quaisquer arquivos de saída com formato normal especificados íntegros. Mas quando você quer realmente ver essas mensagens no arquivo de saída que você especificou, inclua esta opção. É útil quando você não está vendo a saída interativa ou está tentando depurar um problema. As mensagens continuarão a aparecer no modo interativo. Isto não irá funcionar para a maioria dos erros ligados à argumento inválidos na linha de comando, ocorre que o Nmap pode ainda não ter inicializado seus arquivos de saída ainda. Somado a isso, algumas mensagens de erro/aviso do Nmap utilizam um sistema diferente que ainda não suporta esta opção. Uma alternativa ao uso desta opção é redirecionar a saída interativa (incluindo o fluxo de erros padrão) para um arquivo. Embora a maioria dos shells Unix tornem essa uma alternativa fácil, pode ser difícil fazer o mesmo no Windows.

--append-output (Acrescenta no arquivo de saída, ao invés de sobrepor)

Quando você especifica um nome de arquivo na flag de formato de saída, como -oX ou -oN, esse arquivo é sobreposto por padrão. Se você preferir manter o conteúdo existente do 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 scan para XML (-oX) pois o arquivo resultante não será adequadamente interpretado até que você conserte manualmente.

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

Algumas execuções extensas do Nmap podem levar muito tempo -- na ordem de dias. Tais 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á rodando pode sofrer um reboot planejado ou não, ou o Nmap pode simplesmente travar. O administrador que está rodando o Nmap poderia cancelá-lo por qualquer outra razão, bastando teclar ctrl-C. Reiniciar um scan inteiro do começo pode ser indesejável. Felizmente, se forem mantidas logs normal (-oN) ou para o grep (-oG), o usuário pode pedir que o Nmap continue o escaneamento 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 você deseja utilizar uma folha de estilo diferente, especifique-a como um argumento para --stylesheet. Você 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 atual da folha de estilo da Insecure.Org. A opção --webxml faz a mesma coisa com menos teclas e menor memorização. Carregar o XSL da Insecure.org torna mais fácil de se ver os resultados em uma máquina que não tenha o Nmap instalado (e, conseqüentemente o nmap.xsl). Então, a URL é normalmente mais útil, mas a localização nmap.xsl em um filesystem local é usada por padrão por questões de privacidade.

--webxml (Carrega a folha de estilo da Insecure.Org)

Esta opção conveniente é apenas um apelido para --stylesheet https://nmap.org/data/nmap.xsl.

--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 diretiva xml-stylesheet é omitida.