快捷搜索:  网络  后门  渗透  CVE  扫描  木马  黑客  as

针对工控恶意代码TRISIS的手艺阐发

媒介

2017年8月,安天安全研究与应急处理中心(安天CERT)基于综合情报研判,将针对工业控制体系的恶意代码TRISIS(又名TRITON、HATMAN)列为需要重点阐发关注的威胁,并将其命名为“海渊”。该恶意代码在中东某石油天然气厂的工业控制体系中被国外安全研究人员发现,根据各方信息判定,由于攻击者预备不充分,还没有对人员及财产造成重大丧失。“海渊”(TRISIS)的目标为施耐德电气公司的安全仪表体系,通过植入固件更改终极控制元件的逻辑以达到攻击目的。其通过Tricon安全仪表体系所使用的TriStation通讯协定进行攻击,因此运行此协定的所有安全控制器都可能受到影响。

针对工控恶意代码TRISIS的技术分析

1、概述

“海渊”(TRISIS)所攻击的目标是工业控制体系(ICS)中的安全仪表体系(SIS)控制器,其首要瞄准施耐德电气的Tricon安全仪表体系,从而达到在终极控制元件中替代逻辑的目的。安全仪表体系(Safety Instrumented System),简称SIS,又称为安全联锁体系(Safety Interlocking System),首要为工厂控制体系中报警以及联锁部分,对控制体系中检测的效果实施报警动作或调节或停机控制,是工厂企业自动控制中的重要组成部分。其包括传感器、逻辑运算器以及终极执行元件,即检测单元、控制单元以及执行单元。SIS体系可以监测生产过程中出现的或者潜在的惊险,发出告警信息或直接执行预定程序,立即进入操作,以防止变乱的发生,同时降低变乱带来的风险及影响。

安天CERT针对该恶意代码的攻击道理及样本放开了手艺阐发,发现该恶意代码的攻击流程为行使社工技巧伪装成安全仪表体系的日记软件进入目标收集,以后通过特殊ping包发现安全仪表体系,在确定安全仪表体系可被入侵后,会上传组合后的二进制代码,以改变安全仪表体系的梯形图(即安全仪表体系逻辑),一旦攻击成功,将有可能对工业生产设备、工厂人身安全造成巨大风险,对症结信息基础举措措施安全、社会安全造成巨大影响。

二、“海渊”(TRISIS)攻击道理

2.1 攻击道理简述

“海渊”(TRISIS)以及“震网”(Stuxnet)、“Industroyer/CrashOverride”等恶意代码同样具备从工业控制体系中发现特定目标安装的能力。但同时,其更进一步具有直接交互、遥程控制以及风险安全体系的能力。

“海渊”(TRISIS)采用Python脚本进行编写,并使用Py2EXE伪编译为PE可执行程序,以便于在未装置Python的体系环境下执行。攻击者充分了解安全仪表体系处理过程及环境的详细细节,才能组织有用载荷行使“海渊”(TRISIS)进行攻击,其首要通过修改以及部署新的PLC(可编程逻辑控制器)梯形图,以对目标产生预期的影响。

“海渊”(TRISIS)可以改变目标安全仪表的基本逻辑,通过可执行文件将其目标作为在执行时传递给它的命令行参数,其核心功能是通过将四个二进制文件组合到目标上进行工作,其中植入Python脚本中的两个二进制载荷,首要用于预备以及加载包含替代逻辑的外部模块(参见图2-一、图2-2);附加的两个外部的二进制文件,由脚本中的名称专程引用,但位于单独的文件中,其中imain.bin为首要功能载荷(参见图2-3)。

植入脚本中的二进制载荷

图2-1 植入脚本中的二进制载荷

脚本中用于笼盖核心载荷的傀儡程序

图2-2 脚本中用于笼盖核心载荷的傀儡程序

获取外部自力二进制文件

图2-3 获取外部自力二进制文件

2.2 攻击流程阐发

trilog.exe是“海渊”(TRISIS)的主程序,其原本是Tricon安全仪表体系中的一个模块程序,攻击者行使其进行实施攻击的首要流程参见图2-4:

TRISIS攻击流程

图2-4 TRISIS攻击流程

攻击流程说明:

trilog.exe通过TSAA协定链接TCM(Tricon通讯模块),识别并获得一个能够与安全仪表体系通讯的体系,并判定是否餍足入侵的前提;

确认可入侵后,识别目标安全仪表体系类型,并用替代逻辑以及加载器开发“海渊”(TRISIS)功能代码,构建漏洞行使程序PresentStatus;

上载PresentStatus到Tricon安全仪表体系中,并执行确保“海渊”(TRISIS)在预期环境下工作;

构建加载器以及核心载荷inject.bin、imain.bin,将“海渊”(TRISIS)传输到包含装载器模块的目标上;

“海渊”(TRISIS)可执行文件运行时,伪装成用于阐发日记的软件,行使嵌入的二进制文件来识别控制器上存储器中的适量地位以进行逻辑替代,并上传“初始化代码”(4字节序列);

上传初始化代码

图2-5 上传初始化代码

验证前一步是否成功,然后上传新的PLC梯形图到安全仪表体系;

上传傀儡程序笼盖核心载荷。

上传傀儡程序

图2-6 上传傀儡程序

3、”海渊”(TRISIS)样本阐发

3.1 “海渊”(TRISIS)与Triconex的通讯过程阐发

“海渊”(TRISIS)与Triconex的通讯首要依靠于TsHi、TsBase、TsLow、TS_cnames等模块,这些模块提供了极为强盛的遥程连接控制Triconex的代码。

要求连接

“海渊”(TRISIS)通过在Script_test.py中调用TsLow中的connect函数进行连接,我们以此作为入口点,对其协定进行简单阐发。

connect函数

图3-1 connect函数

在connect函数中detect_ip以及tcm_connect为症结函数。

detect_ip函数

图3-2 detect_ip函数

tcm_connect函数

图3-3 tcm_connect函数

在detect_ip函数中使用1502端口,用变量TS_PORT定义;另外,对ping数据包以及close数据包定义,分别采用0×06以及0×04为两者标识码,以下图3-4。

数据包类型标识码定义

图3-4 数据包类型标识码定义

在tcm_connect函数中connect_result一样为数据包类型标识码,详细定义见上图3-4,其中症结函数为tcm_exec(type参数的值为1)。

tcm_exec函数

图3-5 tcm_exec函数

Struct.pack函数作用为按照给定的格式(fmt),把数据转换成字符串(字节流),并将该字符串返归,即packet是把type以及data长度按照16进制诠释,再加上data以及crc16校验的数据包。Struct.pack数据包结构以下:

针对工控恶意代码TRISIS的技术分析

上传PresetStatus

“海渊”(TRISIS)通过使用SafeAppendProgramMod函数上传PresetStatus。

PresetStatusField函数

图3-6 PresetStatusField函数

script_code为需要上传的执行代码。该函数为对AppendProgramMin函数的封装,AppendProgramMin函数调用WriteProgram函数(对WriteFunctionOrProgram的封装)。

AppendProgramMin函数(部分)

图3-7 AppendProgramMin函数(部分)

WriteFunctionOrProgram函数

图3-8 WriteFunctionOrProgram函数

AppendProgramMin函数在代码尾部加上CRC校验:

MyCodeSign函数

图3-9 MyCodeSign函数

在WriteFunctionOrProgram函数中调用AllocateProgram函数向仪表写入程序:

针对工控恶意代码TRISIS的技术分析

图3-10 AllocateProgram函数

此时对数据包进行一次封装,现在数据包为:

针对工控恶意代码TRISIS的技术分析

Ts_exec函数

图3-11 Ts_exec函数

Ts_exec函数负责一层数据包封装,此时数据包为:

Ts_exec函数负责一层数据包封装

在Ts_exec函数中调用tcm_exec函数(参见图3-5),此时数据包为:

在Ts_exec函数中调用tcm_exec函数

Tcm_exec调用udp_exec函数,终极调用sock.send函数通讯。

上传有用载荷

上传有用载荷与上传PresetStatus流程相同,在此再也不赘述,黑客技术,有用载荷的数据包结构为:

上传有用载荷

3.2 模块阐发

“海渊”(TRISIS)构建了精简的TriStation通讯框架,框架包含模块TsHi.py、TsBase.py、TsLow.py、TS_cnames.py。除框架外,“海渊”(TRISIS)还包含一个Script_test.py脚本,此脚本使用TriStation通讯框架连接到Tricon,并注入载荷。

Script_test.py阐发

Script_test.py是使“海渊”(TRISIS)真正完成功能的模块,Script_test.py文件小巧,其通讯功能的完成首要依靠TriStation协定支持库。由于TriStation协定目前为止还是闭源协定,这些支持库极有可能为“海渊”(TRISIS)违后攻击者花费精力逆向得来,要是要对TriStation协定进行深入了解,对触及的库文件进行阐发是很好的选择。

Script_test.py与通讯有关代码首要完成了代码上传、寻觅仪表体系以及行使库函数进行通讯的功能(参见图3-十二、3-1三、3-14)。

代码上传

图3-12 代码上传

寻觅仪表体系

图3-13 寻觅仪表体系

针对工控恶意代码TRISIS的技术分析

图3-14 行使库函数进行通讯

攻击步骤说明:

Script_test.py脚本起首尝试连接Tricon仪表体系,当不带参数启动时,直接广播搜索可识别TriStation协定的设备——Tricon仪表体系:

针对工控恶意代码TRISIS的技术分析

广播搜索Tricon仪表体系

图3-15 广播搜索Tricon仪表体系

一旦寻觅到目标,将上传PresetStatus程序确定此目标是否可被行使;确定可被行使后,上传inject.bin以及imain.bin两个首要载荷,篡改图表,以达到损坏或监控目的;最后,上传无用代码笼盖载荷消除痕迹。

TsHi.py阐发

TsHi.py是框架的高级接口,允许读写函数以及程序,和检索项目信息以及与植入有用负载的交互(以下所述),其包括SafeAppendProgramMod函数,该函数可获取程序表,读取程序以及函数,并将提供的shellcode附加到现有的控制程序,它还在必要时处理CRC32校验以及。

TsHi.py阐发

从函数名我们可以轻易猜出每一个函数的作用,“海渊”(TRISIS)只使用了其中的SafeAppendProgramMod函数来上传其载荷。

SafeAppendProgramMod函数检查目标状态

针对工控恶意代码TRISIS的技术分析

图3-16 SafeAppendProgramMod函数检查目标状态

以后,此函数获取目标体系中已上传的程序列表及函数数量。最后用AppendProgramMin函数上传载荷,并执行。

TsBase.py阐发

TsBase.py首要充当高级接口以及低级TriStation功能代码之间的转换层,和用于上载以及下载程序或获取控制程序状态以及模块版本等功能的数据格式:

TsBase.py阐发

TsLow.py阐发

TsLow.py可完成将上层制造的TriStation数据包通过UDP发送到Tricon通讯模块(TCM)的功能的最底层,还包括通过向1502端口发送UDP“ping”广播新闻来自动发现Tricon控制器。

TsLow.py阐发

TS_cnames.py阐发

TS_cnames.py包含TriStation协定功能以及响应代码和症结开关以及控制程序状态的命名查找常量。

TS_cnames.py阐发

图3-17 状态码截图(部分)

4、结语

“海渊”(TRISIS)恶意代码呈现出了一些值得关注的特点,其开发者深入了解相干工控产品的控制协定,除了上载到PLC中的二进制模块外,其他框架以及功能代码整个采用脚本编写,无比容易被改造以及加工。而其袭击点则在作为工业控制体系的生产安全监测单元的SIS上。

作为针对工业体系攻击的恶意代码,“海渊”(TRISIS)很自然的会被与“震网”(Stuxnet)以及“乌克兰停电”等攻击症结基础工业举措措施的事故相比较。

与“震网”庞大的恶意代码工程相比,“海渊”(TRISIS)看起来相对于简单。震网攻击对于离心计心情总体控制机制的介入是极为深入的,这本身也源自铀离心工艺处理的复杂性,基于攻击者所要杀青的复杂的攻击目的(铀没法达到武器级请求、大批损毁离心计心情)、攻击的隐蔽性攻击以及攻击需要杀青的阶段持续性。震网是一个支撑完备战斗过程的恶意代码。相比之下,绝管“海渊”(TRISIS)小巧的使人可骇,但其更像一个灵巧的“战争部”,其在攻击步履中,多是与其他的攻击植入手段以及恶意代码配合使用的。对“海渊”(TRISIS)的编写者来说,其核心资源以及成本消费,主若是对SIS体系杀青深入阐发了解。

“海渊”(TRISIS)的攻击方式与乌克兰电网遭受攻击停电事故的显然悬殊是“海渊”(TRISIS)攻击的地位愈加纵深。乌克兰停电的攻击结果是通过直接在SCADA控制界面上拉闸杀青的,粗暴而有用,其并不依靠于深度解析以及篡改控制指令。绝管乌克兰停电事故中,攻击者也篡改了遥程变电站串口以太网关中的固件,但这一操作目的是为了导致已经被“拉闸”的遥程变电站不能被遥程合闸恢复。而“海渊”(TRISIS)的袭击点,则是为PLC重置新的逻辑,而且其攻击的是安全仪表体系。

从防御工作来看,由于“海渊”(TRISIS)以通过伪装为SIS的日记软件获得被执行的机会,因此重要的防御点即在对软件供应链的管控上。应在采购阶段,严格落实供应链的安全管控,从源头遏制风险。在工业体系的运维中,针对工控体系环境的新设备装置上线、软件的发布升级、运维手段的接入等,都应进行周全的前置检查以及挪移介质接入管控。

与“震网”、“乌克兰停电”事故类似的是,“海渊”(TRISIS)攻击依然是以获得症结PC节点为攻击入口的,这一特点是具有普遍性的。而一旦症结PC节点失守,攻击已经针对生产体系实施了纵深影响,则极难防御。对于工业基础举措措施来说,做好生产收集以及办公收集中的PC端点防御是一个必须做好的基础性工作,对于重要PC节点必须形成严格的依托白名单的主动防御机制。

从现状来看,大部分工业控制体系对效劳性能的考虑遥多于安全考虑,而安全考量中,更多依然是以传统的应答变乱视角,而非应答攻击视角。做好工业体系的安全防御工作,必须按照三同步的绳尺进行,在体系规划、建设、运维的全周期考虑收集安全问题。这是一个复杂以及体系的工作,在可治理收集的基础上,建设可防御的收集,推动从基础结构安全、纵深防御、态势感知与踊跃防御到威胁情报的总体叠加演进。这个过程需要大批基础塌实的工作以及预算投入。对已有体系的安全改造,因为触及到生产营业的连续性、稳定性,可能牵涉到更多的问题。

关于对工业体系的安全问题以及防御,安天在“震网”、“乌克兰停电”等事故的阐发中,已经有过很多的探讨,我们会为用户提供更体系的建议以及解决方案。

5、参考资料

[1] Dragos :TRISIS Malware——Analysis of Safety System Targeted Malware:https://dragos.com/blog/trisis/TRISIS-01.pdf

[2] Ics-cert :MAR-17-352-01 HatMan—Safety System Targeted Malware (Update A):https://ics-cert.us-cert.gov/sites/default/files/documents/MAR-17-352-01HatMan – Safety System Targeted Malware (Update A)_S508C.PDF

[3]《乌克兰电力体系遭遇攻击事故综合阐发讲演》:http://www.antiy.com/response/A_Comprehensive_Analysis_Report_on_Ukraine_Power_Grid_Outage/A_Comprehensive_Analysis_Report_on_Ukraine_Power_Grid_Outage.html

[4]《对Stuxnet蠕虫攻击工业控制体系事故的综合阐发讲演》:http://www.antiy.com/response/stuxnet/Report_on_the_Worm_Stuxnet_Attack.html

6、HASH

针对工控恶意代码TRISIS的技术分析

*

您可能还会对下面的文章感兴趣: