SCADA 攻击
这起事件是工业网络安全领域的经典案例,是首次公开记录的对控制系统的网络攻击,具体是针对澳大利亚昆士兰州一个污水处理SCADA系统。
在这起事件中,一名49岁的男子曾在承包安装市政污水处理SCADA系统的公司工作,最终被判犯有对市政污水系统进行网络攻击的罪行。这次攻击导致数百万加仑未经处理的污水流入昆士兰州当地的公园和河流,造成了重大的环境损害。被定罪的男子被发现在他的汽车中携带了用于入侵SCADA网络的无线设备和其他计算机设备。
乌克兰电力网攻击(2015年):
在2015年,乌克兰的电力系统遭受了一次严重的攻击,导致数个电力分布中心的SCADA系统被入侵。攻击者通过远程入侵,改变了SCADA系统中的控制命令,导致大规模停电,影响了成千上万的居民。
圣胡安水电站攻击(2010年):
2010年,委内瑞拉圣胡安水电站的SCADA系统遭到入侵,攻击者修改了系统的控制参数,并禁用了报警系统。这次攻击导致水电站的发电机组受损,影响了委内瑞拉数百万居民的供电。
伊朗核设施攻击(2010年):
2010年,据报道,美国和以色列情报机构联合开展了“斯坦尼斯”计划,使用了计算机病毒“Stuxnet”,成功入侵伊朗的核设施SCADA系统。Stuxnet病毒针对特定的工业控制系统进行攻击,破坏了离心机的运行,致使伊朗的铀浓缩活动受到影响。
德国钢厂攻击(2014年):
2014年,德国一家钢铁生产厂家的生产网络遭到了攻击,导致炼钢炉的控制系统受到破坏。攻击者通过入侵SCADA系统,造成了设备严重的操作故障,直接影响了生产线的正常运行。
SCADA(Supervisory Control and Data Acquisition,监控与数据采集)系统是一种用于监控和控制工业过程的计算机系统。它通常由以下几个核心组件组成:
监控与控制中心(Master Station):也称为主站或前端处理器,是SCADA系统的核心控制单元。它通过与远程终端单元(RTU)或PLC(可编程逻辑控制器)等设备通信,实时收集和显示过程数据,并可以发送控制命令。
远程终端单元(RTU):位于被监控设备或过程现场的RTU负责监控现场数据,并通过与主站的通信链路传输这些数据。RTU通常与传感器和执行器连接,用于采集数据和执行控制操作。
PLC(可编程逻辑控制器):在某些SCADA系统中,PLC用于自动化控制和数据采集。它们能够接收来自传感器的输入,执行预编程的逻辑操作,并控制执行器的操作。
人机界面(HMI):提供给操作员的图形化用户界面,用于监视过程状态、显示实时数据、报警信息,并允许操作员与系统进行交互。HMI通常包括图表、图像、报表和控制面板等功能。
SCADA系统的主要功能包括实时监视、数据采集、过程控制、远程通信和报警管理。它广泛应用于能源、水务、交通、制造业等领域,用于监控和控制分布广泛的设备和过程,提高运营效率和安全性。
核电站控制系统中的计算机蠕虫
在2003年8月,美国核管理委员会(NRC)向所有核电站操作员发布了一则信息警告,内容涉及早些时候发生在俄亥俄州戴维斯-贝西核电站的情况。该核电站曾遭到Slammer蠕虫的入侵。
这种情况对于信息技术网络安全专家来说并不陌生。蠕虫通过一条T1通信线路进入了核电站的网络,这条线路连接着公司的企业业务网络,为蠕虫提供了通道,使其能够进入并使安全参数显示系统(SPDS)崩溃。
SPDS系统是一个工业网络,用于显示关键的反应堆安全监测传感器(如核心温度、冷却剂状态等)的状态。幸运的是,当时核电站处于离线状态,可以使用备用的模拟系统来替代数字系统暂时失效的情况。
电脑蠕虫感染汽车制造厂
2005年8月,13家戴姆勒-克莱斯勒汽车制造工厂被两个互联网蠕虫病毒感染,导致5万名工人停工一小时
2000®系统打了补丁。Zotob和PnP蠕虫感染了制造过程中不可或缺的系统。
一个常见的COTS漏洞:缓冲区溢出
在工业自动化领域,COTS产品可能包括以下几类:
控制系统:例如PLC(可编程逻辑控制器)、DCS(分布式控制系统)和SCADA系统(监控与数据采集系统)的硬件和软件组件。
传感器和执行器:各种用于监测和控制工业过程的传感器(如温度、压力、流量传感器)和执行器(如电动阀门、电动马达)。
通信设备:网络设备、工业以太网交换机、通信模块和协议转换器等,用于设备之间和与控制系统之间的数据通信。
软件应用程序:包括工艺控制、数据采集、报警管理、远程监视和人机界面(HMI)等应用程序软件。
使用COTS产品可以显著降低工业自动化系统的开发成本和时间,因为这些产品通常已经经过广泛验证和测试,具备较高的可靠性和稳定性。然而,工业自动化系统设计者和工程师需要确保选择的COTS产品能够满足特定的应用需求和安全标准。
估计有40%的可利用软件漏洞是由缓冲区溢出造成的
COTS软件环境。遗憾的是,它们已经存在了20多年。
我们知道如何修复这个缺陷,但是消除缓冲区溢出的原则还没有深入到COTS软件开发中。
在编程语言(如C语言)中,当您从主程序运行一个函数(有点像子例程)时,专用于函数的内存区域将包含一个“堆栈”或缓冲区。堆栈包含诸如调用函数时使用的值以及将在函数中使用的局部变量等内容。
在为函数分配的缓冲区空间的末尾是一个“返回地址”,它告诉计算机在运行完函数后返回到主程序的哪一行
假设在C语言中,您希望通过键盘请求用户输入,作为函数的任务。假设您想询问用户他或她的“姓”,并且您认为它的长度不应该超过20个字符。
您可以将“Lastname”这样的变量指定为最多容纳20个字符。但是C语言也缺乏防止恶意用户输入的内在机制
输入时输入许多字符,计算机将接受这些额外的字符
并将这些额外的和意外的字符分配给缓冲区中的“Lastname”。
黑客可以制作一个非常长的字符串,后面跟着一个简短的、构造非常仔细的命令,该命令覆盖位于已分配缓冲区空间末尾的内存中的原始返回地址。新的返回地址告诉计算机返回到黑客代码中的某个位置,而不是返回到原始程序中的合法地址。当给定输入时,这会溢出缓冲区。
骇客工具和技术
让我们看看我们的对手使用的一些工具和技术:
病毒。自从个人电脑出现以来,病毒就一直存在。它们的传播方式是用它们的代码(可以保存在USB闪存驱动器或CD上)感染新主机,通过程序或电子表格或文字处理程序的宏来传播。如果电子邮件中包含可打开的可执行附件,则病毒可能通过电子邮件传播。
蠕虫。蠕虫包含自我复制的代码,可以通过局域网或互联网等网络传播。蠕虫传播自身的副本,不需要主机软件来传播。
特洛伊木马。这是一个程序,它似乎用一部分代码做了一些有益的事情,而隐藏的部分代码却做了一些恶意的事情。特洛伊木马的一个例子是一个屏幕保护程序,它也通过电子邮件将您计算机上的机密数据文件副本发送给竞争对手!
逻辑炸弹。这个软件程序在计算机硬盘驱动器上休眠,直到它被一个触发器激活,比如某个日期或事件。然后它激活并引发恶意活动。
拒绝服务攻击。这种攻击通常是基于网络的,它通过一连串错误的连接或服务请求使服务器崩溃,从而导致服务器锁定或崩溃。
僵尸网络攻击。僵尸网络是由受感染的计算机组成的网络,这些计算机可以为“机器人牧人”提供服务,这些“机器人牧人”出租他们的数百或数千台受感染的计算机,用于黑客攻击或协同拒绝服务攻击。
Slammer蠕虫的解剖
现在我们已经看到了我们的对手(不满的员工、工业间谍和黑客)如何获取工具(病毒、蠕虫、利用COTS(Commercial Off-The-Shelf)代码漏洞的网络脚本),让我们来看看2003年的一种名为Slammer的蠕虫。这种蠕虫导致了以上中描述的核电厂安全显示监控系统的关闭。
Slammer蠕虫造成了极大的混乱,仅用了15分钟就让整个互联网陷入了瘫痪。攻击始于一个单一的数据包,一个总共376字节的用户数据报协议(UDP)数据包(远远小于之前的蠕虫如Code Red,约为4 KB,或Nimda,约为60 KB)。它的目标是UDP端口1434,这是Microsoft SQL(结构化查询语言)服务器数据库软件监听的端口。一旦接收到,Slammer会利用专门的代码溢出缓冲区,超过了128字节的内存输入保留空间。然后,它包含机器语言代码,导致机器覆盖自己的代码并重新编程,以发送一系列新的376字节UDP数据包到使用随机数生成器计算的互联网IP地址。攻击的时机设计得非常巧妙,使得蠕虫能够每8.5秒翻一番感染主机的数量,使得互联网及与之连接的企业局域网因可用带宽被消耗殆尽而陷入瘫痪状态。
正如前一节所述,Slammer蠕虫阻塞了Davis-Besse核电厂工业网络的内部带宽。它还在其他地方造成了重大损害。华盛顿州一个使用SQL Server数据库的911呼叫中心被有效地关闭。紧急调度员不得不采取繁琐的手动程序来应对,直到系统能够重新启动。
Slammer蠕虫传播方式的简要概述如图所示。
最后一个观察结果将为我们对COTS软件漏洞的讨论添加一点讽刺意味。让我们假设我们有一个基于软件的防火墙来保护我们连接到Internet的内部LAN。我们需要这个防火墙来防止基于Internet的攻击,如蠕虫和其他网络攻击,到达我们的内部主机,因为我们知道我们LAN上的内部主机上的软件可能容易受到(例如)缓冲区溢出攻击。
因此,我们的基于软件的防火墙在防范利用缓冲区溢出漏洞的网络攻击时起到了“守护门户”的作用。这让我们感到安全,直到我们发现我们的防火墙代码本身可能存在缓冲区溢出漏洞!(注:安全研究人员经常发现并发布关于安全软件中软件漏洞和漏洞的信息,包括基于软件的防火墙和防病毒软件)。
一旦这些漏洞被发现并公开,对于注重安全的系统管理员来说,唯一的选择就是不断修补和修补。有一个专门的领域叫做“补丁管理”,现在适用于工业网络,以解决软件补丁何时、在何处应用的问题。在工业网络中,补丁管理程序扮演着非常重要的角色,因为涉及到关键基础设施。