转载

联想系统更新中发现的两枚提权漏洞原理分析

联想最新发布的 系统更新公告

中的两个提权漏洞是我在几周前提交的(CVE-2015-8109,CVE-2015-8110)IOActive以及联想在这个报告中发出警告!

细节铺垫

在解毒细节之前,我们先来点高大上的概览。联想系统更新以管理员权限弹出GUI应用程序的整个流程如下:

联想系统更新中发现的两枚提权漏洞原理分析

1.用户运行tvsu.exe或者带特定参数运行TvsuCommandLauncher.exe启动系统更新,在此之前联想对IOActive发现的漏洞已经进行了修复。在新版本TvsuServiceCommon.dll中定义了一组任务,参数范围为1~6

2.TvsuCommandLauncher.exe之后,通常联系运行系统权限的SUService服务,处理所需的查询需要更高的权限

3.SUService服务之后,以系统权限打开UACSdk.exe并使用管理员权限运行GUI接口

4.UACSdk.exe检测用户为无权限的普通用户或者是能够提权的Vista管理员

5.根据用户权限:

(1)如果为Vista管理用户,那么就会提升权限

(2)如果为普通用户,UACSdk.exe创建创建一个随机密码的临时管理员账户,应用关闭后就删除

临时管理员账户遵循tvsu_tmp_xxxxxXXXXX格式,小写x为随机生成的小写字符,大写X为随机生成的大写字符,生成的随机密码为19个字节。

这是一个创建随机的用户的示例:

联想系统更新中发现的两枚提权漏洞原理分析

6.通过tvsukernel.exe,主要的联想系统更新GUI便以管理员权限开始运行

联想系统更新中发现的两枚提权漏洞原理分析

BUG 1:联想系统更新帮助主题提权

第一个BUG在帮助系统中,并且有两种进入点。用户可以通过Internet Explorer打开在线帮助主题。

1 – 主应用程序接口中的链接:

联想系统更新中发现的两枚提权漏洞原理分析

2 – 通过点击右上角的帮助图标,然后点击设置:

联想系统更新中发现的两枚提权漏洞原理分析

当以管理员身份运行Tvsukernel.exe主应用程序,浏览器实例打开一个Help URL继承父管理员权限。

在这里,一个无特权的攻击者有许多方法利用浏览器实例来提升帐号为Administrator或者SYSTEM权限。

联想系统更新中发现的两枚提权漏洞原理分析

BUG 2 : 联想系统弱密码函数提权

该BUG的技术含量要高些,步骤5b相关的创建临时管理员账户利用这个漏洞

sub_402190函数用来创建临时管理原账户,包含以下重要的代码片段:

联想系统更新中发现的两枚提权漏洞原理分析

sub_401810函数接收3个参数并负责生成随机字符串格式。

当sub_401810使用RAND生成一个格式,seed初始化是基于增加当前时间,rand值以及如下的定义:

联想系统更新中发现的两枚提权漏洞原理分析

一旦定义好seed,函数使用RAND循环以及division/multiplication特定值生成一个随机值。

注意下图所示的循环

联想系统更新中发现的两枚提权漏洞原理分析

第一个函数调用是用来生成管理员用户名后面的10个字符(tvsu_tmp_xxxxxXXXXX)

由于是基于rand,实际上该算法是可预测的。基于帐户被创建的时间,攻击者是有可能再生成相同用户名的。

对于生成的密码(哪个更重要)联想有一个更安全的方法:在函数sub_401BE0内的Microsoft Crypto API(Method #1),对于这个method我们并不会神人解毒,这是因为IOActive发现的漏洞与此无关。我们要看的当Method #1失效后,Method #2如何生成密码。

返回密码生成相关的代码片段:

联想系统更新中发现的两枚提权漏洞原理分析

我们清楚的看到如果sub_401BE0函数失效,使用RAND-based算法返回执行流程(在sub_401810函数前就定义好了)给临时管理员账户生成一个可预测密码。换句话说,攻击者可通过Method #2预测密码。

这意味着攻击者可以在某些情况下预测用户名和密码,并利用其来提升账户权限!

*原文: ioactive ,编译/FB小编鸢尾,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)

正文到此结束
Loading...