Series · 4 partsmacOS Security BoundariesPart 2 · You are here
- 1Uygulama Sandbox'taydı. XPC Sınırı Hâlâ Yetkilendirme İstiyordu
- 2İzin Verildi. Veri Kullanımı Hâlâ Politika Gerektiriyordu: macOS TCCYou are here
- 3Helper Kayıtlıydı. Yaşam Döngüsü Uygulamadan Uzun Sürdü
- 4Olay Görünürdü. Tespitin Hâlâ Bağlama İhtiyacı Vardı: macOS Endpoint Security
60 saniyede macOS onay ve TCC sınırları
Bir macOS uygulaması kamera, mikrofon, kişiler, takvimler, otomasyon, ekran kaydı, erişilebilirlik veya Tam Disk Erişimi (Full Disk Access) talep ettiğinde platform; çalışan süreç ile korunan kaynak arasına kullanıcı veya yönetici onayını koyabilir. Bu gizlilik denetimleri ailesi yaygın olarak TCC (Transparency, Consent, and Control) olarak adlandırılır.
Bu karar kritiktir; ancak anlamı son derece dardır: Belirli ve sorumlu bir kod kimliğinin, platformun mevcut kuralları altında korunan bir kaynak sınıfına erişebileceğini söyler. Uygulamadaki her özelliğin dönen her kaydı kullanabileceğini, bir eklentinin (plug-in) aynı amacı devralabileceğini veya bir buluta yükleme, model prompt’u, dışa aktarma ya da arka plan iş akışının meşru olduğunu söylemez.
Sızma testlerindeki en büyük yanılgı, sistemin onay isteminde (prompt) durmaktır:
Kullanıcı kaynak erişimini onayladı. Uygulama ise verinin her bir kullanımını ayrıca yetkilendirmek zorundadır.
Savunulabilir bir inceleme bu nedenle zincirin tamamını izler: Beyan edilen amaç → İstekte bulunan ikili (binary) → Sistem kararı → Kaynak tanıtıcısı (handle) → Veri dönüşümü → Dış etki → Saklama (retention) → İptal (revocation). Asıl soru yalnızca ekranda onay penceresinin çıkıp çıkmadığı değildir. Ortaya çıkan yeteneğin kullanıcının anladığı ve onayladığı özelliğe, hesaba, hedefe, süreye ve açıklamaya bağlı kalıp kalmadığıdır.
Beş kontrol, beş farklı karar
TCC, komşu güvenlik kontrollerinden ayrıldığında en net şekilde anlaşılır:
| Kontrol | Verdiği karar | Vermediği karar |
|---|---|---|
| Kod imzalama | Hangi kod kimliği çalışıyor? | Bu özelliğin bu veriyi işlemesine izin var mı? |
| App Sandbox | Bu çalıştırılabilir dosya hangi kaynaklara erişebilir? | Erişilebilen her nesne mevcut iş akışı için geçerli mi? |
| Entitlement’lar | Yürütülebilir dosya hangi korunan yeteneği talep edebilir? | Kullanıcı buna onay verdi mi ve sonraki kullanım uygun mu? |
| TCC ve onay | Kullanıcı veya yönetici bu korunan kaynak sınıfına izin verdi mi? | Uygulama bu sonucu saklayabilir, birleştirebilir, iletebilir mi? |
| Uygulama politikası | Hangi özellik, hesap, hedef ve durum bu veriyi tüketebilir? | İşletim sisteminin gizlilik mekanizmasını atlatabilir mi? |
Apple’ın korunan kaynaklara erişim talep etme rehberi, doğru bir kullanım amacı dizesi (purpose string) gerektirir ve kullanıcı bir karar verene kadar erişimin varsayılan olarak reddedildiğini belirtir. Bazı yetenekler ayrıca imzalı bir entitlement gerektirir. Bunlar birbirinin yerine geçen değil, birbirini tamamlayan kapılardır.
Dosyalar için App Sandbox başka bir terminoloji ekler: Kullanıcı tarafından seçilen bir dosya veya security-scoped bookmark, sandbox altındaki bir sürecin erişimini belirli bir kaynağa kadar genişletebilir. Apple’ın sandbox dosya erişimi dokümantasyonu, diğer erişim denetim katmanlarının işlemi yine de reddedebileceğini belirtir. Erişilebilir bir URL bir yetenektir (capability). Bir ayrıştırıcının, uploader’ın, helper’ın veya hesap geçişinin bunu güvenle kullanacağının kanıtı değildir.
Bir ayara dokunmadan önce gizlilik yüzeyini çıkarın
Kişisel veya müşteriye ait bir Mac üzerinde gizlilik veritabanlarını (TCC.db) dışarı aktararak veya ayarları sıfırlayarak işe başlamayın. Uygulama paketi ve ürün dokümantasyonu ile başlayın. Amaç, kullanıcının gerçek izinlerini toplamadan ürünün ne beyan ettiğini anlamaktır.
Uygulama paketindeki her çalıştırılabilir dosya için şunları kaydedin:
- Tam kod imzalama tanımlayıcısı ve designated requirement;
- Sandbox ve gizliliğe duyarlı entitlement’lar;
- Kullanım açıklaması anahtarları (usage description keys) ve yerelleştirilmiş amaç dizeleri;
- Korunan kaynakları talep eden bağlı framework’ler ve kod yolları;
- İş akışına dahil olan XPC servisleri, login item’lar, eklentiler ve uzantılar;
- Talebin gerçekleşmesi gereken özellik durumu;
- Yerel tüketiciler, uzak hedefler, saklama kuralları ve silme davranışı.
Salt okunur inceleme bu soruların birçoğunu yanıtlayabilir:
codesign -d --entitlements :- CustomerApp.app
plutil -p CustomerApp.app/Contents/Info.plist
find CustomerApp.app/Contents -maxdepth 4 -type d -name '*.xpc' -print
Bu komutlar müşteri tarafından sağlanan test dosyalarını inceler. Kullanıcının yüklü uygulamalarını listelemeyi veya kullanıcı düzeyindeki TCC veritabanını kurcalamayı haklı çıkarmaz. Kişisel bir Mac; sahibinin uygulamaları, alışkanlıkları, hesapları ve geçmiş kararları hakkında hassas kanıtlar barındırır; bu bilgilerin bu metodolojiyi anlatmak için toplanmasına gerek yoktur.
Statik envanteri bir özellik matrisine dönüştürün:
| Özellik | Sorumlu çalıştırılabilir | Korunan sınıf | Onay tetikleyicisi | Gösterilen amaç | Dönen yetenek | Sonraki etki |
|---|---|---|---|---|---|---|
| Sesli not | kesin istemci kimliği | mikrofon | açık kayıt eylemi | bu notu kaydet | ses akışı | yerel taslak |
| İçe aktarma | ana uygulama | seçilen dosyalar | dosya açma paneli | kullanıcı seçimi | kapsamlı URL | yerel ayrıştırıcı |
| Otomasyon | XPC istemcisi ve hedefi | Apple Events | açık entegrasyon kurulumu | tanımlı uygulamayı yönet | olay kanalı | sınırlı komut |
| Destek kaydı | sistem uzantısı veya app | ekran kaydı | açık destek oturumu | görünen ekranı kaydet | görüntü karesi akışı | onaylı vaka yüklemesi |
Son sütun yüzeysel bir incelemeyi engeller. İki ürün aynı kaynağı talep edip tamamen farklı riskler doğurabilir: Biri yerel bir seçimi geçici bir önizlemeye dönüştürür; diğeri sürekli veriyi uzak bir işleyiciye gönderir ve oturum kapatıldıktan sonra da saklamaya devam eder.
Yalnızca onay anını değil, durum geçişlerini test edin
Faydalı bir gizlilik testi kontrollü durumlara sahiptir. Sentetik kişiler, takvimler, dosyalar, sesler ve ekran içerikleri içeren tahsis edilmiş bir test hesabı veya tek kullanımlık bir test Mac’i kullanın. Denetçinin kişisel verilerini asla test verisi olarak kullanmayın.
En azından şunları test edin:
- Belirlenmemiş (Undetermined): Özellik, işletim sistemi isteminden önce eylemi kullanıcıya açıklamalı ve kasıtlı bir etkileşim olmadan erişimden kaçınmalıdır.
- Reddedilmiş (Denied): Özellik güvenli şekilde kapanmalı (fail-closed), ilgisiz işlevleri korumalı ve kullanıcıyı sürekli zorlamadan dürüst bir kurtarma yolu sunmalıdır.
- Onaylanmış (Granted): Yeteneği yalnızca sorumlu bileşen ve talep edilen iş akışı almalıdır.
- Çalışırken değiştirilmiş: Onayın geri alınması (revocation), aktif kaydı derhal durdurmalı veya sınırlandırmalı ve gözlemlenebilir bir durum değişikliği üretmelidir.
- Hesap geçişi: Oturum kapatma, kiracı değiştirme ve rol azaltma; sistem düzeyindeki onay kalsa bile uygulama düzeyindeki yetkilendirmeyi geçersiz kılmalıdır.
- Özellik devre dışı: Yerel kuyruklar, bookmark’lar, önbellekler, arka plan işleri ve helper durumu veri kullanımını sürdürmemelidir.
Apple geliştirme testleri için tccutil reset komutunu sunar; ancak bu durum değiştiren bir işlemdir. Bunu kişisel bir dizüstü bilgisayarda bir pencereyi tekrar çıkartmak için değil; yalnızca üzerinde anlaşılmış bir kurtarma planı olan test kimliğinde kullanın.
Tehlikeli boşluk erişim başarılı olduktan sonradır
Bir API veriyi döndürdükten sonra, platformun onay mekanizması artık uygulamanın meşru ve gayrimeşru veri yollarını birbirinden ayıramaz. İnceleme; nesneyi ayrıştırıcıların, paylaşılan konteynerlerin, veritabanlarının, logların, analitiklerin, XPC çağrılarının, bulut isteklerinin, dışa aktarmaların ve yapay zeka girdilerinin içine kadar takip etmelidir.
Kopmuş yetki bağlarını arayın:
- Yerel önizleme için onaylanan veri otomatik bir uzak yüklemeye dönüşüyor mu?
- Proje veya hesap kaldırıldıktan sonra security-scoped bookmark kullanılabilir kalıyor mu?
- Daha geniş izne sahip bir helper, daha zayıf bir istemciden gelen dosya yolunu veya işlemi doğrudan kabul ediyor mu?
- Bir uzantı, korunan veriyi gereksiz tüketicilerin bulunduğu paylaşılan bir konteynere koyuyor mu?
- Reddedilmiş veya iptal edilmiş bir durum arayüz metnini değiştirip aktif veri akışını arkada durdurmuyor mu?
- Bir amaç dizesi tek bir özelliği tanımlarken bir arka plan bileşeni başka bir eylem yürütüyor mu?
- Tanılama logları dosya adlarını, kişi verilerini, mesaj metinlerini, ekran içeriklerini veya kullanıcı kimliklerini içeriyor mu?
Platform denetimi gerçekten aşılmadıkça raporda “TCC bypass” ifadesi kullanılmamalıdır. Genellikle bulgu, meşru erişimden sonra gerçekleşen bir uygulama yetkilendirmesi, veri minimizasyonu, saklama veya şeffaflık hatasıdır. Başarısız olan sınırın doğru adlandırılması, iyileştirmenin hem daha dar kapsamlı hem de çok daha sağlam olmasını sağlar.
Kanıt matrisi
| İddia | Pozitif kanıt | Negatif kontrol | Neler kanıtlanmamış kalır |
|---|---|---|---|
| İstem hedeflenen özelliğe aittir | Sentetik test verisi, bilinçli etkileşim, eşleşen amaç dizesi, tanımlanmış ikili dosya | İlgisiz özelliği çağırın; istem veya erişim oluşmaz | Her yerelleştirme ve eski işletim sistemi sürümü |
| Ret işlemi güvenle kapanır (fail-closed) | Korunan API ret döner ve veriye bağlı hiçbir etki oluşmaz | Eylemi tekrarlayın ve helper’ı yeniden başlatın | Enstrümante edilmemiş üçüncü taraf SDK davranışları |
| Onay aktif hesaba bağlıdır | Hedeflenen hesap beklenen yerel veya uzak etkiyi üretir | Sistem onayı dururken hesap değiştirin; etki engellenir | Test kapsamı dışındaki sunucu tarafı saklama |
| İptal işlemi veri kullanımını durdurur | Aktif akış veya bookmark erişimi sonlanır, arayüz durumu değişir | Bayat nesneyi yeniden açın veya arka plan bileşenini başlatın | Gelecekteki işletim sistemi uygulama değişiklikleri |
| Loglar gizliliği korur | Sentetik işaretçi olayları bağlarken içerik sansürlenmiş (redacted) kalır | Tanılama dökümünde ham fikstür değerini arayın | Belirlenen veri toplama penceresi dışındaki loglar |
| Temizlik eksiksizdir | Test kayıtları, bookmark’lar, önbellekler, kuyruklar ve helper’lar kaldırılır | Uygulamayı yeniden başlatın ve fikstürün devam etmediğini görün | Bilinçli olarak toplanmayan kişisel cihaz gizlilik durumu |
Bu matris gözlem ile yorumu birbirinden ayırır. Görünür bir istem bir talebin gerçekleştiğini kanıtlar; bir framework’ün bunu neden talep ettiğini kanıtlamaz. Başarılı bir API çağrısı erişilebilirliği kanıtlar; uygun bir saklama politikasını kanıtlamaz. Eksik bir log satırı ise beklenen telemetri yolu bağımsız olarak doğrulanmadıkça ne olayın yokluğunu ne de engellendiğini kanıtlar.
İyileştirme platform sınırını korumalıdır
Başarılı düzeltmeler nadiren macOS gizlilik kontrollerini zayıflatmayı içerir. Uygulamanın veri kullanımını daha dar ve açıklanabilir hale getirirler:
- Erişimi kullanıcının ilgili özelliği başlattığı anda talep edin;
- Her amaç dizesini spesifik, yerelleştirilmiş ve sonraki gerçek kullanımla tutarlı kılın;
- Korunan veri işlemeyi buna ihtiyaç duyan en düşük yetkili bileşende tutun;
- XPC üzerinden ham veriler veya yeniden kullanılabilir dosya yolları yerine dar sonuçlar aktarın;
- İşlemleri istemciden gelen tanımlayıcılara değil, güvenilir hesap ve özellik durumuna bağlayın;
- Oturum kapatma veya iptal durumunda bayat security-scoped bookmark’ları, kuyrukları ve önbellekleri silin;
- Arka plan kayıt işlemlerini kullanıcıya görünür ve bağımsız olarak durdurulabilir kılın;
- İçerikleri ve kişisel tanımlayıcıları gizli tutarken kararları ve etki sınıflarını günlüğe kaydedin;
- Reddedilen ve iptal edilen yolların güvenli kaldığını kanıtlayan test durumunu belgeleyin.
TCC bir uygulama politika motoru değildir ve öyle olması beklenmemelidir. Gücü, kullanıcıyı ve işletim sistemini kaynak sınırına yerleştirmesinden gelir. Ürünün güvenliği ise kaynak uygulama koduna geçtikten sonra bu niyeti koruma becerisinden kaynaklanmalıdır.
Kaynaklar
- Apple Geliştirici Dokümantasyonu, Requesting access to protected resources
- Apple Geliştirici Dokümantasyonu, Resetting access to protected resources in macOS
- Apple Geliştirici Dokümantasyonu, Accessing files from the macOS App Sandbox
- Apple Geliştirici Dokümantasyonu, Protecting user data with App Sandbox
- Apple Destek, Change Privacy & Security settings on Mac
Bu çalışma, kaynakları gözden geçirilmiş bir değerlendirme metodolojisidir. Bir TCC bypass’ı iddia etmez, kişisel bir TCC veritabanını incelemez veya sentetik kontrolleri bir prodüksiyon uygulamasının bulguları gibi sunmaz.
Bu teknik not ne kadar güncel?
En son kaynak incelemesi, içerik güncellemesi veya yayın tarihi gösterilmektedir.
Birincil kamu kayıtları kontrol edildi. Ortama özgü davranış, ayrıca yeniden üretilmedikçe iddianın dışındadır.
