macOS Keychain
Last updated
Last updated
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Kullanıcı Anahtar Zinciri (~/Library/Keychains/login.keychain-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.
/System/Library/Keychains/*
içinde sertifikalar gibi diğer bileşenleri bulmak mümkündür.
iOS'ta yalnızca /private/var/Keychains/
konumunda bir Anahtar Zinciri bulunmaktadır. Bu klasör ayrıca TrustStore
, sertifika otoriteleri (caissuercache
) ve OSCP girişleri (ocspache
) için veritabanlarını içerir.
Uygulamalar, uygulama tanımlayıcılarına dayalı olarak anahtar zincirinde yalnızca özel alanlarına erişimle kısıtlanacaktır.
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 zincirindeki her giriş, çeşitli eylemleri gerçekleştirebilecek kişileri belirleyen Erişim Kontrol Listeleri (ACL'ler) ile yönetilmektedir:
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 listesi ile birlikte gelir. Bu şunlar olabilir:
Nil
(yetki gerektirmiyor, herkes güvenilir)
Boş bir liste (kimse güvenilir değil)
Belirli uygulamalar 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şin 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.
Bir yeni giriş oluşturulduğunda Keychain Access.app
kullanılarak, 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.
security
Anahtar zinciri numaralandırma ve istemci istemi oluşturmayacak gizli bilgilerin dökümü LockSmith aracıyla yapılabilir.
Diğer API uç noktaları SecKeyChain.h kaynak kodunda bulunabilir.
Güvenlik Çerçevesi kullanarak her anahtar zinciri girişi hakkında bilgi listeleyebilir ve alabilirsiniz veya Apple'ın açık kaynaklı cli aracı security'yi de kontrol edebilirsiniz. Bazı API örnekleri:
API SecItemCopyMatching
her giriş hakkında bilgi verir ve kullanırken ayarlayabileceğiniz bazı özellikler vardır:
kSecReturnData
: Eğer 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ın
kSecMatchLimit
: Kaç sonuç döndürüleceği
kSecClass
: 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ır
API 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 uygulamalar güvenilir olacaktır. Python
da bunun için kullanılabilir.
Görünmez: Bu, girişi UI Anahtar Zinciri uygulamasından gizlemek için bir boolean bayraktır.
Genel: meta verileri saklamak 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.
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)