macOS TCC Bypasses
İşlevselliğe Göre
Yazma Atlatması
Bu bir atlatma değil, sadece TCC'nin nasıl çalıştığıdır: Yazmayı korumaz. Terminal bir kullanıcının Masaüstünü okuma erişimine sahip değilse bile içine yazabilir:
Genişletilmiş öznitelik com.apple.macl
, oluşturucu uygulamanın onu okuma erişimine sahip olması için yeni dosyaya eklenir.
TCC ClickJacking
Kullanıcıyı fark etmeden kabul etmesini sağlamak için TCC uyarısının üzerine bir pencere yerleştirilebilir. Bir PoC'yi TCC-ClickJacking'de bulabilirsiniz.
Keyfi İsimle TCC İsteği
Saldırgan, Info.plist
içinde herhangi bir isimle uygulamalar oluşturabilir (örneğin Finder, Google Chrome...) ve bu uygulamanın bazı TCC korumalı konumlara erişim istemesini sağlayabilir. Kullanıcı, meşru uygulamanın bu erişimi isteyen uygulama olduğunu düşünecektir.
Dahası, meşru uygulamayı Dock'tan kaldırmak ve sahte olanı yerine koymak mümkündür, böylece kullanıcı sahte olanı tıkladığında (aynı simgeyi kullanabilir) meşru olanı çağırabilir, TCC izinlerini isteyebilir ve kötü amaçlı yazılımı yürütebilir, böylece kullanıcı meşru uygulamanın erişimi istediğine inanır.
Daha fazla bilgi ve PoC için:
pagemacOS Privilege EscalationSSH Atlatma
Varsayılan olarak **SSH üzerinden erişim "Tam Disk Erişimi"**ne sahiptir. Bunun devre dışı bırakılması için listelenmiş ancak devre dışı bırakılmış olması gerekir (listeden kaldırmak bu ayrıcalıkları kaldırmaz):
İşte bazı zararlı yazılımların bu korumayı atlatmayı nasıl başardığını gösteren örnekler:
Şu anda SSH'yi etkinleştirebilmek için Tam Disk Erişimi'ne ihtiyacınız vardır
Uzantıları İşleme - CVE-2022-26767
Dosyalara belirli bir uygulamanın okuma izinlerini vermek için com.apple.macl
özniteliği verilir. Bu öznitelik, bir dosyayı bir uygulamanın üzerine sürükleyip bıraktığınızda veya bir kullanıcı bir dosyayı varsayılan uygulama ile açmak için çift tıkladığında ayarlanır.
Bu nedenle, bir kullanıcı tüm uzantıları işlemek için kötü amaçlı bir uygulama kaydedebilir ve Launch Services'ı çağırarak herhangi bir dosyayı açabilir (bu nedenle kötü amaçlı dosya okuma izni verilir).
iCloud
com.apple.private.icloud-account-access
yetkisiyle com.apple.iCloudHelper
XPC hizmeti ile iletişim kurulabilir ve bu hizmet iCloud belgelerini sağlayabilir.
iMovie ve Garageband bu yetkiye sahipti ve diğerleri de sahipti.
Bu yetkiden icloud belgelerini almak için bir açıdan söz eden söyleşi hakkında daha fazla bilgi için: #OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula
kTCCServiceAppleEvents / Otomasyon
kTCCServiceAppleEvents
iznine sahip bir uygulama diğer Uygulamaları kontrol edebilir. Bu, diğer Uygulamalara verilen izinleri kötüye kullanabileceği anlamına gelir.
Apple Betikleri hakkında daha fazla bilgi için kontrol edin:
pagemacOS Apple ScriptsÖrneğin, bir Uygulamanın iTerm
üzerinde Otomasyon izni varsa, örneğin bu örnekte Terminal
'in iTerm üzerinde erişimi vardır:
iTerm Üzerinde
FDA'ya sahip olmayan Terminal, FDA'ya sahip iTerm'i çağırabilir ve onu kullanarak işlemler gerçekleştirebilir:
Bu bölümde, macOS TCC (Transparency, Consent, and Control) atlamaları hakkında bilgi bulabilirsiniz.
Finder Üzerinden
Veya bir Uygulamanın Finder üzerinde erişimi varsa, şöyle bir betik çalıştırabilir:
Uygulama davranışına göre
CVE-2020–9934 - TCC
tccd daemon kullanıcının TCC kullanıcı veritabanına erişmek için HOME
env değişkenini kullandığı kullanıcı alanıdır: $HOME/Library/Application Support/com.apple.TCC/TCC.db
This Stack Exchange post 'e göre ve TCC daemonunun mevcut kullanıcının etki alanı içinde launchd
aracılığıyla çalıştırıldığından, onunla iletilen tüm çevre değişkenlerini kontrol etmek mümkündür.
Bu nedenle, bir saldırgan launchctl
içinde $HOME
çevre değişkenini kontrol edilen bir dizine işaret etmek için ayarlayabilir, TCC daemonunu yeniden başlatabilir ve ardından TCC veritabanını doğrudan değiştirerek kendisine kullanılabilir tüm TCC ayrıcalıklarını vererek son kullanıcıya hiçbir zaman sormadan.
PoC:
CVE-2021-30761 - Notlar
Notlar, TCC korumalı konumlara erişime sahipti ancak bir not oluşturulduğunda bu korumalı olmayan bir konumda oluşturulur. Bu nedenle, notlardan birinin korumalı bir dosyayı bir nota kopyalamasını isteyebilir ve ardından dosyaya erişebilirsiniz:
CVE-2021-30782 - Taşınma
/usr/libexec/lsd
ikili dosyası, libsecurity_translocate
kütüphanesi ile com.apple.private.nullfs_allow
yetkisine sahipti, bu da nullfs bağlantısı oluşturmasına izin veriyordu ve com.apple.private.tcc.allow
yetkisine sahipti ve kTCCServiceSystemPolicyAllFiles
ile her dosyaya erişim sağlıyordu.
"Library" klasörüne karantina özniteliği eklemek, com.apple.security.translocation
XPC servisini çağırmak ve ardından Library'yi $TMPDIR/AppTranslocation/d/d/Library
olarak eşlemek ve Library içindeki tüm belgelere erişmek mümkündü.
CVE-2023-38571 - Müzik ve TV
Müzik
ilginç bir özelliğe sahiptir: Çalıştığında, kullanıcının "ortam kütüphanesine" ~/Music/Music/Media.localized/Automatically Add to Music.localized
bırakılan dosyaları içe aktaracaktır. Dahası, şuna benzer bir şey çağırır: rename(a, b);
burada a
ve b
şunlardır:
a = "~/Music/Music/Media.localized/Automatically Add to Music.localized/myfile.mp3"
b = "~/Music/Music/Media.localized/Automatically Add to Music.localized/Not Added.localized/2023-09-25 11.06.28/myfile.mp3
Bu rename(a, b);
davranışı bir Yarış Koşuluna karşı savunmasızdır, çünkü Automatically Add to Music.localized
klasörüne sahte bir TCC.db dosyası yerleştirmek ve ardından yeni klasörün (b) oluşturulduğunda dosyayı kopyalamak, silmek ve onu ~/Library/Application Support/com.apple.TCC
'ye yönlendirmek mümkündür.
SQLITE_SQLLOG_DIR - CVE-2023-32422
Eğer SQLITE_SQLLOG_DIR="yol/klasör"
ise temelde herhangi bir açık db o yola kopyalanır. Bu CVE'de bu kontrol, FDA'ya sahip bir işlem tarafından açılacak bir SQLite veritabanına yazmak için kötüye kullanıldı ve ardından SQLITE_SQLLOG_DIR
'yi dosya adındaki sembolik bağlantı ile kötüye kullanmak, böylece bu veritabanı açıldığında, kullanıcı TCC.db'si açılanla üzerine yazılır.
Daha fazla bilgi yazılımda ve sunumda.
SQLITE_AUTO_TRACE
Eğer SQLITE_AUTO_TRACE
ortam değişkeni ayarlanmışsa, libsqlite3.dylib
kütüphanesi tüm SQL sorgularını günlüğe kaydetmeye başlayacaktır. Birçok uygulama bu kütüphaneyi kullandığından, tüm SQLite sorgularını günlüğe kaydetmek mümkündü.
Birçok Apple uygulaması, TCC korumalı bilgilere erişmek için bu kütüphaneyi kullandı.
MTL_DUMP_PIPELINES_TO_JSON_FILE - CVE-2023-32407
Bu çevre değişkeni, çeşitli programların bağımlılığı olan Metal
çerçevesi tarafından kullanılır, en önemlisi Music
programıdır, FDA'ya sahiptir.
Aşağıdakini ayarlayarak: MTL_DUMP_PIPELINES_TO_JSON_FILE="path/name"
. Eğer path
geçerli bir dizin ise, hata tetiklenecek ve programda neler olup bittiğini görmek için fs_usage
kullanabiliriz:
open()
ilepath/.dat.nosyncXXXX.XXXXXX
(X rastgele) adında bir dosya açılacakbir veya daha fazla
write()
işlemi içeriği dosyaya yazacak (bunu kontrol etmiyoruz)path/.dat.nosyncXXXX.XXXXXX
rename()
ilepath/name
olarak yeniden adlandırılacak
Bu geçici bir dosya yazma işlemidir, ardından güvenli olmayan bir şekilde rename(eski, yeni)
işlemi gerçekleşir.
Bu güvenli değildir çünkü eski ve yeni yolları ayrı ayrı çözmesi gerekir, bu da biraz zaman alabilir ve Yarış Koşulu'na karşı savunmasız olabilir. Daha fazla bilgi için xnu
fonksiyonu renameat_internal()
'a bakabilirsiniz.
Yani, temelde, ayrıcalıklı bir işlem, kontrol ettiğiniz bir klasörden yeniden adlandırma yaparsa, bir RCE kazanabilir ve erişimi farklı bir dosyaya yönlendirebilir veya bu CVE'de olduğu gibi, ayrıcalıklı uygulamanın oluşturduğu dosyayı açabilir ve bir FD saklayabilir.
Yeniden adlandırma, kontrol ettiğiniz bir klasöre erişirse, kaynak dosyayı değiştirmişseniz veya bir FD'si varsa, hedef dosyayı (veya klasörü) bir sembolik bağa işaret etmek için değiştirebilirsiniz, böylece istediğiniz zaman yazabilirsiniz.
Bu, CVE'deki saldırıydı: Örneğin, kullanıcının TCC.db
dosyasını üzerine yazmak için şunları yapabiliriz:
/Users/hacker/ourlink
'i/Users/hacker/Library/Application Support/com.apple.TCC/
'ye yönlendiren bir bağ oluşturun/Users/hacker/tmp/
dizinini oluşturunMTL_DUMP_PIPELINES_TO_JSON_FILE=/Users/hacker/tmp/TCC.db
olarak ayarlayınbu çevre değişkeniyle
Music
'i çalıştırarak hatayı tetikleyin/Users/hacker/tmp/.dat.nosyncXXXX.XXXXXX
'inopen()
'ını yakalayın (X rastgele)burada ayrıca bu dosyayı yazmak için
open()
yapın ve dosya tanımlayıcısını elinizde tutun/Users/hacker/tmp
'yi atomik olarak/Users/hacker/ourlink
ile bir döngü içinde değiştirinbunu yapmamızın nedeni, yarış penceresinin oldukça dar olması nedeniyle başarılı olma şansımızı maksimize etmek, ancak yarışı kaybetmenin ihmal edilebilir bir dezavantajı vardır
biraz bekleyin
şanslı olup olmadığımızı test edin
değilse, tekrar en baştan çalıştırın
Daha fazla bilgi için https://gergelykalman.com/lateralus-CVE-2023-32407-a-macos-tcc-bypass.html
Şimdi, eğer MTL_DUMP_PIPELINES_TO_JSON_FILE
çevre değişkenini kullanmaya çalışırsanız, uygulamalar başlatılmaz
Apple Uzak Masaüstü
Root olarak bu hizmeti etkinleştirebilir ve ARD ajanı tam disk erişimine sahip olacak, bu da ardından bir kullanıcının yeni bir TCC kullanıcı veritabanı kopyalamasını sağlamak için kötüye kullanılabilir.
NFSHomeDirectory ile
TCC, kullanıcının HOME klasöründeki bir veritabanını kontrol etmek için kullanır, bu da kullanıcının $HOME/Library/Application Support/com.apple.TCC/TCC.db yolundaki kullanıcıya özgü kaynaklara erişimi kontrol etmek için kullanılır. Bu nedenle, kullanıcı, bir $HOME çevresel değişkenini farklı bir klasöre işaret edecek şekilde TCC'yi yeniden başlatmayı başarırsa, kullanıcı /Library/Application Support/com.apple.TCC/TCC.db'de yeni bir TCC veritabanı oluşturabilir ve TCC'yi herhangi bir uygulamaya herhangi bir TCC iznini vermesi için kandırabilir.
Apple, NFSHomeDirectory
özelliğinde kullanıcının profilinde depolanan ayarları kullanır, bu nedenle bu değeri değiştirmeye izin veren izinlere sahip bir uygulamayı ele geçirirseniz (kTCCServiceSystemPolicySysAdminFiles
), bu seçeneği bir TCC atlatma ile silahlandırabilirsiniz.
CVE-2021-30970 - Powerdir
İlk POC, hedef uygulama için bir csreq blogu kullanır.
Hedef uygulama için bir csreq blogu alın.
Gerekli erişimlere sahip sahte bir TCC.db dosyası ve csreq blogunu yerleştirin.
Kullanıcının Directory Hizmetleri girişini dsexport ile dışa aktarın.
Kullanıcının ev dizinini değiştirmek için Directory Hizmetleri girişini değiştirin.
Değiştirilmiş Directory Hizmetleri girişini dsimport ile içe aktarın.
Kullanıcının tccd'sini durdurun ve işlemi yeniden başlatın.
İkinci POC, com.apple.private.tcc.allow
değeri kTCCServiceSystemPolicySysAdminFiles
olan /usr/libexec/configd
'yi kullanıyordu.
Bir saldırgan, configd
'yi -t
seçeneğiyle çalıştırarak özel bir Paket yüklemesini belirleyebilirdi. Bu nedenle, saldırı, kullanıcının ev dizinini değiştirmenin configd
kod enjeksiyonu ile dsexport
ve dsimport
yöntemini değiştirmesini sağlar.
Daha fazla bilgi için orijinal rapora bakın.
İşlem enjeksiyonu ile
Bir işlem içine kod enjekte etmek ve TCC ayrıcalıklarını kötüye kullanmak için farklı teknikler vardır:
pagemacOS Process AbuseAyrıca, TCC'yi atlatmak için en yaygın işlem enjeksiyonu, eklentiler (kütüphane yükleme) aracılığıyla gerçekleştirilir. Eklentiler genellikle kütüphane veya plist biçiminde ekstra kodlardır, ana uygulama tarafından yüklenir ve kendi bağlamı altında çalıştırılır. Bu nedenle, ana uygulamanın TCC kısıtlı dosyalara erişimi varsa (izin verilen izinler veya yetkilendirmeler aracılığıyla), özel kod da buna sahip olacaktır.
CVE-2020-27937 - Directory Utility
Uygulama /System/Library/CoreServices/Applications/Directory Utility.app
, kTCCServiceSystemPolicySysAdminFiles
yetkisine sahipti, .daplug
uzantılı eklentileri yüklüyordu ve sertleştirilmiş çalışma zamanına sahip değildi.
Bu CVE'yi silahlandırmak için, NFSHomeDirectory
değiştirilir (önceki yetkiyi kötüye kullanarak) ve TCC'yi atlatmak için kullanıcının TCC veritabanını ele geçirebilmek için değiştirilir.
Daha fazla bilgi için orijinal rapora bakın.
CVE-2020-29621 - Coreaudiod
/usr/sbin/coreaudiod
ikili dosyasının com.apple.security.cs.disable-library-validation
ve com.apple.private.tcc.manager
yetkileri vardı. İlk yetki kod enjeksiyonuna izin verirken, ikinci yetki ise TCC'yi yönetme erişimi sağlıyordu.
Bu ikili dosya, /Library/Audio/Plug-Ins/HAL
klasöründen üçüncü taraf eklentileri yüklemeye izin veriyordu. Bu nedenle, bu PoC ile bir eklenti yüklemek ve TCC izinlerini kötüye kullanmak mümkündü:
Daha fazla bilgi için orijinal rapora bakın.
Aygıt Soyutlama Katmanı (DAL) Eklentileri
Core Media I/O aracılığıyla kamera akışını açan sistem uygulamaları (kTCCServiceCamera
'ya sahip uygulamalar) bu eklentileri /Library/CoreMediaIO/Plug-Ins/DAL
konumunda yükler (SIP kısıtlaması olmayan).
Oraya yaygın bir kurucu ile bir kütüphane saklamak, kod enjekte etmek için çalışacaktır.
Bu konuda birkaç Apple uygulaması savunmasızdı.
Firefox
Firefox uygulamasında com.apple.security.cs.disable-library-validation
ve com.apple.security.cs.allow-dyld-environment-variables
yetkileri bulunmaktaydı:
Bu orijinal raporu kontrol etmek için daha fazla bilgi için bakın.
CVE-2020-10006
/system/Library/Filesystems/acfs.fs/Contents/bin/xsanctl
ikili dosyasında com.apple.private.tcc.allow
ve com.apple.security.get-task-allow
yetkileri vardı, bu da süreç içine kod enjekte etmeye ve TCC izinlerini kullanmaya olanak tanıdı.
CVE-2023-26818 - Telegram
Telegram'ın com.apple.security.cs.allow-dyld-environment-variables
ve com.apple.security.cs.disable-library-validation
yetkileri vardı, bu nedenle kamerayla kayıt yapma gibi izinlerine erişmek mümkündü. Payload'ı yazılımında bulabilirsiniz.
Bir kütüphaneyi yüklemek için env değişkenini kullanmanın nasıl yapıldığına dikkat edin, bir özel plist bu kütüphaneyi enjekte etmek için oluşturuldu ve launchctl
bunu başlatmak için kullanıldı:
Açık çağrılarla
open
komutunu kumanda edebilmek mümkündür, hatta kumanda edilirken bile kumanda edilebilir
Terminal Betikleri
Terminal Tam Disk Erişimi (TDE) vermek oldukça yaygındır, en azından teknik kişiler tarafından kullanılan bilgisayarlarda. Ve .terminal
betiklerini bu şekilde kullanmak mümkündür.
.terminal
betikleri, CommandString
anahtarında yürütülecek komutla birlikte olan bu örnekteki gibi plist dosyalarıdır:
Bir uygulama, /tmp gibi bir konumda bir terminal betiği yazabilir ve şu şekilde bir komutla başlatabilir:
Montaj Yoluyla
CVE-2020-9771 - mount_apfs TCC atlatma ve ayrıcalık yükseltme
Herhangi bir kullanıcı (hatta ayrıcalıksız olanlar bile) bir zaman makinesi anı görüntüsü oluşturabilir ve monte edebilir ve o anı görüntüsündeki TÜM dosyalara erişebilir.
Kullanılan uygulamanın (örneğin Terminal
) Tam Disk Erişimi (FDA) erişimine sahip olması gereken tek ayrıcalık, bunun bir yönetici tarafından verilmesi gereken (kTCCServiceSystemPolicyAllfiles
) ayrıcalıktır.
Daha detaylı bir açıklama orijinal raporda bulunabilir.
CVE-2021-1784 ve CVE-2021-30808 - TCC dosyası üzerine bağlama
TCC DB dosyası korunsa bile, yeni bir TCC.db dosyasını üzerine bağlamak mümkündü:
Bu bölümde, macOS TCC (Transparency, Consent, and Control) atlamaları hakkında bilgi bulabilirsiniz.
Orijinal yazıda bulunan tam exploit için orijinal yazıya bakın.
asr
/usr/sbin/asr
aracı, TCC korumalarını atlayarak tüm diski kopyalamaya ve başka bir yere bağlamaya izin veriyordu.
Konum Hizmetleri
/var/db/locationd/clients.plist
içinde üçüncü bir TCC veritabanı bulunur ve burada konum hizmetlerine erişime izin verilen istemciler belirtilir.
/var/db/locationd/
klasörü DMG bağlama koruması olmadığından kendi plist'imizi bağlamak mümkündü.
Başlangıç uygulamalarıyla
pagemacOS Auto StartGrep ile
Bazı durumlarda dosyalar hassas bilgileri (e-postalar, telefon numaraları, mesajlar...) korunmayan konumlarda saklar (bu da Apple için bir zafiyet olarak kabul edilir).
Sentetik Tıklamalar
Bu artık çalışmıyor, ancak geçmişte çalışıyordu:
Başka bir yol CoreGraphics olayları kullanarak:
Referans
Last updated