macOS Auto Start
Last updated
Last updated
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Bu bölüm, Eski İyi LaunchAgents'in Ötesinde blog serisine dayanmaktadır, amacı daha fazla Otomatik Başlatma Yeri eklemek (mümkünse), hangi tekniklerin hala çalıştığını belirtmek ve gerekli izinleri belirtmektir.
Burada, sandbox bypass için yararlı başlangıç yerlerini bulabilirsiniz; bu, bir şeyi bir dosyaya yazarak ve çok yaygın bir hareket, belirli bir zaman aralığı veya genellikle bir sandbox içinde root izinlerine ihtiyaç duymadan gerçekleştirebileceğiniz bir hareket bekleyerek basitçe çalıştırmanıza olanak tanır.
/Library/LaunchAgents
Tetikleyici: Yeniden başlatma
Root gerekli
/Library/LaunchDaemons
Tetikleyici: Yeniden başlatma
Root gerekli
/System/Library/LaunchAgents
Tetikleyici: Yeniden başlatma
Root gerekli
/System/Library/LaunchDaemons
Tetikleyici: Yeniden başlatma
Root gerekli
~/Library/LaunchAgents
Tetikleyici: Yeniden giriş
~/Library/LaunchDemons
Tetikleyici: Yeniden giriş
İlginç bir gerçek olarak, launchd
'nin Mach-o bölümünde __Text.__config
içinde gömülü bir özellik listesi vardır; bu, launchd'nin başlatması gereken diğer bilinen hizmetleri içerir. Ayrıca, bu hizmetler RequireSuccess
, RequireRun
ve RebootOnSuccess
içerebilir; bu, bunların çalıştırılması ve başarıyla tamamlanması gerektiği anlamına gelir.
Elbette, kod imzalamadan dolayı değiştirilemez.
launchd
, OX S çekirdeği tarafından başlatıldığında ilk işlem ve kapatıldığında son biten işlemdir. Her zaman PID 1'e sahip olmalıdır. Bu işlem, ASEP **plist'lerinde belirtilen yapılandırmaları okuyacak ve çalıştıracaktır:
/Library/LaunchAgents
: Yönetici tarafından kurulan kullanıcı başına ajanlar
/Library/LaunchDaemons
: Yönetici tarafından kurulan sistem genelinde daemonlar
/System/Library/LaunchAgents
: Apple tarafından sağlanan kullanıcı başına ajanlar.
/System/Library/LaunchDaemons
: Apple tarafından sağlanan sistem genelinde daemonlar.
Bir kullanıcı oturum açtığında, /Users/$USER/Library/LaunchAgents
ve /Users/$USER/Library/LaunchDemons
içindeki plist'ler giriş yapan kullanıcıların izinleriyle başlatılır.
Ajanlar ve daemonlar arasındaki ana fark, ajanların kullanıcı oturum açtığında yüklenmesi ve daemonların sistem başlangıcında yüklenmesidir (herhangi bir kullanıcının sisteme erişmeden önce çalıştırılması gereken ssh gibi hizmetler vardır). Ayrıca, ajanlar GUI kullanabilirken, daemonlar arka planda çalışmalıdır.
Bir ajanın kullanıcı girişinden önce çalıştırılması gereken durumlar vardır, bunlara PreLoginAgents denir. Örneğin, bu, girişte yardımcı teknolojiyi sağlamak için faydalıdır. Ayrıca /Library/LaunchAgents
içinde bulunabilirler (örneğin, burada bir örnek).
Yeni Daemon veya Ajan yapılandırma dosyaları bir sonraki yeniden başlatmadan sonra veya launchctl load <target.plist>
kullanılarak yüklenir. O uzantıya sahip olmayan .plist dosyalarını yüklemek de mümkündür launchctl -F <file>
ile (ancak bu plist dosyaları yeniden başlatmadan sonra otomatik olarak yüklenmeyecektir).
Ayrıca boşaltmak da mümkündür launchctl unload <target.plist>
(ona işaret eden süreç sonlandırılacaktır),
Bir Ajanın veya Daemonun çalışmasını engelleyen herhangi bir şeyin (örneğin bir geçersiz kılma) olmadığından emin olmak için şunu çalıştırın: sudo launchctl load -w /System/Library/LaunchDaemos/com.apple.smdb.plist
Mevcut kullanıcı tarafından yüklenen tüm ajanları ve daemonları listeleyin:
Eğer bir plist bir kullanıcıya aitse, sistem genelinde bir daemon klasöründe olsa bile, görev kullanıcı olarak çalıştırılacaktır ve root olarak değil. Bu, bazı ayrıcalık yükseltme saldırılarını önleyebilir.
launchd
, kernel'den başlatılan ilk kullanıcı modu sürecidir. Sürecin başlaması başarılı olmalı ve çıkmamalı veya çökmemelidir. Hatta bazı öldürme sinyallerine karşı korunmaktadır.
launchd
'nin yapacağı ilk şeylerden biri, aşağıdaki gibi tüm daemon'ları başlatmak olacaktır:
Zamanlayıcı daemon'ları:
atd (com.apple.atrun.plist
): 30 dakika StartInterval
'a sahiptir
crond (com.apple.systemstats.daily.plist
): 00:15'te başlamak için StartCalendarInterval
'a sahiptir
Ağ daemon'ları:
org.cups.cups-lpd
: TCP'de (SockType: stream
) SockServiceName: printer
ile dinler
SockServiceName ya bir port ya da /etc/services
'den bir hizmet olmalıdır
com.apple.xscertd.plist
: 1640 portunda TCP'de dinler
Belirli bir yol değiştiğinde çalıştırılan yol daemon'ları:
com.apple.postfix.master
: /etc/postfix/aliases
yolunu kontrol eder
IOKit bildirim daemon'ları:
com.apple.xartstorageremoted
: "com.apple.iokit.matching" => { "com.apple.device-attach" => { "IOMatchLaunchStream" => 1 ...
Mach portu:
com.apple.xscertd-helper.plist
: MachServices
girişinde com.apple.xscertd.helper
adını belirtmektedir
UserEventAgent:
Bu, önceki olandan farklıdır. launchd'yi belirli bir olaya yanıt olarak uygulamaları başlatması için kullanır. Ancak, bu durumda, ilgili ana ikili dosya launchd
değil, /usr/libexec/UserEventAgent
'dir. /System/Library/UserEventPlugins/ dizininden SIP kısıtlı klasöründen eklentileri yükler; her eklenti, XPCEventModuleInitializer
anahtarında veya daha eski eklentiler durumunda, Info.plist
'inin FB86416D-6164-2070-726F-70735C216EC0
anahtarındaki CFPluginFactories
sözlüğünde başlatıcısını belirtir.
Writeup: https://theevilbit.github.io/beyond/beyond_0001/ Writeup (xterm): https://theevilbit.github.io/beyond/beyond_0018/
Sandbox'ı atlamak için yararlıdır: ✅
TCC Atlatma: ✅
Ancak, bu dosyaları yükleyen bir shell'i çalıştıran bir TCC atlatma uygulaması bulmanız gerekiyor
~/.zshrc
, ~/.zlogin
, ~/.zshenv.zwc
, ~/.zshenv
, ~/.zprofile
Tetikleyici: zsh ile bir terminal aç
/etc/zshenv
, /etc/zprofile
, /etc/zshrc
, /etc/zlogin
Tetikleyici: zsh ile bir terminal aç
Root gereklidir
~/.zlogout
Tetikleyici: zsh ile bir terminalden çık
/etc/zlogout
Tetikleyici: zsh ile bir terminalden çık
Root gereklidir
Potansiyel olarak daha fazlası: man zsh
~/.bashrc
Tetikleyici: bash ile bir terminal aç
/etc/profile
(çalışmadı)
~/.profile
(çalışmadı)
~/.xinitrc
, ~/.xserverrc
, /opt/X11/etc/X11/xinit/xinitrc.d/
Tetikleyici: xterm ile tetiklenmesi bekleniyor, ancak kurulu değil ve kurulduktan sonra bile bu hata veriliyor: xterm: DISPLAY is not set
zsh
veya bash
gibi bir shell ortamı başlatıldığında, belirli başlangıç dosyaları çalıştırılır. macOS şu anda varsayılan shell olarak /bin/zsh
kullanmaktadır. Bu shell, Terminal uygulaması başlatıldığında veya bir cihaza SSH ile erişildiğinde otomatik olarak erişilir. bash
ve sh
de macOS'ta mevcut olsa da, kullanılmak için açıkça çağrılmaları gerekir.
man zsh
ile okuyabileceğimiz zsh'nin man sayfası, başlangıç dosyaları hakkında uzun bir açıklama içermektedir.
Belirtilen istismar yapılandırması ve oturumu kapatıp açma veya hatta yeniden başlatma benim için uygulamayı çalıştırmadı. (Uygulama çalıştırılmıyordu, belki bu eylemler gerçekleştirilirken çalışıyor olması gerekiyor)
Yazım: https://theevilbit.github.io/beyond/beyond_0021/
~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist
Tetikleyici: Uygulamaları yeniden açmak için yeniden başlatma
Yeniden açılacak tüm uygulamalar plist ~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist
içinde yer almaktadır.
Bu nedenle, yeniden açılan uygulamaların kendi uygulamanızı başlatmasını sağlamak için, uygulamanızı listeye eklemeniz yeterlidir.
UUID, o dizini listeleyerek veya ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}'
komutuyla bulunabilir.
Yeniden açılacak uygulamaları kontrol etmek için şunu yapabilirsiniz:
Bu listeye bir uygulama eklemek için şunu kullanabilirsiniz:
Sandbox'ı atlatmak için yararlıdır: ✅
TCC atlatma: ✅
Terminal, kullanıcının FDA izinlerine sahip olmasını sağlar
~/Library/Preferences/com.apple.Terminal.plist
Tetikleyici: Terminal'i aç
~/Library/Preferences
içinde, Kullanıcı'nın Uygulamalarındaki tercihleri saklanır. Bu tercihlerden bazıları diğer uygulamaları/scriptleri çalıştırmak için bir yapılandırma içerebilir.
Örneğin, Terminal bir komutu Başlangıçta çalıştırabilir:
Bu yapılandırma ~/Library/Preferences/com.apple.Terminal.plist
dosyasında şu şekilde yansıtılır:
Yani, sistemdeki terminalin tercihleri plist'i üzerine yazılabilirse, open
işlevi kullanılarak terminal açılabilir ve o komut çalıştırılacaktır.
Bunu cli üzerinden ekleyebilirsiniz:
Sandbox'ı atlatmak için yararlıdır: ✅
TCC atlatma: ✅
Terminal, kullanıcının FDA izinlerine sahip olması için kullanılır
Her yerde
Tetikleyici: Terminal'i aç
Eğer bir .terminal
scripti oluşturursanız ve açarsanız, Terminal uygulaması orada belirtilen komutları yürütmek için otomatik olarak çağrılacaktır. Eğer Terminal uygulaması bazı özel ayrıcalıklara sahipse (örneğin TCC), komutunuz bu özel ayrıcalıklarla çalıştırılacaktır.
Bunu deneyin:
You could also use the extensions .command
, .tool
, with regular shell scripts content and they will be also opened by Terminal.
Eğer terminalin Tam Disk Erişimi varsa, bu işlemi tamamlayabilecektir (çalıştırılan komutun bir terminal penceresinde görünür olacağını unutmayın).
Writeup: https://theevilbit.github.io/beyond/beyond_0013/ Writeup: https://posts.specterops.io/audio-unit-plug-ins-896d3434a882
/Library/Audio/Plug-Ins/HAL
Root gerekli
Tetikleyici: coreaudiod'u veya bilgisayarı yeniden başlat
/Library/Audio/Plug-ins/Components
Root gerekli
Tetikleyici: coreaudiod'u veya bilgisayarı yeniden başlat
~/Library/Audio/Plug-ins/Components
Tetikleyici: coreaudiod'u veya bilgisayarı yeniden başlat
/System/Library/Components
Root gerekli
Tetikleyici: coreaudiod'u veya bilgisayarı yeniden başlat
Önceki yazılara göre, bazı ses eklentilerini derlemek ve yüklemek mümkündür.
Writeup: https://theevilbit.github.io/beyond/beyond_0028/
/System/Library/QuickLook
/Library/QuickLook
~/Library/QuickLook
/Applications/AppNameHere/Contents/Library/QuickLook/
~/Applications/AppNameHere/Contents/Library/QuickLook/
QuickLook eklentileri, bir dosyanın önizlemesini tetiklediğinizde (Finder'da dosya seçili iken boşluk tuşuna basarak) ve o dosya türünü destekleyen bir eklenti yüklüyse çalıştırılabilir.
Kendi QuickLook eklentinizi derlemek, onu önceki konumlardan birine yerleştirmek ve ardından desteklenen bir dosyaya gidip tetiklemek için boşluk tuşuna basmak mümkündür.
Bu benim için çalışmadı, ne kullanıcı Giriş Kancası ne de root Çıkış Kancası ile
Writeup: https://theevilbit.github.io/beyond/beyond_0022/
defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh
gibi bir şeyi çalıştırabilmeniz gerekiyor
~/Library/Preferences/com.apple.loginwindow.plist
içinde bulunur
Kullanımdan kaldırılmıştır ancak bir kullanıcı giriş yaptığında komutları çalıştırmak için kullanılabilir.
Bu ayar /Users/$USER/Library/Preferences/com.apple.loginwindow.plist
içinde saklanır.
Bunu silmek için:
The root user one is stored in /private/var/root/Library/Preferences/com.apple.loginwindow.plist
Burada, sandbox atlama için yararlı başlangıç yerlerini bulabilirsiniz; bu, bir şeyi bir dosyaya yazarak ve belirli programların yüklü olması, "olağandışı" kullanıcı eylemleri veya ortamlar gibi çok yaygın olmayan koşulları bekleyerek basitçe çalıştırmanıza olanak tanır.
Yazı: https://theevilbit.github.io/beyond/beyond_0004/
Sandbox'ı atlamak için yararlıdır: ✅
Ancak, crontab
ikili dosyasını çalıştırabilmeniz gerekir
Ya da root olmalısınız
TCC atlama: 🔴
/usr/lib/cron/tabs/
, /private/var/at/tabs
, /private/var/at/jobs
, /etc/periodic/
Doğrudan yazma erişimi için root gereklidir. crontab <file>
çalıştırabiliyorsanız root gerekmez
Tetikleyici: Cron işine bağlıdır
Geçerli kullanıcı için cron işlerini listeleyin:
Kullanıcıların tüm cron görevlerini /usr/lib/cron/tabs/
ve /var/at/tabs/
içinde görebilirsiniz (root gerektirir).
MacOS'ta belirli bir sıklıkla scriptleri çalıştıran birkaç klasör bulunmaktadır:
Orada düzenli cron görevlerini, at görevlerini (çok fazla kullanılmayan) ve periyodik görevleri (esas olarak geçici dosyaları temizlemek için kullanılan) bulabilirsiniz. Günlük periyodik görevler, örneğin periodic daily
ile çalıştırılabilir.
Bir kullanıcı cronjob'unu programatik olarak eklemek için şunu kullanabilirsiniz:
Writeup: https://theevilbit.github.io/beyond/beyond_0002/
Sandbox'ı atlatmak için yararlıdır: ✅
TCC atlatma: ✅
iTerm2, TCC izinleri verilmiş olarak kullanılıyordu
~/Library/Application Support/iTerm2/Scripts/AutoLaunch
Tetikleyici: iTerm'i aç
~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt
Tetikleyici: iTerm'i aç
~/Library/Preferences/com.googlecode.iterm2.plist
Tetikleyici: iTerm'i aç
~/Library/Application Support/iTerm2/Scripts/AutoLaunch
içinde saklanan betikler çalıştırılacaktır. Örneğin:
veya:
~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt
betiği de çalıştırılacaktır:
iTerm2 tercihleri ~/Library/Preferences/com.googlecode.iterm2.plist
içinde çalıştırılacak bir komut belirtebilir iTerm2 terminali açıldığında.
Bu ayar iTerm2 ayarlarında yapılandırılabilir:
Ve komut tercihlerde yansıtılır:
Türkçe çeviri:
Komutu çalıştırmak için ayarlayabilirsiniz:
iTerm2 ayarlarını kötüye kullanmanın başka yollarının olma olasılığı yüksektir.
Yazı: https://theevilbit.github.io/beyond/beyond_0007/
Sandbox'ı atlatmak için kullanışlı: ✅
Ancak xbar'ın kurulu olması gerekir
TCC atlatma: ✅
Erişilebilirlik izinleri talep eder
~/Library/Application\ Support/xbar/plugins/
Tetikleyici: xbar çalıştırıldığında
Eğer popüler program xbar kuruluysa, ~/Library/Application\ Support/xbar/plugins/
dizininde bir shell script yazmak mümkündür; bu script xbar başlatıldığında çalıştırılacaktır:
Writeup: https://theevilbit.github.io/beyond/beyond_0008/
Sandbox'ı atlatmak için kullanışlı: ✅
Ancak Hammerspoon'un kurulmuş olması gerekir
TCC atlatma: ✅
Erişim izinleri talep eder
~/.hammerspoon/init.lua
Trigger: Hammerspoon çalıştırıldığında
Hammerspoon, macOS için bir otomasyon platformu olarak hizmet vermekte olup, işlemleri için LUA betik dili kullanmaktadır. Özellikle, tam AppleScript kodunun entegrasyonunu ve kabuk betiklerinin yürütülmesini destekleyerek betik yeteneklerini önemli ölçüde artırmaktadır.
Uygulama, tek bir dosya olan ~/.hammerspoon/init.lua
'yı arar ve başlatıldığında betik yürütülecektir.
Sandbox'ı atlatmak için yararlıdır: ✅
Ancak BetterTouchTool'un kurulmuş olması gerekir
TCC atlatma: ✅
Otomasyon-Kısayolları ve Erişilebilirlik izinleri talep eder
~/Library/Application Support/BetterTouchTool/*
Bu araç, bazı kısayollar basıldığında çalıştırılacak uygulamaları veya betikleri belirtmeye olanak tanır. Bir saldırgan, veritabanında çalıştırılacak kendi kısayolunu ve eylemini yapılandırabilir ve rastgele kod çalıştırabilir (bir kısayol, sadece bir tuşa basmak olabilir).
Sandbox'ı atlatmak için yararlıdır: ✅
Ancak Alfred'in kurulmuş olması gerekir
TCC atlatma: ✅
Otomasyon, Erişilebilirlik ve hatta Tam Disk erişim izinleri talep eder
???
Belirli koşullar sağlandığında kod çalıştırabilen iş akışları oluşturmayı sağlar. Potansiyel olarak, bir saldırgan bir iş akışı dosyası oluşturup Alfred'in bunu yüklemesini sağlayabilir (iş akışlarını kullanmak için premium sürüm satın almak gerekir).
Yazı: https://theevilbit.github.io/beyond/beyond_0006/
Sandbox'ı atlatmak için yararlıdır: ✅
Ancak ssh'nin etkinleştirilmesi ve kullanılması gerekir
TCC atlatma: ✅
SSH, FDA erişimine sahip olmalıdır
~/.ssh/rc
Tetikleyici: ssh ile giriş
/etc/ssh/sshrc
Root gereklidir
Tetikleyici: ssh ile giriş
ssh'yi açmak için Tam Disk Erişimi gereklidir:
Varsayılan olarak, /etc/ssh/sshd_config
dosyasında PermitUserRC no
yoksa, bir kullanıcı SSH ile giriş yaptığında /etc/ssh/sshrc
ve ~/.ssh/rc
dosyaları çalıştırılacaktır.
Yazı: https://theevilbit.github.io/beyond/beyond_0003/
Sandbox'ı atlatmak için yararlıdır: ✅
Ancak osascript
'i argümanlarla çalıştırmanız gerekir
TCC atlatma: 🔴
~/Library/Application Support/com.apple.backgroundtaskmanagementagent
Tetikleyici: Giriş
Sömürü yükü osascript
çağrısı ile saklanır
/var/db/com.apple.xpc.launchd/loginitems.501.plist
Tetikleyici: Giriş
Root gereklidir
Sistem Tercihleri -> Kullanıcılar & Gruplar -> Giriş Öğeleri bölümünde kullanıcı giriş yaptığında çalıştırılacak öğeleri bulabilirsiniz. Onları listelemek, eklemek ve komut satırından kaldırmak mümkündür:
Bu öğeler ~/Library/Application Support/com.apple.backgroundtaskmanagementagent
dosyasında saklanır.
Giriş öğeleri ayrıca /var/db/com.apple.xpc.launchd/loginitems.501.plist
dosyasında yapılandırmayı saklayacak olan SMLoginItemSetEnabled API'si kullanılarak da belirtilebilir.
(Giriş Öğeleri hakkında önceki bölümü kontrol edin, bu bir uzantıdır)
Bir ZIP dosyasını Giriş Öğesi olarak saklarsanız, Archive Utility
bunu açacaktır ve eğer zip örneğin ~/Library
içinde saklanmışsa ve LaunchAgents/file.plist
adlı bir klasör içeriyorsa, bu klasör oluşturulacaktır (varsayılan olarak yoktur) ve plist eklenecektir, böylece kullanıcı bir sonraki oturum açtığında, plist'te belirtilen arka kapı çalıştırılacaktır.
Diğer bir seçenek, kullanıcı HOME dizininde .bash_profile
ve .zshenv
dosyalarını oluşturmaktır, böylece LaunchAgents klasörü zaten mevcutsa bu teknik yine de çalışacaktır.
Yazı: https://theevilbit.github.io/beyond/beyond_0014/
Sandbox'ı atlamak için faydalı: ✅
Ancak at
komutunu çalıştırmanız ve etkinleştirilmiş olması gerekir.
TCC atlatma: 🔴
at
komutunu çalıştırmanız ve etkinleştirilmiş olması gerekir.
at
görevleri, belirli zamanlarda bir kerelik görevleri planlamak için tasarlanmıştır. Cron görevlerinin aksine, at
görevleri yürütüldükten sonra otomatik olarak kaldırılır. Bu görevlerin sistem yeniden başlatmalarında kalıcı olduğunu belirtmek önemlidir, bu da belirli koşullar altında potansiyel güvenlik endişeleri olarak işaretlenmelerine neden olur.
Varsayılan olarak devre dışıdırlar ancak root kullanıcısı bunları etkinleştirebilir:
Bu, 1 saat içinde bir dosya oluşturacaktır:
atq
kullanarak iş kuyruğunu kontrol edin:
Yukarıda iki planlanmış iş görebiliriz. İşin detaylarını at -c JOBNUMBER
komutunu kullanarak yazdırabiliriz.
Eğer AT görevleri etkinleştirilmemişse, oluşturulan görevler çalıştırılmayacaktır.
iş dosyaları /private/var/at/jobs/
konumunda bulunabilir.
The filename contains the queue, the job number, and the time it’s scheduled to run. For example let’s take a loot at a0001a019bdcd2
.
a
- bu kuyruktur
0001a
- iş numarası hex formatında, 0x1a = 26
019bdcd2
- zaman hex formatında. Epoch'tan itibaren geçen dakikaları temsil eder. 0x019bdcd2
ondalık olarak 26991826
'dır. Bunu 60 ile çarptığımızda 1619509560
elde ederiz, bu da GMT: 2021. Nisan 27., Salı 7:46:00
'dır.
Eğer iş dosyasını yazdırırsak, at -c
kullanarak elde ettiğimiz aynı bilgileri içerdiğini buluruz.
Writeup: https://theevilbit.github.io/beyond/beyond_0024/ Writeup: https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d
Sandbox'ı atlatmak için faydalı: ✅
Ancak, Folder Actions'ı yapılandırmak için System Events
ile iletişim kurmak üzere argümanlarla osascript
çağırabilmeniz gerekir.
TCC atlatma: 🟠
Masaüstü, Belgeler ve İndirilenler gibi bazı temel TCC izinlerine sahiptir.
/Library/Scripts/Folder Action Scripts
Root gereklidir
Tetikleyici: Belirtilen klasöre erişim
~/Library/Scripts/Folder Action Scripts
Tetikleyici: Belirtilen klasöre erişim
Folder Actions, bir klasördeki değişiklikler (öğeleri ekleme, kaldırma veya klasör penceresini açma veya boyutlandırma gibi diğer eylemler) tarafından otomatik olarak tetiklenen betiklerdir. Bu eylemler çeşitli görevler için kullanılabilir ve Finder UI veya terminal komutları gibi farklı yollarla tetiklenebilir.
Folder Actions'ı ayarlamak için şu seçenekleriniz vardır:
Automator ile bir Folder Action iş akışı oluşturmak ve bunu bir hizmet olarak yüklemek.
Bir klasörün bağlam menüsündeki Folder Actions Ayarı aracılığıyla bir betiği manuel olarak eklemek.
System Events.app
'e Apple Event mesajları göndermek için OSAScript kullanarak programatik olarak bir Folder Action ayarlamak.
Bu yöntem, eylemi sisteme entegre etmek için özellikle faydalıdır ve bir düzeyde kalıcılık sunar.
Aşağıdaki betik, bir Folder Action tarafından yürütülebilecek bir örnektir:
Folder Actions tarafından kullanılabilir hale getirmek için yukarıdaki script'i şu şekilde derleyin:
Aşağıdaki script çalıştırılarak Klasör Eylemleri ayarlayın. Bu script, Klasör Eylemlerini genel olarak etkinleştirecek ve daha önce derlenmiş scripti Masaüstü klasörüne özel olarak bağlayacaktır.
Kurulum betiğini şu şekilde çalıştırın:
Bu, bu kalıcılığı GUI aracılığıyla uygulamanın yoludur:
Bu, çalıştırılacak olan betiktir:
Bunu ile derleyin: osacompile -l JavaScript -o folder.scpt source.js
Bunu taşıyın:
Sonra, Folder Actions Setup
uygulamasını açın, izlemek istediğiniz klasörü seçin ve sizin durumunuzda folder.scpt
'yi seçin (benim durumumda buna output2.scp dedim):
Artık, bu klasörü Finder ile açtığınızda, scriptiniz çalıştırılacaktır.
Bu yapılandırma, base64 formatında ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist
konumundaki plist dosyasında saklandı.
Şimdi, bu kalıcılığı GUI erişimi olmadan hazırlamaya çalışalım:
~/Library/Preferences/com.apple.FolderActionsDispatcher.plist
dosyasını yedeklemek için /tmp
'ye kopyalayın:
cp ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist /tmp
Yeni ayarladığınız Klasör Eylemlerini kaldırın:
Artık boş bir ortamımız var
Yedek dosyasını kopyalayın: cp /tmp/com.apple.FolderActionsDispatcher.plist ~/Library/Preferences/
Bu yapılandırmayı kullanmak için Folder Actions Setup.app'ı açın: open "/System/Library/CoreServices/Applications/Folder Actions Setup.app/"
Ve bu benim için çalışmadı, ama bunlar yazımın talimatları:(
Yazım: https://theevilbit.github.io/beyond/beyond_0027/
Sandbox'ı atlatmak için faydalı: ✅
Ama sistem içinde kötü niyetli bir uygulama kurmuş olmanız gerekiyor
TCC atlatma: 🔴
~/Library/Preferences/com.apple.dock.plist
Tetikleyici: Kullanıcı dock içindeki uygulamaya tıkladığında
Dock'ta görünen tüm uygulamalar plist içinde belirtilmiştir: ~/Library/Preferences/com.apple.dock.plist
Sadece bir uygulama eklemek mümkündür:
Bazı sosyal mühendislik teknikleri kullanarak, dock içinde örneğin Google Chrome'u taklit edebilir ve aslında kendi scriptinizi çalıştırabilirsiniz:
Writeup: https://theevilbit.github.io/beyond/beyond_0017
Sandbox'ı atlatmak için yararlıdır: 🟠
Çok spesifik bir eylem gerçekleşmelidir
Başka bir sandbox'ta sonlanacaksınız
TCC atlatma: 🔴
/Library/ColorPickers
Root gereklidir
Tetikleyici: Renk seçiciyi kullanın
~/Library/ColorPickers
Tetikleyici: Renk seçiciyi kullanın
Kendi kodunuzla bir renk seçici paketi derleyin (örneğin bunu kullanabilirsiniz) ve bir yapıcı ekleyin (örneğin Ekran Koruyucu bölümündeki gibi) ve paketi ~/Library/ColorPickers
dizinine kopyalayın.
Sonra, renk seçici tetiklendiğinde, sizin kodunuz da tetiklenecektir.
Kütüphanenizi yükleyen ikilinin çok kısıtlayıcı bir sandbox'ı olduğunu unutmayın: /System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/LegacyExternalColorPickerService-x86_64.xpc/Contents/MacOS/LegacyExternalColorPickerService-x86_64
Yazı: https://theevilbit.github.io/beyond/beyond_0026/ Yazı: https://objective-see.org/blog/blog_0x11.html
Sandbox'ı atlatmak için yararlı: Hayır, çünkü kendi uygulamanızı çalıştırmanız gerekiyor
TCC atlatma: ???
Belirli bir uygulama
Bir Finder Sync Eklentisi ile bir uygulama örneği burada bulunabilir.
Uygulamalar Finder Sync Eklentileri
içerebilir. Bu eklenti, çalıştırılacak bir uygulamanın içine girecektir. Ayrıca, eklentinin kodunu çalıştırabilmesi için geçerli bir Apple geliştirici sertifikası ile imzalanması gerekir, sandbox'lanmış olmalıdır (rahatlatılmış istisnalar eklenebilir) ve bir şeyle kaydedilmelidir:
Writeup: https://theevilbit.github.io/beyond/beyond_0016/ Writeup: https://posts.specterops.io/saving-your-access-d562bf5bf90b
/System/Library/Screen Savers
Root gereklidir
Tetikleyici: Ekran koruyucuyu seçin
/Library/Screen Savers
Root gereklidir
Tetikleyici: Ekran koruyucuyu seçin
~/Library/Screen Savers
Tetikleyici: Ekran koruyucuyu seçin
Xcode'da yeni bir proje oluşturun ve yeni bir Ekran Koruyucu oluşturmak için şablonu seçin. Ardından, buna kodunuzu ekleyin, örneğin log oluşturmak için aşağıdaki kodu kullanın.
Derleyin ve .saver
paketini ~/Library/Screen Savers
dizinine kopyalayın. Ardından, Ekran Koruyucu GUI'sini açın ve üzerine tıkladığınızda, birçok log oluşturması gerekir:
Bu kodu yükleyen ikilinin yetkilendirmeleri içinde com.apple.security.app-sandbox
bulunduğundan, ortak uygulama kumandasının içinde olacaksınız.
Saver kodu:
writeup: https://theevilbit.github.io/beyond/beyond_0011/
Sandbox'ı atlatmak için yararlıdır: 🟠
Ama bir uygulama sandbox'ında kalacaksınız
TCC atlatma: 🔴
Sandbox çok sınırlı görünüyor
~/Library/Spotlight/
Tetikleyici: Spotlight eklentisi tarafından yönetilen bir uzantıya sahip yeni bir dosya oluşturulur.
/Library/Spotlight/
Tetikleyici: Spotlight eklentisi tarafından yönetilen bir uzantıya sahip yeni bir dosya oluşturulur.
Root gerekli
/System/Library/Spotlight/
Tetikleyici: Spotlight eklentisi tarafından yönetilen bir uzantıya sahip yeni bir dosya oluşturulur.
Root gerekli
Some.app/Contents/Library/Spotlight/
Tetikleyici: Spotlight eklentisi tarafından yönetilen bir uzantıya sahip yeni bir dosya oluşturulur.
Yeni uygulama gerekli
Spotlight, kullanıcıların bilgisayarlarındaki verilere hızlı ve kapsamlı erişim sağlaması için tasarlanmış macOS'un yerleşik arama özelliğidir. Bu hızlı arama yeteneğini kolaylaştırmak için, Spotlight özel bir veritabanı tutar ve çoğu dosyayı ayrıştırarak bir indeks oluşturur, böylece dosya adları ve içerikleri üzerinden hızlı aramalar yapılmasını sağlar.
Spotlight'ın temel mekanizması, 'metadata server' anlamına gelen 'mds' adlı merkezi bir süreç içerir. Bu süreç, tüm Spotlight hizmetini yönetir. Bununla birlikte, farklı dosya türlerini indeksleme gibi çeşitli bakım görevlerini yerine getiren birden fazla 'mdworker' daemon'u vardır (ps -ef | grep mdworker
). Bu görevler, Spotlight'ın çeşitli dosya formatları arasında içerikleri anlamasını ve indekslemesini sağlayan Spotlight importer eklentileri veya ".mdimporter paketleri aracılığıyla mümkün hale gelir.
Eklentiler veya .mdimporter
paketleri daha önce belirtilen yerlerde bulunur ve yeni bir paket ortaya çıktığında, bir dakika içinde yüklenir (herhangi bir hizmetin yeniden başlatılmasına gerek yoktur). Bu paketler, hangi dosya türü ve uzantıları yönetebileceklerini belirtmelidir, bu şekilde, belirtilen uzantıya sahip yeni bir dosya oluşturulduğunda Spotlight bunları kullanacaktır.
Tüm yüklü mdimporters
'ı bulmak mümkündür:
Ve örneğin /Library/Spotlight/iBooksAuthor.mdimporter bu tür dosyaları (diğerleri arasında .iba
ve .book
uzantıları) ayrıştırmak için kullanılır:
Diğer mdimporter
'ların Plist'ini kontrol ederseniz, UTTypeConformsTo
girişini bulamayabilirsiniz. Bunun nedeni, bunun yerleşik bir Uniform Type Identifiers (UTI) olması ve uzantıları belirtmesine gerek olmamasıdır.
Ayrıca, sistem varsayılan eklentileri her zaman önceliklidir, bu nedenle bir saldırgan yalnızca Apple'ın kendi mdimporters
tarafından başka türlü dizinlenmemiş dosyalara erişebilir.
Kendi importer'ınızı oluşturmak için bu projeyle başlayabilirsiniz: https://github.com/megrimm/pd-spotlight-importer ve ardından ismi, CFBundleDocumentTypes
'ı değiştirip desteklemek istediğiniz uzantıyı desteklemesi için UTImportedTypeDeclarations
ekleyin ve bunları schema.xml
'de yansıtın.
Sonra GetMetadataForFile
fonksiyonunun kodunu, işlenmiş uzantıya sahip bir dosya oluşturulduğunda yüklemenizi çalıştıracak şekilde değiştirin.
Son olarak, yeni .mdimporter
'ınızı oluşturun ve kopyalayın ve önceki konumlardan birine yerleştirin, logları izleyerek veya mdimport -L.
kontrol ederek yüklendiğini kontrol edebilirsiniz.
Artık bunun çalıştığı görünmüyor.
Yazı: https://theevilbit.github.io/beyond/beyond_0009/
/System/Library/PreferencePanes
/Library/PreferencePanes
~/Library/PreferencePanes
Artık bunun çalıştığı görünmüyor.
Burada, root olarak bir dosyaya yazarak basitçe bir şey çalıştırmanıza olanak tanıyan sandbox atlatma için yararlı başlangıç konumlarını bulabilirsiniz ve/veya diğer garip koşulları gerektirir.
Yazı: https://theevilbit.github.io/beyond/beyond_0019/
/etc/periodic/daily
, /etc/periodic/weekly
, /etc/periodic/monthly
, /usr/local/etc/periodic
Root gereklidir
Tetikleyici: Zamanı geldiğinde
/etc/daily.local
, /etc/weekly.local
veya /etc/monthly.local
Root gereklidir
Tetikleyici: Zamanı geldiğinde
Periyodik betikler (/etc/periodic
) /System/Library/LaunchDaemons/com.apple.periodic*
içinde yapılandırılan başlatma daemon'ları nedeniyle çalıştırılır. /etc/periodic/
içinde saklanan betiklerin dosya sahibi olarak çalıştırıldığını unutmayın, bu nedenle bu potansiyel bir ayrıcalık yükseltmesi için işe yaramayacaktır.
/etc/defaults/periodic.conf
dosyasında belirtilen diğer periyodik betikler de çalıştırılacaktır:
Eğer /etc/daily.local
, /etc/weekly.local
veya /etc/monthly.local
dosyalarından herhangi birini yazmayı başarırsanız, bu dosya bir şekilde çalıştırılacaktır.
Periyodik scriptin scriptin sahibi olarak çalıştırılacağını unutmayın. Yani eğer scriptin sahibi bir normal kullanıcıysa, bu script o kullanıcı olarak çalıştırılacaktır (bu, ayrıcalık yükseltme saldırılarını önleyebilir).
Yazı: Linux Hacktricks PAM Yazı: https://theevilbit.github.io/beyond/beyond_0005/
Her zaman root gereklidir
PAM, kalıcılık ve kötü amaçlı yazılımlara daha fazla odaklandığı için, bu blog detaylı bir açıklama vermeyecek, bu tekniği daha iyi anlamak için yazıları okuyun.
PAM modüllerini kontrol etmek için:
Bir kalıcılık/ayrım yükseltme tekniği PAM'ı istismar etmek, /etc/pam.d/sudo modülünü değiştirmek kadar kolaydır; başına şu satırı ekleyerek:
Böyle bir şeye benziyor:
Ve bu nedenle sudo
kullanma girişimi çalışacaktır.
Bu dizinin TCC tarafından korunduğunu unutmayın, bu nedenle kullanıcının erişim izni istemesi olasıdır.
Başka güzel bir örnek ise su'dur, burada PAM modüllerine parametreler vermenin de mümkün olduğunu görebilirsiniz (ve bu dosyayı da arka kapı ile değiştirebilirsiniz):
Writeup: https://theevilbit.github.io/beyond/beyond_0028/ Writeup: https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65
Sandbox'ı atlatmak için yararlıdır: 🟠
Ancak root olmanız ve ek yapılandırmalar yapmanız gerekir
TCC atlatma: ???
/Library/Security/SecurityAgentPlugins/
Root gereklidir
Eklentiyi kullanmak için yetkilendirme veritabanının da yapılandırılması gerekir
Kullanıcı giriş yaptığında çalışacak bir yetkilendirme eklentisi oluşturabilirsiniz. Bu eklentilerden birini nasıl oluşturacağınız hakkında daha fazla bilgi için önceki yazılara göz atın (ve dikkatli olun, kötü yazılmış bir eklenti sizi kilitleyebilir ve mac'inizi kurtarma modundan temizlemeniz gerekebilir).
Taşı paketi yüklenecek konuma:
Son olarak, bu Eklentiyi yüklemek için kuralı ekleyin:
evaluate-mechanisms
yetkilendirme çerçevesine harici bir yetkilendirme mekanizmasını çağırması gerektiğini söyleyecektir. Ayrıca, privileged
bunun root tarafından çalıştırılmasını sağlayacaktır.
Bunu tetiklemek için:
Ve ardından staff grubunun sudo erişimine sahip olması gerekir (doğrulamak için /etc/sudoers
dosyasını okuyun).
Yazı: https://theevilbit.github.io/beyond/beyond_0030/
Sandbox'ı atlatmak için yararlıdır: 🟠
Ancak root olmanız ve kullanıcının man kullanması gerekir
TCC atlatma: 🔴
/private/etc/man.conf
Root gereklidir
/private/etc/man.conf
: Man kullanıldığında
Yapılandırma dosyası /private/etc/man.conf
, man belgelerini açarken kullanılacak ikili/dosya yolunu belirtir. Bu nedenle, yürütülebilir dosyanın yolu değiştirilerek, kullanıcı man ile bazı belgeleri okuduğunda bir arka kapının çalıştırılması sağlanabilir.
Örneğin /private/etc/man.conf
içinde ayarlayın:
Ve ardından /tmp/view
oluşturun:
Yazı: https://theevilbit.github.io/beyond/beyond_0023/
Sandbox'ı atlatmak için yararlıdır: 🟠
Ancak root olmanız ve apache'nin çalışıyor olması gerekir
TCC atlatma: 🔴
Httpd'nin yetkileri yoktur
/etc/apache2/httpd.conf
Root gereklidir
Tetikleyici: Apache2 başlatıldığında
/etc/apache2/httpd.conf
dosyasında bir modül yüklemek için aşağıdaki gibi bir satır ekleyebilirsiniz:
Bu şekilde derlenmiş modülleriniz Apache tarafından yüklenecektir. Tek gereken, ya geçerli bir Apple sertifikası ile imzalamanız, ya da sistemde yeni bir güvenilir sertifika eklemeniz ve bunu imzalamanızdır.
Sonra, gerekirse, sunucunun başlatılmasını sağlamak için şunu çalıştırabilirsiniz:
Dylb için kod örneği:
Writeup: https://theevilbit.github.io/beyond/beyond_0031/
Sandbox'ı atlatmak için yararlıdır: 🟠
Ancak root olmanız, auditd'nin çalışıyor olması ve bir uyarı oluşturmanız gerekir
TCC atlatma: 🔴
/etc/security/audit_warn
Root gereklidir
Tetikleyici: auditd bir uyarı tespit ettiğinde
auditd her uyarı tespit ettiğinde /etc/security/audit_warn
dosyası çalıştırılır. Bu nedenle, yükünüzü buna ekleyebilirsiniz.
You could force a warning with sudo audit -n
.
Bu artık kullanılmıyor, bu nedenle bu dizinlerde hiçbir şey bulunmamalıdır.
StartupItem, ya /Library/StartupItems/
ya da /System/Library/StartupItems/
dizininde konumlandırılması gereken bir dizindir. Bu dizin oluşturulduktan sonra, iki belirli dosyayı içermelidir:
Bir rc script: Başlangıçta çalıştırılan bir shell script.
Özellikle StartupParameters.plist
adı verilen bir plist dosyası, çeşitli yapılandırma ayarlarını içerir.
Başlangıç sürecinin bunları tanıyıp kullanabilmesi için hem rc script hem de StartupParameters.plist
dosyasının StartupItem dizini içinde doğru bir şekilde yerleştirildiğinden emin olun.
Bu bileşeni macOS'ümde bulamıyorum, bu yüzden daha fazla bilgi için yazıya bakın
Yazı: https://theevilbit.github.io/beyond/beyond_0023/
Apple tarafından tanıtılan emond, gelişmemiş veya muhtemelen terkedilmiş gibi görünen bir günlükleme mekanizmasıdır, ancak yine de erişilebilir durumdadır. Bir Mac yöneticisi için özellikle faydalı olmasa da, bu belirsiz hizmet, tehdit aktörleri için ince bir kalıcılık yöntemi olarak hizmet edebilir ve muhtemelen çoğu macOS yöneticisi tarafından fark edilmez.
Var olduğunun farkında olanlar için, emond'un herhangi bir kötüye kullanımını tespit etmek oldukça basittir. Bu hizmetin sisteminin LaunchDaemon'ı, çalıştırılacak betikleri tek bir dizinde arar. Bunu incelemek için aşağıdaki komut kullanılabilir:
Writeup: https://theevilbit.github.io/beyond/beyond_0018/
/opt/X11/etc/X11/xinit/privileged_startx.d
Root gerekli
Tetikleyici: XQuartz ile
XQuartz artık macOS'ta yüklü değil, bu yüzden daha fazla bilgi istiyorsanız yazıya bakın.
Kext'i kök olarak yüklemek o kadar karmaşık ki, bunu sandbox'lardan kaçmak veya kalıcılık için düşünmeyeceğim (bir exploit'iniz yoksa).
Bir KEXT'i başlangıç öğesi olarak yüklemek için, aşağıdaki konumlardan birine yüklenmesi gerekir:
/System/Library/Extensions
OS X işletim sistemine entegre edilmiş KEXT dosyaları.
/Library/Extensions
parti yazılımlar tarafından yüklenen KEXT dosyaları
Mevcut yüklü kext dosyalarını listelemek için:
For more information about kernel extensions check this section.
Writeup: https://theevilbit.github.io/beyond/beyond_0029/
/usr/local/bin/amstoold
Root required
Görünüşe göre /System/Library/LaunchAgents/com.apple.amstoold.plist
dosyasındaki plist
, bir XPC servisi sunarken bu ikiliyi kullanıyordu... sorun şu ki, ikili mevcut değildi, bu yüzden oraya bir şey yerleştirebilir ve XPC servisi çağrıldığında ikilinizin çağrılmasını sağlayabilirsiniz.
Artık bunu macOS'ümde bulamıyorum.
Writeup: https://theevilbit.github.io/beyond/beyond_0015/
/Library/Preferences/Xsan/.xsanrc
Root required
Trigger: Servis çalıştırıldığında (nadiren)
Görünüşe göre bu scripti çalıştırmak pek yaygın değil ve ben bile macOS'ümde bulamadım, bu yüzden daha fazla bilgi istiyorsanız yazıyı kontrol edin.
Bu modern MacOS sürümlerinde çalışmıyor
Ayrıca burada başlangıçta çalıştırılacak komutlar yerleştirmek mümkündür. Örnek olarak düzenli rc.common scripti:
AWS Hacking öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)