王朝栋 吴 冲
(上海三零卫士信息安全有限公司,上海 200030)
监视控制与数据采集(Supervisory Control And Data Acquisition,SCADA)系统在石油化工、电力、给水及核电等领域都发挥着重要的作用[1,2]。作为工业控制系统的核心,SCADA的信息安全已成为工业控制系统安全的重要内容。起初,SCADA为独立的网络系统,其依赖于专有软硬件,与企业内部网络相分离;随着网络技术、通信技术和计算机技术的发展,SCADA系统逐渐发展成为开放式透明运作的标准系统,并通过TCP/IP等标准网络协议进行通信。在降低成本并提高效率的同时,SCADA系统所面临着的安全性问题也凸显出来[3]。为此,笔者提出一种白名单列表的SCADA系统,来提高工控系统网络的安全性。
白名单列表是一种以TCP/IP作为SCADA网络的主要传输协议,以减少网络攻击为目标的七元组合法传输网络包。列表是源MAC地址、目的MAC地址、源IP、目的IP、源端口、目的端口和协议类型七元组双向包序列。白名单列表是一个完全基于上述七元组的合法网络包的序列,它在深度包检测及主机入侵检测等方面都具有较好的效果,可在不依赖包有效载荷的情况下对私有协议进行处理,甚至可在网络层进行操作。白名单列表可以广泛应用于特殊环境中,如减少垃圾邮件、避免网络钓鱼和预防各种对VoIP基础设施的攻击[4]。使用白名单的主要目的是由于大多数SCADA网络流量都是由现场设备周期轮询等自动化过程所产生,且与外部连接有条件限制,同时系统中设备添加及删除等操作并不频繁[5,6]。
在SCADA网络中的连接管理通常很稳定,这就意味着白名单的可行性。笔者提出了在SCADA网络中使用白名单列表的方式帮助网络管理员监测非法网络流量。为了确保方案的可行性,白名单需拥有两个属性:第一,大小可控,因一般的IT网络中拥有上百万个记录的列表,将导致其传输不可行(不可控);第二,白名单要稳定,经常变动则需要进行频繁更新操作,否则会产生大量的报警信息。
在SCADA网络中,通过对流量的获取,聚集到连接,然后汇总到列表。连接即是所有带相同七元组的数据包(源MAC地址、目的MAC地址、源IP、目的IP、源端口、目的端口和协议类型),而不管这个数据包的来源和目的地。在学习阶段,通过对创建列表的分析得到一个含有七元组的初始白名单列表。在白名单列表产生后,将在检测阶段对其进行分析。所有在网络中符合白名单的则认为是合法的,不与白名单相匹配的则产生报警。图1为白名单的工作流程。
图1 白名单的工作流程
因白名单依赖IP包头信息,所以包头信息需在网络中获取并与白名单比较,在此仅考虑TCP与UDP包。创建连接是将捕获到的包聚集,以TCP状态机或超时300s作为创建连接的结束标志,实验中使用argus开源工具进行测试。
在创建列表阶段确定了连接的客户端与服务器端,并根据七元组进一步汇总连接。通过以下4个规则进行服务器端的识别:
a. 遵守三次握手协议的TCP连接,服务器端用来接收SYN包或发送SYN/ACK包。
b. 适用于1 024以下的端口,主机使用其作为服务器端。在一个活动的FTP会话中,数据连接的发送端为服务器,并使用20端口作为服务端口。
c. 启发式。如果一台主机在多次连接中重复使用相同的协议和端口,那么这个主机就作为服务器。其依赖于客户端端口在连接中都不具有重复性,此方式将未被分类为a与b的连接保存在内存中,下次带有相同的主机地址、协议和端口被检测,这潜在无限延迟了数据分析。可以使用在线超时机制,当超时机制启动后,这个连接将被划分为d类。此处的离线机制使用了无限超时的概念。
d. 对于不符合以上3个规则的连接都归为此类。
假设在SCADA网络系统中,符合以上3个规则传输端口与IP协议的配对在服务器中都有唯一的服务与之对应,但这对于使用动态端口分配(如微软的活动目录)的网络服务是有不确定性的[4]。在动态端口分配服务中,高于1 024以上的端口为远程过程调用所动态分配的[7]。
学习阶段的目标是在一段时间内通过网络流量的收集,自动建立并初始化白名单。在学习阶段有两种情形:所有的数据流都是合法的;大部分的数据流都是合法的。第一种情况是可行的,事实上在初始情况下,并没有来自网络上的攻击。第二种情况是基于SCADA网络上的大部分数据流是自动匹配的,即会出现重复的现象。学习阶段是对所有合法的数据流进行统计,但有时难免(如手动修改可编程逻辑控制器(PLCs)的设置时)有相关的信息流将不会出现在白名单中。在这种情况下,管理员可以通过检测阶段来增添白名单。
检测阶段使用在学习阶段所创建的白名单去识别非法流。如果与白名单相匹配,则正常运行,否则会产生报警信息。实际生产环境中,管理员希望在误报警时将其添加到白名单中,或者在漏报时限制这个信息流。与IT网络不同的是,不允许在SCADA网络环境中设置自动隔离功能,原因是合法的SCADA信息流被隔离可能引起严重的后果,如石油管道的泄漏及电力中断等。
为了验证白名单列表在SCADA网络中的有效性,笔者通过3个不同的实验分别进行验证。第一个实验是在网络中通过比较完整的白名单大小与主机通信对数,来验证白名单是否可控;第二个实验证明了理想的学习时间;第三个实验是针对数据集生成的报警分类。
在某两个石化处理设备Oil_1&Oil_2的3个SCADA环境中使用网络包跟踪程序,在其中一个处理设备上同时执行两个数据收集程序,一个在由PLCs及RTUs等组成的现场子网(Oil_2_field)中执行;一个在控制子网(Oil_2_control)中执行,由不同功能的服务(轮询PLCs、历史数据库和执行访问控制)和人机交互界面HMIs(如操作员工作站)组成。在另一个设备上执行单一收集,其包含了两个逻辑子网的全部数据,SCADA数据集包含了完整的tcpdump/libpcap跟踪包,且每个收集都作为一个独立的数据集。
第一个实验是验证白名单大小是否可控,这个特性是通过延长每个跟踪包的学习时间与计算符合的数据流数量进行测试的。假设在数据集中没有发现攻击行为,这可根据完整跟踪来判断白名单的大小。表1为每个数据集的白名单大小,表中内部主机列为在实验网络中符合条件的主机数,主机对列为所通信的主机对数。
表1 数据集的白名单
为了区别不同的跟踪,使用绝对值与系数作为内部主机数。大部分情况下,SCADA网络数据集的白名单大小与相应的内部主机数有相同的级数,表明白名单流在这些环境中是可行的。另一个不同的是,主机对与白名单比例并不太大,即平均每个服务器提供1~2个服务,意味着一个不包含服务信息的白名单具有较少的限制性并相当的不安全,在大小上也相差不多。对于结果的唯一例外就是Oil_2_control数据集有一个在级数上大于通信主机对数的白名单。
第二个实验验证了在学习时间在所获得的白名单大小上的效果。图2分别显示了3个SCADA数据集在学习时间与获得的白名单大小占流量总数的百分比。在Oil_1与Oil_2_field数据集情况下,通信1h内就获得了大于50%的数据流,第一天中仅增加了一点;Oil_2_control数据集在第七天出现了很大的跳跃。
图2 数据流获取与时间变化
尽管不同,但3个SCADA数据集共有一个特性:在第二天的流量统计中白名单都没有增加,第三天也没增加。作为观察结果,在后续实验中将学习时间设置为1天。
本次实验以白名单中不稳定来源作为切入点,特别是在学习阶段不符合规则的数据流属性。通过分析得到了4个主要的报警类型:
a. DPA异常。本服务认为在DPA情况下带传输端口的一对一的映射是有问题的。笔者并非要弄清楚所有使用动态端口的服务,但是发现了通过DPA所触发的异常。Oil_2_control有一些TCP连接的实例,由相同主机产生的一些TCP连接,传输端口号几乎在客户与服务器端没有增长。表2为部分实例。
b. 手工行为。由人为触发,所有带有以下协议和端口号信息的服务都可归到此类——telnet(tcp-22)、ssh(tcp-23)、http(tcp-80)、https(tcp-443)、shell(tcp-514)、rdp(tcp-3389)、vnc(tcp-5800和tcp-5900)与x11(tcp-6000到tcp-6007)。Oil_1和Oil_2数据集含有涉及到操作员工作站的数据流。如果数据流的客户端是操作员工作站,则被视为手工行为。
c. 新主机。此级别包含了所有在学习阶段没有进行通信的数据流,可以为服务器或者客户端,因此不会出现在白名单中。
d. 其他。包含了不属于以上3种类别的所有数据流。
表2 动态端口分配实例
每个流都被映射到单一的类中,且类成员将按以上所列顺序进行测试。如客户端使用ssh服务且没有在白名单中所引起报警的情况,则归为手工行为。因为手工行为类的优先级高于新主机类。
在SCADA环境中为了增加可靠性,对多数网络功能进行复制是很普遍的,如对服务的复制。有两个需要特别考虑的情况:
a. 第一个情况是一个单冗余主机在网络中接管一个主要服务的任务。比较特殊的是,SCADA服务器负责对现场设备的轮询。在改变发生前,通过telnet连接到一些PLCs执行重启命令,但不是对所有的PLCs进行telnet传输。除了涉及到PLCs的数据流之外,其他生命周期较长的数据流也具有相同的行为,如一些ssh数据流也会“交换”到冗余主机,像这些常规执行的改变是为了确认冗余主机是否正确地工作。在分析中,如果一个主机在数据流中为SCADA服务器,查找另一个带有相同密钥的流,仅SCADA服务器地址才符合这种情况,反之亦然,这样就能够确认与此种情况相符的数据流了。
b. 第二个情况涉及到网络中一些主机的重定位,大部分为PLCs。一段连续的IP地址段被分为一些逻辑子网。通过telnet命令执行这种地址的改变,但并不是对所有主机。通过验证主机(客户端或服务器端)在通信中是否为新建网络的一部分,来识别符合此情况的数据流,而telnet连接常被作为手工行为。
白名单对于减少SCADA网络所受到的攻击是具有吸引力和实用效果的。与IT网络不同,SCADA网络中白名单的大小是可管理的,很大原因是由于内部主机数量的决定的。另一个特点是白名单的稳定属性。实验结果表明,超过50%的符合网络数据流都可在一天内的测试中被检测到。使用动态端口分配的服务是产生报警的主要原因,这些警报可通过添加被服务所分配的全部端口到白名单中来消除或将其从网络中移除。其余的报警在实际网络环境中,大部分是由于白名单策略的限制所引起的,这方面可以通过网络管理员或者SCADA提供商通过对白名单的优化来改善。
未来的工作将对用户接口进行开发,从而通过提供对警报更详细信息的接口来帮助白名单的建立与改进操作。另外,也需要尝试通过识别侵入意图来增强SCADA网络的安全性,并且进一步对警报频率的分布进行分析。
[1] 饶志宏,兰昆,蒲石.工业SCADA系统信息安全技术[M].北京:国防工业出版社,2014.
[2] 魏旻,王平,王泉.工业无线控制网络安全方法的研究与实现[J].仪器仪表学报,2009,30(4):679~684.
[3] Nicholson A, Webber S,Dyer S,et al.SCADA Security in the Light of Cyber-Warfare[J].Computers & Security, 2012,31(4):418~436.
[4] Luiijf E,Manou A,Annemarie Z.Assessing and Improving SCADA Security in the Dutch Drinking Water Sector[J].International Journal of Critical Infrastructure Protection, 2011, (4):124~134.
[5] Barbosa R, Sadre R, Pras A.Towards Periodicity Based Anomaly Detection in SCADA Networks[C].Proceedings of the 17th IEEE Conference on Emerging Technologies and Factory Automation.Poland: IEEE Industrial Electronics Society ,2012:1~4.
[6] Abad C, Bonilla R.An Analysis of the Schemes for Detecting and Preventing ARP Cache Poisoning Attacks[C].Proceedings of the Twenty-Seventh International Conference on Distributed Computing Systems Workshops, 2007:60~68.
[7] Wang C L,Fang L,Dai Y Q.A Simulation Environment for SCADA Security Analysis and Assessment[C].Proceedings of the 2010 International Conference on Measuring Technology and Mechatronics Automation, 2010:342~347.