什么是ISF
ISF是我之前从事工业控制设备漏洞挖掘工作时积累的工控协议和POC代码等内容进行整合后的产物,后来将其中的一部分内容进行了开源,项目的地址是https://github.com/dark-lbp/isf。
[ISF](https://github.com/dark-lbp/isf)(Industrial Exploitation Framework),是一款基于python编写的类似[Metasploit](https://github.com/rapid7/metasploit-framework)的工控漏洞利用框架。
ISF基于开源项目[routersploit](https://github.com/reverse-shell/routersploit)修改而来,在routersploit基础框架上针对工控设备增加了工控协议的客户端、工控协议模块等功能。
为什么要开发ISF
-
将自己手中积累的漏洞POC进行统一的管理,规范POC的编写。
-
个人比较喜欢metasploit的命令行交互方式,但是不喜欢ruby。
-
公开一些研究成果让一些初入工控安全研究领域的人能够获得一些内容参考。
-
希望能够有更多的人使用及共同完善这个框架。
ISF核心部分介绍
工控协议模块 (使用Scapy编写)
工控协议模块是这个框架最重要的组成部分,由于工控设备大多使用专用的工控协议进行通讯,因此为了对其进行安全测试就需要使用相应协议的客户端工具对其进行交互。然而目前能够获取到的SDK或客户端工具都是按照与设备正常通讯交互的模式去设计的,也就是说我们很难利用现有的工具直接构造一些畸形的数据包或者绕过正常的通讯流程进行测试。
ISF中的工控协议模块是基于python的Scapy库开发的,目前已经封装了Modbus-TCP及西门子的S7comm通讯协议中绝大部分的数据包格式。通过对应的工控协议模块能够很方便的构造和解析特定的工控协议数据包,以Rockwell的CIP协议来说,在正常使用组态软件与PLC进行交互的流程如下图所示。
在成功获取到Session ID后每次的CIP请求都需要带上对应的Session ID,假设我们想要测试在不注册Session ID的情况下直接对设备发起各种CIP请求的话则不是很便利。也就是基于这样的原因,在ISF框架中我编写了工作中经常会涉及到的几种工控协议模块。
同时由于这些协议模块是基于Scapy编写的,也就是说这些协议模块可以很方便的集成到例如[Sulley](https://github.com/OpenRCE/sulley)或[Kitty](https://github.com/cisco-sas/kitty)等各种Fuzzing框架中。如果不想自己花时间去去集成的话可以考虑去看一下Kitty框架,我已经给Kitty提交过PR所以可以直接使用其中的ScapyField作为模糊测试的输入,具体的使用可以参考一下[官方模块文档](https://katnip.readthedocs.io/en/latest/katnip.model.low_level.scapy.html#module-katnip.model.low_level.scapy)。
下面是使用ISF中的协议模块结合Kitty Fuzzer进行Fuzzing测试的效果图。
目前ISF中支持的协议有:
* Profinet-dcp
* Modbus-tcp
* S7comm
* CIP
工控协议客户端
工控协议客户端是基于工控协议模块对常用的一些设备操作例如建立连接、设备信息获取、认证、数据读写等功能进行了封装。这些工控协议客户端除了用于漏洞测试中也可以用于日常的工控设备数据采集及交互中。
下面是西门子S7Client客户端使用的一些说明,S7Client主要用于与西门子S7-300/400系列的PLC进行通讯交互。
目前ISF中支持的客户端有:
* modbus_tcp_client
* wdb2_client
* s7_client
* cip_client(仅支持设备扫描识别)
ISF的安装
python依赖环境
-
gnureadline (OSX only)
-
requests
-
paramiko
-
beautifulsoup4
-
pysnmp
-
python-nmap
-
scapy 强烈建议参考官方文档手动安装最新版
在Kali 中安装
“`zsh
git clone https://github.com/dark-lbp/isf/
cd isf
pip install -r requirements.txt
python isf.py
“`
使用ISF
在配置好依赖环境后可以直接运行python isf.py启动,具体的使用方式和metasploit非常相似,下面是一些如何使用的截图。
现有功能介绍
S7 300/400 PLC 密码爆破工具
这个module的用途为爆破西门子S7-300/400 PLC的CPU保护密码。通过对PLC保护密码进行爆破后利用对应的密码即可使用ISF中的西门子S7Client客户端对目标设备进行完全的读写操作,获取PLC中的数据或修改PLC中的逻辑代码。
下面是如何使用这个module的截图:
Profinet dcp 扫描器
这个module的用途为使用西门子的Profinet-DCP协议对目标网络中的设备进行扫描识别,Profinet-DCP协议是西门子Profinet协议族中的一部分。DCP协议的全称是“Discovery and Configuration Protocol”主要是用于对西门子设备进行发现及初始化配置的(例如配置设备IP地址等)。
由于Profinet-DCP是以太网层的协议,通过往Profinet协议约定的以太网地址“01:0e:cf:00:00:00”发送IdentRequest数据包后,所有支持Profinet-DCP协议的设备均会对该请求包进行相应,上报自己的基础配置信息。
下面是如何使用这个module的截图:
总结
由于工控安全的特殊性,ISF框架的主要目的还是用于提供安全研究人员一个对工控类产品进行安全测试的工具。为了防止ISF框架被恶意滥用,针对工业控制的漏洞利用模块将仅限对互联网上已公开的漏洞POC进行收集整理而不会发布未公开的漏洞利用poc。关于如何扩充自定义的模块及更详细的使用方法可以参考github项目中的[说明文档](https://github.com/dark-lbp/isf/blob/master/README.zh-cn.md)
原文始发于微信公众号(平安集团安全应急响应中心):开源工控安全研究框架 ISF介绍