转载

Flexera FlexNet Publisher中基于栈的缓冲区溢出漏洞分析(CVE-2015-8277)

近日,安全人员在Flexera FlexNet Publisher(License Manager)中发现了一个基于栈的缓冲区溢出漏洞(CVE编号:CVE-2015-8277,CNNVD编号:CNNVD-201602-441),可导致远程代码执行,并且会根据不同的软件产品变化。

FlexNetPublisher是应用广泛的License管理工具,软件厂商可以锁定机器的硬盘号,网卡号,使用日期等,以保护软件的知识产权。英特尔、思科、Adobe、惠普、RSA、西门子等都是FlexNet Publisher的用户。

漏洞细节

该漏洞存在于lmgrd.exe中,并且很多厂商都使用FlexNetPublisher创建vendor二进制文件,主要原因是程序使用一个自定义的strncpy函数(按长度拷贝字符串),与传统的strncpy函数类似,该自定义函数中包含源缓冲区、目的缓冲区和长度三个参数。然而,该漏洞导致strncpy函数忽略了长度参数,因此程序会自动将其转换为strcpy函数。通过追踪strncpy函数的用法,发现其广泛使用在由FlexNet Publisher支持的lmgrd和vendor二进制文件。当开发者默认最大长度已经被限制时,该函数会十分危险。该函数的伪代码如下图。

Flexera FlexNet Publisher中基于栈的缓冲区溢出漏洞分析(CVE-2015-8277)

图一 strncpy函数的伪代码

经过深度分析,研究人员发现 strncpy 函数被用在将近 100 个位置,大多数用于处理消息解析函数中用户提供的数据。确定漏洞的可利用性时,首先应该找出编译到应用程序中的内存保护机制的位置。某些视觉分析法可以显示栈 cookie 的使用情况,并运行 Corelanmona 脚本,由此分析, lmgrd二进制文件 使用 ASLR DEP SafeSEH 安全机制进行编译。

Flexera FlexNet Publisher中基于栈的缓冲区溢出漏洞分析(CVE-2015-8277)

图二 lmgrd二进制文件的编译

下一步,也是最复杂的一步,就是按照可利用难易程度为使用strncpy函数的位置进行排名。这意味着,不仅要考虑目的缓冲区是位于堆上还是栈上,还有确定栈cookie是否使用在当前的栈框架中。在经过一系列搜索之后,研究人员将目光锁定用于解析0×107类型消息的函数。该函数用途的特殊之处在于,栈框架中没有编译栈cookie,如果该函数的目的缓冲区大小只有4字节,那么程序可能会将其默认为一个地址。

Flexera FlexNet Publisher中基于栈的缓冲区溢出漏洞分析(CVE-2015-8277)

图三 用于解析0×107类型消息的函数

借助特制的数据包运用该消息解析函数确实能引发一个基于栈的缓冲区溢出漏洞。但是还有一个要求是,该溢出不能溢出到函数参数,或者随后要调用的memcpy函数不能抛出异常,否则就不能控制执行。幸运的是,研究人员成功使用ROP方法覆盖了返回的指针,将返回指针在栈中的位置移动到输入缓冲区。

Flexera FlexNet Publisher中基于栈的缓冲区溢出漏洞分析(CVE-2015-8277)

图四 栈溢出前后对比

分析进行到这,还有DEP和ASLR两个内存保护机制需要绕过。绕过DEP的方法是通过在当前二进制目录下使用ROP来重新分配一个可执行的栈。但是使用该方法需要泄露二进制文件或加载库的内存地址,所以需要找到另一个漏洞获取内存地址。真实情况是,研究人员并没有找到获取内存地址的方法。但是在研究过程中发现,程序中实际有两个二进制文件作为Flexera Publisher服务运行,一个名为lmgrd.exe,另一个为供应商的软件名称(例如,vendor.exe)。lmgrd文件可以管理vendor文件,并且可以重启崩溃的vendor文件。

研究人员可以借助该方法结合暴力破解方法获取加载库的基址。通过向vendor服务发送消息以重启应用程序服务,进而猜测出基址。为何要用暴力破解方法?主要是研究人员发现加载库的基址只有12位会发生变化,也就是说该基址只有4096种可能。

在POC中,研究人员将以上分析的所有内容结合到一个python脚本中。为了验证漏洞利用成功的时间,研究人员使用shellcode连回shell,并设置一个单独的线程通知主线程创建连接的时间。在此过程中需要注意的一点是,要及时停止暴力破解器。研究人员使用了 pwntools 库来简化与Metasploit服务器连接的代理。

Flexera FlexNet Publisher中基于栈的缓冲区溢出漏洞分析(CVE-2015-8277)

图五 使用pwntools库简化代理

受影响版本

FlexNet Publisher (License Manager) 11.13.1.0及之前版本

嵌入了FlexNet Publisher (License Manager)的产品

修复情况

Flexera已经修复了该漏洞,用户可以从其 官网 获取补丁,并按照其引导及时升级软件。对于网络防护人员,可以先确定lmgrd.exe的运行位置,然后判断是否修复,如果不确定补丁是否适用,可以联系所使用软件的厂商。同时也要确保服务台能及时处理客户投诉。

总结

人们对于该漏洞更关注的是它广泛的影响。该漏洞本身存在于Flexera软件中,但是却影响了很多嵌入FlexNet Publisher的其他产品,其厂商必须根据Flexera的补丁研究出适用于本产品的相应补丁,因此有些产品的用户可能要等待一段时间才能获取修复版本。

* 原文地址: securitymumblings , securifera ,vul_wish编译,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)

原文  http://www.freebuf.com/vuls/97467.html
正文到此结束
Loading...