山东001在线

 找回密码
 立即注册
搜索
查看: 105|回复: 0

最新:[工控安全]CodeSys V3 协议及授权机制分析2023/3/28 20:21:23

[复制链接]
  • TA的每日心情
    奋斗
    2023-9-22 14:51
  • 签到天数: 341 天

    [LV.8]以坛为家I

    发表于 2023-3-28 20:21:31 | 显示全部楼层 |阅读模式

    前言[url]http://www.yxfzedu.com/网络验证[/url]的相关知识也可以到网站具体了解一下,有专业的客服人员为您全面解读,相信会有一个好的合作![align=center]http://resources.yxfzedu.com/images/other_images/jing_video.png[/align]
    C是全球比较著的软PLC内核软件研发厂家德国的3S(SMART,SOFTWARE,SOLUTIONS)发布的一款与制造商关IEC6-1编程软件及工控设备内核(SDK)。CS被大量的应用在工控领域中,市场占有率35%,被誉为“工控界的安卓”。CS属于私有协议,官方从未披露其报文格式和现细节。为此,研究人员不得不从逆向工程的角度去分析该协议(除非购买昂贵的授权获取到相关源码)。如今CSV2版本逐步被淘汰,取而代之是V3版本,本文将会从逆向角度介绍该协议的格式以及授权机制。CS覆盖的客户如下所示(只列出一部分,详细情况参考:-P):


    协议格式
    V2与V3
    CSV2版本的协议相对简单,如下图所示。报文头是以“\\”打头,紧接着就是长度字段,后面接着功能码,图中的功能码为92,比较后就是数据部分,从结构上来说,V2的协议相对简单。V3与V2的协议完全不同,该协议架构如下图所示,该协议栈分为四层:1块驱动层——BD2数据报层——D3通道层——C4服务层——S


    研究方法
    通过获取到了某个使用CSV3PLC固件,使用IDA进行分析,分析出协议的处理流程和功能码含义。CSV3通过SRSH注册对应_处理的(相当于传统意义上上的功能码):所有注册的服务如下图所示(图示为本人编写的LUA解析插件的内容),可以看到CS协议包含相当多的功能,包括用户管理,日志管理,文件传输等功能。


    CSV3
    为了帮助理解和研究CS协议,本人不得不现一个W解析插件来解析数据报文,下面简要介绍每个来分析V3数据包格式。


    块驱动层
    块驱动层的组件的主要任务是创建通过物理或软件接口进行通信的能力。任何块驱动程序组件都是一个“输入点”,用于接收数据包和传输数据包的点。


    数据报层
    该层的主要目的是路由数据包,检测CODESYS络中的节点,并将数据传输到下一层。简单介绍上面关键字段的含义:M字段:通过CODESYS协议生成的数据包的魔数。该字段的大小为一个字节。H字段:表示在络上接收到的数据包所经过的CS节点数。每当一个CODESYS络节点收到一个数据包并将其重定向到另一个CODESYS络节点时,它就会递减_的值。如果一个节点收到了一个数据包但不是它的比较终接收者并且_字段的值等于0,则节点将丢弃此数据包。本质上,该字段让CODESYS节点的络免于休止地转发数据包。_字段:表示数据包相关设置。字段:指定处理数据包的先级。以下数值用于指定先级:0–低,1–正常,2–高,3–紧急__字段:表示接收者可以接受的比较大数据大小。S字段:服务ID,指示特定服务器必须处理接收到的数据。


    通道层
    服务层
    该层的主要任务是查询请求的服务并传输其操作设置。服务层的任务包括对在该层传输的数据进行编码、解码、加密和解密。_字段:使用的协议的ID。此ID指示哪个协议处理程序修改了数据以及应使用哪个协议将数据传输到服务。H字段:_的大小。该字段的值不包含先前字段和当前字段的大小。S字段:被查询服务的ID。如果在ID中设置了比较高有效位,则意味着该消息是来自服务的响应。SID字段:命令的ID,这个ID决定了服务执行的功能。_字段:会话的ID,包含接收到的会话或空会话的值。字段:_字段中数据的大小。


    授权流程
    CS在新版V3通讯协议中已经默认开启授权机制,用户必须设置账号密码才可以进一步使用。在设置密码成功后,用户必须登录后才能对PLC进行控制管理以及编程组态等操作。但是具体的算法之前从未有人披露过,下面我将简单介绍其流程和相关算法。


    密码哈希存储
    新版CSV3通讯协议账号相关信息默认存放于UD文件中,旧版本的CSV3的密码是MD5加密的,新版做了改进,使用了算法来进行存放。该算法在CDK中现,如下所示:UD文件内容如下,其中“”为用户,后面接着的是密码哈希信息。



    “87985”指的是的盐。
    “6……5”指的是算出的密码哈希。
    “5,8,1”指的是的N,,参数。使用原因主要为该算法不仅计算所需时间长,而且占用的内存也多,使得并行计算多个摘要异常困难,因此利用彩虹表进行暴力攻击更加困难。当然即使算法设计的再健全,也挡不住用户使用弱口令。在比较新版的组态软件并没有强制要求密码强度,使得用户也可以设置诸如“3456”等弱口令密码。这就导致安全意识不强的用户会将密码设置成弱口令。通过编写脚本将哈希信息转换为标准的的格式,之后可以利用对该哈希进行爆破攻击,当然前提是获取到哈希文件(可结合一个任意文件下载漏洞)生成得到的哈希如下所示:





    1




    SCRYPT:
    5
    :
    8
    :
    1
    :
    2BT9YU
    =
    :A9SWI3
    +
    46HI8D56Q6834
    =




    运行命令:-8900-0,爆破成功率依赖于字典以及密码的复杂度,可以使用高性能的GPU,加爆破速度。授权协议流程客户端先通过CD的2号服务ID请求PLC获取公钥和:PLC将会随机生成一个密钥对和一个32字节的,响应包将包含公钥和。公钥信息如下所示:32字节信息如下:客户端在接收以上信息后,使用CAE函数加密密码,该函数如下所示:使用描述_生成算法:
    RSA加密使用的是PKCS1_OAEP,其中的哈希算法为SHA6。
    XOR算法是简单的逐位异或算法。比较后,客户端再次通过CD的2号服务ID下发到PLC中:如果密码正确的话将会返回,每次进行操作都需要携带该授权。风险分析从流程可以知道,如果没有加密的情况下,攻击者可以通过中间人的方法替换公钥并解密出原始密码。为了保证编程软件和PLC的通信安全,建议启用安全通信(基于TLS)。

    ARCE
    密码保护是保护CSPLC的重要防线,一旦攻击者突破这层防线,就可以利用注入代码的方法插入任意执行RCE。这是由于CS为了现可编程功能,会将用户编写的代码统一编译成机器码,并且由RT调度执行,执行的过程没有在VM或者中,这就导致攻击者可以插入任意的机器码(例如LINUX平台上的反弹)来完全接管PLC。如下所示,使用该方法在PLC开启了V上的T服务(原先是关闭的):


    总结
    本文详细介绍了CSV3的协议格式和授权流程,并分析了密码保护机制的安全性问题,然而设计是美好的,但是工业现场践过程中往往存在很多问题。1由于很多厂商购买的CS需要每年花费高额的费用来获取更新支持,绝大多数厂商在购买源码后不在进行更新,这导致目前很多PLC使用的CS版本仍然停留在非常老的版本,仍然受N-的影响。2电气工程师安全意识缺乏,很多部署在现场的PLC根本没设置密码。3在厂家都已经停止维护的情况下,CSV2版本仍然被大量使用,该版本的RCE漏洞更多(N-以及0-)。





    参考链接:----------2
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Archiver|山东001在线 ( ICP11027147 )

    GMT+8, 2026-4-4 15:25 , Processed in 0.040160 second(s), 19 queries , Gzip On.

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

    快速回复 返回顶部 返回列表