热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

​安全公告:ASN.1编码中存在堆内存崩溃漏洞

1.安全公告信息标题:Objective系统集成有限公司所设计的ASN.1编码规范中存在一个可以引发堆内存崩溃的安全漏洞。漏洞CVE编号:CVE-2016-5080公告URL地址:http://www


http://p5.qhimg.com/t01a536493c9dcbb1f1.png

http://p2.qhimg.com/t01a28dffea79302393.png

1.安全公告信息

标题:Objective系统集成有限公司所设计的ASN.1编码规范中存在一个可以引发堆内存崩溃的安全漏洞。

漏洞CVE编号:CVE-2016-5080

公告URL地址:http://www.fundacionsadosky.org.ar/publicaciones-2

漏洞公布日期:2016-07-18

公告最新更新时间:2016-07-19

相关供应厂商:Objective系统集成公司

漏洞披露模式:协同披露

2.漏洞信息

漏洞分类:基于堆内存的缓冲区溢出[http://cwe.mitre.org/data/definitions/122.html]

漏洞影响:代码执行

是否远程可利用:是

是否本地可利用:是

漏洞标识:http://cve.mitre.org/cgi-bin/cvename.cgi?name=2016-5080

3.漏洞描述

ASN.1抽象语法标记是一种 ISO/ITU-T 标准,它描述了一种对计算机网络数据进行表示、编码、传输和解码的数据格式规范。

它提供了一整套用于描述对象结构的格式标准,开发人员无需关心编程语言具体如何执行这些命令,而且也不用了解这些数据的具体指代在任何需要以数字方式发送信息的地方,ASN.1 都可以发送各种形式的信息(声频、视频、数据等等)。

ASN.1 和特定的 ASN.1 编码规则推进了结构化数据的传输,尤其是网络中不同应用程序之间的结构化数据传输,它以一种独立于计算机架构和语言的方式来描述数据结构。

OSI 协议中的应用层协议使用了 ASN.1 来描述它们所传输的 PDU,这些协议包括:用于传输电子邮件的 X.400,用于目录服务的 X.500,以及用于 VoIP 的 H.323 和 SNMP。它的应用还可以扩展到通用移动通信系统(UMTS)中的接入和非接入层。

ASN.1 取得成功的一个主要原因是它与几个标准化编码规则相关,如基本编码规则(BER) -X.209 、规范编码规则(CER)、识别名编码规则(DER)、压缩编码规则(PER)和 XML编码规则(XER)。这些编码规则描述了如何对 ASN.1 中定义的数值进行编码,以便用于传输,而无需关心计算机、编程语言或它在应用程序中如何表示等因素。

ASN.1 的编码方法比许多与之竞争的标记系统更为先进,它支持可扩展信息快速可靠的传输 — 在无线宽带中,这是一种优势。1984年,ASN.1 就已经成为了一种国际标准,它的编码规则已经十分成熟了,并在可靠性和兼容性方面拥有更加丰富的处理经验。ASN.1是描述在网络上传输信息格式的标准方法。它主要由两个部分组成:一部分用于描述信息内部的数据,数据类型,以及序列格式;另一部分用于描述如何将各部分数据组成消息。它原来是作为X.409的一部分而开发的,后来才自己独立成为一个标准。

ASN.1 的描述可以容易地被映射成 C 或 C++ 或 Java 的数据结构,它可以被应用程序代码使用,并得到运行时程序库的支持,进而能够编码和解码 XML或TLV 格式的数据。

除此之外,ASN.1也是一种用于描述结构化客体的结构和内容的语言。ASN.1 C++编译器是ASN.1 C编译器的增强版本, 它采用了面向对象编程技术。ASN.1 C++编译器可以自动将ASN.1规范编译为C++类和用来编解码的元数据。此外,C++运行时库的ASN.1也是ASN.1 C++编译器软件包的一部分。ASN.1 C++运行库同时也是面向元数据的,元数据可以在运行时载入,并且可以在使用后释放。

Objective集成系统有限公司是美国的一家私营企业,ASN1C编译器正是由这家公司开发设计的。目前,在电信,数据网络,航空航天,国防部门,以及政府执法部门等多个领域的企业或组织都在使用这一编译器。

这个存在于ASN1C编译器运行时支持库中的漏洞将会允许攻击者在目标软件系统中远程执行代码,受影响的系统还包括使用了ASN1C编译器的嵌入式软件系统在内。根据安全研究专家的分析,当目标系统中的漏洞代码从不受信任的来源处接收并处理ASN.1编码数据时,攻击者就可以在不经过任何身份验证的情况下远程触发这一漏洞。在移动设备和通信运营商的网络基础设施节点之间的通信,以及运营商网络节点之间的通信过程中,都将有可能出现这样的安全问题。

据了解,Objective集成系统有限公司目前已经成功解决了这个问题,并且为了满足客户的需求,公司还发布了一个临时版本的ASN1C C/C++编译器。根据公司透露的信息,他们将会在下一版本(v7.0.2)的ASN1C编译器中正式修复这一漏洞。

如果大家想要了解更多关于受影响厂商和漏洞缓解方案的信息,请访问CERT/CC发布的漏洞公告。

4.受漏洞影响的系统

任何使用了ASN.1编码规范的软件系统都将会受到这一漏洞的影响。除此之外,7.0版本及7.0版本以下的ASN1C编译器也将会受到该漏洞的影响。CERT/CC漏洞公告中提供了一个受此漏洞影响的厂商名单,感兴趣的读者可以点击查看。

5.厂商信息和解决方案

为了满足客户的要求,厂商已经发布了一个临时版本的ASN1C(v7.0.1)以供用户使用。公司将会在ASN1C v7.0.2正式版本中修复这一漏洞。

6.漏洞发现者

这个漏洞是由安全研究专家Lucas Molas发现并报告的。

7.技术细节

在这一部分,我们将详细描述Objective集成系统有限公司所发布的最新版本ASN1C编译器(v7.0.0)中存在的这个安全漏洞。安全研究专家发现,在编译器的rtxMemHeapAlloc函数中包含有一个预编译的asn1rt_a.lib库,并在其中检测到了两个整数溢出问题,这个问题将有可能允许攻击者在目标系统中引发堆内存崩溃。

安全研究专家使用了IDA(v6.9)来对程序进行了反编译,并提取出了相应的代码块来进行进一步的分析。在对这个预编译的代码库进行了分析之后,研究人员便从clib路径下提取出了asn1rt_a.lib。

在对rtxMemHeapAlloc函数的分析过程中,研究人员首先对程序的堆内存(pMemHeap)进行了初步分析,rtxMemHeapCreate函数和rtxMemHeapCheck函数会在堆内存空间中被调用,nbytes参数(反编译结果为arg_4)会被修改。程序会利用ecx寄存器来将参数值填充至八个字节大小(或者八字节的整数倍),并将结果存储至变量var_9C之中。为了实现这一步操作,在对结果值进行移位操作之前,ecx的值会加7。在32位寄存器中,如果没有对结果值进行检测,那么当nbytes的值为0xFFFFFFF9或者更大时,则将有可能引起整数溢出问题。具体代码如下所示:

 loc_A6:
  mov     ecx, [ebp+arg_4]
  add     ecx, 7
  shr     ecx, 3
  mov     [ebp+var_9C], ecx
  mov     edx, [ebp+var_18]
  mov     eax, [edx+18h]
  and     eax, 20000000h
  jnz     short loc_D2

rtxMemHeapAlloc函数并不会对nbytes参数进行任何验证,因此,程序就只能指望参数的调用者来对其进行检测,以确保它的值不会溢出。但是,rtxMemHeapAlloc函数的调用者是一个由ASN1C编译器自动生成的函数,通常这类函数在默认情况下并不会对传递的参数进行任何限制,除非我们手动对其进行 设置。

如果malloc函数被调用,var_9C变量中的值将会被丢弃,取而代之的是nbytes参数的初始值。在这个值被保存至变量var_E8中之前,会在ecx寄存器中加上14h。

此时,代码并不会对这个值进行检测,如果参数nbytes的值为0xFFFFFFEC或者更大的话,将有可能引起整数溢出问题。具体代码如下:

  loc_D2:
  mov     ecx, [ebp+arg_4]
  add     ecx, 14h
  mov     [ebp+var_E8], ecx
  mov     edx, [ebp+var_E8]
  push    edx
  mov     eax, [ebp+var_18]
  mov     ecx, [eax+1Ch]
  call    ecx
  add     esp, 4
  mov     [ebp+var_24], eax
  cmp     [ebp+var_24], 0
  jnz     short loc_120

由于该漏洞存在于核心运行支持库中,所以安全研究专家很难去评估该漏洞的利用情况。

但是根据分析之后的结果显示,攻击者可以利用这个漏洞来引发系统堆内存崩溃,或者是引起内存空间的分配问题。

由于篇幅有限,如果读者还想了解更多有关这一漏洞的详细信息,请点击查看原文。


推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文比较了eBPF和WebAssembly作为云原生VM的特点和应用领域。eBPF作为运行在Linux内核中的轻量级代码执行沙箱,适用于网络或安全相关的任务;而WebAssembly作为图灵完备的语言,在商业应用中具有优势。同时,介绍了WebAssembly在Linux内核中运行的尝试以及基于LLVM的云原生WebAssembly编译器WasmEdge Runtime的案例,展示了WebAssembly作为原生应用程序的潜力。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 企业数据应用挑战及元数据管理的重要性
    本文主要介绍了企业在日常经营管理过程中面临的数据应用挑战,包括数据找不到、数据读不懂、数据不可信等问题。针对这些挑战,通过元数据管理可以实现数据的可见、可懂、可用,帮助业务快速获取所需数据。文章提出了“灵魂”三问——元数据是什么、有什么用、又该怎么管,强调了元数据管理在企业数据治理中的基础和前提作用。 ... [详细]
author-avatar
没人欣赏2602896483
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有