[译]逆向ALPC:如何发现Windows bugs和Sandbox escape?

介绍

当我还不是一个研究Windows的安全专家的时候,我通常挖掘漏洞的方法是:

  1. 在YouTube上查找和观看有趣的攻击面。
  2. 在找到感兴趣的主题后,我会尽可能地通过google去搜索有关该主题的所有内容。
  3. 分析和学习最低限度的知识,开始实验性地进行尝试。

写这篇文章的目的是为了讲述我发现漏洞的过程,而不是对任何特定知识的讲解。
如果您发现任何错误或需要更正的地方,请随时与我联系。另外,这是我的个人爱好,我并不是一个专业的安全研究员。

首先我要说的是:如何发现Windows bugs和Sandbox escape呢?
自从我看了Ben Nagy录制的视频:Windows Kernel Fuzzing for Intermediate Learners之后,我就对ALPC(Advanced Local Procedure Call)非常感兴趣。
在看了Clement Rouault和Thomas Imbert在hack.lu 2017上的议题:Hack.lu 2017 A view into ALPC-RPC by Clement Rouault and Thomas Imbert之后,我成功的拼凑起了足够的知识。
在此之前,通过hook NtAlpcSendWaitReceivePort,我做了一些尝试,但是没有什么收获。
我完成我上面提到的第三步的方式是很简单的:我试着重复我能想到的一切,并在不过度依赖技术的情况下提出问题。

Q:ALPC到底是怎么回事?
A:Advanced Local Procedure Call——一种Windows内部机制,允许在OS内运行的client进程向在同一OS中运行的server进程发起请求,要求server进程提供某些信息或执行某些操作。

Q:我们可以通过进程间通信来进行攻击吗?
A:可以,如果可以在低权限和高权限进程直接进行通信,这意味着我们从一个已经被攻击者控制的空间里,影响“其他的某些东西”。

Q:什么类型的通信将使用ALPC?
A:Local RPC将使用ALPC!Local RPC(Remote Procedure Call),它基本调用其他进程公开的函数,但由于某些原因,所有东西都需要有一个奇特的名字!我相信还有其他类型的通信使用ALPC,但是让我们关注RPC,因为资料丰富。

Q:我能在哪里找到这些基于ALPC的"Remote Procedure calls"?
A:看看上面我提到的RPC over ALPC视频,我们能使用RpcView!

我们需要做的就是选择一个interface(interface是我们可以使用RPC调用的一组函数)
并创建一个IDL(IDL提供了一个关于我们如何调用函数以及函数使用什么参数的模板,因此我们可以不需要逆向所有的东西。)
这是一个奇怪的COM-thingy,他们想要一些中间语言来在编程语言之间移植东西,但它基本上失败了,并没有成为新的行业标准。只有微软现在使用它!

Q:我们在rpcview中找到了所有信息并为interface创建了一个IDL,现在要做什么?
A: 我们可以将它复制粘贴到James Forshaw的PoC中,让它开始工作!哇噢!

Step-by-step

下载RpcView: https://ci.appveyor.com/project/silverf0x/rpcview/build/artifacts
在RpcView中设置符号
首先打开WinDbg并运行以下命令(下载Windows SDK for WinDbg):
symchk /s srv*c:\symbols*https://msdl.microsoft.com/download/symbols c:\windows\system32\*.dll

点击收藏 | 1 关注 | 1
  • 动动手指,沙发就是你的了!
登录 后跟帖