macOS Sensitive Locations & Interesting Daemons
Last updated
Last updated
AWS Hacking öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE) GCP Hacking öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)
Gölge şifre, /var/db/dslocal/nodes/Default/users/
konumundaki plist'lerde kullanıcının yapılandırması ile saklanır.
Aşağıdaki tek satırlık komut, kullanıcılar hakkında tüm bilgileri (hash bilgileri dahil) dökmek için kullanılabilir:
Bu tür scriptler veya şu hash'i hashcat formatına dönüştürmek için kullanılabilir.
Tüm hizmet dışı hesapların kimlik bilgilerini hashcat formatında -m 7100
(macOS PBKDF2-SHA512) dökecek alternatif bir tek satırlık komut:
Bir kullanıcının ShadowHashData
sını elde etmenin bir diğer yolu dscl
kullanmaktır: sudo dscl . -read /Users/`whoami` ShadowHashData
Bu dosya yalnızca sistem tek kullanıcı modunda çalıştığında kullanılır (bu yüzden çok sık değil).
Şifrelerin şifresinin çözüldüğü dökümü almak için security ikili dosyasını kullanırken, kullanıcıdan bu işlemi onaylaması için birkaç istem geleceğini unutmayın.
Bu yorumdan juuso/keychaindump#10 (comment) yola çıkarak, bu araçların Big Sur'da artık çalışmadığı anlaşılıyor.
keychaindump adlı bir araç, macOS anahtar zincirlerinden şifreleri çıkarmak için geliştirilmiştir, ancak Big Sur gibi daha yeni macOS sürümlerinde sınırlamalarla karşılaşmaktadır; bu durum bir tartışmada belirtilmiştir. keychaindump kullanmak, saldırganın erişim sağlaması ve root ayrıcalıklarını artırması gerektirir. Araç, anahtar zincirinin kullanıcı girişi sırasında varsayılan olarak kilidinin açılmasını kullanarak, uygulamaların kullanıcı şifresini tekrar tekrar istemeden erişim sağlamasına olanak tanır. Ancak, bir kullanıcı her kullanım sonrası anahtar zincirini kilitlemeyi tercih ederse, keychaindump etkisiz hale gelir.
Keychaindump, Apple tarafından yetkilendirme ve kriptografik işlemler için bir daemon olarak tanımlanan securityd adlı belirli bir süreci hedef alarak çalışır; bu, anahtar zincirine erişim için kritik öneme sahiptir. Çıkarma süreci, kullanıcının giriş şifresinden türetilen bir Master Key'in tanımlanmasını içerir. Bu anahtar, anahtar zinciri dosyasını okumak için gereklidir. Master Key'i bulmak için, keychaindump vmmap
komutunu kullanarak securityd'nin bellek yığınını tarar ve MALLOC_TINY
olarak işaretlenmiş alanlarda potansiyel anahtarları arar. Bu bellek konumlarını incelemek için aşağıdaki komut kullanılır:
Potansiyel anahtarları belirledikten sonra, keychaindump yığınlar arasında anahtar için bir aday olduğunu gösteren belirli bir deseni (0x0000000000000018
) arar. Bu anahtarı kullanmak için, keychaindump'ın kaynak kodunda belirtildiği gibi, deşifre etme gibi ek adımlar gereklidir. Bu alana odaklanan analistler, anahtar zincirini şifrelemek için gerekli verilerin securityd sürecinin belleğinde saklandığını unutmamalıdır. keychaindump'ı çalıştırmak için bir örnek komut:
Chainbreaker aşağıdaki türde bilgileri adli olarak sağlam bir şekilde OSX anahtar zincirinden çıkarmak için kullanılabilir:
Hashlenmiş Anahtar Zinciri şifresi, hashcat veya John the Ripper ile kırmak için uygun
İnternet Şifreleri
Genel Şifreler
Özel Anahtarlar
Genel Anahtarlar
X509 Sertifikaları
Güvenli Notlar
Appleshare Şifreleri
Anahtar zincirini açma şifresi, volafox veya volatility kullanılarak elde edilen bir anahtar veya SystemKey gibi bir açma dosyası verildiğinde, Chainbreaker düz metin şifreleri de sağlayacaktır.
Bu anahtar zincirini açma yöntemlerinden biri olmadan, Chainbreaker mevcut tüm diğer bilgileri gösterecektir.
Bu adımları izleyin bellek dökümü gerçekleştirmek için
Eğer kullanıcının parolasını biliyorsanız, bunu kullanıcıya ait anahtar zincirlerini dökmek ve şifrelerini çözmek için kullanabilirsiniz.
kcpassword dosyası, kullanıcının giriş parolasını tutan bir dosyadır, ancak yalnızca sistem sahibi otomatik girişi etkinleştirmişse. Bu nedenle, kullanıcı bir parolaya ihtiyaç duymadan otomatik olarak giriş yapacaktır (bu çok güvenli değildir).
Parola, /etc/kcpassword
dosyasında 0x7D 0x89 0x52 0x23 0xD2 0xBC 0xDD 0xEA 0xA3 0xB9 0x1F
anahtarı ile xored olarak saklanır. Kullanıcının parolası anahtardan daha uzunsa, anahtar yeniden kullanılacaktır.
Bu, parolanın kurtarılmasını oldukça kolay hale getirir, örneğin bu script gibi scriptler kullanarak.
Bildirim verilerini $(getconf DARWIN_USER_DIR)/com.apple.notificationcenter/
içinde bulabilirsiniz.
İlginç bilgilerin çoğu blob içinde olacak. Bu nedenle, o içeriği çıkarmanız ve insan okunabilir hale dönüştürmeniz veya strings
kullanmanız gerekecek. Erişmek için şunu yapabilirsiniz:
Kullanıcıların notları ~/Library/Group Containers/group.com.apple.notes/NoteStore.sqlite
içinde bulunabilir.
macOS uygulamalarında tercihler $HOME/Library/Preferences
içinde bulunur ve iOS'ta /var/mobile/Containers/Data/Application/<UUID>/Library/Preferences
içindedir.
macOS'ta cli aracı defaults
Tercihler dosyasını değiştirmek için kullanılabilir.
/usr/sbin/cfprefsd
XPC hizmetlerini com.apple.cfprefsd.daemon
ve com.apple.cfprefsd.agent
talep eder ve tercihler gibi işlemleri gerçekleştirmek için çağrılabilir.
Dosya /System/Library/OpenDirectory/permissions.plist
düğüm niteliklerine uygulanan izinleri içerir ve SIP tarafından korunur.
Bu dosya, belirli kullanıcıların UUID'si (uid değil) ile belirli hassas bilgilere, örneğin ShadowHashData
, HeimdalSRPKey
ve KerberosKeys
gibi bilgilere erişim izni verir:
Bildirimler için ana daemon /usr/sbin/notifyd
'dir. Bildirim almak için, istemcilerin com.apple.system.notification_center
Mach portu üzerinden kaydolması gerekir (bunları sudo lsmp -p <pid notifyd>
ile kontrol edin). Daemon, /etc/notify.conf
dosyası ile yapılandırılabilir.
Bildirimler için kullanılan adlar, benzersiz ters DNS notasyonlarıdır ve bir bildirim bunlardan birine gönderildiğinde, bunu işleyebileceğini belirten istemci(ler) alır.
Mevcut durumu döküp (ve tüm adları görmek) için notifyd sürecine SIGUSR2 sinyali göndererek oluşturulan dosyayı okuyarak yapılabilir: /var/run/notifyd_<pid>.status
:
Dağıtılmış Bildirim Merkezi ana ikili dosyası /usr/sbin/distnoted
olan, bildirim göndermenin bir başka yoludur. Bazı XPC hizmetlerini açığa çıkarır ve istemcileri doğrulamaya çalışmak için bazı kontroller yapar.
Bu durumda, uygulamalar konular için kaydolabilir. İstemci, apsd
aracılığıyla Apple'ın sunucularıyla iletişim kurarak bir token oluşturacaktır.
Daha sonra, sağlayıcılar da bir token oluşturacak ve istemcilere mesaj göndermek için Apple'ın sunucularıyla bağlantı kurabilecektir. Bu mesajlar, bekleyen uygulamaya bildirimi iletecek olan apsd
tarafından yerel olarak alınacaktır.
Tercihler /Library/Preferences/com.apple.apsd.plist
konumundadır.
macOS'ta /Library/Application\ Support/ApplePushService/aps.db
ve iOS'ta /var/mobile/Library/ApplePushService
konumunda bulunan yerel bir mesaj veritabanı vardır. 3 tabloya sahiptir: incoming_messages
, outgoing_messages
ve channel
.
Aynı zamanda daemon ve bağlantılar hakkında bilgi almak için de kullanılabilir:
Bu, kullanıcının ekranda görmesi gereken bildirimlerdir:
CFUserNotification
: Bu API, ekranda bir mesajla pop-up gösterme imkanı sağlar.
Bülten Panosu: Bu, iOS'ta kaybolan ve Bildirim Merkezi'nde saklanan bir banner gösterir.
NSUserNotificationCenter
: Bu, MacOS'taki iOS bülten panosudur. Bildirimlerin bulunduğu veritabanı /var/folders/<user temp>/0/com.apple.notificationcenter/db2/db
konumundadır.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)