NFsec Logo

sysdiagnose plus

27/09/2021 (4 tygodnie temu) w Bezpieczeństwo, Debug Brak komentarzy.  (artykuł nr 795, ilość słów: 1505)

S

ysdiagnose to narzędzie, które znajduje się na większości urządzeń z systemem macOS i iOS. Służy ono do zbierania informacji diagnostycznych dotyczących całego systemu. Obecna wersja – 3.0 zbiera duże ilości danych z szerokiej gamy lokalizacji w systemie. Mogą one być przydatne w informatyce śledczej komputera prowadzonej na żywo. W przypadku poszukiwań złośliwego oprogramowania przechwycone dane mogą pomóc w zidentyfikowaniu zainfekowanego pliku binarnego; mechanizmu persystencji (gdy złośliwe oprogramowanie uzyska dostęp do systemu, często chce zostać tam przez długi czas opracowując metody pozwalające na jego powrót po restarcie systemu; jeśli mechanizm persystencji jest wystarczająco unikalny, może nawet służyć jako świetny sposób na określenie cechy charakterystycznej danego złośliwego oprogramowania) lub połączeń do C2 (serwery Command and Control – nazywane również C&C odnoszą się do sposobu, w jaki atakujący komunikują się i sprawują kontrolę nad zainfekowanym systemem; po zainfekowaniu systemu większość złośliwego oprogramowania komunikuje się z serwerem kontrolowanym przez atakującego, aby przyjmować polecenia, pobierać dodatkowe komponenty lub wykradać informacje).

Po uruchomieniu sysdiagnose wyświetli się komunikat ostrzegawczy, informujący, że dane wyjściowe będą zawierać osobiste i szczegółowe informacje o urządzeniu; dlatego wszelkie zebrane za pomocą tego narzędzia powinny być obsługiwane w bezpieczny sposób. Domyślnie otrzymana kolekcja to plik .tar.gz zapisany w ścieżce: /var/tmp/sysdiagnose_[sygnatura-czasu]_[nazwa hosta].tar.gz. Możemy przekazać opcje, aby nie kompresować danych wyjściowych, a także zapisać je w alternatywnej lokalizacji. Typowa kolekcja obejmuje następujące artefakty:

  • Accessibility/
  • BluetoothTraceFile.pklg
  • DiskMountConditioner.json
  • Personalization/
  • Preferences/
  • RunningBoard/
  • SystemConfiguration/
  • SystemProfiler/
  • TimezoneDB/
  • WiFi/
  • WindowServer.external.winfo.plist
  • acdiagnose-50x.txt
  • airport_info.txt
  • apfs_stats.txt
  • applessdstats.txt
  • apsd-status.txt
  • bc_stats.txt
  • bless_info.txt
  • bootstamps.txt
  • bootstamps.txt
  • brctl/
  • ckksctl_status.txt
  • com.apple.windowserver.plist
  • crashes_and_spins
  • csrutil-status.txt
  • ctsctl-list-*.txt
  • darwinup.txt
  • disks.txt
  • diskutil_*.txt
  • display_diagnose.txt
  • efi-dump-logs.txt
  • error_log.txt
  • errors/
  • filecoordination.txt
  • fileproviderctl*.log
  • find-system-migration-history.txt
  • footprint-all.txt
  • fs_usage.txt
  • gpt.txt
  • hdiutil-pmap.txt
  • hidutil.plist
  • hpmDiagnose.txt
  • [Hostname].mdsdiagnostic
  • iogdiagnose.txt
  • ioreg/
  • kextstat.txt
  • launchctl-dumpstate.txt
  • launchctl-list-*.txt
  • launchctl-print-*.txt
  • libtrace/
  • logs/
  • lsappinfo.txt
  • lsregister-*.csstoredump
  • microstackshots
  • mount.txt
  • nclist.txt
  • network-info/
  • nfsstat.txt
  • night-shift.log
  • nvram.txt
  • odutil.txt
  • oslog_archive_error.log
  • otctl_status.txt
  • pcsstatus.txt
  • pluginkit-50x.txt
  • pmset_everything.txt
  • powermetrics.txt
  • ps.txt
  • ps_thread.txt
  • remotectl_dumpstate.txt
  • resolv.conf
  • sample-*-highcpu.txt
  • securebootvariables.txt
  • security-sysdiagnose.txt
  • sfltool.LSSharedFileList.*.txt
  • smcDiagnose.txt
  • spindump.txt
  • summaries/
  • sw_vers.txt
  • swcutil_show.txt
  • sysctl.txt
  • sysdiagnose.log
  • system_logs.logarchive/
  • systemextensionsctl_list.txt
  • tailspin-info.txt
  • talagent-*.txt
  • taskSummary.csv
  • taskinfo.txt
  • tbtDiagnose.txt
  • thermal.txt
  • top.txt
  • var_run_resolv.conf/
  • vm_stat.txt

Jednym ze zebranych zbiorów są ujednolicone dzienniki Apple, wprowadzone w iOS 10 i macOS 10.12 (więcej o nich możemy przeczytać tutaj). Wykorzystując framework OSLog ten system rejestrowania łączy kilka ważnych źródeł logów w jedno. Warto wspomnieć, że ograniczeniem tego formatu dziennika jest parsowanie ich do formatu czytelnego dla człowieka. Polecenie log jest dostępne wyłącznie w systemie macOS, a pliki zawarte w katalogu system_logs.logarchive są w formacie zastrzeżonym, określanym jako pakiet logarchive. Przykład składni, aby wyszukać zdarzenia podłączenia lub odłączenia urządzeń USB (może to być przydatne w sprawdzaniu, czy na komputerze nie doszło do eksfiltracji danych za pomocą zewnętrznego urządzenia):

log show -archive system_logs.logarchive -predicate 'eventMessage contains[cd] "USBMSC"
or processImagePath contains[cd] "fseventsd" or subsystem = "com.apple.imagecapture"' |
egrep '(Added|Removed)'

Jakie polecenia były wydawane z podwyższeniem uprawnień:

log show -archive system_logs.logarchive -predicate 'processImagePath contains[cd] 
"sudo"' | grep TTY

Inne ciekawe pliki, z jakimi możemy się zapoznać to:

  • acdiagnose-[UID].txt – zawiera szczegółowe informacje o różnych kontach powiązanych z kontami lokalnymi i kontami iCloud użytkownika. Szczegóły obejmują identyfikatory UUID, konfigurację konta, status synchronizacji i podział na typy kont. Informacje zawarte w tym pliku można wykorzystać do odpowiedzi na pytania: Jakie są powiązane adresy e-mail / nazw użytkowników kont? Jakie są powiązane numery telefonów? Czy usługa MFA (ang. Multi-factor authentication – Uwierzytelnianie wieloskładnikowe) jest włączona na niektórych kontach?
  • csrutil.txtSIP (ang. System Integrity Protocol) – został wprowadzony od wersji El Capitan 10.11, aby uniemożliwić użytkownikom z dostępem do praw administratora na manipulowanie plikami systemowymi. SIP można wyłączyć tylko z poziomu odzyskiwania (ang. recovery mode). Jego zawartość jest bardzo prosta – pokazuje, czy protokół SIP jest włączony, czy wyłączony. Plik ten powinien zawsze wskazywać jego włączenie.
  • launchctl-*.txtlaunchctl to usługa, która dodaje i usuwa z ładowania agenty oraz daemony podczas uruchamiania i/lub logowania do systemu. Informacje zawarte w tych plikach mogą być przydatne do identyfikacji mechanizmów persystencji. Na przykład dane w pliku launchctl-dumpstate.txt zawierają zmienne środowiskowe oraz ścieżki do aplikacji i plików wykonywalnych. Pozostałe pliki zawierają indywidualne konfiguracje użytkownika.
  • logs/install.log – jest cennym źródłem do określenia, co zostało zainstalowane w systemie. Może wydawać się, że informacje te ograniczają się tylko do aplikacji instalowanych z App Store, ale w przeszłości zdarzały się przypadki, gdy złośliwe oprogramowanie było pakowane i oznaczane jako legalne aplikacje z App Store.
  • logs/DiagnosticMessages/[YYYY-MM-DD].asl – ten dziennik systemowy Apple zawiera przydatne dane, które pokazują wykorzystanie aplikacji. Możemy odczytać tam zdarzenia, takie jak uruchamianie aplikacji ze menu dokującego lub proces logowania, który blokuje ekran. Te dzienniki mają potencjalnie wartość przy określaniu, jakie jest normalne zachowanie użytkownika. Jedynym ograniczeniem jest tutaj gromadzenie logów z daty pobrania. Pliki .asl możemy otworzyć i podejrzeć z poziomu aplikacji Console.
  • (ps|top),network-info/(netstat|ifconfig|route-info).txt – wskazane pliki możemy wykorzystać do identyfikacji anomalnych i podejrzanych procesów systemowych. Katalog network-info zawiera różne dane sieciowe, takie jak dane wyjściowe z poleceń: ifconfig, routing, netstat i ustawienia proxy. Możemy z nich odczytać ustawienia i połączenia sieciowe w czasie ich gromadzenia. Ograniczeniem jest tutaj brak prostej możliwości powiązania połączenia z konkretnym procesem.

Mac OS Triage Collection

Oczywiście sysdiagnose zbiera znacznie więcej informacji, z którymi warto zapoznać się po przykładowym uruchomieniu tylko tego polecenia. Jednak są obszary, których nie obejmuje to narzędzie, a mogą one stanowić wartość dodaną przy reakcji na incydenty. W celu uzupełnienia informacji firma F-Secure opracowała mały skrypt o nazwie macOSTriageCollectionScript, który uzupełnia w/w dane o:

  • listy plików – ponieważ APFS nie ma głównej tabeli plików, takiej jak NTFS, aby zorientować się, co znajduje się w systemie plików tworzonych jest kilka plików w formacie CSV, używając kombinacji poleceń: stat, shasum oraz file. Tak zebrane dane mogą być przeszukane pod kątem znanych zagrożeń na podstawie ich skrótu (ang. hash). Jest to dość intensywny proces, więc skrypt ma parametr (-q), do uruchomienia w trybie omijającym ten krok. Jeśli chcemy zdecydować się na ten proces – najlepiej przed jego uruchomieniem przyznać prawo do pełnego dostępu do dysku (ang. Full Disk Access) dla terminala, z którego jest on uruchamiany (Preferencje systemowe/Ochrona i prywatność – System Preferences/Security & Privacy).
  • dane z przeglądarek – Safari, Chrome i Firefox – ich zgromadzenie pozwala na wykluczenie pobierania złośliwych plików, ataki phishingowe lub identyfikację podejrzanych rozszerzeń przeglądarek.
  • historia z powłok bash/zsh – na podstawie tych danych możemy zobaczyć jaka była aktywność użytkownika (ściągane skrypty / wydawane polecenia / inne czynności związane z klawiaturą). Należy mieć na uwadze, że pliki te bardzo łatwo oszukać.
  • FSEvents – zdarzenia systemu plików (ang. File System Events) – logi zdarzeń zawierające zmiany w plikach (podobnie jak w Windows USN Journal). Zdarzenia FS są dość niestabilne i często są tracone, gdy nastąpi awaria systemu lub nieoczekiwane jego zamknięcie. Istnieją zdarzenia systemu plików, które są zapakowane do wcześniej wspomnianego formatu logów „logarchive”. Jednak ten krok ma na celu zgromadzenie tych, które mogły zostać jeszcze nie zebrane.
  • punkty persystencji – zebranie kolekcji informacji z potencjalnych mechanizmów persystencji w tym: LaunchAgents, LaunchDaemons, LoginItems oraz reguł Emond.
  • lista otwartych plikówlsof to polecenie wyświetlające listę otwartych plików, które mogą również wyświetlać listę połączeń sieciowych danego procesu. Kombinacja lsof i lsof -i jest łatwą do przeszukania i zweryfikowania listą adresów IP / procesów, którą można później porównać z źródłami zagrożeń w celu określenia podejrzanej aktywności.
  • atrybuty rozszerzone – wyszukiwanie rozszerzonych atrybutów – umożliwia za pomocą polecenia mdfind identyfikację plików, które pasują do zdefiniowanych metadanych np. za pomocą rozszerzonego atrybutu pliku pobranego za pomocą przeglądarki: „kMDItemWhereFroms”, możemy zidentyfikować potencjalne wyniki phishingu.

Przykład uruchomienia skryptu:

git clone https://github.com/FSecureLABS/macOSTriageCollectionScript.git
cd macOSTriageCollectionScript/
chmod +x collection.sh
sudo ./collection.sh
[!] Run -h to see options.
[!] Starting 'caffeinate' to prevent system and disk idle sleeping.
[+] Starting 'section_1' (init).
[+] System Version: macOS 11.6 (20G165)
[?] Have you have enabled 'Full Disk Access' for Terminal in 
    System Preferences/Security & Privacy on this host?
[?] Y/N? Y
[+] Creating temporary Collection Directory at 
    /Users/agresor/mOSTriage and starting collection.

[!] NO FURTHER INTERACTION IS REQUIRED UNTIL COMPLETION.

[+] Starting 'section_2' (sysdiagnose).
Progress:
[||||||||||||||||||||||||||||||||||||___46%____________________________________]
Output available at '/Users/agresor/mOSTrigage'.
[+] Starting 'section_3' (file listings).
[+] Note: This will take some time, be sure to check errors
[+] Starting 'section_4' (browser data)
[+] Starting 'section_5' (bash data)
[+] Starting 'section_6' (fsevents)
[+] Starting 'section_7' (extended attributes)
[+] Starting 'section_8' (persistence mechanisms)
[+] Starting 'section_9' (live data)
[+] Compressing collection.
[!] Collection completed please ensure you do not leave collected files in unsecure 
    locations and delete after use
[!] Please also ensure you disable 'Full Disk Access' for Terminal in
    System Preferences/Security & Privacy.

Bonus:

W repozytorium F-Secure Labs, możemy również znaleźć skrypt napisany w języku powłoki bash o nazwie Linux-CatScale, który wykorzystuje podstawowe / wbudowane narzędzia tego systemu do zebrania obszernych danych z hostów opartych na tym systemie. Dane te również pomagają w informatyce śledczej i obsłudze incydentów. Skrypt utworzy plik w formacie catscale_$hostname-YYYYMMDD-GGMM.tar.gz:

git clone https://github.com/FSecureLABS/LinuxCatScale
cd LinuxCatScale/
chmod +x Cat-Scale.sh
sudo ./Cat-Scale.sh
Creating catscale_darkstar-20210927-2033.tar.gz

Cleaning up!...
Clean-up Successful!

*************************************************************
 Collection of triage data complete!
 Please submit the following file and SHA1 hash for analysis.
*************************************************************

ef51ff61d8c5577fbeb0b9d9f2119fef019ce24a  ./catscale_darkstar-20210927-1633.tar.gz

Po zebraniu i skopiowaniu danych możemy je wypakować za pomocą skryptu: Extract-Cat-Scale.sh i dzięki już zdefiniowanemu plikowi konfiguracji dla logstash (Cat-Scale-logstash.conf) wysłać dane do dalszej analizy silnikowi (jeśli taki posiadamy) ELK. Należy pamiętać, że przedstawione skrypty po ich uruchomieniu mogą zmienić analizowane obiekty na serwerach i punktach końcowych. Należy zachować ostrożność, gdy chcemy z nich skorzystać. Najlepiej uruchamiać je i ich wyniki zapisywać na zewnętrznych dyskach. Narzędzia te nie są przeznaczone do wykonywania kryminalistycznych obrazów dysków. Można je uruchamiać na kopiach takich obrazów w celu przyśpieszenia przeszukiwania informacji lub punktach końcowych, jeśli chcemy zebrać tylko z nich informacje potrzebne do prowadzenia obserwowalności.

Więcej informacji: sysdiag-who?, macOSTriageCollectionScript, LinuxCatScale

Kategorie K a t e g o r i e : Bezpieczeństwo, Debug

Tagi T a g i : , , , , , , , , ,

Podobne artykuły:

  • Brak tematycznie powiązanych artykułów.

Komentowanie tego wpisu jest zablokowane.