macOS Keychain
Anahtar Zincirleri
Kullanıcı Anahtar Zinciri (
~/Library/Keychains/login.keycahin-db
), uygulama şifreleri, internet şifreleri, kullanıcı tarafından oluşturulan sertifikalar, ağ şifreleri ve kullanıcı tarafından oluşturulan açık/özel anahtarlar gibi kullanıcıya özgü kimlik bilgilerini saklamak için kullanılır.Sistem Anahtar Zinciri (
/Library/Keychains/System.keychain
), WiFi şifreleri, sistem kök sertifikaları, sistem özel anahtarları ve sistem uygulama şifreleri gibi sistem genelinde kimlik bilgilerini saklar.
Şifre Anahtar Zinciri Erişimi
Bu dosyalar, doğrudan koruma içermemelerine rağmen indirilebilir, şifrelenmiştir ve şifresinin çözülmesi için kullanıcının düz metin şifresini gerektirir. Şifre çözme için Chainbreaker gibi bir araç kullanılabilir.
Anahtar Zinciri Girişleri Koruma
ACL'ler
Anahtar zincirindeki her giriş, çeşitli eylemleri gerçekleştirebilecek kişileri belirleyen Erişim Kontrol Listeleri (ACL'ler) ile yönetilir:
ACLAuhtorizationExportClear: Sahip olanın sıfır metin gizliliğini almasına izin verir.
ACLAuhtorizationExportWrapped: Sahip olanın başka bir sağlanan şifre ile şifrelenmiş sıfır metin almasına izin verir.
ACLAuhtorizationAny: Sahip olanın herhangi bir eylemi gerçekleştirmesine izin verir.
ACL'ler, bu eylemleri istem olmadan gerçekleştirebilecek güvenilir uygulamalar listesini de içerir. Bu şunlar olabilir:
N
il
(yetki gerektirmiyor, herkes güvenilir)Boş bir liste (hiç kimse güvenilir değil)
Belirli uygulamaların listesi.
Ayrıca giriş, ACLAuthorizationPartitionID
anahtarını içerebilir; bu, teamid, apple ve cdhash'i tanımlamak için kullanılır.
Eğer teamid belirtilmişse, giriş değerine istem olmadan erişmek için kullanılan uygulamanın aynı teamid'ye sahip olması gerekir.
Eğer apple belirtilmişse, uygulamanın Apple tarafından imzalanmış olması gerekir.
Eğer cdhash belirtilmişse, uygulama belirli bir cdhash'e sahip olmalıdır.
Anahtar Zinciri Girişi Oluşturma
Bir yeni giriş Keychain Access.app
kullanılarak oluşturulduğunda, aşağıdaki kurallar geçerlidir:
Tüm uygulamalar şifreleyebilir.
Hiçbir uygulama dışa aktaramaz/şifre çözemez (kullanıcıyı istemeden).
Tüm uygulamalar bütünlük kontrolünü görebilir.
Hiçbir uygulama ACL'leri değiştiremez.
partitionID
apple
olarak ayarlanır.
Bir uygulama anahtar zincirinde bir giriş oluşturduğunda, kurallar biraz farklıdır:
Tüm uygulamalar şifreleyebilir.
Sadece oluşturan uygulama (veya açıkça eklenen diğer uygulamalar) dışa aktarabilir/şifre çözebilir (kullanıcıyı istemeden).
Tüm uygulamalar bütünlük kontrolünü görebilir.
Hiçbir uygulama ACL'leri değiştiremez.
partitionID
teamid:[teamID burada]
olarak ayarlanır.
Anahtar Zincirine Erişim
security
security
APIs
Anahtar zinciri numaralandırması ve istemci istemi oluşturmayacak gizli bilgilerin dökümü LockSmith aracıyla yapılabilir.
Her anahtar zinciri girişi hakkında bilgi listeleyin ve alın:
API
SecItemCopyMatching
her giriş hakkında bilgi verir ve kullanırken ayarlayabileceğiniz bazı özellikler vardır:kSecReturnData
: Doğruysa, veriyi şifre çözmeye çalışır (potansiyel açılır pencereleri önlemek için yanlış olarak ayarlayın)kSecReturnRef
: Anahtar zinciri öğesine referans da alın (daha sonra açılır pencere olmadan şifre çözebileceğinizi görürseniz doğru olarak ayarlayın)kSecReturnAttributes
: Girişler hakkında meta verileri alınkSecMatchLimit
: Kaç sonuç döndürüleceğikSecClass
: Hangi tür anahtar zinciri girişi
Her girişin ACL'lerini alın:
API
SecAccessCopyACLList
ile anahtar zinciri öğesi için ACL'yi alabilirsiniz ve bu, her liste için:Açıklama
Güvenilir Uygulama Listesi. Bu şunlar olabilir:
Bir uygulama: /Applications/Slack.app
Bir ikili: /usr/libexec/airportd
Bir grup: group://AirPort
Verileri dışa aktarın:
API
SecKeychainItemCopyContent
düz metni alırAPI
SecItemExport
anahtarları ve sertifikaları dışa aktarır ancak içeriği şifreli olarak dışa aktarmak için şifre ayarlamanız gerekebilir
Ve bu, istemci istemi olmadan bir gizli bilgiyi dışa aktarabilmek için gereksinimlerdir:
Eğer 1+ güvenilir uygulama listelenmişse:
Uygun yetkilere ihtiyaç vardır (
Nil
, veya gizli bilgiye erişim için yetkilendirme listesinde yer almak)PartitionID ile eşleşen bir kod imzasına ihtiyaç vardır
Bir güvenilir uygulama ile eşleşen bir kod imzasına ihtiyaç vardır (veya doğru KeychainAccessGroup'un üyesi olmalısınız)
Eğer tüm uygulamalar güvenilir ise:
Uygun yetkilere ihtiyaç vardır
PartitionID ile eşleşen bir kod imzasına ihtiyaç vardır
Eğer PartitionID yoksa, bu gerekli değildir
Bu nedenle, eğer 1 uygulama listelenmişse, o uygulamaya kod enjekte etmeniz gerekir.
Eğer apple partitionID'de belirtilmişse, osascript
ile erişebilirsiniz, bu nedenle partitionID'de apple olan tüm uygulamalara güvenen herhangi bir şey. Python
de bunun için kullanılabilir.
İki ek özellik
Gizli: Bu, girişi UI Anahtar Zinciri uygulamasından gizlemek için bir boolean bayraktır
Genel: Meta verileri depolamak içindir (yani ŞİFRELİ DEĞİLDİR)
Microsoft, hassas uç noktaya erişim için tüm yenileme jetonlarını düz metin olarak saklıyordu.
Referanslar
Last updated