NFsec Logo

macOS – Apple Unified Log

05/03/2021 w Techblog Brak komentarzy.  (artykuł nr 774, ilość słów: 815)

F

irma Apple ogłosiła wprowadzenie formatu AUL (ang. Apple Unified Log) na swojej konferencji dla developerów w 2016 roku – WWDC. Przed AUL system macOS opierał się na tradycyjnych formatach rejestrowania systemu Unix, takich jak syslog lub własnym – Apple System Log (ASL). Jednak Apple doszło do wniosku, że potrzebuje jednego, znormalizowanego formatu rejestrowania na platformach macOS, iOS, tvOS i watchOS. Zmiana została wprowadzona od wersji macOS 10.12 Sierra. Format cały czas poddawany jest ewolucji np. liczba zdefiniowanych logowanych pól od czasu wydania Sierry do Cataliny (10.15) wzrosła z 16 do 27. W formacie AUL firma Apple poprawiła kompresję logowanych danych, przechodząc do formatu binarnego, co pozwala na zmaksymalizowanie gromadzenia dużej ilości informacji przy jednoczesnym zminimalizowaniu efektu obserwatora.

Zbierane dane są zapisywane w formacie logarchive. Ze względu na swoją unikalną strukturę binarną AUL składa się z wielu plików. Można je podzielić na dwie grupy: pliki .tracev3, które można znaleźć w katalogu /var/db/diagnostics oraz pliki pomocnicze, znajdujące się w katalogu /var/db/uuidtext. I tutaj dochodzimy do tematu retencji danych. Zajętość tych katalogów powinna wahać się od 400 – 800 MB. Oprócz zajętości innymi kryteriami są: liczba rekordów (30 – 50 milionów) lub czas (28 – 30 dni). Jeśli chcesz zobaczyć ile Twój system produkuje logów wpisz w terminalu:

log stream

lub uruchom program Console.app jeśli wolisz GUI. Do odpytywania o konkretne logi możemy użyć polecenia:

log show

Najczęściej będziemy odpytywać o datę (timestamp), proces (process) oraz wiadomość (eventMessage). Kilka przykładowych zapytań, które pomogą nam ustalić co się działo w systemie:

Do jakich sieci WiFi łączył się nasz system w ciągu jednego dnia:

log show --style syslog --predicate 'eventMessage CONTAINS "WiFi join started"' --last 1d
2021-02-06 11:50:35.001761+0100  localhost rapportd[798]: 
(CoreUtils) [com.apple.CoreUtils:CUWiFiManager] SysMon: WiFi join started: SSID "fsck.off"

Kiedy włączył się nam wygaszacz ekranu:

log show --style syslog --predicate 'processImagePath contains "loginwindow" 
and eventMessage CONTAINS "began service screensaver"' --info --debug
2021-02-21 14:37:08.453991+0100  localhost loginwindow[312]: 
[com.apple.loginwindow.logging:Standard] -[LWPAMManager _beginServiceNamed:] 
| began service screensaver

Jakie aplikacje były odpalane z poziomu Dock’a:

log show --style syslog --predicate 'processImagePath contains "Dock" and 
eventMessage CONTAINS "LAUNCHING"' --info --debug
2021-02-21 14:08:40.126647+0100  localhost Dock[841]: 
(LaunchServices) [com.apple.processmanager:front-35286506] 
LAUNCHING:0x0-0x3c03c iTerm 
2021-02-21 14:53:17.964021+0100  localhost Dock[841]: 
(LaunchServices) [com.apple.processmanager:front-35286506] 
LAUNCHING:0x0-0x4a04a Brave Browser

Jakie aplikacje były odpalane ze Spotlight:

log show --style syslog --predicate 'process = "loginwindow" AND 
eventMessage CONTAINS "entered. checking app"' --info --debug
2021-02-21 16:15:20.013792+0100  localhost loginwindow[312]: 
[com.apple.loginwindow.logging:TAL] -[PersistentAppsSupport appShouldBeRelaunched:]
| entered. checking app: Preferencje systemowe

Kiedy podłączyliśmy lub odłączyliśmy słuchawki do wejścia Jack:

log show --style syslog --predicate 'process = "kernel" AND 
eventMessage CONTAINS "handleJack"' --info --debug
2021-02-21 15:15:19.536985+0100  localhost kernel[0]: (AppleHDA) - 
AppleHDAMikeyInternalCS8409::handleJackDetectUR ()
2021-02-21 15:18:23.998080+0100  localhost kernel[0]: (AppleHDA) +
AppleHDAMikeyInternalCS8409::handleJackDisconnectUR ()

Co i kiedy podłączaliśmy do USB-C:

log show --style syslog --predicate 'process = "icdd" AND 
eventMessage CONTAINS "USB"' --info --debug
2021-02-21 13:57:58.735776+0100  localhost icdd[900]: [com.apple.imagecapture:icdd] Added
| [USB][ Apple T1 Controller ] ( 0, 0, 0) @ 0x14100000
2021-02-21 16:26:13.992399+0100  localhost icdd[900]: [com.apple.imagecapture:icdd] Added
| [USB][ My Passport 25E1 ] ( 0, 0, 0) @ 0x110000

Jakie aplikacje działały w tyle o danej porze, gdy używaliśmy CMD+Tab:

log show --style syslog --predicate 'process = "loginwindow" AND 
eventMessage CONTAINS "BackgroundState"' --info --debug
2021-02-21 15:34:00.996079+0100  localhost loginwindow[312]: 
[com.apple.loginwindow.logging:TAL] - 
[PersistentAppsSupport saveLogoutPersistentState:finalSnapshot:] |       	
Contents:( 

{
    	BackgroundState = 2;
    	BundleID = “org.mozilla.firefox";
    	Hide = 0;
    	Path = "/Applications/Firefox.app";
}

Jeśli interesuje nas dane zdarzenie to przepis jest prosty. Uruchamiamy log stream – generujemy daną akcję i wyszukujemy zdarzenie w logach. Przeszkujujemy archiwalne wpisy za pomocą log show. AUL wprowadził jeszcze jedną istotną zmianę – wpływa ona przede wszystkim na sposób rejestrowania poufnych informacji. Jeśli system operacyjny (lub twórca aplikacji) zdecyduje, że dane osobowe są rejestrowane, zastąpi je frazą: <private>. Oznacza to, że dane te nie mogą być przez inne aplikacje w systemie, ale także użytkownik nie ma do nich dostępu. Jeśli chcemy odsłonic tego typu wpisy musimy zaimportować profil (dot. Catalina 10.15.3+). Dla poprzednich wersji (Sierra / Mojave) obowiązuje polecenie:

sudo log config --mode "private_data:on"

lub program PrivateLogs. Tak wyglądają zapytania DNS przed uruchomieniem prywatnych wpisów w logach:

[com.apple.mDNSResponder:Default] [Q10205] DNS Query (35) (flags 0100) RCODE: 
NoErr (0) RD: <private> 0/0/0 <private>
[com.apple.mDNSResponder:Default] [Q36773] DNS Query (35) (flags 0100) RCODE:
NoErr (0) RD: <private> 0/0/0 <private>

Po wyłączeniu wpisów dla trybu prywatnego:

[com.apple.mDNSResponder:Default] [Q29345] DNS Query (51) (flags 0100) RCODE: 
NoErr (0) RD: www.google.pl. A? 0/0/0
[com.apple.mDNSResponder:Default] [Q55475] DNS Query (51) (flags 0100) RCODE:
NoErr (0) RD: www.google.pl. AAAA? 0/0/0

Jeśli interesują nas zapytania DNS w czasie rzeczywistym możemy wkorzystać log stream:

log stream --predicate 'process = "mDNSResponder" AND eventMessage CONTAINS "DNS Query"'
[com.apple.mDNSResponder:Default] [Q26536] DNS Query (25) (flags 0100) RCODE:
NoErr (0) RD: onet.pl. A? 0/0/0
[com.apple.mDNSResponder:Default] [Q78] DNS Query (29) (flags 0100) RCODE:
NoErr (0) RD: www.onet.pl. A? 0/0/0

Więcej informacji: man log, Finding Waldo: Leveraging the Apple Unified Log for Incident Response, Show private log messages in Catalina’s Console.app

Kategorie K a t e g o r i e : Techblog

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

Komentowanie tego wpisu jest zablokowane.