macOS Sensitive Locations & Interesting Daemons
Hasła
Hasła Cieni
Hasło cienia jest przechowywane w konfiguracji użytkownika w plikach plist znajdujących się w /var/db/dslocal/nodes/Default/users/
.
Następujący oneliner może być użyty do wycieku wszystkich informacji o użytkownikach (w tym informacji o haszach):
Skrypty takie jak ten lub ten mogą być używane do przekształcenia hasha do formatu hashcat.
Alternatywna jednolinijkowa komenda, która wypisze dane uwierzytelniające wszystkich kont niebędących kontami usługowymi w formacie hashcat -m 7100
(macOS PBKDF2-SHA512):
Wydobycie Keychain
Należy pamiętać, że podczas korzystania z binariów security do wydobycia zdekodowanych haseł, użytkownik będzie proszony o zezwolenie na tę operację.
Na podstawie tego komentarza juuso/keychaindump#10 (komentarz) wygląda na to, że te narzędzia już nie działają w Big Sur.
Przegląd Keychaindump
Narzędzie o nazwie keychaindump zostało opracowane do wydobywania haseł z keychainów macOS, ale napotyka ograniczenia na nowszych wersjach macOS, takich jak Big Sur, jak wskazano w dyskusji. Użycie keychaindump wymaga, aby atakujący uzyskał dostęp i eskalował uprawnienia do roota. Narzędzie wykorzystuje fakt, że keychain jest domyślnie odblokowany po zalogowaniu użytkownika dla wygody, umożliwiając aplikacjom dostęp do niego bez konieczności wielokrotnego wprowadzania hasła użytkownika. Jednak jeśli użytkownik zdecyduje się blokować swój keychain po każdym użyciu, keychaindump staje się nieskuteczny.
Keychaindump działa poprzez celowanie w określony proces o nazwie securityd, opisany przez Apple jako demon do autoryzacji i operacji kryptograficznych, kluczowy do dostępu do keychaina. Proces ekstrakcji polega na zidentyfikowaniu klucza głównego pochodzącego z hasła logowania użytkownika. Ten klucz jest niezbędny do odczytywania pliku keychain. Aby zlokalizować klucz główny, keychaindump skanuje stertę pamięci securityd za pomocą polecenia vmmap
, szukając potencjalnych kluczy w obszarach oznaczonych jako MALLOC_TINY
. Do inspekcji tych lokalizacji pamięci używane jest następujące polecenie:
Po zidentyfikowaniu potencjalnych kluczy głównych, keychaindump przeszukuje sterty w poszukiwaniu określonego wzorca (0x0000000000000018
), który wskazuje na kandydata na klucz główny. Aby wykorzystać ten klucz, konieczne są dodatkowe kroki, w tym deobfuskacja, zgodnie z opisem w kodzie źródłowym keychaindump. Analitycy skupiający się na tym obszarze powinni zauważyć, że istotne dane do odszyfrowania keychain są przechowywane w pamięci procesu securityd. Przykładowe polecenie do uruchomienia keychaindump to:
chainbreaker
Chainbreaker można użyć do wyodrębnienia następujących typów informacji z keychain'a OSX w sposób forensycznie poprawny:
Zahaszowane hasło Keychain, odpowiednie do złamania za pomocą hashcat lub John the Ripper
Hasła internetowe
Hasła ogólne
Klucze prywatne
Klucze publiczne
Certyfikaty X509
Bezpieczne notatki
Hasła Appleshare
Dzięki odblokowaniu hasła keychain'a, uzyskanemu kluczowi głównemu za pomocą volafox lub volatility, lub plikowi odblokowującemu, takiemu jak SystemKey, Chainbreaker dostarczy również hasła w formie tekstu jawnego.
Bez jednej z tych metod odblokowania Keychain'a, Chainbreaker wyświetli wszystkie inne dostępne informacje.
Wyciek kluczy keychain
Wyciek kluczy keychain (z hasłami) za pomocą SystemKey
Wyciek kluczy keychain (z hasłami) łamiąc skrót
Wyciek kluczy keychain (z hasłami) za pomocą zrzutu pamięci
Postępuj zgodnie z tymi krokami, aby wykonać zrzut pamięci
Wyciek kluczy keychain (z hasłami) za pomocą hasła użytkownika
Jeśli znasz hasło użytkownika, możesz użyć go do wycieku i odszyfrowania keychainów należących do użytkownika.
kcpassword
Plik kcpassword to plik przechowujący hasło logowania użytkownika, ale tylko jeśli właściciel systemu ma włączone automatyczne logowanie. W związku z tym użytkownik zostanie zalogowany automatycznie, bez konieczności podawania hasła (co nie jest zbyt bezpieczne).
Hasło jest przechowywane w pliku /etc/kcpassword
zaszyfrowane operacją XOR przy użyciu klucza 0x7D 0x89 0x52 0x23 0xD2 0xBC 0xDD 0xEA 0xA3 0xB9 0x1F
. Jeśli hasło użytkownika jest dłuższe niż klucz, klucz będzie używany wielokrotnie.
To sprawia, że odzyskanie hasła jest dość proste, na przykład przy użyciu skryptów takich jak ten.
Interesujące informacje w bazach danych
Wiadomości
Powiadomienia
Dane dotyczące powiadomień znajdziesz w $(getconf DARWIN_USER_DIR)/com.apple.notificationcenter/
Większość interesujących informacji będzie znajdować się w blob. Będziesz musiał wyodrębnić ten zawartość i przekształcić ją w formę czytelną dla człowieka lub użyć polecenia strings
. Aby uzyskać do niej dostęp, wykonaj:
Notatki
Notatki użytkowników można znaleźć w ~/Library/Group Containers/group.com.apple.notes/NoteStore.sqlite
Preferencje
W aplikacjach macOS preferencje znajdują się w $HOME/Library/Preferences
, a w systemie iOS w /var/mobile/Containers/Data/Application/<UUID>/Library/Preferences
.
W macOS narzędzie wiersza poleceń defaults
może być użyte do modyfikacji pliku preferencji.
/usr/sbin/cfprefsd
obsługuje usługi XPC com.apple.cfprefsd.daemon
i com.apple.cfprefsd.agent
i może być wywoływane do wykonywania działań, takich jak modyfikacja preferencji.
Powiadomienia Systemowe
Powiadomienia Darwin
Głównym demonem do obsługi powiadomień jest /usr/sbin/notifyd
. Aby otrzymywać powiadomienia, klienci muszą zarejestrować się przez port Mach com.apple.system.notification_center
(sprawdź je za pomocą sudo lsmp -p <pid notifyd>
). Demon jest konfigurowalny za pomocą pliku /etc/notify.conf
.
Nazwy używane do powiadomień są unikalnymi odwrotnymi notacjami DNS, a gdy powiadomienie jest wysyłane do jednego z nich, klient(y), które wskazały, że mogą je obsłużyć, je otrzymają.
Możliwe jest zrzucenie bieżącego stanu (i zobaczenie wszystkich nazw) wysyłając sygnał SIGUSR2 do procesu notifyd i odczytując wygenerowany plik: /var/run/notifyd_<pid>.status
:
Centrum powiadomień rozproszonych
Centrum powiadomień rozproszonych, którego głównym plikiem binarnym jest /usr/sbin/distnoted
, to kolejny sposób wysyłania powiadomień. Udostępnia kilka usług XPC i wykonuje pewne sprawdzenia w celu weryfikacji klientów.
Powiadomienia push Apple (APN)
W tym przypadku aplikacje mogą zarejestrować się dla tematów. Klient wygeneruje token kontaktując się z serwerami Apple'a poprzez apsd
.
Następnie dostawcy również wygenerują token i będą mogli połączyć się z serwerami Apple'a, aby wysyłać wiadomości do klientów. Te wiadomości zostaną lokalnie odebrane przez apsd
, który przekaże powiadomienie do oczekującej na nie aplikacji.
Preferencje znajdują się w /Library/Preferences/com.apple.apsd.plist
.
W systemie macOS istnieje lokalna baza danych wiadomości w /Library/Application\ Support/ApplePushService/aps.db
, a w systemie iOS w /var/mobile/Library/ApplePushService
. Baza ta zawiera 3 tabele: incoming_messages
, outgoing_messages
i channel
.
Możliwe jest również uzyskanie informacji o daemonie i połączeniach za pomocą:
Powiadomienia użytkownika
To są powiadomienia, które użytkownik powinien zobaczyć na ekranie:
CFUserNotification
: Ta API umożliwia wyświetlenie na ekranie wyskakującego okienka z wiadomością.Tablica ogłoszeń: Pokazuje w iOS baner, który zniknie i zostanie przechowany w Centrum Powiadomień.
NSUserNotificationCenter
: To jest tablica ogłoszeń iOS w systemie MacOS. Baza danych z powiadomieniami znajduje się w/var/folders/<user temp>/0/com.apple.notificationcenter/db2/db
Last updated