最近一起针对关键基础设施的攻击事件中,攻击者通过部署恶意软件来操作工业安全系统。目标系统为工业流程提供了紧急关闭功能。相关证据表明,攻击者在研发破坏物理装置功能的过程中,无意间关闭了操作流程。
这款被称为“TRITON”的恶意软件是一种攻击框架,用来与Triconex安全仪表系统(Safety Instrumented System)(SIS)控制器交互。目前还无法确定该攻击是由什么人发起的,但是这种行动与国家准备的攻击一致。Dragos Inc.的研究人员表示这起攻击的目标至少有一个是在中东地区。
事件背景
2017年11月中旬,Dragos Inc.团队发现了针对ICS量身定做的恶意软件,目标至少一个在中东地区。 该团队将此恶意软件命名为TRISIS(本文中的TRITON),因为它将目标锁定施耐德电气的Triconex安全仪表系统(SIS),从而能够更换最终控制元素中的逻辑。
TRITON具有高度针对性,可能不会对其他施耐德电气客户构成直接威胁,其他SIS产品也不会受到威胁。 重要的是,恶意软件不会在施耐德电气产品中利用固有的漏洞。 然而,这个特定事件中的这种能力,方法和流通现在可能被其他攻击者所复制,给工业资产所有者和运营商带来一类新的威胁。
攻击者获得了对SIS工程师站的远程访问权限,并部署了TRITON攻击框架来重新下装SIS控制器。事件中,一些SIS控制器进入失效的安全状态,自动关闭工业控制流程,并促使资产拥有者开始调查。调查发现,当冗余控制器之间的应用程序代码未通过验证检查时,SIS控制器启动了安全关闭 – 导致MP诊断失败并在调查的过程中发现了TRITON的存在。
攻击者的长期目标是引起物理破坏后果的能力。基于这样一个事实,即攻击者最初在DCS上获得了可靠的立足点,并且已经具备了操纵流程或关闭工厂的能力,进一步危害了SIS系统。入侵后的DCS和SIS系统将使攻击者最大限度的对物理装置造成破坏。
一旦接触到SIS网络,攻击者使用预先构建的TRITON攻击框架与使用TriStation协议的SIS控制器进行交互。攻击者可能通过发出暂停命令或向SIS控制器上传有缺陷的代码而导致进程关闭。相反,攻击者在一段时间内进行了多次尝试,为此目标环境中的SIS控制器提供功能控制逻辑。虽然由于SIS系统对攻击脚本的限制而导致攻击尝试失败,但攻击者仍然在不停的测试。这表明攻击者意图在造成关闭过程之外的特定结果。
TRISIS(TRITON)时间线
时间 | 影响 |
2017-11-17 | Dragos发现TRITON并开始跟进分析 |
2017-11月底 | Dragos确认TRITON的恶意行为并确认至少有一个目标受影响
Dragos联合DOS和DHS确认没有敏感信息泄漏并且决定暂时不公开 FireEye知悉Dragos有该恶意样本,并和相关组织进行分析,再次确保敏感信息未被泄漏 |
2017-12-6 | 初始的安全通告发给Dragos ICS WorldView客户 |
2017-12-8 | 深度技术报告完成并且发给Dragos ICS WorldView客户 |
2017-12-10 | Dragos准备对外通告 |
2017-12-12 | FireEye发布相关技术报告,Dragos也发布了相关报告 |
2017-12-12 | 绿盟科技安全团队关注并跟踪此事件,随时获取公布的样本 |
2017-12-13 | 绿盟科技安全团队完成主样本trilog.exe的分析 |
2017-12-25 | 绿盟科技安全团队获取到完整样本,开始技术分析 |
2017-12-29 | 绿盟科技发布技术分析报告与防护方案 |
系统架构
下图为SIS的结构简图:
现代工业过程控制和自动化系统依靠各种先进的控制系统和安全功能。这些系统和功能通常被称为工业控制系统(ICS)或操作技术(OT)。
分布式控制系统(DCS)为操作人员提供远程监视和控制工业过程的能力。它是由计算机,软件应用程序和控制器组成的计算机控制系统。工程工作站是用于控制系统应用和其他控制系统设备的配置,维护和诊断的计算机。
SIS是一个独立的控制系统,可独立监控受控过程的状态。如果过程中有参数超过了定义的危险状态,则SIS会尝试将过程恢复到安全状态或自动执行流程的安全关闭。如果SIS和DCS控制失败,最后的防线就是工业设施的设计,其中包括设备(如爆破片)的机械保护,物理报警,应急程序和其他缓解危险情况的机制。
资产所有者采用不同的方法将工厂的DCS与SIS连接起来。传统的方法依赖于通信基础设施和控制策略的隔离原则。至少在过去的十年中,由于各种原因(包括较低的成本,易用性以及通过DCS与SIS之间的信息交换所获得的益处)而出现了集成DCS和SIS设计的趋势。我们相信TRITON能够敏锐地展示与集成设计相关的风险,从而实现DCS与SIS网络主机之间的双向通信。
工业控制系统攻击链模型
ICS攻击链模型分2个阶段,如下图所示:
攻击场景
TRITON属于第二阶段的攻击。以下的SIS威胁模型着重描述了攻击者在成功攻击SIS后,可以选择的后续操作。
- 使用SIS关闭进程:
攻击者重新下装SIS逻辑使其跳闸并关闭一个处于安全状态的进程,换句话说就是触发一个误报。
结果:
由于停机时间造成财物损失并且停工后再启动的复杂流程。
- 重新下装SIS来允许不安全的状态:
攻击者可以重新下装SIS逻辑来允许不安全的条件持续下去。
结果:
由于SIS逻辑被修改,会增加造成物理损坏(例如对设备,产品,环境和人身安全的影响)的风险。
- 重新下装SIS以允许不安全的状态,同时使用DCS来创建不安全的状态或者危害:
攻击者可以利用DCS把进程切换到不安全的状态,影响SIS的正常功能。
结果:
影响人身安全,环境或设备损坏,其程度取决于过程的物理限制和工艺流程。
攻击流程
TRITON攻击流程简图如下:
- ICS Cyber Kill Chain第一阶段的完成:
识别并访问能够与目标SIS通信的系统。
- 第二阶段发展:
识别目标SIS类型并用替换逻辑和加载程序开发TRITON。
- 第二阶段测试:
确保TRITON按照预期工作。
- 第二阶段交付:
将TRITON转移到SIS中,该SIS包含用于提供新逻辑的新逻辑和支持二进制文件的“加载器”模块。
- 第2阶段安装/修改:
在运行TRITON可执行文件时,伪装成Triconex软件来分析SIS日志,恶意软件利用嵌入的二进制代码更改控制器的运行逻辑,并上传“初始化代码”。
- 第二阶段执行ICS攻击:
TRITON验证上一步成功后,将新的梯形图逻辑上传到SIS。
机器分析-绿盟威胁分析中心
上传时间 | 文件名称 | 文件MD5 | 威胁 |
2017-12-25 15:11:39 | trilog.exe | 6c39c3f4a08d3d78f2eb973a94bd7718 | 中 |
2017-12-25 15:10:12 | TsLow.pyc | f6b3a73c8c87506acda430671360ce15 | 低 |
2017-12-25 15:10:05 | TS_cnames.pyc | e98f4f3505f05bf90e17554fbc97bba9 | 低 |
2017-12-25 15:09:57 | TsBase.pyc | 288166952f934146be172f6353e9a1f5 | 低 |
2017-12-25 15:09:47 | imain.bin | 437f135ba179959a580412e564d3107f | 高 |
2017-12-25 15:09:39 | TsHi.pyc | 27c69aa39024d21ea109cc9c9d944a04 | 低 |
2017-12-25 15:09:30 | sh.pyc | 8b675db417cc8b23f4c43f3de5c83438 | 低 |
2017-12-25 15:09:05 | library.zip | 0face841f7b2953e7c29c064d6886523 | 中 |
2017-12-25 15:08:58 | inject.bin | 0544d425c7555dc4e9d76b571f31f500 | 高 |
高阶分析
TRITON包括两部分:基于Windows平台的Python脚本程序Trilog.exe,以及两个恶意代码inject.bin、imain.bin。Trilog.exe是Triconex应用软件中用于记录日志的程序。TRITON病毒将该程序感染,用来与Triconex控制器通信。检测控制器状态,并将两个恶意代码inject.bin以及imain.bin注入到Triconex控制器中。
Trilog.exe
此程序为py打包成的exe,经过如下命令可以反编译出最原始的执行脚本script_test.py。
Trilog.exe通过TriStation网络协议(“TS”,UDP,端口1502)与Triconex控制器进行通信,基于5个python模块(TsHi、TsBase、TsLow、TS_cnames、sh)完成,该协议没有任何认证或者加密算法。
- TsHi用来实现对控制器攻击的整个过程。
- TsBase包含了TsHi中所调用的程序,将攻击者所要实现的意图转换为TS通信协议函数代码。
该协议的功能码如下所示:
功能码 | 含义 |
1 | 开始增量下装 |
10 | 所有下装结束 |
11 | 增量下装结束 |
12 | 取消下装 |
19 | 获取控制器状态 |
20 | 运行程序 |
21 | 停止程序 |
29 | 执行漏洞利用 |
54 | 获取模块版本 |
55 | 分配程序 |
56 | 分配函数 |
59 | 开始所有下装 |
65 | 上载程序 |
66 | 上载函数 |
- TsLow包含了TS通信协议的底层函数。另外还包括了检测与控制器连接状态的函数。
Trilog程序的攻击过程如下图所示,首先通过探测到的控制器IP来连接控制器设备。一旦连接成功,通过PresetStatusField函数将带有标识符号的参数程序下装到控制器中。下装之后会对标识符号进行检测,如检测到标识符号,Trilog继续向控制器通过SafeAppendProgramMod函数下装payload。如检测不到标识符,trilog向控制器下装一个空工程以覆盖之前下装的参数程序,之后再继续向控制器下装payload。payload下装完成之后,执行该payload。如果运行成功,则攻击完成,如果运行失败,Trilog向控制器下装一个空工程用以覆盖之前下装的payload。这一机制可以确保其攻击代码不被发现。