• Blog
  • Resources
  • Training & Events
  • Menu

mac4n6.com

  • Blog
  • Resources
  • Training & Events

Analysis of Apple Unified Logs: Quarantine Edition [Entry 4] – It’s Login Week!

April 26, 2020 in logs, macos, analysis

No one can find flour or yeast anyway! 😆

This week is all about system logins! On the system (via password, TouchID, or Apple Watch), local logins using Terminal, and remote logins over SSH and Screen Sharing. There are many ways of accessing a macOS system, certainly this is not all inclusive but should cover many investigative scenarios.

Let’s start with Login Window logins. These are the types of user logins that I like to call “hands-on-keyboard” at a GUI login screen. You are looking at a Mac system and log in. 

The complexity of these logins has changed quite a bit over the last few years with the introduction of TouchID and Auto Login with the Apple Watch.

First, let’s review what these log entries used to look like. In reality, many of these entries still exist in these logs. Just a reminder here that there are other logs on the system that you may still need to review! These particular logs can be found in /private/var/log/system.log (and archived versions) as well as the Apple System Logs (ASL) in the /private/var/log/asl directory.

Starting with system.log and its archived versions, I’m looking for entries that contain the string “_PROCESS”. I used ‘gzcat’ to extract the messages from the gzip archives and ‘cat’ for the current system.log file.

gzcat system.log.{1..0}.gz | grep _PROCESS && cat system.log | grep _PROCESS

A USER_PROCESS is a logon while DEAD_PROCESS is a logoff. These are tied together with a process ID that follows it. The facilities that record the message tell what type of login it is.

  • loginwindow – These are the “hands-on-keyboard” logins that I’ll be talking about in this particular post.

  • login – These logins are local logins, you’ll see these with each Terminal window you have open.

  • sessionlogoutd – Pair these with the loginwindow login entries. This is the logout.

  • Not shown in the screenshot is remote logins via SSH. These have the ‘sshd’ facility.

These entries don’t provide a whole lot of context. They don’t tell me which user is logging in or how (Password, TouchID, or Apple Watch)

Another log that contains similar information are the Apple System Logs (ASL). In the example, I’ve parsed these out using ‘syslog’ with a raw output format and UTC timestamps. Note I’m only showing the first three entries as these are fairly verbose. The only additional context these provide is the user logging on and where they are coming from if it is a remote login. (The raw output format is needed to see this, otherwise the output looks similar to system.log entries.) 

syslog -F raw -T UTC | grep "_PROCESS"

The third place to look for these entries is the Basic Security Module (BSM) Audit trail logs. These can be parsed with ‘praudit’. A single login entry is show below, no one likes looking at these logs due to their multi-token format. 

One good thing about these is that they seemed to be retained longer than system.log and ASL which has been seemingly cut down in Catalina (10.15) to about 3 days from ~7 days in system.log and ~365 days in ASL for login entries. (Oddly, the ASL Expire times are a year out as they were in previous macOS versions. 🤷🏻‍♀️) 

These are all great places to look but we need more context. To the Unified Logs! The problem with unified logs is that they can be very verbose, just looking at my ‘loginwindow’ process entries for a day, I have about 20k! There is no way I’m going to scroll through and attempt to interpret each entry. I need to filter for specific entries. I’ve come up with a few useful queries to find specific pieces of information.

The first is looking for messages that contain ‘com.apple.sessionagent.screenIs’ string. This is going to show if the system is locked or unlocked, and which user is currently logged in with their user ID (UID). These are not technically logins since the user is already logged in but are useful for telling if the screen is locked or not

  • com.apple.sessionagent.screenIsLocked = Screen is Locked

  • com.apple.sessionagent.screenIsUnlocked = Screen is Unlocked 

log show --predicate 'eventMessage contains "com.apple.sessionagent.screenIs"'

To determine when the user did a true login (versus just a screen unlock) we can look for com.apple.sessionDidLogin in the message while specifically looking at the ‘loginwindow’ process.

log show --predicate 'processImagePath contains "loginwindow" and eventMessage contains "com.apple.sessionDidLogin"'

I really like the messages associated with ‘SessionAgentNotificationCenter’. They are easy to interpret which is why I chose them for these examples. I created a broader query to get more details about these login sessions to include the following entries:

  • com.apple.system.loginwindow.shutdownInitiated – User chose to shutdown system

  • com.apple.system.loginwindow.logoutcancelled – User canceled the shutdown (or restart or logoff)

  • com.apple.system.loginwindow.restartinitiated – User chose to restart system

log show --predicate 'eventMessage contains "com.apple.system.loginwindow" and eventMessage contains "SessionAgentNotificationCenter"'

You might notice a couple UID’s in these examples (501 and 502). This is me going back and forth between accounts using Fast User Switching which can be filtered for by using ‘com.apple.fastUserSwitchBegin’.

Keeping track of what we have so far using ‘SessionAgentNotificationCenter’

  • Screen Lock/Unlock Status

  • User Logons

  • User Logoff

  • Restarts (w/UID)

  • Shutdown (w/UID)

  • Fast User Switching

  • Canceled Restart/Shutdown/Logoff

To get all these ‘SessionAgentNotificationCenter’ messages try using this query:

log show --predicate 'eventMessage contains "SessionAgentNotificationCenter"' 

Password, TouchID, or Apple Watch?

So many loginwindow logins but which type! Is it a normal password login, using TouchID, or Auto Unlock using their Apple Watch? I find the messages that contain ‘LWScreenLockAuthentication’ are good for this.  I’ve also added the strings ‘| Verifying’ and ‘| Using’ to filter it further.

log show --predicate 'eventMessage contains "LWScreenLockAuthentication" and (eventMessage contains "| Verifying" or eventMessage contains "| Using")'

The screenshot above contains the three different types of logins.

Regular Password: 

  • “Verifying using PAM configuration screensaver”

TouchID:

  • “Using localAuthentication hints”

  • “Using hint-provided username oompa”

  • “Verifying using PAM configuration screensaver_la”

Auto Unlock with Apple Watch:

  • “Using continuity hints”

  • “Using hint-provided username oompa”

  • “Verifying using PAM configuration screensaver_aks”

To get more detail I want to look at messages for ‘LWDefaultScreenLockUI’. I’ve combined these entries together in a long query looking for specific keywords.

log show --predicate 'eventMessage contains "LWDefaultScreenLockUI" and (eventMessage contains "authSuccess" or eventMessage contains "authFailWithMessage" or eventMessage contains "loginPressed" or eventMessage contains "authBegan" or eventMessage contains "preLoad")'

The keyword ‘preload’ provides us some metadata about the system. 

  • fmmEnabled – Find my Mac is Enabled

  • fusEnabled – Fast User Switching is Enabled

  • The number of user accounts are on the system

The next set shows if the login was successful or not.

  • loginPressed – Password Attempt Number (Attempt #: ?)

    • If someone is attempting to brute force via typing in passwords you’ll see the number of attempts tick up.

  • authBegan – Begin Authentication

  • authFailWithMessage – Authentication Failed

  • authSuccess – Authentication Successful 

I bet you thought login entries would be easy! Coming up this week are local logins and remote logins via SSH and Screen Sharing.

Tags: unified logs, analysis, login, loginwindow
Prev / Next

mac4n6.com

A macOS and iOS Forensic Research Blog


mac4n6 Blog RSS

Latest Posts

Blog
New Presentation - Using Apple Intelligence (AI) Data in Investigations
New Presentation - Using Apple Intelligence (AI) Data in Investigations
about 2 months ago
Sikkerhetsfestivalen 2024 - Lillehammer, Norway
about 8 months ago
I'm Back Baby!
I'm Back Baby!
about a year ago
Part 3: Step-by-step Tooling for iOS Research (via @bizzybarney)
Part 3: Step-by-step Tooling for iOS Research (via @bizzybarney)
about 4 years ago
APOLLO v1.4 - Now with 'Gather' Function from iOS/macOS and updates to iOS14 and macOS 11 modules
APOLLO v1.4 - Now with 'Gather' Function from iOS/macOS and updates to iOS14 and macOS 11 modules
about 4 years ago
Analysis of Apple Unified Logs [Entry 12] – Quick & Easy Unified Log Collection from iOS Devices for Testing
Analysis of Apple Unified Logs [Entry 12] – Quick & Easy Unified Log Collection from iOS Devices for Testing
about 4 years ago
Part 2: Step-by-step iPhone Setup for iOS Research (via @bizzybarney)
Part 2: Step-by-step iPhone Setup for iOS Research (via @bizzybarney)
about 4 years ago
Part 1: Step-by-step macOS Setup for iOS Research (via @bizzybarney)
Part 1: Step-by-step macOS Setup for iOS Research (via @bizzybarney)
about 4 years ago
Follow-on to DFIR Summit Talk: Lucky (iOS) 13: Time To Press Your Bets (via @bizzybarney)
Follow-on to DFIR Summit Talk: Lucky (iOS) 13: Time To Press Your Bets (via @bizzybarney)
about 4 years ago
Socially Distant but Still Interacting! New and Improved Updates to macOS/iOS CoreDuet interactionC.db APOLLO Modules
Socially Distant but Still Interacting! New and Improved Updates to macOS/iOS CoreDuet interactionC.db APOLLO Modules
about 4 years ago

Tweets

  • RT @objective_see: Objective by the Sea (#OBTS) v6.0 will be held Oct 9ᵗʰ - 13ᵗʰ 2023🍎🧑🏻‍🏫🧑🏻‍💻🌴☀️ More details (location, CFP, etc.)… https://t.co/OJ7MaNrDPH
    Feb 18, 2023, 4:28 PM
  • RT @Fox0x01: Exciting news! My book is finally 100% finished and in production. The release date is scheduled for May 2023! 🥳 I… https://t.co/9j5owgrmlJ
    Jan 19, 2023, 5:41 PM
  • RT @NibblsNBits: Sharing for visibility. Did you know about the free virtual seats being offered by @hexordia? Intro and refresher m… https://t.co/ZWYzfo0QJD
    Jan 13, 2023, 5:47 PM