# macOS Yükleyici İstismarı {{#include ../../../banners/hacktricks-training.md}} ## Pkg Temel Bilgiler Bir macOS **yükleyici paketi** (aynı zamanda `.pkg` dosyası olarak da bilinir), macOS tarafından **yazılım dağıtımı** için kullanılan bir dosya formatıdır. Bu dosyalar, bir yazılım parçasının doğru bir şekilde kurulması ve çalışması için gereken her şeyi içeren bir **kutunun** içindeymiş gibi davranır. Paket dosyası, hedef bilgisayara yüklenecek **dosya ve dizinlerin hiyerarşisini** tutan bir arşivdir. Ayrıca, yapılandırma dosyalarını ayarlamak veya yazılımın eski sürümlerini temizlemek gibi kurulumdan önce ve sonra görevleri yerine getirmek için **scriptler** de içerebilir. ### Hiyerarşi
https://www.youtube.com/watch?v=iASSG0_zobQ
- **Dağıtım (xml)**: Özelleştirmeler (başlık, karşılama metni…) ve script/kurulum kontrolleri - **Paket Bilgisi (xml)**: Bilgi, kurulum gereksinimleri, kurulum yeri, çalıştırılacak scriptlerin yolları - **Malzeme listesi (bom)**: Yüklenmesi, güncellenmesi veya kaldırılması gereken dosyaların listesi ve dosya izinleri - **Yük (CPIO arşivi gzip sıkıştırılmış)**: Paket Bilgisi'nden `install-location`'da yüklenecek dosyalar - **Scriptler (CPIO arşivi gzip sıkıştırılmış)**: Kurulumdan önce ve sonra scriptler ve yürütme için geçici bir dizine çıkarılan daha fazla kaynak. ### Sıkıştırmayı Aç ```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 ``` Installer'ın içeriğini manuel olarak sıkıştırmadan görselleştirmek için ücretsiz bir araç olan [**Suspicious Package**](https://mothersruin.com/software/SuspiciousPackage/) kullanabilirsiniz. ## DMG Temel Bilgiler DMG dosyaları veya Apple Disk Görüntüleri, Apple'ın macOS'u tarafından disk görüntüleri için kullanılan bir dosya formatıdır. Bir DMG dosyası esasen **monte edilebilir bir disk görüntüsü** (kendi dosya sistemini içerir) olup, genellikle sıkıştırılmış ve bazen şifrelenmiş ham blok verileri içerir. Bir DMG dosyasını açtığınızda, macOS **onu fiziksel bir disk gibi monte eder**, böylece içeriğine erişebilirsiniz. > [!CAUTION] > **`.dmg`** yükleyicilerinin **çok sayıda formatı** desteklediğini ve geçmişte bazılarının zafiyetler içerdiğini ve **kernel kodu yürütme** elde etmek için kötüye kullanıldığını unutmayın. ### Hiyerarşi
Bir DMG dosyasının hiyerarşisi içeriğe bağlı olarak farklılık gösterebilir. Ancak, uygulama DMG'leri için genellikle bu yapıyı takip eder: - Üst Düzey: Bu, disk görüntüsünün köküdür. Genellikle uygulamayı ve muhtemelen Uygulamalar klasörüne bir bağlantı içerir. - Uygulama (.app): Bu, gerçek uygulamadır. macOS'ta bir uygulama genellikle uygulamayı oluşturan birçok bireysel dosya ve klasör içeren bir pakettir. - Uygulamalar Bağlantısı: Bu, macOS'taki Uygulamalar klasörüne bir kısayoldur. Bunun amacı, uygulamayı kolayca yüklemenizi sağlamaktır. .app dosyasını bu kısayola sürükleyerek uygulamayı yükleyebilirsiniz. ## pkg kötüye kullanımı ile Privesc ### Kamu dizinlerinden yürütme Eğer bir ön veya sonrası yükleme betiği örneğin **`/var/tmp/Installerutil`** dizininden yürütülüyorsa ve saldırgan bu betiği kontrol edebiliyorsa, her yürütüldüğünde ayrıcalıkları artırabilir. Veya başka bir benzer örnek:
https://www.youtube.com/watch?v=iASSG0_zobQ

https://www.youtube.com/watch?v=kCXhIYtODBg

### AuthorizationExecuteWithPrivileges Bu, birkaç yükleyici ve güncelleyici tarafından **root olarak bir şey yürütmek için** çağrılan bir [kamusal işlev](https://developer.apple.com/documentation/security/1540038-authorizationexecutewithprivileg) dir. Bu işlev, **yürütülecek dosyanın** **yolu** nu parametre olarak kabul eder, ancak bir saldırgan bu dosyayı **değiştirebilirse**, root ile yürütmesini **kötüye kullanabilir** ve **ayrıcalıkları artırabilir**. ```bash # Breakpoint in the function to check wich file is loaded (lldb) b AuthorizationExecuteWithPrivileges # You could also check FS events to find this missconfig ``` For more info check this talk: [https://www.youtube.com/watch?v=lTOItyjTTkw](https://www.youtube.com/watch?v=lTOItyjTTkw) ### Montaj ile yürütme Eğer bir yükleyici `/tmp/fixedname/bla/bla` yoluna yazıyorsa, yükleme sürecini kötüye kullanmak için **yükleme sırasında herhangi bir dosyayı değiştirmek** amacıyla `noowners` ile `/tmp/fixedname` üzerinde **bir montaj oluşturmak** mümkündür. Bunun bir örneği **CVE-2021-26089**'dur; bu, kök olarak yürütme elde etmek için **dönemsel bir betiği** **üst üste yazmayı** başarmıştır. Daha fazla bilgi için konuşmaya bakın: [**OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE) ## pkg kötü amaçlı yazılım olarak ### Boş Yük Gerçek bir yük olmadan sadece **kötü amaçlı yazılım** içeren **ön ve sonrası yükleme betikleri** ile bir **`.pkg`** dosyası oluşturmak mümkündür. ### Dağıtım xml'inde JS Paketin **dağıtım xml** dosyasına **` #myapp.pkg EOF # Buil final productbuild --distribution dist.xml --package-path myapp.pkg final-installer.pkg ``` ## Referanslar - [**DEF CON 27 - Pkg'leri Açma: Macos Yükleyici Paketlerine ve Yaygın Güvenlik Açıklarına Bir Bakış**](https://www.youtube.com/watch?v=iASSG0_zobQ) - [**OBTS v4.0: "macOS Yükleyicilerinin Vahşi Dünyası" - Tony Lambert**](https://www.youtube.com/watch?v=Eow5uNHtmIg) - [**DEF CON 27 - Pkg'leri Açma: MacOS Yükleyici Paketlerine Bir Bakış**](https://www.youtube.com/watch?v=kCXhIYtODBg) - [https://redteamrecipe.com/macos-red-teaming?utm_source=pocket_shared#heading-exploiting-installer-packages](https://redteamrecipe.com/macos-red-teaming?utm_source=pocket_shared#heading-exploiting-installer-packages) {{#include ../../../banners/hacktricks-training.md}}