卡巴斯基标志
今年年初,我正在对AV卸载程序工具进行一些研究,了解它们的工作原理,并试图找到错误配置和其他可能被滥用的方式,我已经在知识库中汇总了我的发现,它将很快公之于众。
我们今天将特别关注的一个AV卸载程序是卡巴斯基的kavremover。 我们将讨论此卸载程序如何导致卡巴斯基网络安全解决方案 (KES) 安装程序中的另一个问题。
以下是卡巴斯基文档中该工具的快速描述
Kavremover是一个免费工具,用于删除无法使用标准Windows工具完全删除的卡巴斯基应用程序
有了这个,让我们简单地运行该工具并从那里开始。
我们立即会看到一个简单的窗口,其中包含类似验证码的代码和一个包含我们可以删除的支持产品的列表。
单击“删除”后,删除过程将开始,直到完成为止,没有其他提示。(请注意,此工具需要管理员权限才能执行)
现在,让我们从“进程监视器”中看一下,看看进程在幕后实际做了什么。
卡巴斯基卸载进程监视器
该工具将自己提取到 %temp% 目录中,并在其中放置一堆其他内容,但其中最有趣的部分(在本博客的上下文中)是“actA7A1.tmp”。如果我们看一下命令行:
“actA7A1.tmp”
“run-cmd”关键字引起了我的兴趣,特别是因为它正在运行“regsvr32”实例。
"C:\Users\lab\AppData\Local\Temp\actA7A1.tmp" run run-cmd "regsvr32.exe /u /s \"C:\Program Files (x86)\Kaspersky Lab\Kaspersky Endpoint Security for Windows\mcou.dll\""
这个命令行似乎允许任意二进制文件像 LOLBIN 一样执行,所以我决定看看这个删除的文件。
为了获得它,我只需重新运行“kavremover”进程,并在运行时使用 SYSTEM 命令提示符复制它。
请注意,我们可以通过使用“ResourceHacker”之类的工具从原始“kavremover”的资源部分提取此二进制文件。
现在有了可执行文件,让我们遵循相同的结构,用随机命令替换“regsvr32”调用:
RT_RCDATA503.exe run run-cmd "cmd /c whoami > whoami.txt"
执行
我们能够按照我们的理论建议执行任意命令。最重要的是,有问题的二进制文件也是一个有符号的二进制文件。(请注意,执行的命令与滥用的可执行文件具有相同的用户权限)
现在这是一个有趣的LOLBIN,如果故事到这里结束,我会很高兴,但它没有,所以让我们继续。
在进行这项研究并为了测试这些不同的卸载程序时,我还安装了有问题的 AV 产品,在使用 KES 安装程序时,我收到了来自 KES 的以下提示
KES 提示符
我启动了“进程监视器”并继续卸载过程。看到procmon的结果,我们得到了一个非常熟悉的过程。
“act3CB2.tmp”与我们在“kavremover”中看到的上一个二进制文件具有相同的参数,这使我们得出的理论是KES安装程序使用相同的方法来删除其他AV。现在让我对此非常感兴趣的是,KES如何能够检测到我安装了AVG 2015。
通过查看进程树,我们可以看到“act3CB2.tmp”有一个名为“cleanapi.exe”的父进程,这听起来很有趣,所以我开始在KES安装程序中寻找这个“cleanapi.exe”
通过双击安装程序,它首先将自身“解压缩”到指定位置。如果我们查看未压缩数据的目录结构,我们会看到两个有趣的文件,它们可能与“清理”功能有关。
“incompatible.txt”的内容是一长串安全产品(AV,EDR,VPN,防火墙......),从文件名中我们猜测KES可能不兼容(即如果同时安装了两个软件,可能会导致问题)。
incompatible.txt
要查看“cleaner.cab”文件的内容,我们首先需要使用7zip之类的工具将其解压缩。
cleaner.cab
乍一看,我们可以看到“.ini”文件的名称与“incompatible.txt”文件中的名称进行了一对一映射。我们稍后将回到“.ini”文件。
向下滚动一点,我们找到了我们正在寻找的二进制文件“cleanapi.exe”。
回到最初的问题,KES 如何确定我安装了 AVG 2015?好吧,查看清理器文件夹,我发现了以下“.ini”文件
包含以下内容
“avg_free_av_2015_x64.ini”的内容
突然弹出三个东西:
detect-registry=HKEY_LOCAL_MACHINE\SOFTWARE\Avg\Avg2015....type=uninstall....env-registry=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\AVG\UninstallString->UninstallString
省去无聊的细节,因为这已经很长了。基本上,“AVG”的检查是通过检查注册表中“检测注册表”变量中指定的密钥来完成的。如果找到它,则运行“env-registry”指向的值。
为了测试这一点,我做了以下步骤:
卸载字符串
你瞧,它确实按预期运行了命令。
已执行记事本
我们现在能够从签名的卡巴斯基进程的上下文中执行任意命令和进程,只要我们模拟 KES “不支持”的 AV 以触发卸载过程。
请注意,这当然需要管理员权限才能修改必要的注册表项 (HKLM) 并运行 KES 安装程序。
另一方面,这可能为攻击者提供一个有趣的设置,他们可能会偶然发现已经在运行卡巴斯基的组织,因为这可以用来执行来自卡巴斯基进程的命令,该进程可能已经被安全团队列入白名单,或者它可以用作某种后门/持久性,每次KES安装发生时都会发生这种行为。
这项研究的一个有趣的副作用是发现了我上面提到的那些“.ini”文件。“cleaner.cab”文件中有2450个“.ini”文件,这意味着我们有一种方法,在某些情况下是“多种”方法来检测大约“2450”不同的安全产品(AV,EDR,VPN,防火墙......
我创建了一个简单的脚本来解析所有这些“.ini”文件,并将结果编译为CSV文件,该文件将在本博客开头提到的存储库中提供。
下面是它的外观示例。
检测安全产品
正如我们所看到的,删除是通过类似于我们在“kavremover”过程中发现的二进制文件发生的。在“ProcessMonitor”和“Rsourcehacker”中挖掘一下,我们发现有问题的二进制文件位于“cleanapi.dll的资源部分内
通过转储它,我们得到了一个与“kavremover”中发现的类似的签名二进制文件(尽管不同的哈希值),我们可以再次将其用作 LOLBIN。
在我结束之前的最后一件事。如果您注意到当我们查看进程树时,“cleanapi.exe”有一堆命令行参数。
"C:\Users\lab\AppData\Local\Temp\282527F5EDA44439AD3CC23FD270EE91\clr\flt\cleanapi.exe" -r -t 1 -n cleanapi.dll -d C:\Users\lab\AppData\Local\Temp\282527F5EDA44439AD3CC23FD270EE91\clr\flt\
一个有趣的点是“-n”,我们在其中传递一个DLL,特别是“cleanapi.dll”。如果我们将前面的命令简化为仅使用“-n”标志和随机DLL
cleanapi.exe -n malware.dll
我们可以通过“进程监视器”清楚地看到有问题的进程正在寻找我们的随机DLL
Cleanapi.exe正在寻找malicious.dll
我们可以快速创建一个“calc”POC 来测试它是否正在加载任意 DLL。事实上,一旦 POC 运行,我们就会弹出一个计算值。(当然,“cleanapi.exe”二进制文件是有符号的。
“cleanapi.exe”签名
尽管此处描述的问题在某种程度上需要管理员权限,并且可能被某些人视为“正常功能”,但仍然值得探索。
回顾一下:
ExtractedBinary.exe run run-cmd [Command]
cleanapi.exe -n [MaliciousDLL]
笔者下载了新版的kavremover,发现资源文件里的pe已经整合成一个了,虽然仍然成功分离出,但是已经无法像文章当中一样可以执行命令了。并且在测试kavremover的时候发现某数字卫视仍然会拦截
kavremover的卸载命令(如其进程带起的msiexec.exe),要知道卸载程序已经是白程序了,看来数字卫视对微软自带的白进程防范的是比较彻底啊。