NSA开发的ICS/SCADA态势感知开源工具Grassmarlin(附下载地址)
像nmap、plcscan这些主动映射工具会通过网络发送数据包并进行分析,最终得出一个存在可能性的结论。但GRASSMARLIN并非这样的分析工具,它只是被动地对工业设备进行映射,帮助系统管理员、审计员或其它人员完成深度分析的工作。其功能重点不在于如何从海量数据得出某个结论,而是通过梳理这些数据,帮助工作人员作出正确率更高的决策。
- Microsoft Windows(64位的Win7、8、10)
- Fedora(23)、Ubuntu(14.04、15.10以及Security Onion)
- Kali2.0
- CentOS(6、7)
- Debian(8)
当然它也有适用于其它系统的版本,如32位的Windows系统。虽然软件开发人员也在这些环境中进行了测试,但是在没有附加配置的情况下,他们无法保证这个工具能够正常运行。在其它这些平台上运行GRASSMARLIN可能会导致性能下降或造成安装后需重新配置等问题。
GRASSMARLIN的可视范围
逻辑视图能够在实时流量捕获时获得,或者通过捕获文件(PCAP文件)获取。和逻辑视图类似,物理视图也通过Cisco路由器的日志被动地生成。
该拓扑是通过使用工业通信协议S7Comm的2个工业设备的数据包捕获而生成。那些PCAP文件可以从https://wiki.wireshark.org/S7comm下载。
上面主图(上图右侧)展示了网络上的设备、设备间的通信、子网、通过IP地址识别的每台设备情况。
另外利用整合的数字签名,GRASSMARLIN能够识别工业设备及设备所使用的协议:
上图这种情况下所使用的协议是S7Comm。另外设备作用也较详细:主机(人机界面——HMI,又称用户界面)负责提供命令,从机(可编程逻辑控制器——PLC)负责执行这些命令。ICS管理员还能获知有助于定位设备的厂商名称。如果IP地址是公开的(当然这里我们不讨论这种情况),则可以通过各国国旗确定具体国家。
所有这些信息都是在捕获的数据包和GRASSMARLIN签名之间进行对比后产生的。因此,用户可以根据1至5的信任度属性对现状的可信度作出自己的判断。
GRASSMARLIN也能够隔离与特定设备相关的通信,并进行第一次分析:数据包大小、发包时间、数据包来源(如果使用多个PCAP文件):
- 过滤器元素:描述要检测的元素
- Payload(有效负载)元素:向用户返回信息
一个签名可以由多个过滤器组成;一个payload(有效负载)对应一个过滤器:
过滤器基本上能够描述OSI模型的第2层到第4层的协议属性。下表是所有可用的过滤器:
有效载荷旨在通过从数据包中提取一些字节等方式向用户提供更多信息。
当前版本的GRASSMARLIN(v3)有54个立即可用的指纹,涵盖大多数工业协议。 该工具最近已经开放源代码(01/28/16),随着时间的推移,其签名数量可能会增加,准确性也会提高。
签名是以XML格式进行编辑的,但是GRASSMARLIN提出了一种图形工具——FingerPrint Editor,有助于创建签名:

该视图的关注点在于网络方面,展现了工业设备和网络设备之间的物理连接。GRASSMARLIN的V3版本仅支持Cisco路由器,并从3个命令的输出生成物理视图:
- “show running-config”
- “show ip arp”(OU)“show mac address-table”
- “show interfaces”
只要这些命令的输出以简单文本文件的形式保存,GRASSMARLIN就可以生成物理视图。
1. 以PNG格式导出的视图。
2. 以XML格式导出的数据:
- 保存逻辑视图中所有树状图的数据;
- GRASSMARLIN将该数据作为会话数据。
3. 存档数据的导出;包括:XML格式的数据和实时捕获所生成的PCAP文件。
- 1台西门子HIM;
- 1台西门子PLC;
- 2台施耐德PLC;
- 1台交换机(switch)。

安装了GRASSMLARIN的工作站直接连接到交换机上的镜像端口,访问ICS模型上的整个通信过程。由于该模型没有Cisco设备,所以我们只测试了逻辑视图。

经过(手动)重组后的视图:

通讯被拦截后,设备信息会快速显示在图中。上图中可以看出GRASSMARLIN已正确识别所有设备,并正确给出了每台设备所使用的协议。另外,其输出的XML文件也很好地生成了GRASSMARLIN所提取的所有信息,实现未来的重复利用:
但是在整个过程中,我们也看到了GRASSMARLIN的一些弊端:
- 签名不一致
若某设备匹配多个签名,GRASSMARLIN只会选择其中一个。这个可能是HMI的问题,因为HMI利用不同的通信协议与多个PLC进行交互。
2. 有些数字签名信息不完整
大多数数字签名在其payload上都有描述字段,用来描述已识别的设备。如果这些字段是空白的或信息不充分的,那么识别工业设备可能也会变得更加复杂。
3. 分析功能有限
GRASSMARLIN仅提供通信分析的第一个元素,如数据包的大小、接收时间。改进此功能的一个可能的方法是添加例如HIM和PLC之间的通信模式识别。
比如说,一款名为NetworkMiner的工具能够利用nmap、p0f和Ettercap等著名工具的签名来获取网络拓扑。但NetworkMiner没有任何可开箱即用的工业签名,因此其准确性也远不如GRASSMARLIN。
可以仔细观察一下输出结果:没有对比就没有伤害。
窗口右侧的主显示屏中含多个选项卡。每个会话均包含了至少一个逻辑视图(列出所有设备及设备间通信)、物理视图(列出工业设备和网络设备之间的物理链路)和Sniffles(也称为网格图)的一个选项卡。每个选项卡中的内容都实现了可视化。
窗口左侧被分为两部分。下半部分含消息日志,显示有关该应用程序活动的状态更新、警告、错误等信息。上半部分是对当前可视化内容镜像的树状图。截图中显示当前无可视化内容,因此也没有镜像的树状图。更改选项卡就会改变树状图和“可视化”中显示的内容。文末的用户手册文档中详细讨论了不同的可视化内容。
消息日志的下方是内存指示器,由内存使用量(左边数字)、总可用内存(右边数字)以及内存使用所占百分比的进度条构成。
主窗口上方是主菜单和工具栏。工具栏左侧的三个图标从左到右依次为导入、加载会话和保存会话。在工具栏的右侧是一个组合框,用于选择Live PCAP设备以及启动和停止Live PCAP。除了主窗口之外,后台还会打开包含诊断和调试数据的控制台窗口。
https://github.com/iadgov/grassmarlin
英文版用户手册:
https://github.com/iadgov/GRASSMARLIN/blob/master/GRASSMARLIN%20User%20Guide.pdf
congtou