
Ferramenta de fingerprinting ativo que identifica 16 pilhas TCP/IP embarcadas em dispositivos de rede usando técnicas de sondagem ICMP, TCP, HTTP, SSH e FTP para avaliação de vulnerabilidades.
A ferramenta project-memoria-detector tem como objetivo determinar se um dispositivo de rede alvo executa uma pilha TCP/IP embarcada específica.
Atualmente, a ferramenta suporta impressões digitais para 16 pilhas TCP/IP embarcadas (e suas variações):
Várias das pilhas acima foram consideradas vulneráveis durante a pesquisa do Project Memoria.
O script identifica o uso das 16 pilhas TCP/IP em um dispositivo alvo através dos seguintes métodos de impressão digital ativa:
Embora o script tenha sido testado em ambiente de laboratório, não podemos garantir que seu uso seja seguro para todos os dispositivos possíveis. Pacotes ICMP malformados, por exemplo, podem travar um dispositivo que esteja executando uma pilha diferente. PORTANTO, NÃO RECOMENDAMOS O USO DIRETO EM AMBIENTES DE PRODUÇÃO COM DISPOSITIVOS CRÍTICOS (COMO HOSPITAIS COM DISPOSITIVOS CONECTADOS A PACIENTES OU SISTEMAS DE CONTROLE INDUSTRIAL DE SEGURANÇA CRÍTICA). Uma abordagem ideal é testar dispositivos em ambiente de laboratório ou durante uma janela de manutenção.
Observe que a ferramenta foi testada apenas em um ambiente de teste Linux (qualquer distribuição Linux moderna deve funcionar). Assume-se que o ambiente de teste esteja usando iptables (https://linux.die.net/man/8/iptables) como firewall básico.
A ferramenta requer uma versão recente do Python 3.x (veja https://www.python.org/, versão >= 3.7.7 é preferível), bem como Scapy (veja https://scapy.net/, versão >= 2.4.3 é preferível).
Para instalar o Scapy junto com Python e para solução de problemas gerais, siga a documentação aqui: https://scapy.readthedocs.io/en/latest/installation.html
Se o python já estiver instalado em sua máquina, para instalar as dependências necessárias, você pode usar pip e o arquivo requirements.txt fornecido:
$ pip install -r requirements.txt
Como o Scapy requer privilégios de root para ser executado, a ferramenta deve ser executada com sudo, por exemplo:
$ sudo python project-memoria-detector.py [options]
Para ver as opções disponíveis para executar o script, execute-o com a opção -h:
$ python project-memoria-detector.py -h
Em geral, o script requer pelo menos um único endereço IP do dispositivo alvo (este parâmetro pode ser especificado explicitamente com -ip_dst)
$ sudo python project-memoria-detector.py 192.168.3.1
O script suporta a varredura de faixas de endereços IP. Você pode especificar uma sub-rede para varredura usando a notação CIDR ou fornecer um arquivo .txt com um conjunto de endereços IP para varredura.
A notação CIDR pode ser usada da seguinte forma (para este exemplo, os endereços IP de 192.168.3.1 a 192.168.3.254 serão varridos:
$ sudo python project-memoria-detector.py 192.168.3.0/24
Você também pode usar um arquivo .txt para especificar os endereços IP de interesse: cada endereço IP neste arquivo deve começar em uma nova linha. Por exemplo, podemos criar um arquivo chamado input.txt com o seguinte conteúdo:
$ cat input.txt
192.168.1.8
192.168.1.9
192.168.3.1
192.168.2.14
Podemos então executar o script da seguinte forma:
$ sudo python project-memoria-detector.py --in-file input.txt
O script usa valores padrão para portas para identificar diferentes protocolos como SSH (22), FTP (21) e HTTP (80). Para sobrescrever esses valores padrão, você pode fazer isso definindo as flags como:
$ sudo python project-memoria-detector.py -ip_dst 192.168.212.42 --tcp-port 80 --http-port 80 --ssh-port 22 --ftp-port 21 -i eth1
O script exibirá correspondências para impressões digitais individuais, bem como o grau de certeza entre parênteses:
$ sudo python project-memoria-detector.py 192.168.6.42
192.168.6.42 is alive
ICMP => uIP/Contiki (High)
TCP => uIP/Contiki (Medium)
HTTP => uIP/Contiki (High)
SSH => Unknown (No match)
FTP => Unknown (No reply)
O grau de certeza de uma impressão digital específica pode ser High, Medium ou Low. No match significa que não houve correspondência com nenhuma impressão digital conhecida, e No reply significa que uma porta/serviço específico não está disponível.
Copyright (C) 2020 Forescout Technologies, Inc.
Licença do Programa
"O Programa" refere-se a qualquer obra protegida por direitos autorais licenciada sob esta Licença. Cada licenciado é tratado como "você".
Todos os direitos concedidos sob esta Licença são concedidos pelo período de vigência dos direitos autorais do Programa e são irrevogáveis, desde que as condições estabelecidas sejam cumpridas. Esta Licença afirma explicitamente sua permissão ilimitada para executar o Programa não modificado para uso pessoal, governamental, comercial ou sem fins lucrativos. Você está proibido de usar o Programa em obras derivadas para fins comerciais. Você está proibido de modificar o Programa para ser utilizado em um produto ou serviço comercial, seja sozinho ou em conjunto com outro código, seja baixável ou acessado como serviço. "Obras derivadas" significam qualquer obra, seja na forma de código-fonte ou objeto, que seja baseada (ou derivada) do Programa e para a qual as revisões editoriais, anotações, elaborações ou outras modificações representem, como um todo, uma obra original de autoria.
Você pode transmitir cópias verbatim do código-fonte do Programa conforme o recebe, em qualquer meio, desde que publique de forma visível e apropriada em cada cópia um aviso de direitos autorais adequado; mantenha intactos todos os avisos que afirmam que esta Licença se aplica ao código; mantenha intactos todos os avisos da ausência de qualquer garantia; entregue a todos os destinatários uma cópia desta Licença juntamente com o Programa; e não se beneficie financeiramente com a venda ou outra transmissão do Programa, seja sozinho ou em conjunto com outro código, baixado ou acessado como serviço.
O SOFTWARE É FORNECIDO "NO ESTADO EM QUE SE ENCONTRA", SEM GARANTIA DE QUALQUER TIPO, EXPRESSA OU IMPLÍCITA, INCLUINDO, MAS NÃO SE LIMITANDO ÀS GARANTIAS DE COMERCIALIZAÇÃO, ADEQUAÇÃO A UM PROPÓSITO ESPECÍFICO E NÃO VIOLAÇÃO. EM NENHUM CASO OS AUTORES OU TITULARES DOS DIREITOS AUTORAIS SERÃO RESPONSÁVEIS POR QUALQUER REIVINDICAÇÃO, DANOS OU OUTRA RESPONSABILIDADE, SEJA EM AÇÃO DE CONTRATO, ATO ILÍCITO OU DE OUTRA FORMA, DECORRENTE DE, OU EM CONEXÃO COM O SOFTWARE OU O USO OU OUTRAS NEGOCIAÇÕES NO SOFTWARE.
Esta Licença não concede permissão para usar nomes comerciais, marcas registradas, marcas de serviço ou nomes de produtos do Licenciante, exceto conforme necessário para uso razoável e costumeiro na descrição da origem do Programa e reprodução do conteúdo do aviso de direitos autorais.