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:
atq
komutunu kullanarak iş kuyruğunu kontrol edin:
Yukarıda iki zamanlanmış iş görebiliriz. İşi ayrıntılarıyla yazdırmak için at -c İŞNUMARASI
kullanabiliriz.
Eğer AT görevleri etkin değilse, oluşturulan görevler çalıştırılmayacak.
İş dosyaları şurada bulunabilir: /private/var/at/jobs/
Dosya adı sırayı, iş numarasını ve çalıştırılacağı zamanı içerir. Örneğin a0001a019bdcd2
'ye bakalım.
a
- bu kuyruktur0001a
- onaltılık iş numarası,0x1a = 26
019bdcd2
- onaltılık zaman. Bu, epoch'tan bu yana geçen dakikaları temsil eder.0x019bdcd2
, ondalık olarak26991826
'dır. 60 ile çarptığımızda1619509560
elde ederiz, bu daGMT: 2021 Nisan 27, Salı 7:46:00
'yi temsil eder.
İş dosyasını yazdırırsak, at -c
kullanarak elde ettiğimiz bilgileri içerdiğini görürüz.
Klasör Eylemleri
Açıklama: https://theevilbit.github.io/beyond/beyond_0024/ Açıklama: https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d
Kum havuzunu atlamak için kullanışlı: ✅
Ancak Klasör Eylemlerini yapılandırmak için
System Events
ile iletişim kurabilmek içinosascript
'ı argümanlarla çağırabilmeniz gerekirTCC atlatma: 🟠
Masaüstü, Belgeler ve İndirmeler gibi bazı temel TCC izinlerine sahiptir
Konum
/Library/Scripts/Folder Action Scripts
Kök izni gereklidir
Tetikleyici: Belirtilen klasöre erişim
~/Library/Scripts/Folder Action Scripts
Tetikleyici: Belirtilen klasöre erişim
Açıklama ve Sömürü
Klasör Eylemleri, bir klasördeki değişikliklerle otomatik olarak tetiklenen betiklerdir; öğeler eklenirken, kaldırılırken veya diğer eylemler gerçekleşirken veya klasör penceresinin açılması veya boyutlandırılması gibi. Bu eylemler çeşitli görevler için kullanılabilir ve Finder UI veya terminal komutları kullanılarak tetiklenebilir.
Klasör Eylemleri kurmak için şu seçeneklere sahipsiniz:
Automator ile bir Klasör Eylemi iş akışı oluşturup bir hizmet olarak yüklemek.
Bir betiği manuel olarak bir klasörün bağlam menüsündeki Klasör Eylemleri Kurulumu aracılığıyla eklemek.
Programatik olarak bir Klasör Eylemi kurmak için
System Events.app
'e Apple Olayı iletileri göndermek için OSAScript'i kullanmak.
Bu yöntem, eylemi sisteme gömmek ve kalıcılık düzeyi sunmak için özellikle kullanışlıdır.
Aşağıdaki betik, bir Klasör Eylemi tarafından yürütülebilecek bir örnektir:
Yukarıdaki betiği Klasör Eylemleri tarafından kullanılabilir hale getirmek için şunu kullanarak derleyin:
Derlemesi yapıldıktan sonra, aşağıdaki betiği çalıştırarak Klasör İşlemlerini kurun. Bu betik, Klasör İşlemlerini genel olarak etkinleştirecek ve önceden derlenmiş betiği özel olarak Masaüstü klasörüne ekleyecektir.
Ayar betiğini şu şekilde çalıştırın:
Bu kalıcılığı GUI aracılığıyla uygulamanın yolu:
Bu, yürütülecek olan betiktir:
Şununla derleyin: osacompile -l JavaScript -o folder.scpt source.js
Şuraya 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 bunu output2.scp olarak adlandırdım):
Şimdi, eğer o klasörü Finder ile açarsanız, betiğiniz çalıştırılacaktır.
Bu yapılandırma, base64 formatında ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist
konumunda saklanmıştır.
Şimdi, GUI erişimi olmadan bu kalıcılığı hazırlamayı deneyelim:
~/Library/Preferences/com.apple.FolderActionsDispatcher.plist
'yi yedeklemek için/tmp
'ye kopyalayın:
cp ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist /tmp
Şimdi, ayarladığınız Klasör Eylemlerini kaldırın:
Şimdi boş bir ortama sahip olduğumuza göre
Yedek dosyasını kopyalayın:
cp /tmp/com.apple.FolderActionsDispatcher.plist ~/Library/Preferences/
Bu yapılandırmayı tüketmek 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ıdan talimatlar:(
Dock kısayolları
Yazı: https://theevilbit.github.io/beyond/beyond_0027/
Kum havuzunu atlamak için kullanışlı: ✅
Ancak kötü niyetli bir uygulamayı sisteme kurmuş olmanız gerekmektedir
TCC atlatma: 🔴
Konum
~/Library/Preferences/com.apple.dock.plist
Tetikleyici: Kullanıcı dock içindeki uygulamaya tıkladığında
Açıklama ve Sömürü
Dock'ta görünen tüm uygulamalar, plist içinde belirtilmiştir: ~/Library/Preferences/com.apple.dock.plist
Sadece şu şekilde bir uygulama eklemek mümkündür:
Bazı sosyal mühendislik kullanarak örneğin Dock içinde Google Chrome gibi taklit edebilir ve aslında kendi betiğinizi çalıştırabilirsiniz:
Renk Seçiciler
Açıklama: https://theevilbit.github.io/beyond/beyond_0017
Kum havuzunu atlamak için kullanışlı: 🟠
Çok belirli bir eylem gerçekleşmesi gerekiyor
Başka bir kum havuzunda sonlanacaksınız
TCC atlatma: 🔴
Konum
/Library/ColorPickers
Kök izni gereklidir
Tetikleyici: Renk seçicisini kullanın
~/Library/ColorPickers
Tetikleyici: Renk seçicisini kullanın
Açıklama ve Sömürü
Kodunuzla bir renk seçici paketini derleyin (örneğin bu örneği kullanabilirsiniz) ve bir yapılandırıcı ekleyin (benzer şekilde Ekran Koruyucu bölümünde olduğu gibi) ve paketi ~/Library/ColorPickers
dizinine kopyalayın.
Sonra, renk seçicisi tetiklendiğinde sizin de tetiklenmeniz gerekmektedir.
Kütüphanenizi yükleyen ikili dosyanın çok kısıtlayıcı bir kum havuzu olduğunu unutmayın: /System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/LegacyExternalColorPickerService-x86_64.xpc/Contents/MacOS/LegacyExternalColorPickerService-x86_64
Finder Senkronizasyon Eklentileri
Açıklama: https://theevilbit.github.io/beyond/beyond_0026/ Açıklama: https://objective-see.org/blog/blog_0x11.html
Kum havuzunu atlamak için kullanışlı mı: Hayır, çünkü kendi uygulamanızı çalıştırmanız gerekir
TCC atlaması: ???
Konum
Belirli bir uygulama
Açıklama ve Sızma
Bir Finder Senkronizasyon Uzantısı örneği içeren bir uygulama burada bulunabilir.
Uygulamalar Finder Senkronizasyon Uzantıları
na sahip olabilir. Bu uzantı, çalıştırılacak bir uygulamanın içine gidecektir. Dahası, uzantının kodunu çalıştırabilmesi için bazı geçerli Apple geliştirici sertifikalarıyla imzalanmış olması gerekir, kum havuzunda olmalıdır (rahatlatılmış istisnalar eklenmiş olabilir) ve şuna benzer bir şeyle kaydedilmiş olmalıdır:
Ekran Koruyucu
Açıklama: https://theevilbit.github.io/beyond/beyond_0016/ Açıklama: https://posts.specterops.io/saving-your-access-d562bf5bf90b
Kum havuzunu atlamak için kullanışlı: 🟠
Ancak genel bir uygulama kum havuzunda sona ereceksiniz
TCC atlatma: 🔴
Konum
/System/Library/Screen Savers
Root gerekli
Tetikleyici: Ekran koruyucusunu seçin
/Library/Screen Savers
Root gerekli
Tetikleyici: Ekran koruyucusunu seçin
~/Library/Screen Savers
Tetikleyici: Ekran koruyucusunu seçin
Açıklama ve Sızma
Xcode'da yeni bir proje oluşturun ve yeni bir Ekran Koruyucu oluşturmak için şablonu seçin. Ardından, örneğin aşağıdaki kodu kullanarak günlükler oluşturmak için kodunuzu ekleyin.
Derleyin ve .saver
paketini ~/Library/Screen Savers
dizinine kopyalayın. Ardından, Ekran Koruyucu GUI'yi açın ve üzerine tıkladığınızda birçok günlük oluşturması gerektiğini göreceksiniz:
Bu kodu yükleyen ikili dosyanın ayrıcalıklarında (/System/Library/Frameworks/ScreenSaver.framework/PlugIns/legacyScreenSaver.appex/Contents/MacOS/legacyScreenSaver
) com.apple.security.app-sandbox
bulunduğundan dolayı ortak uygulama kum havuzunun içinde olacaksınız.
Saver kodu:
Spotlight Eklentileri
açıklama: https://theevilbit.github.io/beyond/beyond_0011/
Kum havuzunu atlamak için kullanışlı: 🟠
Ancak uygulama kum havuzunda sona ereceksiniz
TCC atlaması: 🔴
Kum havuzu çok sınırlı görünüyor
Konum
~/Kütüphane/Spotlight/
Tetikleyici: Spotlight eklentisi tarafından yönetilen bir uzantıya sahip yeni bir dosya oluşturulduğunda.
/Kütüphane/Spotlight/
Tetikleyici: Spotlight eklentisi tarafından yönetilen bir uzantıya sahip yeni bir dosya oluşturulduğunda.
Root gerekli
/Sistem/Kütüphane/Spotlight/
Tetikleyici: Spotlight eklentisi tarafından yönetilen bir uzantıya sahip yeni bir dosya oluşturulduğunda.
Root gerekli
Some.app/İçerik/Kütüphane/Spotlight/
Tetikleyici: Spotlight eklentisi tarafından yönetilen bir uzantıya sahip yeni bir dosya oluşturulduğunda.
Yeni uygulama gereklidir
Açıklama ve Sömürü
Spotlight, macOS'in yerleşik arama özelliğidir ve kullanıcılara bilgisayarlarındaki verilere hızlı ve kapsamlı erişim sağlamak amacıyla tasarlanmıştır. Bu hızlı arama yeteneğini kolaylaştırmak için Spotlight, özel bir veritabanı tutar ve çoğu dosyayı ayıklamak suretiyle bir dizin oluşturur, böylece dosya adları ve içerikleri arasında hızlı aramalar yapılabilir.
Spotlight'ın temel mekanizması, 'mds' adlı merkezi bir süreci içerir ve bu süreç, Spotlight hizmetini yönetir. Buna ek olarak, farklı dosya türlerini dizinleyen çeşitli bakım görevlerini yerine getiren birden fazla 'mdworker' cinayet işçisi bulunmaktadır (ps -ef | grep mdworker
). Bu görevler, Spotlight içe aktarıcı eklentileri veya ".mdimporter paketleri" aracılığıyla mümkün hale getirilir, bu da Spotlight'ın çeşitli dosya biçimlerindeki içeriği anlamasına ve dizinlemesine olanak tanır.
Eklentiler veya .mdimporter
paketleri önceden belirtilen yerlerde bulunur ve yeni bir paket göründüğünde dakikalar içinde yüklenir (herhangi bir hizmeti yeniden başlatmaya gerek yoktur). Bu paketlerin hangi dosya türü ve uzantıları yönetebileceğini belirtmeleri gerekir, bu sayede Spotlight, belirtilen uzantıya sahip yeni bir dosya oluşturulduğunda bunları kullanacaktır.
Yüklenen tüm mdimporters
bulunabilir:
Ve örneğin /Library/Spotlight/iBooksAuthor.mdimporter bu tür dosyaları ayrıştırmak için kullanılır (uzantılar .iba
ve .book
dahil diğerleri):
Başka mdimporter
'ın Plist'ini kontrol ederseniz, UTTypeConformsTo
girişini bulamayabilirsiniz. Bu, yerleşik Uniform Type Identifiers (UTI) olduğu için uzantıları belirtmeye gerek duymaz.
Ayrıca, Sistem varsayılan eklentiler her zaman önceliklidir, bu nedenle bir saldırgan yalnızca Apple'ın kendi mdimporters
tarafından dizinlenmeyen dosyalara erişebilir.
Kendi içe aktarıcınızı oluşturmak için bu projeye başlayabilirsiniz: https://github.com/megrimm/pd-spotlight-importer ve ardından adı değiştirin, CFBundleDocumentTypes
'ı değiştirin ve desteklemek istediğiniz uzantıyı desteklemesi için UTImportedTypeDeclarations
ekleyin ve bunları schema.xml
içinde yansıtın.
Sonra GetMetadataForFile
işlevinin kodunu değiştirerek, işlenen uzantıya sahip bir dosya oluşturulduğunda payload'ınızı yürütün.
Son olarak, yeni .mdimporter
'ınızı bir önceki konumlardan birine derleyin ve kopyalayın ve yüklendiğinde günlükleri izleyerek veya mdimport -L
kontrol ederek yüklendiğinde kontrol edebilirsiniz.
Tercih Paneli
Bu artık çalışmıyor gibi görünmüyor.
Açıklama: https://theevilbit.github.io/beyond/beyond_0009/
Konum
/System/Library/PreferencePanes
/Library/PreferencePanes
~/Library/PreferencePanes
Açıklama: Bu artık çalışmıyor gibi görünmüyor.
Kök Kum Havuzu Atlatma
Burada, kum havuzu atlatma için yararlı olan başlangıç konumlarını bulabilirsiniz, bu da size bir dosyaya yazarak basitçe bir şeyi kök olarak yürütmenizi sağlar ve/veya diğer garip koşullar gerektirir.
Periyodik
Açıklama: https://theevilbit.github.io/beyond/beyond_0019/
Konum
/etc/periodic/daily
,/etc/periodic/weekly
,/etc/periodic/monthly
,/usr/local/etc/periodic
Kök gereklidir
Tetikleyici: Zamanı geldiğinde
/etc/daily.local
,/etc/weekly.local
veya/etc/monthly.local
Kök gereklidir
Tetikleyici: Zamanı geldiğinde
Açıklama ve Sömürü
Periyodik betikler (/etc/periodic
), /System/Library/LaunchDaemons/com.apple.periodic*
'de yapılandırılmış başlatma hizmetleri nedeniyle yürütülür. /etc/periodic/
içinde depolanan betikler dosya sahibi olarak yürütülür, bu nedenle bu, olası bir ayrıcalık yükseltmesi için çalışmaz.
Başka periyodik betikler de /etc/defaults/periodic.conf
dosyasında belirtilir:
Eğer /etc/daily.local
, /etc/weekly.local
veya /etc/monthly.local
dosyalarından herhangi birini yazmayı başarırsanız, er ya da geç yürütülecektir.
Periyodik betiğin betik sahibi olarak yürütüleceğini unutmayın. Dolayısıyla, düzenli bir kullanıcı betiğin sahibiyse, betik o kullanıcı olarak yürütülür (bu, ayrıcalık yükseltme saldırılarını engelleyebilir).
PAM
Açıklama: Linux Hacktricks PAM Açıklama: https://theevilbit.github.io/beyond/beyond_0005/
Konum
Her zaman kök gereklidir
Açıklama ve Sömürü
PAM, macOS içinde kolay yürütmeden ziyade kalıcılık ve kötü amaçlı yazılımlara odaklandığı için, bu blog detaylı bir açıklama sunmayacak, bu tekniği daha iyi anlamak için açıklamaları okuyun.
PAM modüllerini kontrol etmek için:
Bir kalıcılık/privilege escalation tekniği PAM'ı kötüye kullanarak /etc/pam.d/sudo modülünü değiştirerek başlangıca şu satırı eklemek kadar kolaydır:
Yani şöyle görünecek:
Ve dolayısıyla sudo
kullanma girişimi başarılı olacaktır.
Bu dizinin TCC tarafından korunduğunu unutmayın, bu nedenle kullanıcının erişim isteyen bir ileti alması oldukça olasıdır.
Yetkilendirme Eklentileri
Açıklama: https://theevilbit.github.io/beyond/beyond_0028/ Açıklama: https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65
Kum havuzunu atlamak için kullanışlı: 🟠
Ancak root olmanız ve ek yapılandırmalar yapmanız gerekmektedir
TCC atlatma: ???
Konum
/Library/Security/SecurityAgentPlugins/
Root gereklidir
Eklentiyi kullanmak için yetkilendirme veritabanını yapılandırmak da gereklidir
Açıklama ve Sömürü
Kullanıcı oturum açtığında devamlılığı sağlamak için yürütülecek bir yetkilendirme eklentisi oluşturabilirsiniz. Bu tür eklentilerden birini nasıl oluşturacağınız hakkında daha fazla bilgi için önceki açıklamalara bakın (ve dikkatli olun, kötü yazılmış bir eklenti sizi dışarıda bırakabilir ve Mac'inizi kurtarma modundan temizlemeniz gerekebilir).
Bündeyi yüklenmesi gereken konuma taşıyın:
Son olarak bu Eklentiyi yüklemek için kuralı ekleyin:
evaluate-mechanisms
yetkilendirme çerçevesine dış mekanizmanın çağrılması gerekeceğini belirtecektir. Dahası, privileged
root tarafından yürütülmesini sağlayacaktır.
Şununla tetikleyin:
Ve sonra personel grubunun sudo erişimi olmalıdır (/etc/sudoers
dosyasını okuyun doğrulamak için).
Man.conf
Açıklama: https://theevilbit.github.io/beyond/beyond_0030/
Kum havuzunu atlamak için kullanışlı: 🟠
Ancak root olmanız ve kullanıcının man kullanması gerekmektedir
TCC atlatma: 🔴
Konum
/private/etc/man.conf
Root gerekli
/private/etc/man.conf
: Her man kullanıldığında
Açıklama ve Sızma
Yapılandırma dosyası /private/etc/man.conf
, man belgelendirme dosyalarını açarken kullanılacak ikili betikleri gösterir. Bu nedenle yürütülecek arka kapı her zaman kullanıcı belgeleri okumak için man komutunu kullandığında değiştirilebilir.
Örneğin /private/etc/man.conf
içinde ayarlanmış:
Ve ardından /tmp/view
'i şu şekilde oluşturun:
Apache2
Açıklama: https://theevilbit.github.io/beyond/beyond_0023/
Kum havuzunu atlamak için kullanışlı: 🟠
Ancak root olmanız ve apache'nin çalışıyor olması gerekmektedir
TCC atlatma: 🔴
Httpd'nin ayrıcalıkları yok
Konum
/etc/apache2/httpd.conf
Root gerekli
Tetikleyici: Apache2 başlatıldığında
Açıklama ve Sızma
/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 yapmanız gereken ya geçerli bir Apple sertifikası ile imzalamak, ya da sisteme yeni güvenilir bir sertifika eklemek ve onunla imzalamak.
Ardından, gerektiğinde sunucunun başlatılacağından emin olmak için şunu çalıştırabilirsiniz:
Dylb için kod örneği:
BSM denetim çerçevesi
Açıklama: https://theevilbit.github.io/beyond/beyond_0031/
Kum havuzunu atlamak için faydalı: 🟠
Ancak kök kullanıcı olmanız, auditd'nin çalışıyor olması ve bir uyarıya neden olmanız gerekmektedir
TCC atlatma: 🔴
Konum
/etc/security/audit_warn
Kök erişimi gereklidir
Tetikleyici: Auditd bir uyarı algıladığında
Açıklama ve Sızma
Auditd bir uyarı algıladığında /etc/security/audit_warn
betiği çalıştırılır. Bu nedenle kendi yükünüzü ekleyebilirsiniz.
Başlangıç Öğeleri
Bu kullanım dışıdır, bu yüzden bu dizinlerde hiçbir şey bulunmamalıdır.
StartupItem, ya /Library/StartupItems/
ya da /System/Library/StartupItems/
içinde bulunması gereken bir dizindir. Bu dizin oluşturulduğunda, içermesi gereken iki belirli dosya bulunmalıdır:
Bir rc betiği: Başlangıçta çalıştırılan bir kabuk betiği.
Çeşitli yapılandırma ayarlarını içeren, özellikle
StartupParameters.plist
adında bir plist dosyası.
Başlangıç işlemi bu betiği ve StartupParameters.plist
dosyasını doğru şekilde StartupItem dizini içine yerleştirildiğinden emin olun.
macOS Auto-Start Locations
macOS Auto-Start Locations
There are several locations on macOS where applications can be configured to automatically start when a user logs in. These locations include:
Login Items: Found in System Preferences > Users & Groups > Login Items. Users can add or remove applications from this list.
Launch Agents: Located in
~/Library/LaunchAgents
and/Library/LaunchAgents
. These are used to run processes when a user logs in.Launch Daemons: Found in
/Library/LaunchDaemons
. These are system-wide processes that run at boot time.Startup Items: Located in
/Library/StartupItems
. Deprecated since macOS 10.7, but still supported for compatibility.
By monitoring and managing these auto-start locations, users can control which applications launch automatically and potentially improve the security and performance of their macOS system.
emond
Bu bileşeni macOS'ta bulamıyorum, 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ştirilmemiş veya muhtemelen terkedilmiş gibi görünen bir günlükleme mekanizmasıdır, ancak hala erişilebilir durumda. Mac yöneticileri için özellikle faydalı olmasa da, bu belirsiz hizmet, tehdit aktörleri için hafif bir kalıcılık yöntemi olarak hizmet edebilir ve muhtemelen çoğu macOS yöneticisi tarafından fark edilmeyebilir.
Varlığından haberdar olanlar için, emond'un herhangi bir kötüye kullanımını tespit etmek kolaydır. Bu hizmet için sistem LaunchDaemon'ı, yürütülecek betikleri tek bir dizinde arar. Bunu incelemek için aşağıdaki komut kullanılabilir:
XQuartz
Yazı: https://theevilbit.github.io/beyond/beyond_0018/
Konum
/opt/X11/etc/X11/xinit/privileged_startx.d
Root gereklidir
Tetikleyici: XQuartz ile
Açıklama ve Sızma
XQuartz artık macOS'ta kurulu değil, daha fazla bilgi için yazıya bakın.
kext
Kext'i yüklemek bile kök olarak oldukça karmaşıktır, bu nedenle bunu kum havuzlarından kaçmak veya kalıcılık için düşünmeyeceğim (elbette bir açık bulunmadıkça)
Konum
Bir KEXT'i başlangıç öğesi olarak yüklemek için aşağıdaki konumlardan birine yüklü olması gerekir:
/System/Library/Extensions
OS X işletim sistemi tarafından derlenmiş KEXT dosyaları.
/Library/Extensions
taraf yazılım tarafından yüklenen KEXT dosyaları
Şu anda yüklenmiş kext dosyalarını listelemek için şunu kullanabilirsiniz:
Daha fazla bilgi için çekirdek uzantılarına bu bölüme bakın.
amstoold
Açıklama: https://theevilbit.github.io/beyond/beyond_0029/
Konum
/usr/local/bin/amstoold
Root gereklidir
Açıklama ve Sömürü
Görünüşe göre /System/Library/LaunchAgents/com.apple.amstoold.plist
dizinindeki plist
bu ikili dosyayı kullanıyordu ve bir XPC servisini açığa çıkarıyordu... sorun şu ki ikili dosya mevcut değildi, bu yüzden bir şey yerleştirebilir ve XPC servisi çağrıldığında ikili dosyanız çağrılacaktı.
Artık macOS'ta bunu bulamıyorum.
xsanctl
Açıklama: https://theevilbit.github.io/beyond/beyond_0015/
Konum
/Library/Preferences/Xsan/.xsanrc
Root gereklidir
Tetikleyici: Servis çalıştırıldığında (nadiren)
Açıklama ve sömürü
Bu betiği çalıştırmak pek yaygın değil gibi görünüyor ve macOS'ta bile bulamadım, bu yüzden daha fazla bilgi istiyorsanız yazıya bakın.
/etc/rc.common
Bu modern MacOS sürümlerinde çalışmıyor
Başlangıçta çalıştırılacak komutları buraya yerleştirmek de mümkündür. Tipik bir rc.common betiği örneği:
Kalıcılık teknikleri ve araçları
Last updated