前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >PLC 中的本地代码执行:使用 RCE 发现 Siemens SIMATIC S7-1200/1500 硬编码加密密钥

PLC 中的本地代码执行:使用 RCE 发现 Siemens SIMATIC S7-1200/1500 硬编码加密密钥

作者头像
IRTeam-工业安全
发布于 2022-12-12 04:25:33
发布于 2022-12-12 04:25:33
2.1K0
举报

近 10 年前,西门子将非对称加密技术引入其 TIA Portal v12 和 SIMATIC S7-1200/1500 PLC CPU 固件系列的集成安全架构中。这样做是为了确保设备和用户程序的完整性和机密性,以及保护工业环境中的设备通信。

当时,工业控制系统不存在动态密钥管理和分配,主要是因为密钥管理系统会给集成商和用户带来运营负担。西门子当时决定改为依靠固定的加密密钥来保护其 PLC 和 TIA 门户之间的编程和通信。

然而,从那时起,技术、安全研究的进步和迅速变化的威胁形势使得这种硬编码的加密密钥成为不可接受的风险。能够提取全局硬编码密钥的恶意行为者可能会以不可挽回的方式危害整个设备产品线的安全性。

对先前对 Siemens SIMATIC S7-1200 和 S7-1500 PLC以及罗克韦尔自动化的 Logix 控制器和 Studio 5000 Logix Designer进行的研究的扩展——继续沿着这条道路前进。

发现并向西门子披露了一项针对 SIMATIC S7-1200 和 S7-1500 PLC CPU 的创新技术,使我们的研究人员能够恢复受西门子影响的每个产品线所使用的全局硬编码加密密钥 ( CVE-2022-38465 )。如果攻击者提取了密钥,他们将完全控制每个受影响的西门子产品线的每个 PLC。

利用之前在西门子 PLC 上的研究 (CVE-2020-15782) 中发现的一个漏洞,该漏洞使能够绕过 PLC 上的本机内存保护并获得读写权限以远程执行代码,能够大量提取内部西门子产品线中使用的受保护的私钥。这些新知识使我们能够实现完整的协议栈、加密和解密受保护的通信以及配置。

西门子对这一私人披露的回应导致对保护其旗舰 PLC 线路的加密方案以及其 TIA Portal 工程工作站应用程序进行了全面检查。西门子在一份安全公告中承认,围绕其硬编码密钥的现有保护已不再足够,并投入了必要的资源和时间来引入动态公钥基础设施 (PKI),从而消除了硬编码密钥的使用。

西门子建议用户立即将 SIMATIC S7-1200 和 S7-1500 PLC 以及相应版本的 TIA Portal 项目更新到最新版本。西门子在其公告中表示, TIA Portal V17和相关 CPU 固件版本包括新的 PKI 系统,该系统基于每个设备的个人密码保护机密配置数据以及受 TLS 保护的 PG/PC 和 HMI 通信。

技术细节

西门子访问限制机制

西门子 PLC 的一个突出安全特性是通过密码保护强制执行的访问级别限制机制。在下载到 PLC 的项目中配置了密码以及所需的保护级别。这些级别是:

级别 1:对任何配置和逻辑块的完全读写访问

2 级:写保护:

什么都能读

可以改变PLC模式

级别 3:有限的读取访问权限:

可以读取 HMI 数据(值等)

可以读取诊断数据

4级:全面保护

没有密码无法与PLC通讯

Siemens S7 1200/1500 访问级别(来源:西门子)

所有四个级别都使用相同的安全机制来授予用户权限。它们之间的唯一区别是授予或不授予身份验证的权限范围。任何与 PLC 的连接都需要密码。

了解 S7-1200、S7-1500 加密

西门子旗舰 PLC 上的非对称加密程序有两个主要目的:

身份验证:在与 PLC 通信时对用户进行身份验证的共享派生会话密钥。

机密性:在所述通信的部分期间加密数据,即下载的逻辑。

能够理解基于椭圆曲线非对称加密的加密算法。我们发现了曲线参数以及一个额外的复杂性:使用“配置密钥”来进一步混淆和复杂化椭圆乘法过程。

最终,能够发现加密过程中涉及的所有相关密钥:

连接密钥:用于数据包完整性验证和认证。

CPU 密钥:用于加密配置、代码和维护代码完整性的“每个型号/固件”(例如 S7-1518、S7-1517)密钥。

系列密钥:当 CPU 密钥未知时,用于与 CPU 密钥相同目的的“每个系列”(例如 S7-1200、S7-1500)。

西门子 PLC 加密过程中使用的密钥示意图。

在 PLC 上获得代码执行

在对其中一个未加密的 Siemens SIMATIC .upd 固件 S7-1200 进行逆向工程后,了解到私钥不在固件文件中,因此必须以某种方式直接从 PLC 中提取它。

为了从 PLC 检索私钥,需要直接内存访问 (DA) 来搜索它。为了能够执行 DA 操作,在 1200/1500 PLC 系列上搜索并发现了一个远程执行代码漏洞。该漏洞 (CVE-2020-15782) 是通过包含自己制作的 shellcode 字节码的特定 MC7+ 功能代码触发的。

CVE-2020-15782 沙盒逃逸漏洞。

CVE-2020-15782 的漏洞逻辑如下:

使用没有安全内存区域检查的 [REDACTED] 操作码将包含指向有效内存区域的本机指针的内部结构复制到可写内存区域

将此结构内的指针更改为想要的地址

重新计算用于验证此结构的 CRC(使用 CRC32 操作码)

使用 [REDACTED] 操作码将结构复制回其原始位置,现在指向想要的地址

此时,可以在我们精心设计的结构中使用对新地址的间接访问。

MC7+ [REDACTED] 操作码实现函数;由于它错过了安全内存内存区域检查,因此可以利用它并实现 RCE (CVE-2020-15782)。

现在可以从 PLC 中的任何内存地址读取或写入。使用此功能,可以覆盖本机代码并执行任何所需的本机逻辑。

在 S4x22 大会上对这个漏洞进行了详细的技术介绍,如下:

使用 RCE 获取隐藏的私钥

使用获得的 DA 读取权限,能够提取整个加密的 PLC 固件 (SIMATIC S7-1500) 并映射其功能。在映射过程中,发现了一个读取 PLC 上的私钥的函数。

用来从内存中转储 SIMATIC S7-1500 固件的 PoC。

一旦有了函数地址,就用shell 代码重写了特定 MC7+ 操作码的功能,迫使它们调用读取私钥的本机函数。然后将密钥复制到一个已知的内存地址并从那里读取它。执行覆盖函数为提供了 PLC 的完整私钥。

后来发现这些密钥在每个 Siemens SIMATIC S7 产品线中共享,并立即与 Siemens 启动了协调披露流程。

使用相同的方法,能够从 CPU 中提取配置密钥。

将私钥、配置密钥和算法知识相结合,使我们能够实现完整的协议栈、加密/解密受保护的通信和配置。

演示用于提取私有全局密钥的漏洞链。

攻击流程:获得对 PLC 和流程的控制

使用能够提取的私钥,攻击者可以完全控制 PLC。

对密码的攻击

下面描述的攻击允许具有 PLC 私钥和加密算法知识的攻击者检索 PLC 上配置的密码,从而获得完全控制权,而不管设备上配置的保护级别如何。

获取配置并解密密码哈希(从 PLC 读取配置):如果 PLC 的保护级别低于 3,攻击者可以从 PLC 中检索配置(上传程序),无需特殊权限。上传后,攻击者拥有 PLC 配置,并可以使用私钥从上传的配置中解密密码哈希。使用解密的密码哈希,攻击者可以对 PLC 进行身份验证并获得更高的权限。

中间人:了解流量加密机制以及访问私钥的攻击者可以在连接中冒充 PLC。中间人攻击按以下步骤进行:

客户端(受害者)连接到攻击者的虚假 PLC 并发送加密的连接密钥。

攻击者解密连接密钥并使用解密的密钥连接到真实的PLC。连接后,攻击者会收到基于密码的质询。

攻击者将真实 PLC 的质询转发给客户端,并收到有效的质询响应。

然后,攻击者将质询响应转发给真正的 PLC,以建立经过身份验证的连接。此会话将是一个完全特权会话。此时,攻击者可能会更改 PLC 上的任何配置或块,或读取配置。此访问包括从 PLC 读取加密密码哈希并对其进行解密的能力。

被动流量拦截:具有被动访问权限以捕获网络上给定 PLC 的流量的攻击者可以拦截来自 PLC 的配置读取/写入。使用私钥,攻击者可以解密配置并提取密码哈希。使用密码哈希,攻击者可以对控制器进行身份验证并编写新配置。

概括

由于之前的研究CVE-2020-15782能够在 S7 PLC 上执行本机代码,因此这种攻击 ( CVE-2022-38465 ) 成为可能。使用本机代码执行,能够读取保护私钥的原始内存区域并最终完全恢复密钥。

通过提取 PLC 的硬编码私钥,能够演示多种攻击场景,包括解密 S7 PLC 和 EWS 之间的所有通信,解密 PLC 上配置的密码哈希,可以使用它来获得对 PLC 的完全访问权限,进行中间人攻击等等。

用户应按照 Siemens 的建议更新到 S7-1200 和 S7-1500 PLC 系列的最新版本以及 TIA Portal v17。TIA Portal v17 引入了 TLS 管理系统以加密通信。西门子还引入了预激活的 PLC 配置密码要求,确保所有机密的 PLC 配置数据在默认情况下受到保护,以及预定义的安全 PG/HMI 通信,防止与其他合作伙伴的不安全通信,以及预激活的 PLC 访问保护,防止任何类型的除非明确配置,否则访问控制器。

参考链接:https://claroty.com/team82/research/the-race-to-native-code-execution-in-plcs-using-rce-to-uncover-siemens-simatic-s7-1200-1500-hardcoded-cryptographic-keys

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IRT工业安全红队 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
花椒测试平台 - 接口篇
Web平台是花椒测试平台的核心部分,主要是给测试开发人员提供可视化的界面操作,并封装为参数信息,调用后端的接口服务处理,展示处理结果给用户。后端采用Springboot + Mybatis框架,前端页面用jsp开发,后续UI自动化和部分工具的前端页面也有用vue框架开发,权限管理用的shiro,做好详细的权限管理,因为如果操作线上case,很有可能会对线上真实用户造成影响,所以线上case的权限只对部分人员开放,另外比如压测的功能,也需要做好权限管理,同时后端会记录每个用户的操作行为,便于追查。测试平台模块主要包含以下几个:
测试开发社区
2019/11/20
1.2K0
花椒测试平台 - 接口篇
又一款国产自动化测试平台,开源了!
“时间就是金钱,效率就是生命”,在当下的社会里不仅我们的生活节奏变得越来越快,软件研发上线的节奏也是如此。在如此快节奏的软件开发环境中,高质量的软件测试变得尤为重要。
测试开发技术
2023/08/21
9680
又一款国产自动化测试平台,开源了!
itest work测试工作站 9.0.2 Rc2 发布
itest work (爱测试) 一站式工作站让测试变得简单、敏捷,“好用、好看,好敏捷” ,是itest wrok 追求的目标。itest work 包含极简的任务管理,测试管理,缺陷管理,测试环境管理,接口测试,接口Mock 6合1,又有丰富的统计分析。可按测试包分配测试用例执行,也可建测试迭代(含任务,测试包,BUG,接口)来组织测试工作,也有测试环境管理,还有很常用的测试度量;对于发版频繁,需求常变,itest还可导出用例,线下修改、执行,新增后再导入(同步)到线上;且可根据测试策略来设置测试流程,并可实时调整;在测试看板中,能查看迭代报告,测试包执行情况,测试任务进展,也可以在看板上直接执行用包用例,也支持在线web 思维导图写用例。
周辰晨
2021/03/03
6450
itest work测试工作站 9.0.2 Rc2 发布
itest work 敏捷测试管理平台 9.5.0 GA_u1
itest work (爱测试) 一站式工作站让测试变得简单、敏捷,“好用、好看,好敏捷” ,是itest wrok 追求的目标。itest work 包含极简的任务管理,测试管理,缺陷管理,测试环境管理,接口测试,接口Mock,还有压测 ,又有丰富的统计分析,8合1工作站。可按测试包分配测试用例执行,也可建测试迭代(含任务,测试包,BUG,接口)来组织测试工作,也有测试环境管理,还有很常用的测试度量;对于发版频繁,需求常变,itest还可导出用例,线下修改、执行,新增后再导入(同步)到线上;且可根据测试策略来设置测试流程,并可实时调整;在测试看板中,能查看迭代报告,测试包执行情况,测试任务进展,也可以在看板上直接执行用包用例,也支持在线web 思维导图写用例。概念及功能模型如下:
周辰晨
2021/04/26
5540
itest work 敏捷测试管理平台 9.5.0 GA_u1
itest work敏捷测试管理平台介绍
itest work 开源敏捷测试管理,包含极简的任务管理,测试管理,缺陷管理,测试环境管理,接口测试,接口Mock,还有压测 ,又有丰富的统计分析,8合1工作站。可按测试包分配测试用例执行,也可建测试迭代(含任务,测试包,BUG,接口)来组织测试工作,也有测试环境管理,还有很常用的测试度量;对于发版频繁,需求常变,itest还可导出用例,线下修改、执行,新增后再导入(同步)到线上;且可根据测试策略来设置测试流程,并可实时调整;在测试看板中,能查看迭代报告,测试包执行情况,测试任务进展,也可以在看板上直接执行用包用例,也支持在线web 思维导图写用例。让测试变得简单、敏捷,“好用、好看,好敏捷” ,是itest wrok 追求的目标。概念及功能模型如下:
周辰晨
2021/09/24
1.7K0
itestwork9.0.0全新改版发布
itest work (爱测试) 一站式工作站让测试变得简单、敏捷。itest work 包含极简的任务管理,测试管理,缺陷管理,测试环境管理,接口测试,接口Mock 6合1,又有丰富的统计分析。可按测试包分配测试用例执行,也可建测试迭代(含任务,测试包,BUG,接口)来组织测试工作,也有测试环境管理,还有很常用的测试度量;对于发版频繁,需求常变,itest还可导出用例,线下修改、执行,新增后再导入(同步)到线上;且可根据测试策略来设置测试流程,并可实时调整;在测试看板中,能查看迭代报告,测试包执行情况,测试任务进展,也可以在看板上直接执行用包用例,也支持在线web 思维导图写用例。
周辰晨
2021/03/03
4520
itestwork9.0.0全新改版发布
接口测试平台演进思考
很多小伙伴都比较关心如何构建一个接口自动化平台,笔者恰好有从零开始搭建自动化测试平台直到产品商业化的过程经验,可以和大家分享下。由于企业性质的问题,无法分享过多的代码,本文旨在分享个人在构建整个平台变化过程中的思考和总结,给想往这方面发展的小伙伴们一些借鉴,也算是自己的一个阶段性总结。本文主要总结了以下几个问题:
CKL的思考
2023/02/01
4060
软件测试_接口测试面试题_1.6
接口测试是软件测试中的重要环节,它主要验证系统不同模块之间的通信和数据交互是否正常。在软件开发过程中,各个模块之间的接口是实现功能的关键要素,因此对接口进行全面而准确的测试是确保系统稳定性和可靠性的关键步骤。
测试小兵
2024/04/11
1650
软件测试_接口测试面试题_1.6
对自动化测试的几点思考(二)
在测试金字塔的模型中(很多人应该熟悉该模型),最上面一层是UI层,中间一层是API层,底层是unit层,也就是说越往下在测试中占的比例会越大,程序越稳定和健壮,越往上站的比例会越小。那么在自动化测试技术选型中,应该是全部选择还是有所取舍。UI层在互联网产品中越来越跟不上节奏,这并不是UI层自动化测试的错误,而是市场在不断的变化,产品得跟上市场的变化,所以就导致了UI层变化很快,在页面对象设计模式上是可以很好的维护,UI层在产品快速变化,快速迭代,执行时间上效率问题导致无法满足在互联网产品中的应用,但是不可否认的是UI层的自动化测试思想包含了很多有价值的体系和方法论。也可以应用在互联网产品测试中,比如核心流程使用UI层实现,其它的不需要等等,这在实际的应用中具体看产品,公司实际情况。
无涯WuYa
2018/10/25
4730
java接口自动化(三) - 手工接口测试到自动化框架设计之鸟枪换炮
  上一篇宏哥介绍完了接口用例设计,那么这一章节,宏哥就趁热打铁介绍一下,接口测试工具。然后小伙伴们或者童鞋们就可以用接口测试工具按照设计好的测试用例开始执行用例进行接口手动测试了。关于手动测试工具就那么几个,用起来也非常简单,宏哥就不再在这里赘述了,有兴趣的可以看看宏哥在Python接口自动化里关于接口测试工具的介绍,这里宏哥就简单的提一下,一带而过即可。
北京-宏哥
2020/04/13
1.4K0
迷雾中的自动化测试体系建设
在业内如火如荼的 DevOps 转型过程中,自动化测试始终是热点之一,毕竟提供快速质量反馈是达成 DevOps 目标的关键。于是,作为测试领域的“皇冠”,自动化测试的落地实施始终为人们所关注。但是落地当中产生了种种问题甚至是争论,经久不衰,无形中给自动化测试体系建设蒙上了层层迷雾,让人疑惑。下面我们就一些踩过的“坑”进行探讨,期望这些经验分享能够有助于揭开迷雾、看清方向。
腾讯云 CODING
2021/12/30
1.2K0
迷雾中的自动化测试体系建设
服务端接口测试指南
接口的功能主要是客户端和服务端的数据交互,即通过接口对后端数据的增删改查,来实现用户和产品的交互。
测试小兵
2021/07/13
1.1K0
聊聊如何才能做好测试工作?
如何才能做好测试工作,这是个比较常见的问题,初入职场的新手来说有好多理论知识在学校里学的比较少,还有的有了理论知识不知道在实践中如何使用,慢慢的就淡化了理论知识,那么如何才能做好测试工作呢,主要体现在三能力,三个心,其中三能力主要体现在业务的理解能力,技术的掌握能力,项目成员之间的协调沟通能力,三个心主要体现在耐心,细心,责任心。
漫谈测试
2025/03/20
720
聊聊如何才能做好测试工作?
高级自动化测试常见面试题(Web、App、接口)
1.Selenium中hidden或者是display = none的元素是否可以定位到?
测试开发技术
2021/09/15
4.8K0
从一次线上问题聊聊接口自动化
3月初平台活动期间,运营同事配置了个还未上线的页面到网站首页 banner,导致用户点了报错。尽管这次很明确是运营人为操作失误引起的故障,但过往此类核心页面的访问异常,我们已不是第一次遇见。
DevOps时代
2021/05/07
7400
从一次线上问题聊聊接口自动化
MTSC 2019 深圳站议题总览
Are you ready?来 12 月的深圳穿短袖。2019 年 12 月 14 日 MTSC 深圳站,TesterHome 全体主创人员期待穿羽绒服的,穿冲锋衣的,穿棉服的,你、你、你一起穿起短袖,来一场火热的软件质量保障体系和测试研发技术交流。
腾讯云开发者社区
2019/11/27
2.4K0
关于接口测试——自动化框架的设计与实现
在大部分测试人员眼中只要沾上“框架”,就感觉非常神秘,非常遥远。大家之所以觉得复杂,是因为落地运用起来很复杂;每个公司,每个业务及产品线的业务流程都不一样,所以就导致了“自动化测试框架”去完成自动化测试的时候产生很多不稳定因素,这样就很难定位成一个固定的框架。其实不然,真正的自动化测试框架不是一个模式,而是一种思想和方法的集合,通俗的讲就是一个架构。
数澜科技
2019/10/16
1.9K0
关于接口测试——自动化框架的设计与实现
测试进阶必备,这5款http接口自动化测试工具不要太香~
现在市场上能做接口自动化测试的工具有很多,一搜一大把,让人眼花缭乱。我们去选择对应实现方式时,不管是框架体系还是成熟稳定的工具,核心目的都是期望引入的技术能在最低投入的情况下达到最优效果。
伤心的辣条
2022/09/08
1.1K0
测试进阶必备,这5款http接口自动化测试工具不要太香~
2021年软件测试领域常用工具总结(2):接口测试工具、UI测试工具
大家好,我是洋子。接口(API)测试对我们来说已经很常见了,目前很多公司都会招聘服务端测试工程师进行接口测试。因为在测试三层金字塔当中,接口测试位于中间层,做接口测试性价比较高,容易以较低成本暴露发现服务端的问题,同时也可以进行接口自动化测试,提高接口测试的效率
Bug挖掘机
2022/09/28
3.3K0
2021年软件测试领域常用工具总结(2):接口测试工具、UI测试工具
测试工程师-简历真的拿得出手吗
保障xxx的整体测试质量 负责xxx版本管理以及发版工作 参与招聘测试工程师并对其进行培训 编写及评审测试用例,参与项目的整体测试 负责与各部门之间沟通协调,以推动项目测试工作的及时完成 负责测试环境搭建
测试开发社区
2019/09/20
1.1K0
推荐阅读
相关推荐
花椒测试平台 - 接口篇
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档