*本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。
事件概述
近日,安全研究人员SandboxEscaper在GitHub上发布了针对Windows 10的5个零日漏洞的演示利用代码。
代码分别是:
Windows错误报告
Windows任务计划
Windows安装程序
IE11沙箱逃离
Windows AppX部署服务
其中除一、五俩个零日漏洞外,其他三个都是在2018年就已爆出。
漏洞详情
Windows错误报告零日
1. 利用条件:
可以通过精心放置的DACL(自主访问控制列表)操作来利用:
当我们触发报告队列任务时,WER服务将尝试删除两个文件。它会为这两个文件写一个DACL,以确保SYSTEM对它们进行“删除”。这种方式的工作方式分为两步:
a. 调用GetFileSecurity并获取安全描述
b. 向安全描述符添加了一些内容,因此具有SYSTEM删除权限,然后使用SetFileSecurity将其写回文件
它还关闭两个函数调用之间的文件句柄,这意味着如果在两个函数调用之间我们生成一个硬链接,它将首先从正常文件获取安全描述符,用户可以写入该文件。
然后,它将复制这些权限,并将此安全描述符应用于指向完全不同文件的硬链接。
成功的运行将如下所示:
您可以在QuerySecurityFile之后和SetSecurityFile之前看到正在创建的硬链接。可以使用IDA查看(wer.dll)并确认。很明显遭受攻击的功能是:UtilAddAccessToPath
2. 重现步骤:
a. 将AngryPolarBearBug.exe和report.wer复制到同一文件夹中
b. 运行AngryPolarBearBug.exe
此漏洞由于触发条件难以把控导致成功几率较低(触发错误可能需要15分钟,如果花了太长时间,需要关闭程序,清理缓存数据文件夹),并且早些时候已被修复。
Windows任务计划零日
1. 利用条件
Windows10有两个tasks文件夹:
a. C:\ Windows\tasks
b. C:\Windows\SYSTEM32\tasks
第一个是由于历史遗留问题保留使用。第二个被win10任务调度程序使用。在过去(即windows xp),任务 “.job”文件格式将放在”c:\ windows \tasks”中。
如果在Windows 10上要将.job文件导入任务计划程序,则必须将旧的“.job“文件先复制到”c:\ windows\tasks”中,并使用从旧系统复制的schtasks.exe和schedsvc.dll运行以下命令:
schtasks /change /TN"taskname" /RU username /RP password"
这将导致调用RPC“_SchRpcRegisterTask”,它由任务调度程序服务公开。触发这个错误,可以直接调用这个函数,而不是必须要从windows xp复制schtasks.exe。
它首先在当前用户权限下运行,但是当它遇到以下功能时:
int __stdcalltsched :: SetJobFileSecurityByName(LPCWSTRStringSecurityDescriptor,const unsigned __int16 *,int,const unsigned __int16 *)
它开始在NT AUTHORITY\ SYSTEM权限下运行
然后在c:\ windows\system32\tasks中创建的任务上调用SetSecurityInfo:
2. 重现步骤
a. 将polarbear.exe,bear.job,schtasks.exe,schtasks.dll从“poc files”文件夹复制到测试VM
b. 运行polarbear.exe,传递本地非管理员帐户的用户名和密码。
要触发此漏洞首先需要拥有正确的用户名及密码。但是,这并非什么难事,有很多黑客工具可以做到这点.
Windows安装程序零日
1. 利用条件
在修复安装Windows程序时,如果可以劫持该进程以将文件写入Windows操作系统的未授权区域,则会有很短的时间间隔(竞争条件)。
这个msiexec / fa(修复安装)操作的漏洞可用于植入恶意软件并接管黑客最初只能访问低权限帐户的计算机。
2. 重现步骤
a. 运行polarbear.exe (确保 test.rbf 和 test.rbs 在同一目录下)
b. 打开命令行安装.MSI安装程序 必须是 c:\windows\insatller 目录下的,例如命令:"msiexec/fa c:\windows\installer\123123213.msi"
此漏洞复现也存在运气成分,需要安装时竞争条件恰到好处的触发,同时快速点击返回按钮。
IE11沙盒逃离零日
1. 利用条件
整个执行流程较为简单,通过com组件与ie通信执行硬编码"<html><body><script>alert('wtf');</script></body></html>", 执行在此之前需要将target.link写入到windows自带的“%USERPROFILE%\Favorites“目录下
2. 重现步骤
a. InjectDll.exe PID TestDll.dll
此漏洞关键首先得成功获取IE11进程句柄并成功注入目标模块,从而执行恶意代码。显然这个零日不可被远程利用,应被视为影响较小的问题。
Windows AppX部署服务零日
1. 利用条件
这是Windows AppX部署服务(AppXSVC)不正确处理硬链接的方式中的一个错误。来自于CVE-2019-0841,
利用漏洞首先检查目标文件是否存在,如果存在,它将检查其权限。由于我们使用Microsoft Edge进行此攻击,因此它将终止Microsoft Edge以访问settings.dat文件。
在Microsoft Edge被杀后,它将检查“setting.dat”文件并将其删除,以便创建指向所请求的目标文件的硬链接。一旦创建了硬链接,Microsoft Edge再次启动以触发漏洞。最后检查是否确实为当前用户设置了“完全控制”权限。
2019.4月份微软推送补丁修复,但是仍可被利用。
2. 重现步骤
a. 运行polarbear.exe
b. 运行windowsappslpe.exe
此漏洞绕过微软修复的CVE-2019-0841补丁。通过提前创建硬链接而后执行漏洞补丁之前EXP进行攻击。
Windows AppX漏洞复现及详细原理剖析
我们现在直接运行可执行文件polarbear.exe并对其利用原理进行剖析:
a. 目的是在系统数据目录“%LOCALAPPDATA%”创建指定子目录\\Packages\\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\\Microsoft.MicrosoftEdge_44.17763.1.0_neutral__8wekyb3d8bbwe
以供攻击利用
成功执行:
b. 使用NtOpenFile以对象属性为OBJ_CASE_INSENSITIVE打开文件
c. 使用ZwSetInformationFile设置文件属性需要将FILE_LINK_INFORMATION结构体ReplaceIfExists字段设置为TRUE并将 FILE_INFORMATION_CLASS传递值为FileLinkInformation
d. 最终调用已封装好的函数CreateNativeHardlink,好的传递需要创建的硬链接文件 L"\\Packages\\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\\Microsoft.MicrosoftEdge_44.17763.1.0_neutral__8wekyb3d8bbwe\\bear3.txt"以及
需要修改权限的文件"C:\\Windows\\win.ini"
此时我们便可以看到创建硬链接成功:
至此,整个绕过补丁的利用环境已构建完毕。 但我们仍需使用CVE-2019-0841来达到本地提权的攻击效果。
此漏洞主要围绕着DCAL引发的事件,简单地来说,如果Windows对象没有自主访问控制列表(DACL),则系统允许每个人完全访问它。如果对象具有DACL,则系统仅允许DACL中的访问控制条目(ACE)明确允许的访问。
让我们关注“settings.dat” 这是Microsoft Edge 的文件,也是此漏洞利用过程起到关键作用的文件,所有WindowsApps用户配置文件都存储在当前用户的AppData文件夹下:
Windows 10已经安装了许多默认应用程序,每个包都有一个settings.dat文件,如前所述。
NT AUTHORITY\SYSTEM使用此文件来写入任何配置更改。启动Windows应用程序后,系统会使用OpLock操作(独占锁定)来阻止其他进程在应用程序运行时使用/访问该文件。
在我们启动Microsoft Edge的情况下,settings.dat文件会被进程以NT AUTHORITY\SYSTEM打开,可以在下面的屏幕截图中看到:
打开后,将按以下方式执行一些基本完整性检查:
a. 检查文件权限,如果文件权限不正确,使用正确的文件权限更正
b. 读取文件内容,如果内容已损坏,则删除该文件
c. 通过从“C\Windows\System32\settings.dat”复制设置模板文件来重新配置
d. 继续启动Windows相关应用程序
所以执行POC的程序至少会做到以下三点:
(1) 利用漏洞首先检查目标文件是否存在,如果存在,它将检查其权限。由于我们使用Microsoft Edge进行此攻击,因此它将终止Microsoft Edge以访问该settings.dat文件。
(2) 在Microsoft Edge被杀之后,它将检查“setting.dat”文件并将其删除,以便创建到所请求的目标文件的硬链接(win.ini)
(3) 一旦创建了硬链接,Microsoft Edge再次启动以触发漏洞。最后检查是否确实为当前用户设置了“完全控制”权限。
以下为执行结果示意图:
执行前:
执行后:
漏洞总结及安全建议
通过上述分析我们可以知道,以下是触发漏洞的最基本先决条件:
NT AUTHORITY\SYSTEM应对目标文件具有“完全控制权”
低权限用户或Users组应具有“读取/执行”权限
安全建议:
下载并更新Windows系统补丁修复漏洞
不随意运行来历不明的程序
安装知名杀毒软件并保持最新版
*本文作者:木星安全实验室,转载请注明来自FreeBuf.COM