
Инструмент активного снятия отпечатков, который идентифицирует 16 встроенных стеков TCP/IP на сетевых устройствах с использованием методов зондирования ICMP, TCP, HTTP, SSH и FTP для оценки уязвимостей.
Инструмент project-memoria-detector предназначен для определения, работает ли на целевом сетевом устройстве конкретный встроенный стек TCP/IP.
В настоящее время инструмент поддерживает отпечатки (fingerprints) для 16 встроенных стеков TCP/IP (и их вариаций):
Некоторые из перечисленных стеков были признаны уязвимыми в ходе исследования Project Memoria.
Скрипт идентифицирует использование 16 стеков TCP/IP на целевом устройстве с помощью следующих методов активного снятия отпечатков:
Хотя скрипт был протестирован в лабораторных условиях, мы не можем гарантировать его безопасность для всех возможных устройств. Некорректные ICMP-пакеты, например, могут привести к сбою устройства, работающего с другим стеком. ПОЭТОМУ МЫ НЕ РЕКОМЕНДУЕМ ИСПОЛЬЗОВАТЬ ЕГО НЕПОСРЕДСТВЕННО В РАБОЧИХ СРЕДАХ С КРИТИЧЕСКИ ВАЖНЫМИ УСТРОЙСТВАМИ (НАПРИМЕР, В БОЛЬНИЦАХ С ПОДКЛЮЧЁННЫМИ К ПАЦИЕНТАМ УСТРОЙСТВАМИ ИЛИ В КРИТИЧЕСКИХ ПРОМЫШЛЕННЫХ СИСТЕМАХ УПРАВЛЕНИЯ). Идеальный подход — тестирование устройств в лабораторных условиях или в окно технического обслуживания.
Обратите внимание, что инструмент тестировался только в среде Linux (должен работать в любом современном дистрибутиве Linux). Предполагается, что в тестовой среде используется iptables (https://linux.die.net/man/8/iptables) в качестве базового брандмауэра.
Инструмент требует установки Python версии 3.x (см. https://www.python.org/, желательно версия >= 3.7.7), а также Scapy (см. https://scapy.net/, желательно версия >= 2.4.3).
Чтобы установить Scapy вместе с Python и для общей диагностики, следуйте документации: https://scapy.readthedocs.io/en/latest/installation.html
Если Python уже установлен на вашем компьютере, для установки необходимых зависимостей можно использовать pip и предоставленный файл requirements.txt:
$ pip install -r requirements.txt
Поскольку для запуска Scapy требуются права root, инструмент необходимо запускать с помощью sudo, например:
$ sudo python project-memoria-detector.py [options]
Чтобы просмотреть доступные параметры запуска скрипта, запустите его с опцией -h:
$ python project-memoria-detector.py -h
В общем случае скрипту требуется хотя бы один IP-адрес целевого устройства (этот параметр можно явно указать с помощью -ip_dst):
$ sudo python project-memoria-detector.py 192.168.3.1
Скрипт поддерживает сканирование диапазонов IP-адресов. Вы можете указать подсеть для сканирования в нотации CIDR или предоставить .txt-файл с набором IP-адресов для сканирования.
Нотацию CIDR можно использовать следующим образом (в этом примере будут просканированы IP-адреса с 192.168.3.1 по 192.168.3.254):
$ sudo python project-memoria-detector.py 192.168.3.0/24
Также можно использовать .txt-файл для указания интересующих IP-адресов: каждый IP-адрес в этом файле должен начинаться с новой строки. Например, создадим файл input.txt со следующим содержимым:
$ cat input.txt
192.168.1.8
192.168.1.9
192.168.3.1
192.168.2.14
Затем запустим скрипт следующим образом:
$ sudo python project-memoria-detector.py --in-file input.txt
Скрипт использует значения портов по умолчанию для снятия отпечатков различных протоколов, таких как SSH (22), FTP (21) и HTTP (80). Чтобы переопределить эти значения, вы можете задать их с помощью флагов, например:
$ 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
Скрипт выводит совпадения с отдельными отпечатками, а также степень уверенности в круглых скобках:
$ 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)
Степень уверенности для конкретного отпечатка может быть High, Medium или Low. No match означает отсутствие совпадения с известными отпечатками, а No reply — что конкретный порт/служба недоступны.
Copyright (C) 2020 Forescout Technologies, Inc.
Лицензия на программу
«Программа» означает любую охраняемую авторским правом работу, лицензируемую в соответствии с данной Лицензией. Каждый лицензиат упоминается как «вы».
Все права, предоставленные по данной Лицензии, выдаются на срок действия авторского права на Программу и являются безотзывными при соблюдении указанных условий. Данная Лицензия явно подтверждает ваше неограниченное право запускать неизменённую Программу для личного, государственного, коммерческого или некоммерческого использования. Вам запрещается использовать Программу в производных работах в коммерческих целях. Вам запрещается модифицировать Программу для использования в коммерческом продукте или услуге, будь то отдельно или совместно с другим кодом, как загружаемым, так и предоставляемым как услуга. «Производные работы» означают любую работу, будь то в исходной или объектной форме, которая основана на (или происходит от) Программы и для которой редакционные правки, аннотации, доработки или другие модификации в целом представляют собой оригинальное авторское произведение.
Вы можете распространять дословные копии исходного кода Программы в том виде, в котором вы его получили, в любой среде, при условии, что вы заметно и надлежащим образом публикуете на каждой копии соответствующее уведомление об авторских правах; сохраняете нетронутыми все уведомления, сообщающие о том, что данная Лицензия применяется к коду; сохраняете нетронутыми все уведомления об отсутствии каких-либо гарантий; предоставляете каждому получателю копию данной Лицензии вместе с Программой; и не извлекаете финансовой выгоды из продажи или иной передачи Программы, будь то отдельно или совместно с другим кодом, загружаемым или предоставляемым как услуга.
ПРОГРАММА ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ, ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННОЙ ЦЕЛИ И НЕНАРУШЕНИЯ ПРАВ. НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ АВТОРЫ ИЛИ ДЕРЖАТЕЛИ АВТОРСКИХ ПРАВ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ЗА КАКИЕ-ЛИБО ПРЕТЕНЗИИ, УБЫТКИ ИЛИ ИНЫЕ ОБЯЗАТЕЛЬСТВА, БУДЬ ТО В ДЕЙСТВИИ ДОГОВОРА, ПРАВОНАРУШЕНИЯ ИЛИ ИНЫМ ОБРАЗОМ, ВОЗНИКШИЕ В РЕЗУЛЬТАТЕ ИСПОЛЬЗОВАНИЯ ПРОГРАММЫ ИЛИ ИНЫХ ДЕЙСТВИЙ С НЕЙ.
Данная Лицензия не даёт разрешения на использование торговых наименований, товарных знаков, знаков обслуживания или названий продуктов Лицензиара, за исключением случаев, необходимых для разумного и обычного использования при описании происхождения Программы и воспроизведении содержания уведомления об авторских правах.