作为工控安全从业人员,需要先于攻击者发现工业控制系统中的脆弱点,将脆弱信息上报给生产厂商,并在攻击者利用漏洞发起攻击前交付修补建议以及缓解措施,提供安全解决方案,避免网络攻击风险。
与传统Windows系统相比,评估工业控制系统的方法明显不同,关键区别在于工业控制系统的异构性。换句话说,有多个协议,多个供应商和多个硬件配置。这种异构性使得风险利用程序的开发在某些情况下容易得多,而在其他情况下则更具挑战性。
在进行漏洞利用开发之前,必须先了解工业控制系统。由于工业控制系统的介绍不是本文的重点,所以进行略过。
在工业控制系统中,风险评估有6个基本的步骤:
- 选择目标
与典型的PC系统和网络不同,评估工业控制系统的攻击时,您必须首先确定目标。拥有数十种协议和供应商,您首先需要确定目标是什么?该目标可以是诸如MODBUS之类的协议、西门子S7-1200之类的特定PLC或诸如石油管道行业之类的特定行业等。
如果选择针对某个行业,则需要对该行业使用的系统,协议和PLC进行更多研究。因此,例如,如果您瞄准的是石油管道行业,则需要进行研究才能知道使用PROFIBUS协议的Honeywell PLC在该行业中最受欢迎。
- 研究目标文件
在大多数情况下,制造商以PDF格式在线发布其文档,以向开发人员和客户提供必要的信息。这些文档可以帮助您了解系统应该执行的操作,同时这些文档也可以作为风险评估信息获取的丰富资源。
例如,风险评估的工控设备对象为西门子S7-1200,西门子在其网站上提供了大量文档。 864页的手册提供了有关此广泛使用的PLC内部运行的详细信息。仔细研究它以获取有关此系统中可能存在的风险点,尤其是有关设备配置,基本和扩展指令,通信和Web服务器的部分。几乎每个制造商都提供类似详细的在线操作手册。
- 列出可访问的接口并确定其优先级
在大多数情况下,目标将至少具有一个用于通信和管理系统的接口。这些接口可以是TCP套接字,传感器,USB端口或任何信息进入或离开系统的方式。在一些罕见的情况下,目标可能完全离线,这会增加攻击利用的困难,但并非不可能被攻击(记住,Stuxnet的目标是位于纳坦兹离线的伊朗铀浓缩设施)。
大多数的工业控制系统都是采用TCP套接字进行通讯的,可以考虑将这个入口点作为风险引入因素之一。
- 分析和测试每个接口
一旦有了接口的列表和优先级,现在就可以开始针对系统进行风险评估了。此阶段为关键步骤,可能是最耗时的,可以通过至少三种方法进行,其中可能需要一些高级技能,这些方法包括:
- 模糊测试
模糊测试是在接口上发送大量随机数据并观察系统反应的过程。这通常是由模糊测试程序(如Powerfuzzer,Peach,Aegis或Defensics)执行的自动化过程。
通过发送随机数据,如果能找到一个破坏应用程序或系统的字符串,则可能为系统存在的风险点。破坏系统的字符串有可能被用作拒绝服务攻击,并可能导致其他风险。终极目标是可以导致缓冲区溢出,从而远程代码执行。
在了解通讯协议的网络数据报文格式的情况下,可以通过编写数据模板,有目标的进行风险评估并验证。
- 静态二进制分析
不运行代码的情况下打开和分析二进制文件。通过这种方式可以深入了解代码的实际作用。这通常需要反汇编程序,例如IDA Pro。
- 动态二进制分析
有时运行代码才可以了解其功能。这就是动态二进制分析的用武之地。在静态二进制分析中可以使用像IDA Pro这样强大的反汇编程序。在动态二进制分析中需要一个允许代码运行并使其能够在断点处停止的工具,以分析正在执行的指令以及各个内存位置的指令。这些工具称为调试器。诸如IDA Python和Immunity之类的工具就是出色的调试器。
调试工具可以让代码在其环境中跟踪运行,在关键点处进行研究和分析汇编代码,然后检查关键内存位置中的内容。在此过程中发现代码中的缺陷往往能够破坏系统。
- 风险脆弱点验证并进行结果评估
针对接口测试过程中的用例进行结果确认,发现系统中至少一个安全风险,有些风险会导致控制系统罢工(拒绝服务)或者在目标系统上远程执行代码从而获得系统控制权,有些为系统存在的硬编码密码,利用这些密码能够直接控制系统的运行状态。针对不同的情况,站在业务的角度,评估风险可能带来的后果,在工业控制系统环境中尤其要关注到这一点。
- 提供修复方法和防护建议
针对发现的风险点需要给出相关的安全建议,一般包括如下方面:
- 代码级
此部分主要是将发现的系统风险缺陷提交系统生产商,由系统生产商的研发人员从代码级别进行修复,这种方法也是最为有效的,但存在的问题就是从修复到实施应用的周期太长,升级带来的业务风险也比较高。
- 网络级
此部分主要是针对存在风险的目标对象进行通讯行为管控,保证通讯在可信任、可控的设备之间进行。
- 业务级
针对风险资产的业务属性进行业务域的划分,不同域之间的通讯通过安全策略进行安全管控,包括但不限于网络级和物理级。提前进行风险预测并完成操作指导书,以便在遇到突发情况时能够有的放矢,应对自如。
总之,安全是一个不断对抗的过程,针对工业控制系统的风险评估也是需要周期进行的(可以挑选在停工检修阶段),在不同的阶段,针对不同的对象进行风险评估,提升工业控制系统对抗攻击的健壮性,保证工控业务的稳定运行。
参考资料:
https://www.hackers-arise.com/post/2016/12/20/scada-hacking-zero-day-scada-vulnerability-research