hacktricks/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md

99 lines
5.8 KiB
Markdown
Raw Normal View History

# macOS安装程序滥用
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式
- 如果您想看到您的**公司在HackTricks中被广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
- 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
- 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFT](https://opensea.io/collection/the-peass-family)收藏品
- **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
- 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
## Pkg基本信息
macOS的**安装程序包**(也称为`.pkg`文件是macOS用于**分发软件**的文件格式。这些文件就像一个**包含软件安装和运行所需的一切**的盒子。
安装程序文件本身是一个存档,其中包含将在目标计算机上安装的**文件和目录层次结构**。它还可以包括**脚本**,用于在安装前后执行任务,如设置配置文件或清理旧版本的软件。
2023-08-03 19:12:22 +00:00
### 层次结构
<figure><img src="../../../.gitbook/assets/Pasted Graphic.png" alt="https://www.youtube.com/watch?v=iASSG0_zobQ"><figcaption></figcaption></figure>
- **Distributionxml**:自定义内容(标题,欢迎文本...)和脚本/安装检查
- **PackageInfoxml**:信息,安装要求,安装位置,要运行的脚本路径
- **材料清单bom**:要安装、更新或删除的文件列表,带有文件权限
- **PayloadCPIO存档gzip压缩**要在PackageInfo中的`install-location`中安装的文件
- **脚本CPIO存档gzip压缩**:预安装和后安装脚本以及提取到临时目录以供执行的其他资源。
2023-08-03 19:12:22 +00:00
### 解压缩
```bash
# 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文件或苹果磁盘映像是苹果macOS用于磁盘映像的文件格式。DMG文件本质上是一个**可挂载的磁盘映像**它包含自己的文件系统通常包含原始块数据有时经过压缩和加密。当您打开一个DMG文件时macOS会将其**挂载为物理磁盘**,从而允许您访问其内容。
### 层次结构
<figure><img src="../../../.gitbook/assets/image (12) (2).png" alt=""><figcaption></figcaption></figure>
DMG文件的层次结构可以根据内容而异。然而对于应用程序DMG文件通常遵循以下结构
- 顶层:这是磁盘映像的根。通常包含应用程序,可能还包含到应用程序文件夹的链接。
- 应用程序(.app这是实际的应用程序。在macOS中应用程序通常是一个包其中包含许多组成应用程序的单独文件和文件夹。
- 应用程序链接这是指向macOS应用程序文件夹的快捷方式。其目的是使您能够轻松安装应用程序。您可以将.app文件拖动到此快捷方式以安装应用程序。
## 通过pkg滥用提权
2023-08-03 19:12:22 +00:00
### 从公共目录执行
如果预安装或后安装脚本例如从**`/var/tmp/Installerutil`**执行,并且攻击者可以控制该脚本,那么他可以在执行时提升权限。或者另一个类似的例子:
<figure><img src="../../../.gitbook/assets/Pasted Graphic 5.png" alt="https://www.youtube.com/watch?v=iASSG0_zobQ"><figcaption></figcaption></figure>
### AuthorizationExecuteWithPrivileges
这是一个[公共函数](https://developer.apple.com/documentation/security/1540038-authorizationexecutewithprivileg),几个安装程序和更新程序将调用它来**以root身份执行某些操作**。该函数接受要**执行的文件的路径**作为参数,然而,如果攻击者可以**修改**此文件,他将能够**滥用**其以root身份执行以**提升权限**。
```bash
# Breakpoint in the function to check wich file is loaded
(lldb) b AuthorizationExecuteWithPrivileges
# You could also check FS events to find this missconfig
```
2023-08-03 19:12:22 +00:00
### 通过挂载执行
如果安装程序写入`/tmp/fixedname/bla/bla`,可以通过在`/tmp/fixedname`上创建一个没有所有者的**挂载**,从而在安装过程中**修改任何文件**以滥用安装过程。
一个例子是**CVE-2021-26089**,成功**覆盖了一个周期性脚本**以获取root权限执行。欲了解更多信息请查看演讲[**OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE)
## 将pkg作为恶意软件
### 空载荷
可以只生成一个带有**预安装和后安装脚本**但没有任何有效载荷的**`.pkg`**文件。
### Distribution xml中的JS
可以在软件包的**distribution xml**文件中添加**`<script>`**使**`system.run`******
<figure><img src="../../../.gitbook/assets/image (14).png" alt=""><figcaption></figcaption></figure>
2023-08-03 19:12:22 +00:00
## 参考资料
* [**DEF CON 27 - Unpacking Pkgs A Look Inside Macos Installer Packages And Common Security Flaws**](https://www.youtube.com/watch?v=iASSG0\_zobQ)
* [**OBTS v4.0: "The Wild World of macOS Installers" - Tony Lambert**](https://www.youtube.com/watch?v=Eow5uNHtmIg)