小程序

商务咨询

反馈

客服

原创漏洞 | 西门子博途19任意代码执行漏洞分析
更新于2024-07-16
原创漏洞漏洞简介漏洞类型:任意代码执行漏洞供应商:SIEMENS AG产品:TIA Portal v19利用效果:能够实现在普通用户权限下的任意代码执行。漏洞危害:攻击者可以利用漏洞,在目标系统上建立持久化的权限,通过执行恶意代码来保持对受害者的持续访问。利用要求:需要攻击者在目标计算机拥有至少普通用户权限,并且在系统任意路径下拥有读写权限。利用场景:本漏洞属于ATT&CK框架中持久性阶段......



原创漏洞

漏洞简介


漏洞类型:任意代码执行漏洞

供应商:SIEMENS AG

产品:TIA Portal v19

利用效果:能够实现在普通用户权限下的任意代码执行。

漏洞危害:攻击者可以利用漏洞,在目标系统上建立持久化的权限,通过执行恶意代码来保持对受害者的持续访问。

利用要求:需要攻击者在目标计算机拥有至少普通用户权限,并且在系统任意路径下拥有读写权限。

利用场景:本漏洞属于ATT&CK框架中持久性阶段的挟持执行流程漏洞。在攻击者在初始访问和执行攻击手段之后,为了实现对目标系统的长期控制,挟持博途定位库文件Simens.Automation.FrameApplication.dll的执行流程,使其转而加载指定路径下的同名恶意dll,最终实现对系统持久的持续访问。


背景介绍


TIA Portal是西门子公司推出的用于工业自动化领域的工程软件平台,自2010年首次推出以来经历了多个版本的迭代更新。TIA Portal致力于为用户提供一个集成化、统一化的工程环境,涵盖了从设备配置、程序编写、调试监控到维护诊断等全生命周期的功能。


TIA Portal的主要优势包括:统一的软硬件编程环境、基于统一数据模型的深度融合、支持多种工业通讯协议、提供强大的诊断和远程服务功能,以及良好的可扩展性。


在最新发布的TIA Portal V19版本中,西门子进一步升级了图形化编程、数据分析、机器学习等核心功能,让用户在自动化系统设计、运维管理等方面获得更加智能高效的体验。同时,西门子也不断强化TIA Portal系统的网络安全防护,以确保用户的工业自动化系统免受恶意攻击的威胁。


但由于TIA Portal系统在各行业的关键基础设施和制造过程中应用广泛,一旦系统遭到网络攻击,就可能造成严重的后果。黑客可能通过攻击TIA Portal系统,远程控制或破坏生产设备,导致生产线瘫痪、设备损坏甚至造成人员伤害。此外,攻击者还可能窃取机密的工艺数据和生产信息,给企业带来经济损失和声誉损害。


为了降低此类安全隐患,我们在TIA Portal V19版本中,发现了一个严重的任意命令执行漏洞,该漏洞允许攻击者挟持博途的执行流,执行任意代码,实现持久化的控制权限。


1.  AppConfigFacade类的根路径挟持漏洞


1.1 漏洞原理介绍


我们在分析博途启动加载流程发现,博途会根据固定路径或者环境变量去解析全局的配置文件,并根据配置文件中的内容进行一些初始化配置工作,这其中就涉及到了根目录的定位,相对路径的遍历和加载指定dll。由此我们发现了该过程的一个漏洞点,即通过修改环境变量,使博途加载我们精心构造的配置文件,转移博途的根路径,最后加载我们构造的dll,实现在普通用户下长久化的权限维持。


整个漏洞触发的流程可以用下图表示:


图 1 博途加载时漏洞触发流程时序图


在博途V19中有一个名为AppConfigFacade的类,它用于管理配置文件。我们发现它的子类,名为EnvironmentalConfigurationFile Path Provider,存在向系统读取环境变量的行为。


图 2 EnvironmentalConfigurationFilePathProvider类


然后,这个环境变量在AppConfigFacade类的DetermineConfiguration方法中被检测,随后被作为ConfigFilePath传递。ConfigFilePath代表了博途的全局配置文件TIA-Configuration.xml的路径,在这个路径中可以控制博途加载资源文件的根目录。


图 3 DetermineConfiguration方法


图 4 传入解析函数Parse


跟踪路径变量,可以看到basePath和configFilePath被传入Parse函数解析。


图 5 传入解析函数DoParse


继续跟踪,路径被传入DoParse。


图 6 DoParse方法


最后在DoParse中可以看到它返回了一个FileSystemAccess类,并传入了Xml配置文件中读出的Directory标签。


图 7 TryGetAbsolutePathForAssembly方法


图 8 TryGetAbsoluteFilePath方法


图 9 TryGetCachedFile方法


图 10 TryGetCachedFile方法


如上图所示,通过调试可以定位到,在DoParse后,博途调用了FileSystemAccess类的TryGetAbsolutePathForAssembly方法,继续跟进,可以看到它后续调用了TryGetAbsoluteFilePath,TryGetCached File,GetAllFiles三个函数。在GetAllFiles中,博途将会使用读取到的Directory路径为根路径,寻找根目录下的Bin、Data、Meta目录中的文件。因此,在攻击目录构造的文件结构如下:


图 11 构造XML配置文件


ConfigFile的配置如图11所示,先在任意路径下编写一个xml。然后在xml中填写的路径位置(测试中博途的根目录在C:\Program Files\Siemens\ Automation\Portal V19\,因此图中的Directory路径为C:\\test\)创建一个文件夹名为Bin,然后再用mklink /J命令创建两个软连接,分别链接到博途根目录下的Data和Meta,如图12所示。


图 12 构造攻击目录


在Bin目录下放入恶意dll,如图13所示。dll的名称为博途加载资源文件时加载的第一个dll的名称。


图 13 恶意DLL的路径


此时通过Dnspy可以发现,我们的攻击路径(C:\test\)被传入了GetAllFiles,如图14所示。


图 14 路径C:\test\被传入


顺着执行流,可以找到bin目录下加载的第一个dll,如图15所示。


图 15 恶意DLL的路径


最后,顺着堆栈找到FileSystemAccess类方法返回后,就会回到Assembly类的Load方法,如图16所示。博途会调用LoadForm函数对指定dll进行加载,实现命令执行。


图 16 恶意DLL的路径


至此,恶意dll已经被成功加载进博途程序,效果如图17所示。


图 17 普通用户下的攻击效果


1.2 漏洞利用总结


本漏洞实现了在普通用户下的对博途V19的任意命令执行。利用了博途V19中的AppConfigFacade类中读取环境变量,获取全局配置文件的行为,构造了一个任意命令执行的利用链:


1、AppConfigFacade类读取提前配置的环境变量,变量名为TIAConfigration,内容为全局配置文件TIA-Configuration.xml的路径。


2、AppConfigFacade类使用读取的xml中的Document节点提供的根目录路径,调用构造函数构造FileSystemAccess对象。


3、调用FileSystem的Parse方法,解析Bin目录下的所有dll文件。


4、返回恶意dll文件路径,在Load方法中被LoadForm函数解析,加载恶意dll,完成任意代码执行。


利用本漏洞可以实现在攻击者入侵工控系统之后,在普通用户权限下,即使原会话进程被关闭,也能对目标计算机长期的权限维持,对工控系统安全具有较大的威胁。


公司简介

 Company Profile 


       浙江国利网安科技有限公司坚守“让控制更安全,让用户更放心”的使命,凭借30年的工控技术积累和十余年的工控安全研究,已形成了“工控安全试验场”“工控安全盾”等独具特色与优势的攻防核心技术、安全产品与服务体系,以及完整的行业解决方案,在水务水利、石油炼化、油气管网、城市燃气、电力能源、轨道交通、智能制造等行业拥有众多客户,致力于成为世界一流的关键基础设施安全整体解决方案提供商。