SCADA HMI软件安全:了解和预防SCADA病毒,有意和无意

网络安全:探索一些技术概念将帮助最终用户在创建SCADA和HMI软件应用程序和底层网络架构时理解和防止安全缺陷。

通过马科斯Taccolini 2015年7月5日

2010年7月14日,当第一个监控和数据采集(SCADA)病毒Stuxnet被用来摧毁并破坏整个伊朗核基础设施的重要部分时,电影中的虚构故事变成了现实。对这一事件的了解更多地局限于自动化社区,但随着索尼(Sony)和塔吉特(Target)等知名品牌的其他数据泄露事件,网络安全意识在企业中成为主流。

除了由有意的威胁引起的中断外,无意的错误配置或不充分的操作也会造成安全漏洞;由于当前的系统是高度集成的,由许多软件层组成,在大多数情况下,创建和操作这些系统的人不一定深入了解软件层是如何交互的。

为网络攻击创建场景

正如近年来所见,分布式系统的高度集成、当前自动化和信息技术系统中使用的复杂程度和软件的多层,为恶意威胁的产生创造了有利的场景。

但是,由于涉及到SCADA设施的安全,必须防止的不仅仅是预期的威胁。在工厂中创建和操作自动化的人并不完全了解复杂的基础设施和许多软件层。因此,除非有良好的标准,否则操作错误、维护不足和更新程序很可能会影响系统的可靠性和稳定性,从而在系统上有效地制造非故意的病毒;或者为那些怀有恶意的人敞开大门。

为了系统地识别和避免潜在威胁,需要有一个验证矩阵。一方面,用户需要保护SCADA人机界面(HMI)软件执行所依赖的软件和IT基础设施;在另一个维度上,需要分析自动化项目本身,具体为SCADA/HMI项目的配置和运行。

安全分析的第一个维度是基本硬件、软件和网络基础设施,涉及操作系统安全补丁更新程序、身份和密码保护、组网等。这种分析并不特定于SCADA或HMI系统,应该遵循既定的IT标准,已经有很多参考文献可用。因此,重点将放在另一个维度上:软件自动化项目本身的开发,包括SCADA HMI配置、执行和部署。

有意或无意的威胁

预防故意威胁的必要性至关重要。不仅是因为外部敌人干扰生产基础设施的政治场景,还因为一个更简单的原因:如果有可能制造威胁,那么就会有人制造威胁。即使只是为了技术上的挑战,因为许多计算机病毒的产生不是为了盈利或特定的攻击,而是为了满足某人的自我。

在过去的15年里,编程技能、软件和通信技术的发展已经远远超出了大多数自动化软件工具和产品所提供的更新。即使是升级到最新版本工具的用户也没有受到保护,因为大多数解决方案都是基于遗留技术,任何精通技术的青少年只要他想,都可以破坏这些技术。

故意威胁

随着系统复杂性的增加,在调试现场测试期间可能不可能完全模拟所有可以想象到的场景,必须在单元测试中使用本质安全的技术和架构确保质量和操作稳定性。事实上,许多系统实际上并没有采用更新、更安全的技术;相反,他们围绕遗留代码和技术创建“包装器”和代码层和模块;保护他们的投资。

这种场景带来了巨大的风险,并且可能是不安全的,因为当尝试在新计算机、新操作系统、新网络和新操作过程上运行遗留组件时,它会使许多核心和内核组件极其脆弱,同时增加潜在的随机问题。在这种环境中,很可能会发生错误,可能不是在容易检测到的正常操作期间,而是在最重要的监控系统不发生故障的时候:在高活动压力或异常进程情况下,网络或计算机故障,多个警报,执行以前未执行的错误路径代码或系统恢复代码,或不正确地执行命令。最终用户可以预期这些潜在的错误会在最糟糕的时刻出现,即在关键任务的情况下处理异常的流程情况。

一个非故意系统中断的例子是在一个应用程序中,在夜班期间,与SCADA-HMI和关键plc的通信将随机关闭,导致进程停止。系统已经完美地运行了好几个月,这些问题是在没有修改项目配置的情况下开始的,因此有病毒或故意破坏的嫌疑。

在对操作人员和操作过程进行了长时间的监控后,相关人员了解到有人开启了操作人员电脑上的“屏幕保护程序”;由于关闭显示器时特定计算机上的硬件问题,它也关闭了“用于RS-232通信的8250芯片”,只有下电和上电才能恢复RS232端口。这个问题不是随机的或恶意的,它发生在夜班时,当操作员离开他的位置足够长时间,屏幕保护程序被激活;而决定启用屏幕保护程序来节省屏幕和一些能量的IT技术人员没有意识到硬件上的副作用。

给出的例子是针对非故意威胁所采取的典型步骤:(a)操作人员和IT技术人员不完全了解软件和硬件自动化交互所包含的多层复杂性。事情就应该是这样,不可能,也不可能指望他们知道一切;(b)系统或环境的微小修改或操作程序的改变,本应是完全无害的,却造成了不必要的副作用;(c)由于未检测到的延迟错误和连接层上不可预测的情况,副作用可能传播为更大的问题;(d)所产生的错误或问题可能在一段时间内未被发现,或似乎具有随机行为。

项目周期安全性

为了系统地识别潜在威胁,分析整个项目周期,在这个简化模型中,该周期由四个步骤组成:

  1. 技术、架构和工具的选择;
  2. 项目配置和编程;
  3. 部署调试;
  4. 操作维护。

更多地了解每个阶段有助于在项目中合并安全性。步骤3,部署和调试,是大多数系统最脆弱的区域之一。

1.技术、架构、安全

同样地,人们不能仅仅为20世纪80年代制造的汽车添加安全气囊、传感器和其他技术之类的配件来增强司机和乘客的安全性,有必要更新当前自动化系统中使用的软件基础,以确保它们适用于当今的操作环境。此更新还将提供当前技术中可用的所有潜在好处,这些好处没有被基于遗留软件内核的解决方案利用。

由于缺少指针和内存保护、ActiveX组件、COM、DCOM和开放TCP/IP套接字,因此需要避免一些本质上不安全的遗留技术,例如用VBScript和VBA创建的解释脚本,以及诸如C或c++之类的专有语言。首选的技术包括用于脚本的编译语言和内存保护语言,如c#、VB。NET、具有纯互联网技术的Web客户端(具有“安全沙箱”或“部分信任”)、WCF (Windows通信基金会)、Web服务和SQL数据库。

2.项目配置,编程安全

项目配置和操作的良好实践包括将项目配置集中在SQL数据库或服务器中,允许分布式安全访问,在更新项目时内置更改管理和版本控制,以及远程运行诊断、全面测试新应用程序和在不中断操作的情况下更新系统的能力。

测试项目的旧范例只是简单地运行应用程序。目前的标准要求在配置阶段进行更高级别的验证,并使用特定的模拟、分析和性能分析工具。

病毒或随机应用程序错误引起的潜在问题是类似的。代码覆盖率分析的数学告诉我们,仅通过测试场景是不可能确保可靠性的。例如,对一个只有10个“IF-Then-Else”决策的应用程序的详尽测试应该需要运行1024个场景。因此,安全性和可靠性验证应该嵌入到架构、技术和编程过程中,而不是试图通过暴力测试或外部包装来添加。系统还应该有一个内置的跟踪和版本管理系统,以便工具本身自动记录任何配置更改。

3.部署、调测安全

部署是安全问题最脆弱的领域之一,最近的许多病毒都利用了它。

工业环境中仍在生产的大多数系统都基于20世纪80年代或90年代的软件技术,其中SCADA/HMI软件包依赖于数百个独立的配置文件和通信驱动程序动态链接库(DLL)来执行。意外的错误很容易发生,病毒编程只需要最低水平的基本编程技能,就像在文件夹中“删除一些文件”一样。

即使许多单独的文件本身可能被加密或以二进制形式存在,这些文件与它们的原始项目之间也没有联系。任何人都可以在任何计算机上创建额外的文件,并将它们放入一个文件夹来修改项目行为。要知道要禁用哪些警报或要更改哪些设定值以产生威胁可能很复杂,但病毒编程本身只需要基本的编程技能,而且意外留下或复制错误文件的风险非常高。今天的新一代工具基于加密的结构化查询语言(SQL)只读文件,以确保其配置的安全部署。

下面是一个简单的检查清单,可以减少对遗留系统的威胁,并帮助规范新系统。

  • 遗留产品和安装:应该将配置文件复制到新的文件夹中,并保证为空,并且在运行项目时,Microsoft Windows登录权限应该只具有对这些文件夹的读访问权限。非常关键的系统应该有一个外部实用程序,用于检查为生产安装的文件的总大小和校验和,这些文件是由系统集成公司远程创建的。
  • 选择和实施新的解决方案:理想情况下,整个项目配置应该保存在一个部署文件中,例如一个加密的只读SQL数据库。版本管理和变更管理应该依赖于内置的特性,而不是外部工具或手动过程。

遗留系统中的另一个漏洞是通信协议驱动程序模型。在许多系统中,协议依赖于使用开放工具包创建的外部DLL文件,这些文件很容易被其他DLL所取代,这可能会破坏系统。在新一代工具中,驱动程序作为隔离进程运行,不能直接访问应用程序的其余部分,并且具有值验证和只读部署,以防止调试结束后修改这些dll。

4.操作、维护

良好的用户安全系统(包括角色和组权限)在大多数上一代系统中已经可用。大多数系统也能够符合法规要求,如美国FDA CFR 21第11部分。用于操作和维护的新增强功能包括消除不安全的运行时组件,如Active-x,在更新项目时添加内置保护和更改管理版本控制,以及在不中断操作的情况下远程运行诊断或更新系统的能力。在项目上拥有版本控制(审计跟踪)以及在同一台计算机上管理多个版本的能力也是至关重要的。数据访问安全性应该能够在图形显示和每个标签中定义,在核心标签数据库定义表中定义,此外还有用户界面的安全性。

更新软件工具是导致系统中断的常见原因,这种中断会给正在运行的应用程序带来意想不到的行为。现代系统应该允许安装新的项目和软件工具版本,而不需要删除以前的版本,在同一服务器上同时并排运行版本,运行以前系统的执行引擎和计划的新更新,从而能够在将更改应用到生产应用程序之前运行验证测试。

更新基础

如前所述,就像几乎不可能把一辆20世纪80年代制造的汽车增加配件,使其像最新型号一样安全驾驶一样。这个概念也适用于工业自动化应用程序中使用的软件基础设施。许多系统依赖于20世纪80年代和90年代创建的软件基础。尽管它们在当时是很好的基础,但它们无法满足今天的安全需求,也无法利用过去十年创造的、几乎每周都在发展的新软件技术。

近年来,软件、通信和用户界面技术的发展已经加快,因此在大多数工厂,没有必要更新整个自动化系统。SCADA和HMI的更新可以带来许多直接的优势,在系统安全性和操作稳定性、可靠性和灵活性方面,提供信息优化,使创建投资回报成为可能,使投资不完全依赖于增强安全性的需求。将软件更新为真正的现代技术的预期收益不是用百分比收益来衡量的,而是用乘数因素来衡量的,可以防止潜在的安全问题,这可能会极大地影响生产,并允许由这些系统管理的资产获得更高的效率。

- Marcos Taccolini, Tatsoft LLC首席执行官;由数字项目经理Anisa Samarxhiu编辑,控制工程asamarxhiu@cfemedia.com

Tastsoft LLC是一家2015年7月23日会员

参考文献

[1]佩尔曼,梅·罗宾;Rohde, Kenneth,“控制系统安全的网络评估方法”,2005年6月,ISA POWID研讨会

[2] Pollet, Jonathan,“开发可靠的SCADA安全策略”,2002年11月,传感器行业会议

[3] Taccolini, Marcos,“监控系统技术的世代”,2011年8月,ISA Intech南美洲。

[4] GE,“理解和最小化您的HMI/SCADA安全漏洞”,2011年,
https://www.ge-ip.com/library/detail/11924

[5],美国计算机应急准备小组,“控制系统安全计划(CSSP)”,2012年
https://www.us-cert.gov/control_systems/csstandards.html#plan

[6]美国能源部,“提高Scada网络安全的21个步骤”,2012年
https://energy.gov/oe/downloads/21-steps-improve-cyber-security-scada-networks

[7]红色目标安全,“SCADA和工业控制安全法规和标准”,2012
https://isacahouston.org/documents/RedTigerSecurity-NERCCIPandotherframeworks.pd

关键概念

  • 意外的错误很容易发生,病毒编程只需要基本的编程技能,因为它是最低级别的,只是在文件夹中“放置一些文件”。
  • 许多系统实际上并没有采用更新、更安全的技术;相反,他们围绕遗留代码和技术创建“包装器”和代码层和模块;保护他们的投资。

考虑一下这个

你会采取什么措施来保护自己免受网络安全攻击?

在线额外

参见下面有关SCADA和HMI系统的相关文章链接。