黑基Web安全攻防班
安基网 首页 资讯 安全报 查看内容

FireEye报告:揭露新型工控系统恶意软件TRITON

2017-12-23 13:03| 投稿: lofor |来自: 互联网


免责声明:本站系公益性非盈利IT技术普及网,本文由投稿者转载自互联网的公开文章,文末均已注明出处,其内容和图片版权归原网站或作者所有,文中所述不代表本站观点,若有无意侵权或转载不当之处请从网站右下角联系我们处理,谢谢合作!

摘要: Mandiant最近针对中东某企业关键基础设施遭受的攻击事件进行了安全响应,攻击者通过部署特制的恶意软件来控制目标工业安全系统,由于工业安全系统具备对工控系统的紧急关闭功能,因此我们有足够信心断定,该恶意软件 ...

Mandiant最近针对中东某企业关键基础设施遭受的攻击事件进行了安全响应,攻击者通过部署特制的恶意软件来控制目标工业安全系统,由于工业安全系统具备对工控系统的紧急关闭功能,因此我们有足够信心断定,该恶意软件是攻击者针对工控系统的硬件破坏或突然关停而开发的。目前,我们把这种恶意软件命名为TRITON,攻击者利用TRITON攻击框架能与施耐德电气公司的Triconex安全仪表系统控制器(SIS)形成通信交互,尽管我们暂时还未追溯定位到实际的攻击者,但我们肯定该攻击事件的幕后黑手为国家支持型黑客。

TRITON特点

TRITON是继2010年针对伊朗的Stuxnet和2016年针对乌克兰的Industroyer后,为数不多可以被公开检测识别到的工控系统恶意软件系列之一,TRITON与这些攻击类似,它可以破坏工控系统安全机制并执行预期恶意功能,从而造成严重的物理破坏攻击后果。

攻击事件概述

攻击者通过获得安全仪表系统(SIS)工作站的远程访问控制权限,对SIS控制器进行了重编译,进而在SIS系统中部署了TRITON攻击框架。

此次攻击事件中,一些SIS控制器都形成了失效保护状态(failed safe state),造成工控进程的自动关闭,因此引起了管理者的察觉并展开了调查。调查后发现,当应用代码在冗余处理单元之间验证失效时(可引发量产诊断错误消息),就会导致SIS控制器进入安全关闭状态。

我们确信攻击者希望隐蔽执行自动关闭操作造成对工控系统的物理破坏,主要基于以下几方面原因:

修改安全仪表系统(SIS)可以导致功能异常,增加物理破坏机率

TRITON会修改SIS控制器中的应用程序内存导致验证失效

验证失效状态在TRITON处于运行状态时发生

工控网络中存在的孤立或外部条件不可能造成这种错误

攻击溯源

针对此次攻击事件,FireEye目前还暂未准确溯源定位到实际的攻击者,但可以肯定的是这是国家支持型的黑客攻击。攻击以关键基础设施为目标,具备持续性,且缺乏明确的经济利益目的,结合创建TRITON攻击框架所需的充足技术资源来看,这明显是国家黑客形为。可以从以下几方面来作出判断:

攻击者以SIS系统为目标,体现出其希望造成严重物理破坏的目的,这与网络犯罪集团行为不符。

攻击者在获得SIS系统后不久就部署了TRITON,表示他们已经预先构建并测试了需要访问硬件和软件的工具。 TRITON也被设计为使用专有的TriStation协议进行通信,该协议没有被公开记录,暗示对手独立地反向设计了该协议。

攻击者在取得SIS系统控制权后不久就部署了TRITON,明显表示他们已经预先创建并测试过该恶意工具的软硬件运行环境;另外,TRITON框架还被设置为使用专门未公开的TriStation协议来进行通信,可以说明,攻击对手已经可以完全独立地逆向该通信协议。

这种以关键基础设施为目标的破坏、中断或瘫痪攻击特征,与俄罗斯、伊朗、朝鲜、美国和以色列在全球进行的大量网络攻击和侦察活动相符,这种攻击不会马上造成立竿见影的破坏效果,它会形成驻留为后续的深入攻击进行潜伏。

过程控制和安全仪表系统(Safety Instrumented Systems)背景

现代工业过程控制和自动化系统依靠各种先进的控制系统和安全功能,这些系统和功能通常被称为工业控制系统(ICS)或操作技术(OT)。

分布式控制系统(DCS)为操作人员提供远程监视和控制工业过程的能力。它是由计算机、软件应用程序和控制器组成的计算机控制系统。工程工作站是用来对控制系统应用和其他控制系统设备进行配置、维护和诊断的独立计算机。

安全仪表系统(Safety Instrumented Systems,SIS)是一个独立的控制系统,可独立监控受控过程状态。如果过程超过定义危险状态的参数,则SIS会尝试将过程恢复到安全状态或自动执行过程的安全关闭。如果SIS和DCS控制都失效,那么只有看工业设施的安全设计了,如对设备(e.g防爆片)的机械保护、物理警报、应急程序和其他危险状况的缓解机制。

资产设备管理者会采用不同方法将工厂的DCS与SIS系统连接起来,传统方法是依赖通信基础设施和控制策略的隔离原则。至少在过去十年间,基于低成本、易用性和信息交流目的,出现了集成DCS和SIS设计的趋势。此次TRITON攻击反映出了DCS与SIS集成设计双向通信的安全风险。

安全仪表系统(SIS)威胁建模和攻击场景

针对工控系统(ICS)破坏性攻击的生命周期与其他类型网络攻击类似,但有几个关键的区别。 首先,攻击者的任务是破坏业务流程而不是窃取数据;其次,攻击者必须进行OT侦察,并有足够的专业工程知识来了解目标系统工业过程,以实现对其成功的控制利用。

上图表示过程控制环境中的网络安全和安全控制之间的关系,即使网络安全措施失效,安全控制措施也会防止物理破坏,为了最大化实现物理破坏,网络攻击者还需绕过一些安全控制手段。

以下安全仪表系统(SIS)威胁模型揭露了多种攻击者可用的攻击路径:

攻击路径 1: 使用SIS系统进行过程关闭。攻击者重编译SIS逻辑控制器导致其跳闸或关闭一个处于安全状态的控制过程,换句话说,也能触发误报。

目的:导致停机后造成经济损失,或引起停工后复杂的启动程序。

攻击路径 2: 重编译SIS以支持不安全状态。攻击者重编译SIS逻辑控制器,让其支持不安全状态的存在。

目的:由于SIS功能丧失,增加的危险状况会导致严重物理后果风险,如对设备、产品、环境和人员安全的影响。

攻击路径 3:重编译SIS控制器,当使用DCS时,让其支持不安全的危险状态。攻击者可以控制DCS进程形成危险状态,并阻止SIS系统正常运行。

目的:对人身安全、工厂环境或设备造成破坏,其影响程度取决于过程和设备设计的物理限制条件。

攻击意图分析

我们认为攻击者的长期目的是造成物理破坏,基于这样的事实,攻击者具备了操纵过程或关闭设备的能力后,首先会在DCS系统上形成驻留,以伺机入侵SIS系统。对DCS和SIS系统的入侵会导致物理和机械保障措施的最大程度破坏。

一旦渗透进入SIS网络后,攻击者会立即部署预先构建的TRITON攻击框架,利用TriStation协议与SIS控制器发起通信,攻击者可以发送停止命令形成进程关闭,或向SIS控制器上传恶意代码造成保护失效。与此不同的是,攻击者为了在SIS控制器中形成功能控制逻辑,会在一段时间内反复进行多次尝试,即使由于攻击脚本的条件检查提示出错,但攻击者还会继续尝试,这也表明攻击者的最终意图就是要造成控制进程的意外关闭。

值得注意的是,我们曾多次发现了一些长期入侵工控系统(ICS)但并未造成系统破坏或中断的攻击事件,如长年入侵西方ICS的俄罗斯沙虫团队(Sandworm)等组织,他们似乎只是入侵,还没表现出明显的指哪打哪的系统中断攻击能力。

TRITON恶意软件功能

TRITON攻击框架具备多种恶意功能,包括程序读写、各种功能读写以及查询SIS控制器状态,但trilog.exe样本只具备某些功能,不包括TRITON的全面侦察功能。

TRITON恶意软件具备与Triconex SIS控制器进行通信的能力(如发送特定指令,实现关停或内容读取),并可用攻击者定义的Payload对其进行远程重编译。Mandiant分析的TRITON样本中包含了攻击者制作的运行Triconex控制器执行表的程序,该样本包含了一个正常且监控控制器运行状态的合法程序,如果控制器发生失效故障,TRITON会尝试返回一个伪造的正常运行状态;如果控制器发生故障而在规定时间内未恢复到安全状态时,则该样本将会用无效数据覆盖SIS控制器中的恶意程序形成隐蔽。

TRITON攻击技术分析

TRITON攻击框架会被部署在运行有Windows操作系统的SIS工程工作站中,其中的恶意软件伪装成合法的用于查看日志的TriStation Triconex Trilog应用程序,并通过一个Py2EXE编译后的Python脚本进行植入,而该Python脚本程序又依赖于一个包含标准Python库和开源库的zip压缩文件,以及攻击者开发的用于与Triconex控制器交互的Triconex攻击框架。 与可执行的恶意程序一起,还会生成两个二进制文件inject.bin(恶意功能代码)和imain.bin(恶意控制逻辑)作为攻击控制器的Payload,这两个文件名也被硬编码写入到了Py2EXE编译的python脚本中。

Trilog.exe在命令行中会选择目标Triconex设备IP地址作为攻击选项,它没有利用底层TRITON库的Triconex设备发现功能,而是为环境中的每个目标控制器分别调用trilog.exe实例,一旦被调用,trilog.exe将检查控制器状态,然后读取由TriStation协议公开的配置信息,如果控制器处于运行状态,trilog.exe会把两个Payload文件inject.bin和imain.bin进行编码,并将它们传递给通信库,以便将其附加到控制器的程序存储器和执行表中。

当Payload文件被插入Triconex控制器内存后,脚本开始倒计时,并执行控制器状态定期检查,如果检测到控制器错误,通信库的方法SafeAppendProgramMod会尝试使用TriStation协议命令将控制器重置为之前状态,如果检测到控制器失效,trilog.exe会向内存尝试写入一个小的“虚拟”程序。我们认为这是一种反取证技术,用于隐藏Triconex控制器中的攻击代码。

Mandiant与被攻击企业合作,利用实验室环境中有效的Triconex控制器运行trilog.exe后,在恶意软件中发现了一个防止Payload文件持久驻留的检查条件,Mandiant通过修改攻击脚本删除该检查条件后,Payload文件则会持久驻留于控制器内存中,且不影响控制器运行。

TRITON可以执行合法TriStation应用程序的TriStation协议,并通过该协议来配置SIS控制器。

另外,攻击者还创建了一个名为TsHi的高层接口,通过该接口使用TRITON框架实现攻击脚本执行。TsHi接口暴露了恶意软件的侦察和攻击能力,这些功能实现通常需要接收来自用户的二进制数据,并在数据传递到低级库中以进行序列化到网络的过程之前,会进行代码“签名”和校验步骤。

另一个攻击者编写的模块TsBase则包含了TsHi调用函数,它能将攻击者的预期操作转化为相应的TriStation协议功能代码。对于某些功能而言,它还可将数据打包填充为适当格式。

TsLow攻击模块实现了TriStation UDP通信协议。TsBase库则主要依赖ts_exec方法,该方法采用功能代码和预期响应代码,并通过UDP将Payload命令序列化,它还会检查控制器对期望值的响应,并当检查成功或失败时,返回相应的数据结构表示对象。

TsLow中还包含了用于检查目标控制器连通性的连接测试方法,如果调用没发现目标,它会运行设备发现功能detect_ip,该功能使用IP广播包方式,通过脚本调用,在TriStation协议中执行“ping”消息,来探测控制器。

防护建议

为避免遭受TRITON类攻击,资产设备管理者可以考虑以下几种防护措施:

以技​​术可行方式,将仪表安全系统网络与过程控制和信息系统网络隔离,能对SIS控制器执行编程的工程工作站不应与其它任何DCS过程控制或信息系统形成双宿网络;

充分利用对安全控制器进行控制编程的硬件功能,这些功能通常采用物理钥匙形成交换控制,在Triconex控制器上,除了预定的编程事件期间,其它时候,钥匙不应处于编程模式状态;

对钥匙关键位置变化实施变更管理措施,定期审核当前的关键状态;

对于依赖SIS系统提供数据的任何应用程序,应使用单向网关而不是双向网络进行连接;

在任何通过TCP / IP访问SIS系统的服务器或工作站终端上,实行严格的访问控制和应用程序白名单机制;

监控ICS系统异常的网络通信流量。

下图为Triconex系统主机架钥匙开关:

IoC威胁指标

Indicators

Detection

rule TRITON_ICS_FRAMEWORK
{
      meta:
          author = "nicholas.carr @itsreallynick"
          md5 = "0face841f7b2953e7c29c064d6886523"
          description = "TRITON framework recovered during Mandiant ICS incident response"
      strings:
          $python_compiled = ".pyc" nocase ascii wide
          $python_module_01 = "__module__" nocase ascii wide
          $python_module_02 = "<module>" nocase ascii wide
          $python_script_01 = "import Ts" nocase ascii wide
          $python_script_02 = "def ts_" nocase ascii wide  
          $py_cnames_01 = "TS_cnames.py" nocase ascii wide
          $py_cnames_02 = "TRICON" nocase ascii wide
          $py_cnames_03 = "TriStation " nocase ascii wide
          $py_cnames_04 = " chassis " nocase ascii wide  
          $py_tslibs_01 = "GetCpStatus" nocase ascii wide
          $py_tslibs_02 = "ts_" ascii wide
          $py_tslibs_03 = " sequence" nocase ascii wide
          $py_tslibs_04 = /import Ts(Hi|Low|Base)[^:alpha:]/ nocase ascii wide
          $py_tslibs_05 = /module\s?version/ nocase ascii wide
          $py_tslibs_06 = "bad " nocase ascii wide
          $py_tslibs_07 = "prog_cnt" nocase ascii wide  
          $py_tsbase_01 = "TsBase.py" nocase ascii wide
          $py_tsbase_02 = ".TsBase(" nocase ascii wide 
         
          $py_tshi_01 = "TsHi.py" nocase ascii wide
          $py_tshi_02 = "keystate" nocase ascii wide
          $py_tshi_03 = "GetProjectInfo" nocase ascii wide
          $py_tshi_04 = "GetProgramTable" nocase ascii wide
          $py_tshi_05 = "SafeAppendProgramMod" nocase ascii wide
          $py_tshi_06 = ".TsHi(" ascii nocase wide  
          $py_tslow_01 = "TsLow.py" nocase ascii wide
          $py_tslow_02 = "print_last_error" ascii nocase wide
          $py_tslow_03 = ".TsLow(" ascii nocase wide
          $py_tslow_04 = "tcm_" ascii wide
          $py_tslow_05 = " TCM found" nocase ascii wide  
          $py_crc_01 = "crc.pyc" nocase ascii wide
          $py_crc_02 = "CRC16_MODBUS" ascii wide
          $py_crc_03 = "Kotov Alaxander" nocase ascii wide
          $py_crc_04 = "CRC_CCITT_XMODEM" ascii wide
          $py_crc_05 = "crc16ret" ascii wide
          $py_crc_06 = "CRC16_CCITT_x1D0F" ascii wide
          $py_crc_07 = /CRC16_CCITT[^_]/ ascii wide  
          $py_sh_01 = "sh.pyc" nocase ascii wide  
          $py_keyword_01 = " FAILURE" ascii wide
          $py_keyword_02 = "symbol table" nocase ascii wide  
          $py_TRIDENT_01 = "inject.bin" ascii nocase wide
          $py_TRIDENT_02 = "imain.bin" ascii nocase wide  
      condition:
          2 of ($python_*) and 7 of ($py_*) and filesize < 3MB
}

*参考来源:FireEye,freebuf小编clouds编译,转载请注明来自FreeBuf.COM


小编推荐:欲学习电脑技术、系统维护、网络管理、编程开发和安全攻防等高端IT技术,请 点击这里 注册账号,公开课频道价值万元IT培训教程免费学,让您少走弯路、事半功倍,好工作升职加薪!

本文出自:http://www.freebuf.com/news/157639.html

免责声明:本站系公益性非盈利IT技术普及网,本文由投稿者转载自互联网的公开文章,文末均已注明出处,其内容和图片版权归原网站或作者所有,文中所述不代表本站观点,若有无意侵权或转载不当之处请从网站右下角联系我们处理,谢谢合作!


鲜花

握手

雷人

路过

鸡蛋

相关阅读

发表评论

最新评论

引用 PhoenixDance 2017-12-24 10:12
对于工控系统病毒,完全不了解,只想知道攻击这个,除了商业间谍行为,还有别的目的吗?危害中是否包括危及工人生命?那病毒制造者是否可以以谋杀罪被起诉?

查看全部评论(1)

最新

返回顶部