设为首页  
联系我们  
加入收藏  
网页制作 冲浪宝典 图形图像 操作系统 软件教学 编程开发 认证考试 安全技术 站长专区 文学驿站 娱乐天地 游戏天地 办公软件
文章搜索
您的位置: 首页 >> 文章首页 >> 安全技术 >> 病毒漏洞 >> Microsoft ASN.1库BER解码堆破坏漏洞
精品推荐
病毒漏洞点击TOP10
·动网论坛上传文件漏洞
·常用几种软件密码破解的方法
·尘缘雅境图文系统存在严重漏洞
·Raw Socket(原始套接字)实现Sniffer(嗅探)
·远程线程注入版获取SYSTEM权限
·“艾妮”(ANI)病毒解决方案
·解决DF冰点不修改NTLDR,最后一次正确配置的问题
·能开启摄像头偷窥隐私的病毒
·如何成为一名黑客(附FAQ)
·CGI漏洞
安全技术点击TOP10
·主板芯片级维修技术资料
·Symantec AntiVirus防病毒服务器安装配置使用指南
·教你如何手动查杀“幽灵(I-Worm.Ghost)”病毒
·贴片元件标记对应型号资料
·主板芯片组详解
·在WindowsXP/2003下查看端口对应的进程
·主板点不亮(不显示)的BIOS修复两法
·计算机启动过程详解
·网吧如何禁止使用PP点点通
·主板开机原理
精选专题

Microsoft ASN.1库BER解码堆破坏漏洞

作者: 来源:网络文章 时间:2005-12-19 16:26:47

Microsoft ASN.1库BER解码堆破坏漏洞(1) 受影响系统:
Microsoft Windows XP Professional SP1
Microsoft Windows XP Professional
Microsoft Windows XP Home SP1
Microsoft Windows XP Home
Microsoft Windows NT 4.0SP6a
Microsoft Windows NT 4.0SP6
Microsoft Windows NT 4.0SP5
Microsoft Windows NT 4.0SP4
Microsoft Windows NT 4.0SP3
Microsoft Windows NT 4.0SP2
Microsoft Windows NT 4.0SP1
Microsoft Windows NT 4.0
Microsoft Windows 2003
Microsoft Windows 2000SP4
Microsoft Windows 2000SP3
Microsoft Windows 2000SP2
Microsoft Windows 2000SP1
Microsoft Windows 2000
描述:
--------------------------------------------------------------------------------
CVE(CAN) ID: CAN-2003-0818

Abstract Syntax Notation 1 (ASN.1)是用于多个应用程序和设备的数据标准,允许数据可在各种平台传递。Microsoft ASN.1库广泛使用在Windows安全子系统,包含kerberos、NTLMv2验证,及使用各种证书的应用程序(SSL、EMAIL数字签名、ActiveX控件签名)。

Microsoft ASN.1库实现上存在整数溢出漏洞,远程攻击者可以利用这些漏洞造成堆破坏从而执行恶意指令。漏洞影响MSASN1.DLL相关的应用,其中比较常见的是LSASS.EXE和CRYPT32.DLL(任何使用CRYPT32.DLL的应用程序)。

ASN.1基本编码规则(BER)基本概念是一个灵活的编码二进制数据的编码方案。每片数据按照描述如何解释下面值数据的类型号,然后是数据长度,最后是数据本身,通过提供超大值(从0xFFFFFFFD到0xFFFFFFFF)给长度字段,可在堆分配函数中产生整数溢出,虽然有地方对这个值长度进行确认和检查,不过在验证函数中独立的指针算法会导致漏洞发生。


1、当一个简单的值(这个值由原子数据组成)由MSASN1解码时,ASN1BERDecLength()调用来获得值长度,然后把这个值长度传递给ASN1BERDecCheck()函数确保数据实际存在。

2、ASN1BERDecCheck()验证无符号数据"pointer_to_start_of_data + reported_length_of_data"是否小于或者等于"pointer_to_start_of_BER_block + total_size_of_BER_block",如果检查没通过,函数返回错误,并停止解码(本来ASN1BERDecCheck()函数检查也存在问题,不过微软在Windows 2000 SP4和Windows Server 2003中已经在函数中增加额外的比较进行修补了)。

3、如果函数调用ASN1BERDecLength()然后尝试分配内存和拷贝数据(如ASN1BERDecOctetString(),不过不是ASN1BERDecOctetString2()),它就会传递解码的长度给DecMemAlloc(),然后分配结果,此函数的操作也即:"LocalAlloc(LMEM_ZEROINIT, (length + 3) & ~3)."

4、如果DecMemAlloc()函数成功返回,调用函数然后使用原始解码的长度作为计数字节长度通过memcpy()把数据拷贝到已经分配的堆缓冲区中,就会触发溢出。

如果在第一步ASN1BERDecLength()解码的长度非常大,就会在第二步ASN1BERDecCheck()增加长度到当前数据指针时发生整数溢出。更明确的是,如果长度数据范围在0xFFFFFFFD 到0xFFFFFFFF之间,会通过ASN1BERDecCheck()的检查,在完成DecMemAlloc()调用后,长度的总和会变为零,LocalAlloc()成功的分配零长度堆段,但由于memcpy()在处理超长长度数据进行拷贝时没有任何检查,结构可出现堆破坏,临近的任何数据可被任意数据覆盖。

最简单的方法产生此条件是构建一个简单八位字符串(tag 04h),'length-of-length'设置为4,length设置为0xFFFFFFFF的编码,对应字节为'04h/84h/FFh/FFh/FFh/FFh',根据MSASN1客户使用的解码函数,可触发此漏洞。以下是受此漏洞影响的解码函数:

ASN1BerDecCharString

共3页 9 7 [1] [2] [38 :>

Microsoft ASN.1库BER解码堆破坏漏洞 相关文章:
Microsoft ASN.1库BER解码堆破坏漏洞 相关软件:
特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
转载请注明来源:http://www.xgdown.com