hacktricks/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md
2023-08-03 19:12:22 +00:00

7.8 KiB
Raw Blame History

macOS安装程序滥用

☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Pkg基本信息

macOS 安装程序包(也称为.pkg文件是macOS用于分发软件的文件格式。这些文件就像一个包含了软件安装和运行所需的一切的盒子。

安装程序包本身是一个存档文件,其中包含了将要安装在目标计算机上的文件和目录的层次结构。它还可以包括在安装之前和之后执行任务的脚本,例如设置配置文件或清理旧版本的软件。

层次结构

  • Distribution (xml): 自定义内容(标题,欢迎文本...)和脚本/安装检查
  • PackageInfo (xml): 信息,安装要求,安装位置,运行脚本的路径
  • Bill of materials (bom): 要安装、更新或删除的文件列表及其文件权限
  • Payload (CPIO归档gzip压缩): 要安装在PackageInfo中的install-location中的文件
  • Scripts (CPIO归档gzip压缩): 预安装和后安装脚本以及更多资源,提取到临时目录以供执行。

解压缩

# Tool to directly get the files inside a package
pkgutil —expand "/path/to/package.pkg" "/path/to/out/dir"

# Get the files ina. more manual way
mkdir -p "/path/to/out/dir"
cd "/path/to/out/dir"
xar -xf "/path/to/package.pkg"

# Decompress also the CPIO gzip compressed ones
cat Scripts | gzip -dc | cpio -i
cpio -i < Scripts

DMG基本信息

DMG文件或称为Apple Disk Images是苹果的macOS使用的磁盘映像文件格式。DMG文件实际上是一个可挂载的磁盘映像它包含自己的文件系统其中包含通常经过压缩和有时加密的原始块数据。当您打开一个DMG文件时macOS会将其挂载为一个物理磁盘使您能够访问其内容。

层次结构

DMG文件的层次结构可以根据内容的不同而不同。然而对于应用程序DMG文件它通常遵循以下结构

  • 顶层:这是磁盘映像的根目录。它通常包含应用程序以及可能链接到应用程序文件夹的链接。
  • 应用程序(.app这是实际的应用程序。在macOS中应用程序通常是一个包其中包含许多组成应用程序的单个文件和文件夹。
  • 应用程序链接这是指向macOS中应用程序文件夹的快捷方式。其目的是使您能够轻松安装应用程序。您可以将.app文件拖到此快捷方式以安装应用程序。

通过pkg滥用提权

从公共目录执行

如果一个预安装或后安装脚本例如从**/var/tmp/Installerutil**执行,并且攻击者可以控制该脚本,那么他可以在每次执行时提升权限。或者另一个类似的例子:

AuthorizationExecuteWithPrivileges

这是一个公共函数许多安装程序和更新程序将调用它来以root权限执行某些操作。该函数接受要执行的文件的路径作为参数然而如果攻击者可以修改此文件他将能够滥用其以root权限执行从而提升权限。

# Breakpoint in the function to check wich file is loaded
(lldb) b AuthorizationExecuteWithPrivileges
# You could also check FS events to find this missconfig

有关更多信息,请查看此演讲:https://www.youtube.com/watch?v=lTOItyjTTkw

通过挂载执行

如果安装程序写入/tmp/fixedname/bla/bla,则可以使用无所有者的方式在/tmp/fixedname创建一个挂载点,从而可以在安装过程中修改任何文件以滥用安装过程。

一个例子是CVE-2021-26089,它成功地覆盖了一个周期性脚本以获取以root权限执行的能力。有关更多信息请参阅演讲OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl

pkg作为恶意软件

空负载

可以只生成一个没有任何负载的**.pkg文件,其中包含预安装和后安装脚本**。

Distribution xml中的JS

可以在软件包的distribution xml文件中添加**<script>标签,该代码将被执行,并且可以使用system.run执行命令**

参考资料

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥