hacktricks/macos-hardening/macos-red-teaming/macos-keychain.md
2024-02-10 18:14:16 +00:00

8.6 KiB
Raw Blame History

macOS Anahtar Zinciri

AWS hacklemeyi sıfırdan kahramanla öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!

HackTricks'i desteklemenin diğer yolları:

Ana 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 genel/ö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 genelindeki kimlik bilgilerini saklar.

Şifre Anahtar Zinciri Erişimi

Bu dosyalar, doğal korumaya sahip olmasalar da indirilebilir ve kullanıcının düz metin şifresinin şifresini çözmek için şifrelenmiştir. Şifre çözme için Chainbreaker gibi bir araç kullanılabilir.

Anahtar Zinciri Girişleri Koruma

ACL'ler

Anahtar zincirindeki her giriş, anahtar zinciri girişi üzerinde çeşitli işlemleri gerçekleştirebilecek kişileri belirleyen Erişim Kontrol Listeleri (ACL'ler) tarafından yönetilir. Bu işlemler şunları içerebilir:

  • ACLAuhtorizationExportClear: Sahibin sırrın açık metnini almasına izin verir.
  • ACLAuhtorizationExportWrapped: Sahibin başka bir sağlanan şifreyle şifrelenmiş açık metni almasına izin verir.
  • ACLAuhtorizationAny: Sahibin herhangi bir işlemi gerçekleştirmesine izin verir.

ACL'ler, bu işlemleri sormadan gerçekleştirebilen güvenilir uygulamaların bir listesiyle birlikte gelir. Bu şunları içerebilir:

  • Nil (yetkilendirme gerektirilmez, 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 da teamid, apple ve cdhash'yi tanımlamak için kullanılır.

  • Eğer teamid belirtilmişse, giriş değerine sorma olmadan erişmek için kullanılan uygulamanın aynı teamid'ye sahip olması gerekir.
  • Eğer apple belirtilmişse, uygulama Apple tarafından imzalanmış olmalıdır.
  • Eğer cdhash belirtilmişse, uygulama belirli bir cdhash'e sahip olmalıdır.

Bir Anahtar Zinciri Girişi Oluşturma

Keychain Access.app kullanılarak yeni bir giriş oluşturulduğunda, aşağıdaki kurallar geçerlidir:

  • Tüm uygulamalar şifreleyebilir.
  • Hiçbir uygulama ihracat/şifre çözme yapamaz (kullanıcıya sormadan).
  • 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 zincirine bir giriş oluşturduğunda, kurallar biraz farklıdır:

  • Tüm uygulamalar şifreleyebilir.
  • Yalnızca oluşturan uygulama (veya başka uygulamalar da eklenmişse) ihracat/şifre çözme yapabilir (kullanıcıya sormadan).
  • Tüm uygulamalar bütünlük kontrolünü görebilir.
  • Hiçbir uygulama ACL'leri değiştiremez.
  • PartitionID teamid:[buraya takım kimliği] olarak ayarlanır.

Anahtar Zincirine Erişim

security

# Dump all metadata and decrypted secrets (a lot of pop-ups)
security dump-keychain -a -d

# Find generic password for the "Slack" account and print the secrets
security find-generic-password -a "Slack" -g

# Change the specified entrys PartitionID entry
security set-generic-password-parition-list -s "test service" -a "test acount" -S

API'ler

{% hint style="success" %} Anahtar zinciri numaralandırma ve sızıntı oluşturmayan sırların dökümü, LockSmith adlı araçla yapılabilir. {% endhint %}

Her anahtar zinciri girişi hakkında bilgi alın ve listelenin:

  • SecItemCopyMatching API'si her giriş hakkında bilgi verir ve kullanırken ayarlayabileceğiniz bazı özellikler vardır:
  • kSecReturnData: Eğer doğruysa, verileri şifrelemeye çalışır (potansiyel açılır pencereleri önlemek için false olarak ayarlayın)
  • kSecReturnRef: Anahtar zinciri öğesine referansı da alın (sonradan açılır pencereler olmadan şifrelemeyi yapabiliyorsanız true 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:

  • SecAccessCopyACLList API'siyle anahtar zinciri öğesinin ACL'sini alabilir ve her bir liste şunları içerir:
  • ıklama
  • Güvenilir Uygulama Listesi. Bu bir uygulama olabilir: /Applications/Slack.app
  • Bir ikili dosya olabilir: /usr/libexec/airportd
  • Bir grup olabilir: group://AirPort

Veriyi dışa aktarın:

  • SecKeychainItemCopyContent API'si düz metni alır
  • SecItemExport API'si anahtarları ve sertifikaları dışa aktarır, ancak içeriği şifreli olarak dışa aktarmak için şifreleri ayarlamak gerekebilir

Ve sızıntı oluşturmadan bir sırrı dışa aktarabilmek için gereksinimler şunlardır:

  • Eğer 1 veya daha fazla güvenilir uygulama listelenmişse:
  • Uygun yetkilendirmelere ihtiyaç vardır (Nil, veya sırra erişim yetkisi için yetkilendirme izin verilen uygulama listesinin bir parçası olmak)
  • Kod imzasının PartitionID ile eşleşmesi gerekmektedir
  • Kod imzasının güvenilir bir uygulama ile eşleşmesi gerekmektedir (veya doğru KeychainAccessGroup üyesi olmak)
  • Eğer tüm uygulamalar güvenilir ise:
  • Uygun yetkilendirmelere ihtiyaç vardır
  • Kod imzasının PartitionID ile eşleşmesi gerekmektedir
  • Eğer PartitionID yoksa, bu gerekli değildir

{% hint style="danger" %} Bu nedenle, eğer 1 uygulama listelenmişse, o uygulamaya kod enjekte etmeniz gerekmektedir.

Eğer partitionID'de apple belirtilmişse, osascript ile erişebilirsiniz, böylece partitionID'sinde apple olan tüm uygulamalara güvenen herhangi bir şey. Bunun için Python da kullanılabilir. {% endhint %}

İki ek özellik

  • Görünmez: Bu, girişi UI Anahtar Zinciri uygulamasından gizlemek için bir boolean bayrağıdır.
  • Genel: Bu, meta verileri depolamak için kullanılır (bu nedenle ŞİFRELENMEZ)
  • Microsoft, hassas uç noktalara erişmek için tüm yenileme belirteçlerini düz metinde depoluyordu.

Referanslar

htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahraman olmak için AWS hackleme öğrenin!

HackTricks'ı desteklemenin diğer yolları: