macOS Auto Start
Bu bölüm, Beyond the good ol' LaunchAgents blog serisine dayanmaktadır, amacı Daha Fazla Otomatik Başlatma Konumu eklemek (mümkünse), günümüz macOS sürümü (13.4) ile hala çalışan hangi tekniklerin olduğunu belirtmek ve gerekli olan izinleri belirtmektir.
Kum Havuzu Atlatma
Burada, kum havuzu atlatma için yararlı olan başlatma konumlarını bulabilirsiniz, bu size bir dosyaya yazarak ve çok yaygın bir eylemi, belirli bir zaman miktarını veya genellikle bir kum havuzu içinden kök izinler gerekmeden gerçekleştirebileceğiniz bir eylemi bekleyerek basitçe yürütmenizi sağlar.
Launchd
Konumlar
/Library/LaunchAgents
Tetikleyici: Yeniden başlatma
Kök izni gereklidir
/Library/LaunchDaemons
Tetikleyici: Yeniden başlatma
Kök izni gereklidir
/System/Library/LaunchAgents
Tetikleyici: Yeniden başlatma
Kök izni gereklidir
/System/Library/LaunchDaemons
Tetikleyici: Yeniden başlatma
Kök izni gereklidir
~/Library/LaunchAgents
Tetikleyici: Yeniden oturum açma
~/Library/LaunchDemons
Tetikleyici: Yeniden oturum açma
İlginç bir gerçek olarak, launchd
'nin, başlatması gereken diğer iyi bilinen hizmetleri içeren bir Mach-o bölümü olan __Text.__config
içinde gömülü bir özellik listesi vardır. Ayrıca, bu hizmetler RequireSuccess
, RequireRun
ve RebootOnSuccess
içerebilir ki bu da onların çalıştırılması ve başarılı bir şekilde tamamlanması gerektiği anlamına gelir.
Tabii ki, kod imzalaması nedeniyle değiştirilemez.
Açıklama ve Sömürü
launchd
, başlangıçta OX S çekirdeği tarafından çalıştırılan ilk işlem ve kapanırken sonuncusudur. Her zaman PID 1'e sahip olmalıdır. Bu işlem, ASEP plistlerinde belirtilen yapılandırmaları okuyacak ve yürütecektir:
/Library/LaunchAgents
: Yönetici tarafından yüklenen kullanıcı başına ajanlar/Library/LaunchDaemons
: Yönetici tarafından yüklenen sistem genelinde hizmetler/System/Library/LaunchAgents
: Apple tarafından sağlanan kullanıcı başına ajanlar./System/Library/LaunchDaemons
: Apple tarafından sağlanan sistem genelinde hizmetler.
Bir kullanıcı oturum açtığında, /Users/$USER/Library/LaunchAgents
ve /Users/$USER/Library/LaunchDemons
konumlarındaki plist'ler oturum açan kullanıcının izinleriyle başlatılır.
Ajanlar ve hizmetler arasındaki temel fark, ajanların kullanıcı oturum açtığında yüklenmesi ve hizmetlerin sistem başlatıldığında yüklenmesidir (çünkü ssh gibi hizmetlerin, herhangi bir kullanıcının sisteme erişmeden önce çalıştırılması gerektiği durumlar vardır). Ayrıca ajanlar GUI kullanabilirken, hizmetler arka planda çalışmalıdır.
Bazı durumlarda, kullanıcı oturum açmadan önce bir ajanın çalıştırılması gerekebilir, bunlara PreLoginAgents denir. Örneğin, bu, oturum açma sırasında destekleyici teknoloji sağlamak için kullanışlıdır. Bunlar ayrıca /Library/LaunchAgents
dizininde de bulunabilir (bir örnek için buraya bakın).
Yeni Daemon'lar veya Ajan'ların yapılandırma dosyaları, bir sonraki yeniden başlatmadan sonra veya launchctl load <hedef.plist>
kullanılarak yüklenecektir. Ayrıca, .plist
uzantısız dosyaların da launchctl -F <dosya>
ile yüklenebilmesi mümkündür (ancak bu plist dosyaları otomatik olarak yeniden başlatma sonrasında yüklenmeyecektir).
launchctl unload <hedef.plist>
ile yüklemenin geri alınması da mümkündür (bu işaret ettiği işlem sonlandırılacaktır).
Bir Ajan veya **Daemon'ın çalışmasını engelleyen 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/LaunchDaemons/com.apple.smdb.plist
Mevcut kullanıcı tarafından yüklenen tüm ajanları ve daemonları listele:
Eğer bir plist bir kullanıcıya aitse, hatta bir daemon sistemi genel klasörlerindeyse, görev kullanıcı olarak ve kök olarak değil yürütülecektir. Bu bazı ayrıcalık yükseltme saldırılarını önleyebilir.
launchd Hakkında Daha Fazla Bilgi
launchd
, çekirdekten başlatılan ilk kullanıcı modu işlemidir. İşlem başlatması başarılı olmalı ve çıkamaz veya çökmemelidir. Bazı öldürme sinyallerine karşı bile korunmuştur.
launchd
'nin yapacağı ilk şeylerden biri tüm daemonları başlatmaktır:
Zaman tabanlı daemonlar:
atd (
com.apple.atrun.plist
):StartInterval
değeri 30 dakikadırcrond (
com.apple.systemstats.daily.plist
): Saat 00:15'te başlamak içinStartCalendarInterval
değerine sahiptir
Ağ daemonları:
org.cups.cups-lpd
: TCP'de dinler (SockType: stream
) veSockServiceName: printer
SockServiceName ya bir bağlantı noktası olmalı ya da
/etc/services
'den bir hizmet olmalıdırcom.apple.xscertd.plist
: Port 1640'ta TCP üzerinde dinler
Yol daemonları:
Belirtilen yol değiştiğinde yürütülen
com.apple.postfix.master
:/etc/postfix/aliases
yolunu kontrol eder
IOKit bildirim daemonları:
com.apple.xartstorageremoted
:"com.apple.iokit.matching" => { "com.apple.device-attach" => { "IOMatchLaunchStream" => 1 ...
Mach port:
com.apple.xscertd-helper.plist
:MachServices
girişindecom.apple.xscertd.helper
adını belirtir
UserEventAgent:
Bu öncekinden farklıdır. Belirli bir olaya yanıt olarak uygulamaları başlatmak için launchd'yi kullanır. Ancak bu durumda, ana işlem dahil olan
/usr/libexec/UserEventAgent
olmasına rağmen,/System/Library/UserEventPlugins/
klasöründen eklentileri yükler. Her eklenti, başlatıcısınıXPCEventModuleInitializer
anahtarında veya eski eklentilerin durumunda,Info.plist
'ninCFPluginFactories
sözlüğündeFB86416D-6164-2070-726F-70735C216EC0
anahtarının altında belirtir.
Kabuk Başlangıç Dosyaları
Açıklama: https://theevilbit.github.io/beyond/beyond_0001/ Açıklama (xterm): https://theevilbit.github.io/beyond/beyond_0018/
Kum havuzunu atlamak için kullanışlı: ✅
TCC Atlatma: ✅
Ancak bu dosyaları yükleyen bir kabuk çalıştıran bir TCC atlatma uygulaması bulmanız gerekmektedir
Konumlar
~/.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ç
Kök izni gereklidir
~/.zlogout
Tetikleyici: zsh ile bir terminali kapat
/etc/zlogout
Tetikleyici: zsh ile bir terminali kapat
Kök izni gereklidir
Muhtemelen 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 beklenir, ancak kurulu değil ve kurulduktan sonra bile bu hata alınır: xterm:
DISPLAY is not set
Açıklama ve Sömürü
zsh
veya bash
gibi bir kabuk ortamı başlatıldığında, belirli başlangıç dosyaları çalıştırılır. macOS şu anda varsayılan kabuk olarak /bin/zsh
'yi kullanmaktadır. Bu kabuk, Terminal uygulaması başlatıldığında veya bir cihaza SSH ile erişildiğinde otomatik olarak erişilir. bash
ve sh
de macOS'ta bulunmasına rağmen, kullanılmak için açıkça çağrılmalıdır.
Okuyabileceğimiz zsh man sayfası olan man zsh
, başlangıç dosyalarının uzun açıklamasına sahiptir.
Yeniden Açılan Uygulamalar
Belirtilen açığı yapılandırmak ve oturumu kapatıp açmak veya hatta yeniden başlatmak, uygulamayı çalıştırmam için işe yaramadı. (Uygulama çalıştırılmıyordu, belki bu eylemler gerçekleştirilirken çalışır durumda olması gerekiyor)
Açıklama: https://theevilbit.github.io/beyond/beyond_0021/
Konum
~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist
Tetikleyici: Uygulamaları yeniden açma işlemi
Açıklama ve Sömürü
Yeniden açılacak tüm uygulamalar, ~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist
içinde bulunmaktadır.
Bu nedenle, yeniden açılacak uygulamalar arasına kendi uygulamanızı eklemek için sadece uygulamanızı listeye eklemeniz yeterlidir.
UUID, bu dizini listelerken veya ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}'
komutu ile bulunabilir.
Yeniden açılacak uygulamaları kontrol etmek için şunu yapabilirsiniz:
Bu listede bir uygulama eklemek için şunları kullanabilirsiniz:
Terminal Tercihleri
Kum havuzunu atlamak için kullanışlı: ✅
TCC atlatma: ✅
Terminal, kullanıcının FDA izinlerine sahip olmasını kullanır
Konum
~/Library/Preferences/com.apple.Terminal.plist
Tetikleyici: Terminalı Aç
Açıklama ve Sömürü
~/Library/Preferences
içerisinde Kullanıcı Tercihleri uygulamaların tercihlerini saklar. Bu tercihlerden bazıları diğer uygulamalar/skriptleri çalıştırmak için bir yapılandırma tutabilir.
Örneğin, Terminal Başlangıçta bir komutu çalıştırabilir:
Bu yapılandırma, ~/Library/Preferences/com.apple.Terminal.plist
dosyasında şu şekilde yansıtılır:
Yani, sistemdeki terminalin tercihlerinin plist'i üzerine yazılırsa, open
işlevi kullanılarak terminal açılabilir ve o komut çalıştırılabilir.
Bunu terminalden şu şekilde ekleyebilirsiniz:
Terminal Betikleri / Diğer dosya uzantıları
Kum havuzunu atlamak için kullanışlı: ✅
TCC atlatma: ✅
Terminal, kullanıcının FDA izinlerine sahip olmasını sağlamak için kullanılır
Konum
Herhangi bir yer
Tetikleyici: Terminali Aç
Açıklama ve Sömürü
Eğer bir .terminal
betiği oluşturursanız ve açarsanız, Terminal uygulaması otomatik olarak çağrılacak ve içinde belirtilen komutları çalıştırmak için kullanılacaktır. Eğer Terminal uygulamasının özel ayrıcalıkları varsa (örneğin TCC), komutunuz bu özel ayrıcalıklarla çalıştırılacaktır.
Denemek için:
Ses Eklentileri
Açıklama: https://theevilbit.github.io/beyond/beyond_0013/ Açıklama: https://posts.specterops.io/audio-unit-plug-ins-896d3434a882
Konum
/Library/Audio/Plug-Ins/HAL
Kök erişimi gereklidir
Tetik: coreaudiod veya bilgisayarı yeniden başlatın
/Library/Audio/Plug-ins/Components
Kök erişimi gereklidir
Tetik: coreaudiod veya bilgisayarı yeniden başlatın
~/Library/Audio/Plug-ins/Components
Tetik: coreaudiod veya bilgisayarı yeniden başlatın
/System/Library/Components
Kök erişimi gereklidir
Tetik: coreaudiod veya bilgisayarı yeniden başlatın
Açıklama
Önceki açıklamalara göre bazı ses eklentilerini derleyip yüklemek mümkündür.
QuickLook Eklentileri
Açıklama: https://theevilbit.github.io/beyond/beyond_0028/
Konum
/System/Library/QuickLook
/Library/QuickLook
~/Library/QuickLook
/Applications/AppNameHere/Contents/Library/QuickLook/
~/Applications/AppNameHere/Contents/Library/QuickLook/
Açıklama ve Sömürü
QuickLook eklentileri, bir dosyanın önizlemesini tetiklediğinizde (Finder'da dosya seçiliyken boşluk çubuğuna basın) ve o dosya türünü destekleyen bir eklenti yüklü olduğunda çalıştırılabilir.
Kendi QuickLook eklentinizi derleyip, yüklemek için önceki konumlardan birine yerleştirebilir ve ardından desteklenen bir dosyaya gidip tetiklemek için boşluk tuşuna basabilirsiniz.
Giriş/Çıkış Kancaları
Bu benim için çalışmadı, ne kullanıcı GirişKancası ne de kök ÇıkışKancası ile.
Açıklama: https://theevilbit.github.io/beyond/beyond_0022/
Konum
defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh
gibi bir şeyi yürütebilmelisiniz~/Library/Preferences/com.apple.loginwindow.plist
içinde bulunur
Eskimiş olsalar da, bir kullanıcı oturum açtığında komutları yürütmek için kullanılabilirler.
Bu ayar /Users/$USER/Library/Preferences/com.apple.loginwindow.plist
dosyasında saklanır.
Silmek için:
Root kullanıcısı /private/var/root/Library/Preferences/com.apple.loginwindow.plist
içinde saklanır.
Koşullu Kum Sandığı Atlatma
Burada, kum sandığı atlatma için yararlı olan başlangıç konumlarını bulabilirsiniz, bu da size basitçe bir şeyi bir dosyaya yazarak ve belirli programlar yüklü, "sıradışı" kullanıcı eylemleri veya ortamlar gibi çok yaygın olmayan koşullar beklemeksizin bir şeyi yürütmenizi sağlar.
Cron
Açıklama: https://theevilbit.github.io/beyond/beyond_0004/
Kum sandığını atlamak için yararlı: ✅
Ancak,
crontab
ikilisini yürütebilmelisinizVeya root olmalısınız
TCC atlatma: 🔴
Konum
/usr/lib/cron/tabs/
,/private/var/at/tabs
,/private/var/at/jobs
,/etc/periodic/
Doğrudan yazma erişimi için root gereklidir.
crontab <dosya>
yı yürütebiliyorsanız root gerekli değildirTetikleyici: Cron işine bağlıdır
Açıklama ve Sömürü
Mevcut kullanıcının cron işlerini listelemek için:
MacOS'ta, /usr/lib/cron/tabs/
ve /var/at/tabs/
dizinlerinde (root izni gerektirir) kullanıcıların tüm cron işlerini görebilirsiniz.
MacOS'ta, belirli bir sıklıkla betikleri çalıştıran birkaç klasör bulunabilir:
Burada düzenli cron işleri, at işleri (pek kullanılmaz) ve periyodik işler (genellikle geçici dosyaları temizlemek için kullanılır) bulabilirsiniz. Günlük periyodik işler örneğin şu şekilde yürütülebilir: periodic daily
.
Kullanıcı cron işi programatik olarak eklemek için şu kullanılabilir:
iTerm2
Açıklama: https://theevilbit.github.io/beyond/beyond_0002/
Kum havuzunu atlamak için kullanışlı: ✅
TCC atlatma: ✅
iTerm2, TCC izinlerine sahip olmak için kullanıldı
Konumlar
~/Library/Application Support/iTerm2/Scripts/AutoLaunch
Tetikleyici: iTerm açılınca
~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt
Tetikleyici: iTerm açılınca
~/Library/Preferences/com.googlecode.iterm2.plist
Tetikleyici: iTerm açılınca
Açıklama ve Sömürü
~/Library/Application Support/iTerm2/Scripts/AutoLaunch
klasöründe saklanan betikler çalıştırılacaktır. Örneğin:
Dosya ~/Library/LaunchAgents/
ve ~/Library/LaunchDaemons/
içindeki dosyaları inceleyin. Bu konumlar, kullanıcı düzeyindeki otomatik başlatma girişlerini içerir.
Betik ~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt
de yürütülecektir:
~/Library/Preferences/com.googlecode.iterm2.plist
konumundaki iTerm2 tercihleri, iTerm2 terminali açıldığında yürütülecek bir komutu belirtebilir.
Bu ayar, iTerm2 ayarlarında yapılandırılabilir:
Ve komut tercihlere yansıtılır:
Komutun çalıştırılacak şekilde ayarlayabilirsiniz:
İTerm2 tercihlerini kötüye kullanmak için başka yolların olması olasıdır.
xbar
Açıklama: https://theevilbit.github.io/beyond/beyond_0007/
Kum havuzunu atlamak için kullanışlı: ✅
Ancak xbar yüklü olmalı
TCC atlatma: ✅
Erişilebilirlik izinleri istiyor
Konum
~/Library/Application\ Support/xbar/plugins/
Tetikleyici: xbar çalıştırıldığında
Açıklama
Eğer popüler program xbar yüklü ise, ~/Library/Application\ Support/xbar/plugins/
dizininde bir kabuk betiği yazmak mümkündür ve bu betik xbar başlatıldığında çalıştırılacaktır:
Hammerspoon
Açıklama: https://theevilbit.github.io/beyond/beyond_0008/
Kum havuzunu atlamak için faydalı: ✅
Ancak Hammerspoon'un yüklü olması gerekir
TCC atlatma: ✅
Erişilebilirlik izni istiyor
Konum
~/.hammerspoon/init.lua
Tetikleyici: Hammerspoon çalıştırıldığında
Açıklama
Hammerspoon, işlemleri için LUA betik dilini kullanan macOS için bir otomasyon platformu olarak hizmet verir. Özellikle, tam AppleScript kodunun entegrasyonunu destekler ve kabuk betiklerinin yürütülmesini sağlayarak betikleme yeteneklerini önemli ölçüde artırır.
Uygulama, ~/.hammerspoon/init.lua
adlı tek bir dosyayı arar ve betik başlatıldığında yürütülür.
BetterTouchTool
Kum havuzunu atlamak için kullanışlı: ✅
Ancak BetterTouchTool'un yüklü olması gerekir
TCC atlatma: ✅
Otomasyon-Kısayolları ve Erişilebilirlik izinleri istiyor
Konum
~/Library/Application Support/BetterTouchTool/*
Bu araç, bazı kısayollar basıldığında uygulamaları veya betikleri yürütmek için göstergeler sağlar. Bir saldırgan, kendi kısayolunu ve eylemini yürütmek için veritabanında yapılandırabilir ve keyfi kod yürütebilir (bir kısayol sadece bir tuşa basmak olabilir).
Alfred
Kum havuzunu atlamak için kullanışlı: ✅
Ancak Alfred'ın yüklü olması gerekir
TCC atlatma: ✅
Otomasyon, Erişilebilirlik ve hatta Tam Disk erişimi izinleri istiyor
Konum
???
Belirli koşullar karşılandığında kod yürütebilen iş akışları oluşturmanıza olanak tanır. Bir saldırganın bir iş akışı dosyası oluşturup Alfred'ın bunu yüklemesini sağlaması potansiyel olarak mümkündür (iş akışlarını kullanmak için premium sürümü satın almak gereklidir).
SSHRC
Açıklama: https://theevilbit.github.io/beyond/beyond_0006/
Kum havuzunu atlamak için kullanışlı: ✅
Ancak ssh etkinleştirilmiş ve kullanılmış olmalı
TCC atlatma: ✅
SSH'nin FDA erişimine sahip olması gerekiyor
Konum
~/.ssh/rc
Tetikleyici: ssh üzerinden oturum açma
/etc/ssh/sshrc
Root gereklidir
Tetikleyici: ssh üzerinden oturum açma
SSH'yi açmak için Tam Disk Erişimi gereklidir:
Açıklama ve Sömürü
Varsayılan olarak, /etc/ssh/sshd_config
dosyasında PermitUserRC no
belirtilmediği sürece, bir kullanıcı SSH üzerinden giriş yaptığında /etc/ssh/sshrc
ve ~/.ssh/rc
betikleri çalıştırılacaktır.
Oturum Açma Öğeleri
Açıklama: https://theevilbit.github.io/beyond/beyond_0003/
Kum havuzunu atlamak için kullanışlı: ✅
Ancak
osascript
'i argümanlarla çalıştırmanız gerekmektedirTCC atlatma: 🔴
Konumlar
~/Library/Application Support/com.apple.backgroundtaskmanagementagent
Tetikleyici: Oturum Açma
Sömürü yükü,
osascript
çağrılarak depolanmıştır/var/db/com.apple.xpc.launchd/loginitems.501.plist
Tetikleyici: Oturum Açma
Root gereklidir
Açıklama
Sistem Tercihleri -> Kullanıcılar ve Gruplar -> Oturum Açma Öğeleri'nde, kullanıcı oturum açtığında çalıştırılacak öğeleri bulabilirsiniz. Onları komut satırından listelemek, eklemek ve kaldırmak mümkündür:
Bu öğeler ~/Library/Application Support/com.apple.backgroundtaskmanagementagent
dosyasında saklanır.
Giriş öğeleri ayrıca SMLoginItemSetEnabled API'sini kullanarak belirtilebilir, bu da yapılandırmayı /var/db/com.apple.xpc.launchd/loginitems.501.plist
konumunda saklayacaktır.
ZIP olarak Giriş Öğesi
(Giriş Öğeleri hakkında önceki bölüme bakın, bu bir uzantıdır)
Eğer bir ZIP dosyasını bir Giriş Öğesi olarak saklarsanız, Archive Utility
onu açacak ve örneğin ZIP dosyası ~/Library
konumunda saklanmış ve içinde LaunchAgents/file.plist
adlı bir arka kapı içeren bir klasör bulunduruyorsa (varsayılan olarak bulunmaz), o klasör oluşturulacak ve plist eklenerek bir sonraki kullanıcı tekrar oturum açtığında, plist'te belirtilen arka kapı yürütülecektir.
Başka bir seçenek, .bash_profile
ve .zshenv
dosyalarını kullanıcı ANA DİZİN içine oluşturmaktır, böylece LaunchAgents klasörü zaten varsa bu teknik yine de çalışacaktır.
At
Yazı: https://theevilbit.github.io/beyond/beyond_0014/
Kum havuzu atlamak için kullanışlı: ✅
Ancak
at
komutunu çalıştırmanız ve etkin olması gerekirTCC atlatma: 🔴
Konum
at
komutunu çalıştırmanız ve etkin olması gerekir
Açıklama
at
görevleri belirli zamanlarda yürütülmek üzere tasarlanmıştır. Cron işleri gibi, at
görevleri otomatik olarak yürütmeden sonra kaldırılır. Bu görevlerin sistem yeniden başlatmaları arasında kalıcı olduğunu unutmamak önemlidir, bu da onları belirli koşullar altında potansiyel güvenlik endişeleri olarak işaretler.
Varsayılan olarak devre dışı bırakılmışlardır ancak root kullanıcısı bunları aşağıdaki komutla etkinleştirebilir:
Bu, 1 saat içinde bir dosya oluşturacak: