潜移默化地授予管理员权限

整个星期五,朋友们。 今天,我们将与您分享在逆向工程课程启动前夕翻译的另一种材料。



我有一个很酷的主意,即如何使用户无需社会工程或使用第三方漏洞就可以运行您的应用程序。 此外,您可以简单地前进并引发大量可执行文件的感染,但这可能会导致许多无法预料的问题,并且还意味着来自受信任的供应商的数字签名应用程序将显示为不受信任的文件。 “捕获”一个dll是一个好主意。 我不会通过UAC(用户帐户控制)来调用此方法,因为您仍然需要获得运行该应用程序(而不是您自己)的权限。

负载库


您可能已经熟悉此概念,但是我仍然要解释它的含义。 当应用程序在dll中调用LoadLibrary时,但未提供文件的完整路径时,系统首先检查KnownDlls注册表项,在其中查找路径,如果不存在,系统将在执行该应用程序的目录中查找,然后搜索在系统路径(例如system32 / syswow64)中。

您可以很好地将dll与应用程序放在同一目录中,并赋予其与正常加载的系统dll相同的名称,但是无论如何,您的dll必须满足以下要求:

  • 应用程序应按名称而不是完整路径下载dll(通常情况下);
  • 所需的库不能存在于HKLM \ SYSTEM \ CurrentControlSet \ Control \会话管理器\ KnownDLLs中;
  • 您的dll应该与处理器体系结构匹配(请记住,64位处理器只会跳过32位库,反之亦然);
  • 该库位于System32或Syswow64中,因为特定的路径通常不起作用。

ZeroAccess病毒使用此方法来利用“社会工程学”的优势,并迫使用户运行文件。 首先,从正式版本中下载Adobe Flash安装程序,然后将bot dll记录在与安装程序相同的目录中,然后启动安装程序。 当执行安装程序时,用户帐户控制会显示一条消息,说明该应用程序是由“ Adob​​e Systems Incorporated”的受信任来源提供的,并且用户最有可能安装此应用程序(这会导致执行恶意bot dll)。


这是对Flash Player的真正更新吗? 还是ZeroAccess? 没有人知道。

侵入性较小的方法


想象有一个文件夹,其中有90%的应用程序需要提升帐户权限,并且没有这种权限就可以写该文件夹。 好了,这样的文件夹存在,这是%userprofile%Downloads文件夹。 您可能了解我的意思。

我没想到会找到一个可以加载大多数应用程序并同时满足恶意DLL所有条件的dll,经过大约五分钟的搜索,我发现了一个金矿: dwmapi.dll 。 该库不仅满足所有条件,而且还下载了所有安装文件。 现在,让我们创建自己的dll,将其命名为“dwmapi.dll” ,将其放入Downloads文件夹中并运行安装文件。



成功! 但是事实是,因为我们已经替换了重要的库,所以一旦开始安装,它将无法正常工作,但这很容易解决。 我们感染了dll。

创建一个感染dll


首先,我只是想添加一个新的节头,更改PE头中的NumberOfSections字段,然后将我的节添加到PE文件的末尾。 事实证明,在最后一个节标题之后,立即有一个相关的导入目录,该目录将被我们的节标题覆盖。 因此,在编写了一个应用程序以从头开始还原所有PE的大约2个小时之后,有人提醒我,链接的导入目录的存在只是为了加快导入文件的下载速度,可以覆盖它,然后在PE标头中将其禁用即可。

在接下来的15分钟里,我按住CTRL + Z返回到开始的位置并感到很愚蠢。 经过两行代码后,我的感染器就可以正常工作了,我可以继续下一步了。 现在,感染者只需断开连接并使用新的节头重写相关的导入目录,将新节添加到PE文件的末尾,调整SizeOfImage以适应新节,然后将AddressOfEntryPoint更改为指向我们的新节。

现在,我们需要的只是放在其中的代码。

Shellcode


显而易见的选择是强制添加的部分执行shellcode,因此我们不必担心重定位和导入。 实际的代码非常简单,并使用一些方便的FASM宏编写,我将快速介绍它的工作原理。

  • 检查堆栈以确保DLL_PROCESS_ATTACH已调用dwmapi.dll。
  • Ldr PEB结构用于获取Kernel32和Ntdll的基地址;
  • 一个简单的GetProcAddress实现用于导入以下函数:NtOpenProcessToken,NtQueryInformationToken,NtClose,ExpandEnvironmentStringsA,CreateProcessA;
  • 当前的流程令牌已打开,代码请求它确认我们从中启动的应用程序是否具有UAC管理员权限;
  • 结果是cmd.exe路径,然后调用命令行。
  • 执行将转移回dwmapi.dll的实际入口点,这就是为什么执行可以继续的原因。

全部放在一起


该操作的最终结果用我们的shellcode感染dwmapi.dll并将其放置在下载文件夹中,一旦用户下载并运行需要管理员权限的安装程序,该命令行将被称为管理员(由于Wow64FsRedirect以及大多数设置都在wow64下工作,我们可以在32位和64位Windows系统上使用相同的代码)。

您可以在我的github上找到完整的感染程序和shellcode: https//github.com/MalwareTech/UACElevator

仅此而已。 在课程中见!

Source: https://habr.com/ru/post/zh-CN457082/


All Articles