阅读: 0

工控行业的漏洞挖掘目前主要有如下几种方法:静态分析、动态调试、模糊测试。高效快速的挖掘漏洞非模糊测试fuzz技术莫属了。本文将介绍利用fuzz技术斩获多个施耐德M580系列PLC高危漏洞的神奇故事。

0x00 题要

工控行业的漏洞挖掘目前主要有如下几种方法:静态分析、动态调试、模糊测试。高效快速的挖掘漏洞非模糊测试fuzz技术莫属了。本文将介绍利用fuzz技术斩获多个施耐德M580系列PLC高危漏洞的神奇故事。

何为fuzz?这个已经在安全行业耳熟能详,为了文章完整性,还是在此科普一下。模糊测试 (fuzz testing, fuzzing)技术是安全测试技术的一种,通过构造畸形输入数据使得待测试系统发生异常如崩溃等情况,从而发现待测试系统中存在的安全问题。由于模糊测试技术可充分遍历所有输入数据、代码覆盖全面、测试自动化、能够有效地发现待测试系统中存在的安全问题等特点,受到信息安全中漏洞分析领域的研究人员的广泛欢迎。比如第一个成功攻击iPhone, G1 Phone的人Charlie Miller(蝉联了4届的Pwn2Own的冠军),他提出模糊测试只需要5行python代码,并且运行这5行代码,一定可以找到一些你想要的东西。如此看来,模糊测试真有神奇的力量,堪称神兵利器,何不拿着这件兵刃试试水呢?

0x01 闭关修炼

本阶段,先深入理解fuzz这个兵刃全套秘籍的练就方法,并厘清实施步骤,为以后实战打基础。按照这件兵刃的使用秘籍,第一步识别目标系统,本次选取施耐德高端大型PLC—M580系列,该PLC主要应用在供水和水处理、油气、金属和采矿、食品和饮料等过程领域。如下图所示。

第二步确认输入,输入为施耐德私有通讯协议。模糊测试的输入接口为PLC私有协议的服务器通讯接口。

第三步生成模糊数据,在fuzz测试的代码中基于分析的输入数据,生成异常畸形的各类数据报文。

第四步使用模糊数据执行测试,将上一步骤中生成的畸形数据通过代码中的TCP接口发送至PLC的通讯接口中。

第五步监控系统行为,该步骤中需要监控的是PLC作为处理通讯业务的服务器模块是否在测试过程中具有基本功能,因此选取了最基本的ping指令完成监控。当监控PLC的ping指令模块无返回时,可查看此时的异常记录并详细分析。

第六步记录缺陷,当出现异常时,通过分析记录系统中的详细信息可定位到具体的数据报文,再验证该报文是否可引起异常,如果可以则为缺陷。

综合以上步骤,并进行细致研究,设计了如下的测试系统架构:

0x02 小试牛刀

在练就了该兵刃的整套秘籍后,快速实战,果然效果出众,斩获了6个高危漏洞并收到了CNVD颁发的证书。如下是荣誉展示。

这6个漏洞均为DOS(拒绝服务)类型,当发送精心构造的数据报文至PLC后,PLC进入故障模式,ERR灯常亮,所有通讯服务及其控制功能均失效。这些漏洞会影响所有与PLC相关的业务,如SCADA系统与PLC的通讯断开、PLC内部控制逻辑失效、PLC控制的执行器等设备失灵、PLC与其余一切系统的通讯切断等。若要恢复正常工作状态,需要手动对PLC进行断电重启。

0x03 匡扶正义

   安全研究的意义就在于:在真正攻击来临之前,尽最大努力获知系统的漏洞,并第一时间进行修补,或者采取安全措施,避免更大的损失。因此对于这些漏洞我们该怎么制定缓解措施呢?

  1. 在PLC的组态程序中添加应用程序密码,避免无密码的组态工程下装至PLC中运行;
  2. 将OT资产通过物理隔离或者逻辑隔离,尽可能处于安全区中;
  3. 定期开展OT资产的安全评估和安全测试,及时处理风险项,不要抱有“没人能攻进来”的心态,要牢记威胁时刻在身边;

那有没有最新版本的固件供现有PLC产品升级使用呢?NO,本次将这几个漏洞反馈给施耐德方面,但厂商坚持认为这是由于错误使用导致的,必须添加应用程序密码。但是工业现场中未设置应用程序密码运行的PLC设备,怎么确保这部分设备的安全呢?关键信息基础实施的供应商应该有责任去保护每一个设备及其系统的安全,而不是将设计缺陷归因为客户的错误使用。

本文通过简单介绍利用fuzz技术针对工控设备PLC进行模糊测试,测试出多个拒绝服务漏洞,证明模糊测试对于工控行业的系统与设备很有效果,可以在安全研究中采用该技术,也可以在设备厂商开发产品过程中采用该技术,保证产品出厂前将漏洞数降到最低,提高产品的信息安全性能。

时间线如下:

  • 2019-12-12  漏洞上报设备厂商Schneider
  • 2019-12-24  设备厂商Schneider回复,不认为是漏洞,属于用户错误使用并拒绝修复(从工控安全角度出发此漏洞对工控业务环境影响较大,需要手动现场恢复)
  • 2020-1-3   漏洞上报CNVD
  • 2020-1-7   CNVD收录漏洞
  • 2020-2-13  CNVD颁发证书