project-memoria-detector 工具旨在判断目标网络设备是否运行特定的嵌入式 TCP/IP 协议栈。
目前,该工具支持 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 表示法),或提供一个包含一组要扫描的 IP 地址的 .txt 文件。
CIDR 表示法可以如下使用(在此示例中,将扫描从 192.168.3.1 到 192.168.3.254 的 IP 地址):
$ 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 表示特定端口/服务不可用。
版权所有 (C) 2020 Forescout Technologies, Inc.
程序许可证
“程序”指根据本许可证授权的任何受版权保护的作品。每位被许可人称为“您”。
根据本许可证授予的所有权利均在该程序的版权期限内授予,且在满足所述条件的情况下是不可撤销的。本许可证明确允许您在个人、政府、商业或非营利目的下运行未修改的程序。您被禁止在商业目的的衍生作品中使用本程序。您被禁止修改本程序以用于商业产品或服务,无论是单独使用还是与其他代码结合使用,无论是可下载的形式还是作为服务访问。“衍生作品”指任何基于(或衍生自)本程序的源代码或目标代码作品,并且其编辑修订、注释、阐述或其他修改整体上构成原创作者作品。
您可以以任何媒介逐字复制您收到的程序源代码,前提是您在每份副本上显著且适当地发布适当的版权声明;保留所有关于本许可证适用于该代码的通知;保留所有关于无任何担保的通知;向所有接收者提供本许可证以及程序副本;并且不得通过单独或与其他代码结合(无论是下载还是作为服务访问)出售或转让本程序而获得经济利益。
本软件按“原样”提供,不附带任何明示或暗示的担保,包括但不限于对适销性、特定用途适用性和非侵权性的担保。在任何情况下,作者或版权持有者均不对任何索赔、损害赔偿或其他责任负责,无论是在合同诉讼、侵权行为或其他方面,均由本软件或本软件的使用或其他交易引起、产生或与之相关。
本许可证不授予使用许可方的商号、商标、服务标记或产品名称的许可,除非为合理和常规地描述程序的来源以及再现版权通知的内容所必需。