CODESYS V3未经身份验证的远程堆溢出漏洞复现

1、 CoDeSys是什么

 CoDeSys是可编程逻辑控制PLC的完整开发环境(CoDeSys是Controlled Developement System的缩写),在PLC程序员编程时,CoDeSys为强大的IEC语言提供了一个简单的方法,系统的编辑器和调试器的功能是建立在高级编程语言的基础上(如Visual C++)。

2、CoDeSys功能

2.1 工程
一个工程包含了PLC程序中的所有对象,工程存储在以工程命名的文件中,工程中包含下列对象:POU,数据类型,可视化,资源和库。

2.2 POU(程序组织单元)
功能、功能块、程序是程序组织单元,它们能够通过动作来增补,每一个程序组织单元都包含一个定义部分和主体部分,主体部分可以用IEC的语言来编写,这些语言包括指令列表,结构化文本,顺序功能图,功能模块图,梯形图或连续功能图表。CoDeSys支持所有IEC标准的POU,如果你想在你的工程文件中使用这些POU,必须在你的工程文件中包含标准库文件standard.lib。POU可以调用其它的POU,但递归调用是不允许的。

2.3 功能
一个功能是一个POU,它正确地产生一个数据元素(可以包含若干元素,比如,字段或者结构体)在处理过程中,可以用文本化语言中的表达式中的一个操作数来调用它。在声明一个功能的时候,一定要给它一个类型,这就是说,在功能名后面加上一个冒号然后跟一个数据类型。

一个正确的功能声明可以是如下:

FUNCTION Fct: INT
另外,必须分配给功能一个结果,即把功能名作为一个输出变量功能的声明从关键字FUNCTION开始。下例是在指令列表(IL)中的一个功能,它声明了三个输入变量:前两个变量的相乘然后除以第三个变量。功能返回此操作的结果。
声明部分:
FUNCTION Fct: INT
VAR_INPUT
PAR1:INT;
PAR2:INT;
PAR3:INT;
END_VAR
程序部分:
LD PAR1
MUL PAR2
DIV PAR3
ST Fct
在结构文本中功能的调用可以作为表达式中的一个操作数。功能不会有任何内部条件,这就是说,调用带有相同的输入变量功能将会返回相同的输出结果。
下面是调用功能的例子:
in IL:
LD 7
Fct 2,4
ST Ergebnis
in ST:
Ergebnis := Fct(7, 2, 4);
in FUP:

功能不会保持内部状态,对于不包含全局变量和地址的功能,每次在它被调用的过程中,给它传递相同的输入变量,它将返回相同的值 。

2.4 可视化
CoDeSys提供了可视化,因此你可以显示工程的变量,通过可视化的帮助你可以在离线的情况下绘制几何元素,在联机模式下能够响应特定变量的值从而改变他们的形式,颜色和文本输出。
可视化的界面可以用作带CoDeSys的HMI的PLC纯操作接口,或者作为一个网页可视化或通过因特网与PLC直接连接的对象可视化。

2.5 语言
CoDeSys支持IEC _61131所描述的所有语言
文本化的语言:
•指令表
•结构文本
图形化的语言:
•顺序功能流程图
•功能模块图
•梯形图
•基于功能模块图的连续功能编辑器(CFC)

3、CoDeSys底层运行原理
在这里插入图片描述

Codesys runtime是建立在OS上的,常见的OS有wince,windows,linux,vxworks。构建在OS的优势就在于系统的扩展性更强,PC的更多功能都可以在PLC上实现。

control task被操作系统每隔一段时间(典型是1ms)调用一次。

IEC task被内建的看门狗监控,监视PLC的实际工作周期是否超出预定时间,如果超出则IEC task任务停止,向系统报告错误。

优先级,数值越小优先级越高,根据任务的实时性,设定优先级,周期性执行任务

4. CoDeSys组态环境搭建

4.1 虚拟机和组态环境版本信息
在这里插入图片描述

4.2 一直默认安装即可
在这里插入图片描述

4.3 安装完成后运行成功
在这里插入图片描述

4.4 新建项目工程Standard project
在这里插入图片描述

4.5 新建项目后还可以在PLC项目里添加Enum、Struct、FunctionBlock、Program、Task等
在这里插入图片描述

4.6 同时Codesys能够配置多个任务,任务调用不同的程序段,每个任务可以手动设置执行优先级及循环周期
在这里插入图片描述

4.7 我们在PRG中编写Hello World程序
在这里插入图片描述

4.8 然后在Application增加对象视图
在这里插入图片描述

4.9 在Visualization中,基本的标签中选择一个矩形框,Common controls中选择一个按钮,目标可视化:显控一体,充满整个屏幕
在这里插入图片描述

4.10 关联string类型变量,选中矩形框,在右边属性-Texts-Text填%s(动态文本), Text variable-输入助手-选择sVar-确定
在这里插入图片描述

4.11 关联bool变量,选中按钮,在右边属性框中,基本配置-toggle-输入助手-选择bSwitch-确定
在这里插入图片描述

4.12 程序工程配置好后双击Device进入通讯配置,这时网关指示绿色,最右侧指示灰色
在这里插入图片描述

4.13 根据上面情况可见首先需要开启Stat PLC,图标由灰色变为彩色并进入Running状态
在这里插入图片描述

4.14 选中本地JACOB-PC进行扫描,确定后将最右侧指示由灰色变为绿色即为成功
在这里插入图片描述

4.15 上面配置好后此时可对该工程项目进行编译
在这里插入图片描述

4.16 当项目工程编译成功后在菜单栏选择在线进行登录
在这里插入图片描述

4.17 登录完成,但是程序处于停止状态
在这里插入图片描述

4.18 需要在菜单调试选项里面去启动,然后双击程序段即可监控变量的线执行状态
在这里插入图片描述

4.19 项目工程运行正常后回到视图可见成功运行
在这里插入图片描述

5. CoDeSys漏洞复现

5.1 漏洞概述

该漏洞主要是使用了CODESYS WEB可视化屏幕,正常情况组态安装完成CODESYSControlService服务默认是停止的,所以这里需要有一个前提条件是用户必须开启这项功能服务才可以,当该服务开启后攻击者通过构造特定的请求进行攻击最终导致web服务器奔溃或者远程代码执行

5.2 漏洞影响版本

根据CODESYS厂商官方所发出的公告该漏洞在CODESYS V3中,Web服务器是CODESYS运行系统时可选的一部分。 只要CODESYS包含以下版本的Web服务器(CmpWebServer和CmpWebServerHandler)的V3运行时系统之前的V3.5.15.40会受到影响,其中主要包含以下版本:

• CODESYS Control for BeagleBone
• CODESYS Control for emPC-A/iMX6
• CODESYS Control for IOT2000
• CODESYS Control for Linux
• CODESYS Control for PLCnext
• CODESYS Control for PFC100
• CODESYS Control for PFC200
• CODESYS Control for Raspberry Pi
• CODESYS Control RTE V3
• CODESYS Control RTE V3 (for Beckhoff CX)
• CODESYS Control Win V3 (also part of the CODESYS Development System setup)
• CODESYS HMI V3
• CODESYS Control V3 Runtime System Toolkit
• CODESYS V3 Embedded Target Visu Toolkit
• CODESYS V3 Remote Target Visu Toolkit

5.3 危害严重程度评分达到9.8分
在这里插入图片描述

5.4 查看该CODESYSControlService服务是否开启
在这里插入图片描述

5.5 远程访问8080正常
在这里插入图片描述

5.6 攻击者进行攻击后可见访问失败
在这里插入图片描述
在这里插入图片描述

5.7 厂商参考链接:
https://customers.codesys.com/index.php?eID=dumpFile&t=f&f=13078&token=de344ca65252463cc581ef144e0c53bd97b8f211&download=
https://zh-cn.tenable.com/security/research/tra-2020-16

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值