服务粉丝

我们一直在努力
当前位置:首页 > 财经 >

原创 | OPC UA .NET Standard Stack可信应用认证绕过漏洞分析

日期: 来源:ADLab收集编辑:CISRC

漏洞概述

OPC UA .NET Standard Stack是OPC基金会官方维护的OPC UA协议栈的参考实现。该参考实现采用.NET语言开发,包含了可移植的OPC UA协议栈和核心库(包含客户端、服务端、配置、复杂类型支持库等)。

OPC UA协议是工业控制领域中的一种十分流行的通讯协议,启明星辰ADLab研究员在漏洞情报跟踪中发现该可信应用认证绕过漏洞(编号为CVE-2022-29865)后对该漏洞进行了深入分析和验证。

漏洞分析

该漏洞影响OPC UA .NET Standard Stack的应用认证机制。根据协议规范,OPC UA客户端和OPC UA服务端是通过创建Secure Channel来进行应用层(Application Layer)的会话(Session)数据传输,如下图所示:

图 1、OPC UA安全架构-客户端/服务端[1]

在客户端和服务端创建Secure Channel时,有一个应用认证机制(App Authentication),该机制是基于应用证书(Application Instance Certificate)来实现的。具体参见OPC UA security architecture 6.1.3【2:

An Application decides if another application is trusted by checking whether the Application Instance Certificate for the other application is trusted. Applications shall rely on lists of Certificates provided by the Administrator to determine trust. There are two separate lists: a list of trusted Applications and a list of trusted Certificate Authorities (CAs). If an application is not directly trusted (i.e. its Certificate is not in the list of trusted applications) then the application shall build a chain of Certificates back to a trusted CA.
OPC UA 标准规范详细规定了如何判定一个应用证书是否可信,如下图2所示:

图 2、确定应用证书是否可信

漏洞CVE-2022-29865即是针对此证书校验机制的绕过。OPC UA .NET Standard Stack校验应用证书的关键代码位于协议栈源码文件CertificateValidator.cs的InternalValidate函数中,如下图的关键代码逻辑:

在883行处,调用GetIssuersNoExceptionsOnGetIssuer获得待校验证书的颁发者,并检查其是否为信任的证书颁发者。在该函数中,首先通过GetIssuersNoException函数来获取客户端证书的Issuer并创建证书链,然后检查证书链中的Issuer是否在自己的信任列表中。在检查Issuer过程中,调用了Match函数。

Match函数将待校验证书Issuer名称和潜在Issuer证书的Subject Name进行对比,此外还检查证书的X.509 Extension中Authority Key Identifier属性中的Serial number和潜在Issuer证书的Serial number是否匹配或者key id是否匹配。如果issuer名匹配且serial number或key_id中有一项匹配,则GetIssuersNoExceptionsOnGetIssuer会返回true。

Match函数调用CompareDistinguishedName进行匹配,如下所示:

图 3、Match函数调用CompareDistinguishedName对比Issuer Name

但是,函数CompareDistinguishedName内部直接忽略了大小写,如下图所示。

图 4、CompareDistinguishedName忽略大小写对比Issuer Name

显然,在这个证书匹配过程中,没有对证书的签名进行校验,而仅仅根据证书的元信息进行匹配,而且在Issuer时还忽略大小写。因此,可伪造证书元信息来通过该函数校验。

在909行处,InternalValidate函数使用X509Chain进行待校验证书的证书链创建。如下图所示,该过程对证书的签名等信息进行校验,在创建后通过CheckChainStatus函数来检查证书链是否存在问题,结果在result中保存。如果证书链检查没有问题,则result变量为空。至此,证书校验的大部分工作已经完成,后续还会对证书的密钥用途、长度等进行校验。

在CheckChainStatus函数中,将根据证书链元素的不同状态返回不同的结果。但是,对于UnTrustedRoot状态,只需要证书的签名合法,如下图所示。

因此,可通过伪造证书来使验证中:GetIssuersNoExceptionsOnGetIssuer函数返回true,CheckChainStatus函数因UntrustedRoot不产生错误,从而使InternalValidate函数因正常返回而通过证书校验。

漏洞复现

复现环境

  • OPC UA Vulnerable Server

OPC UA .NET Standard Reference Server(Version: UA-.NETStandard-1.4.368.53)

  • OPC UA Client

Unified Automation UA Expert

复现过程

首先,编译OPC UA .NET Standard Reference Server。修改配置文件Quickstarts.Reference Server.Config.xml,将Server应用证书从默认的自签名证书修改为由CA颁发的证书。然后,将CA证书添加到Server的信任证书列表中。最后,启动该OPC UA Server。

图 5、配置OPC UA Server证书

图 6、配置OPC UA Server可信证书存储

图 7、OPC UA Server应用证书和CA证书

根据OPC UA Server的应用证书信息(可在OPC UA客户端认证的时候获得),使用python cryptography库生成伪造证书,并将其设置为uaexpert应用证书,如下所示:

图 8、OPC Client UaExpert使用的伪造应用证书

在UaExpert中配置OPC UA Server信息,使用上述伪造的应用证书登录成功。

图 9、UaExpert配置Server信息

图 10、UaExpert使用伪造证书成功登录OPC UA Reference Server

漏洞修复

根据OPC UA的官方漏洞公告【3,该漏洞在OPC UA .NET Standard 1.4.368版本中修复。实际在Commit 51549f5ed846c8ac060add509c76ff4c0470f24d中该问题就已被修复。

主要修复的方式如下:

1.证书信息对比采用了二进制方式对比。

2.增加了对证书链构造的校验,确保证书验证中构造的两个证书链是一致的。

参考:

1.https://reference.opcfoundation.org/v104/Core/docs/Part2/4.5.1/

2.https://reference.opcfoundation.org/v104/Core/docs/Part4/6.1.3/

3.https://files.opcfoundation.org/SecurityBulletins/OPC%20Foundation%20Security%20Bulletin%20CVE-2022-29865.pdf



来源:网络安全应急技术国家工程研究中心






启明星辰积极防御实验室(ADLab)





ADLab成立于1999年,是中国安全行业最早成立的攻防技术研究实验室之一,微软MAPP计划核心成员,“黑雀攻击”概念首推者。截止目前,ADLab已通过CVE累计发布安全漏洞近1100个,通过 CNVD/CNNVD累计发布安全漏洞2000余个,持续保持国际网络安全领域一流水准。实验室研究方向涵盖操作系统与应用系统安全研究、移动智能终端安全研究、物联网智能设备安全研究、Web安全研究、工控系统安全研究、云安全研究。研究成果应用于产品核心技术研究、国家重点科技项目攻关、专业安全服务等。






相关阅读

  • Atlassian JIRA Velocity模板注入漏洞分析

  • 更多安全资讯和分析文章请关注启明星辰ADLab微信公众号及官方网站(adlab.venustech.com.cn)近两年Atlassian
    JIRA爆出几个SSTI(服务器端模板注入)漏洞,漏洞编号分别为CVE-2019-11
  • ThinkPHP多语言文件包含漏洞分析

  • 更多安全资讯和分析文章请关注启明星辰ADLab微信公众号及官方网站(adlab.venustech.com.cn)一、漏洞概述 ThinkPHP是一个开源轻量级PHP框架,其6.0.13及以前版本存在一个文件包
  • ADLab 2022年安全研究回顾

  • 2022年,启明星辰ADLab研究方向重点包括攻防技术安全研究、黑客攻击与威胁研究、主流操作系统及应用安全研究、Web安全研究、云安全研究、智能终端安全研究、工控物联网安全研
  • Android App半自动化静态漏洞挖掘技术分析

  • 更多安全资讯和分析文章请关注启明星辰ADLab微信公众号及官方网站(adlab.venustech.com.cn)目 录一、前言二、Android App漏洞扫描的难点三、个人扫描器和商业化漏洞扫描器的
  • 一周网安知识汇总 | 2023.02.01-2023.02.07

  • 一周网安知识汇总雷石安全实验室【2023.02.01-2023.02.07】本栏目内容由雷石安全实验室整理,主要分享国内外优秀文章和github优秀项目。微信链接可直接点击,外部链接需要复制
  • 一周网安知识汇总 | 2023.02.08-2023.02.14

  • 一周网安知识汇总雷石安全实验室【2023.02.08-2023.02.14】本栏目内容由雷石安全实验室整理,主要分享国内外优秀文章和github优秀项目。微信链接可直接点击,外部链接需要复制

热门文章

  • “复活”半年后 京东拍拍二手杀入公益事业

  • 京东拍拍二手“复活”半年后,杀入公益事业,试图让企业捐的赠品、家庭闲置品变成实实在在的“爱心”。 把“闲置品”变爱心 6月12日,“益心一益·守护梦想每一步”2018年四

最新文章

  • 红队视角下的Windows RPC

  • 更多安全资讯和分析文章请关注启明星辰ADLab微信公众号及官方网站(adlab.venustech.com.cn)0x00 前言本文将介绍Windows RPC服务,在红队(Red Team)视角下的一些利用方式,并不会产
  • 惠普打印机固件提取技术

  • 更多安全资讯和分析文章请关注启明星辰ADLab微信公众号及官方网站(adlab.venustech.com.cn)一、前 言惠普作为打印机品牌当中的中坚力量,对其固件安全也是相当注重。关于惠普固
  • Atlassian JIRA Velocity模板注入漏洞分析

  • 更多安全资讯和分析文章请关注启明星辰ADLab微信公众号及官方网站(adlab.venustech.com.cn)近两年Atlassian JIRA爆出几个SSTI(服务器端模板注入)漏洞,漏洞编号分别为CVE-2019-11
  • ThinkPHP多语言文件包含漏洞分析

  • 更多安全资讯和分析文章请关注启明星辰ADLab微信公众号及官方网站(adlab.venustech.com.cn)一、漏洞概述 ThinkPHP是一个开源轻量级PHP框架,其6.0.13及以前版本存在一个文件包