Series · 4 partsmacOS Security BoundariesPart 2 · You are here
  1. 1Uygulama Sandbox'taydı. XPC Sınırı Hâlâ Yetkilendirme İstiyordu
  2. 2İzin Verildi. Veri Kullanımı Hâlâ Politika Gerektiriyordu: macOS TCCYou are here
  3. 3Helper Kayıtlıydı. Yaşam Döngüsü Uygulamadan Uzun Sürdü
  4. 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:

KontrolVerdiği kararVermediği karar
Kod imzalamaHangi kod kimliği çalışıyor?Bu özelliğin bu veriyi işlemesine izin var mı?
App SandboxBu çalıştırılabilir dosya hangi kaynaklara erişebilir?Erişilebilen her nesne mevcut iş akışı için geçerli mi?
Entitlement’larYürütülebilir dosya hangi korunan yeteneği talep edebilir?Kullanıcı buna onay verdi mi ve sonraki kullanım uygun mu?
TCC ve onayKullanı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.

özellik niyetiNEDEN · NE ZAMAN kod kimliğiBINARY · İMZA TCC kararıİZİN VER · ENGELLE kaynak yeteneğiHANDLE · AKIŞ kullanım politikasıÖZELLİK · HESAP sınırlandırılmış etkiYEREL · UZAK kanıtSONUÇ · ETKİ yaşam döngüsüSAKLA · İPTAL ET ONAY KAPSAMLIDIRkaynak erişimi ≠ kısıtlamasız veri kullanımı
Sistem izni bir yetenek (capability) üretir. Uygulama politikası bu yeteneği bir özelliğe, hesaba, hedefe ve yaşam döngüsüne bağlamak zorundadır.

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:

ÖzellikSorumlu çalıştırılabilirKorunan sınıfOnay tetikleyicisiGösterilen amaçDönen yetenekSonraki etki
Sesli notkesin istemci kimliğimikrofonaçık kayıt eylemibu notu kaydetses akışıyerel taslak
İçe aktarmaana uygulamaseçilen dosyalardosya açma panelikullanıcı seçimikapsamlı URLyerel ayrıştırıcı
OtomasyonXPC istemcisi ve hedefiApple Eventsaçık entegrasyon kurulumutanımlı uygulamayı yönetolay kanalısınırlı komut
Destek kaydısistem uzantısı veya appekran kaydıaçık destek oturumugörünen ekranı kaydetgö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:

  1. 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.
  2. 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.
  3. Onaylanmış (Granted): Yeteneği yalnızca sorumlu bileşen ve talep edilen iş akışı almalıdır.
  4. Ç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.
  5. 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.
  6. Ö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.

sentetik fikstürKİŞİSEL VERİ YOK beklenen bağlamÖZELLİK · HESAP izin verilen kullanımTEK ETKİ yanlış özellikENGELLE yanlış hesapENGELLE yanlış hedefENGELLE onay iptal edildiDURDUR · AT KANIT KARŞITLIK İSTERhedeflenen tek yol ve engellenen/iptal edilen kontroller
Yalnızca onay verilmiş bir test eksiktir. Her seferinde tek bir yetkilendirme değişkenini değiştirin; uyumsuz veya iptal edilmiş bağlamların aynı etkiyi üretemediğini kanıtlayın.

Kanıt matrisi

İddiaPozitif kanıtNegatif kontrolNeler kanıtlanmamış kalır
İstem hedeflenen özelliğe aittirSentetik 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şmazHer 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şmazEylemi tekrarlayın ve helper’ı yeniden başlatınEnstrümante edilmemiş üçüncü taraf SDK davranışları
Onay aktif hesaba bağlıdırHedeflenen hesap beklenen yerel veya uzak etkiyi üretirSistem onayı dururken hesap değiştirin; etki engellenirTest kapsamı dışındaki sunucu tarafı saklama
İptal işlemi veri kullanımını durdururAktif akış veya bookmark erişimi sonlanır, arayüz durumu değişirBayat nesneyi yeniden açın veya arka plan bileşenini başlatınGelecekteki işletim sistemi uygulama değişiklikleri
Loglar gizliliği korurSentetik işaretçi olayları bağlarken içerik sansürlenmiş (redacted) kalırTanılama dökümünde ham fikstür değerini arayınBelirlenen veri toplama penceresi dışındaki loglar
Temizlik eksiksizdirTest kayıtları, bookmark’lar, önbellekler, kuyruklar ve helper’lar kaldırılırUygulamayı yeniden başlatın ve fikstürün devam etmediğini görünBilinç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

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.

Kaynaklar ve güncellik

Bu teknik not ne kadar güncel?

Kontrol edilen kaynaklar30 Ağustos 2026

En son kaynak incelemesi, içerik güncellemesi veya yayın tarihi gösterilmektedir.

İnceleme DurumuKamuya açık kaynaklar incelendi

Birincil kamu kayıtları kontrol edildi. Ortama özgü davranış, ayrıca yeniden üretilmedikçe iddianın dışındadır.