Select any two versions of this STIG to compare the individual requirements
Select any old version/release of this STIG to view the previous requirements
Verify the macOS system is configured to prevent Apple Watch from terminating a session lock with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "allowAutoUnlock" allowAutoUnlock = 0; If there is no result or "allowAutoUnlock" is not set to "0", this is a finding.
Configure the macOS system to prevent Apple Watch from terminating a session lock by installing the "Restrictions Policy" configuration profile.
Verify the macOS system is configured to prompt users to enter a password to unlock the screen saver with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep -w "askForPassword" askForPassword = 1; If there is no result, or if "askForPassword" is not set to "1", this is a finding.
Configure the macOS system to prompt users to enter a password to unlock the screen saver by installing the "Login Window Policy" configuration profile.
Verify the macOS system is configured to initiate a session lock within five seconds of the screen saver starting with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "askForPasswordDelay" askForPasswordDelay = 5; If there is no result, or if "askForPasswordDelay" is not set to "5" or less, this is a finding.
Configure the macOS system to initiate a session lock within five seconds of the screen saver starting by installing the "Login Window Policy" configuration profile.
Verify the macOS system is configured to initiate the screen saver after 15 minutes of inactivity with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "loginWindowIdleTime" loginWindowIdleTime = 900; If there is no result, or if "idleTime" is not set to "900" seconds or less, this is a finding.
Configure the macOS system to initiate the screen saver after 15 minutes of inactivity by installing the "Login Window Policy" configuration profile.
Verify the macOS system is configured to lock the user session when a smart token is removed with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "tokenRemovalAction" tokenRemovalAction = 1; If there is no result, or if "tokenRemovalAction" is not set to "1", this is a finding.
Configure the macOS system to lock the user session when a smart token is removed by installing the "Smart Card Policy" configuration profile. Note: To ensure continued access to the operating system, consult the supplemental guidance provided with the STIG before applying the "Smart Card Policy".
Verify the macOS system is configured with a screen saver with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "moduleName" moduleName = Ventura; If there is no result or the "moduleName" is undefined, this is a finding.
Configure the macOS system with a screen saver by installing the "Login Window Policy" configuration profile.
Verify the macOS system is configured to disable hot corners with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "wvous" "wvous-bl-corner" = 0; "wvous-br-corner" = 0; "wvous-tl-corner" = 0; "wvous-tr-corner" = 0; If the command does not return the following, this is a finding. "wvous-bl-corner = 0; wvous-br-corner = 0; wvous-tl-corner = 0; wvous-tr-corner = 0;"
Configure the macOS system to disable hot corners by installing the "Custom Policy" configuration profile.
Verify the macOS system is configured with a policy via directory service to disable temporary or emergency accounts after 72 hours by asking the System Administrator (SA) or Information System Security Officer (ISSO). If a policy is not set by a directory service, a password policy must be set with the "pwpolicy" utility. The variable names may differ depending on how the policy was set. If temporary or emergency accounts are not defined on the macOS system, this is not applicable. Verify the macOS system is configured with a policy to disable temporary or emergency accounts after 72 hours with the following command: /usr/bin/sudo /usr/bin/pwpolicy -u username getaccountpolicies | tail -n +2 If there is no output and password policy is not controlled by a directory service, this is a finding. Otherwise, look for the line "<key>policyCategoryAuthentication</key>". In the array that follows, a <dict> section contains a check <string> that allows users to log in if "policyAttributeCurrentTime" is less than the result of adding "policyAttributeCreationTime" to 72 hours (259299 seconds). The check might use a variable defined in its "policyParameters" section. If the check does not exist or if the check adds more than 72 hours to "policyAttributeCreationTime", this is a finding.
Configure the macOS system to disable temporary or emergency accounts after 72 hours. This setting may be enforced using local policy or by a directory service. To set local policy to disable a temporary or emergency user, create a plain text file containing the following: <dict> <key>policyCategoryAuthentication</key> <array> <dict> <key>policyContent</key> <string>policyAttributeCurrentTime < policyAttributeCreationTime+259299</string> <key>policyIdentifier</key> <string>Disable Tmp Accounts </string> </dict> </array> </dict> After saving the file and exiting to the command prompt, run the following command to load the new policy file, substituting the correct user name in place of "username" and the path to the file in place of "/path/to/file". /usr/bin/sudo /usr/bin/pwpolicy -u username setaccountpolicies /path/to/file
Verify the macOS system is configured with the timed service enabled and an authorized time server with the following commands: /usr/bin/sudo /usr/sbin/systemsetup -getusingnetworktime Network Time: On If "Network Time" is not set to "On", this is a finding. /usr/bin/sudo /usr/sbin/systemsetup -getnetworktimeserver If no time server is configured, or if an unapproved time server is in use, this is a finding.
Configure the macOS system to enable the timed service and set an authorized time server with the following commands: /usr/bin/sudo /usr/sbin/systemsetup -setusingnetworktime on /usr/bin/sudo /usr/sbin/systemsetup -setnetworktimeserver "server"
Verify the macOS system is configured with an approved ESS solution. If an approved ESS solution is not installed, this is a finding. Verify that all installed components of the ESS solution are at the DOD-approved minimal version. If the installed components are not at the DOD-approved minimal versions, this is a finding.
Configure the macOS system with an approved ESS solution and ensure that all components are at least updated to their DOD-approved minimal versions.
If the macOS system is using a mandatory Smart Card Policy, this requirement is not applicable. Verify the macOS system is configured to integrate into a directory service with the following command: /usr/bin/dscl localhost -list . | /usr/bin/grep "Active Directory" If no results are returned, this is a finding.
Configure the macOS system to integrate into an existing directory services infrastructure.
Verify the macOS system is configured to enforce the limit of three consecutive invalid logon attempts by a user before the user account is locked with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "maxFailedAttempts\|minutesUntilFailedLoginReset" maxFailedAttempts = 3; minutesUntilFailedLoginReset = 15; If "maxFailedAttempts" is not set to "3" and "minutesUntilFailedLoginReset" is not set to "15", this is a finding.
Configure the macOS system to enforce the limit of three consecutive invalid logon attempts by a user before the user account is locked by installing the "Passcode Policy" configuration profile or by a directory service.
If SSH is not being used, this is not applicable. Verify the macOS system is configured to display the Standard Mandatory DOD Notice and Consent Banner before granting remote access to the operating system. Check to see if the operating system has the correct text listed in the "/etc/banner" file with the following command: /usr/bin/more /etc/banner The command must return the following text: "You are accessing a U.S. Government (USG) Information System (IS) that is provided for USG-authorized use only. By using this IS (which includes any device attached to this IS), you consent to the following conditions: -The USG routinely intercepts and monitors communications on this IS for purposes including, but not limited to, penetration testing, COMSEC monitoring, network operations and defense, personnel misconduct (PM), law enforcement (LE), and counterintelligence (CI) investigations. -At any time, the USG may inspect and seize data stored on this IS. -Communications using, or data stored on, this IS are not private, are subject to routine monitoring, interception, and search, and may be disclosed or used for any USG-authorized purpose. -This IS includes security measures (e.g., authentication and access controls) to protect USG interests--not for your personal benefit or privacy. -Notwithstanding the above, using this IS does not constitute consent to PM, LE or CI investigative searching or monitoring of the content of privileged communications, or work product, related to personal representation or services by attorneys, psychotherapists, or clergy, and their assistants. Such communications and work product are private and confidential. See User Agreement for details." If the operating system does not display a logon banner before granting remote access or the banner does not match the Standard Mandatory DOD Notice and Consent Banner, this is a finding. If the text in the "/etc/banner" file does not match the Standard Mandatory DOD Notice and Consent Banner, this is a finding.
Configure the macOS system to display the Standard Mandatory DOD Notice and Consent Banner before granting remote access to the operating system by creating a text file containing the required DOD text. Name the file "banner" and place it in "/etc/".
If SSH is not being used, this is not applicable. Verify the macOS system is configured to display the contents of "/etc/banner" before granting access to the system with the following command: /usr/bin/grep -r Banner /etc/ssh/sshd_config* Banner /etc/banner If the sshd Banner configuration option does not point to "/etc/banner", this is a finding. If conflicting results are returned, this is a finding.
Configure the macOS system to display the contents of "/etc/banner" before granting access to the system with the following command: /usr/bin/sudo /usr/bin/sed -i.bak 's/^#Banner.*/Banner \/etc\/banner/' /etc/ssh/sshd_config
Verify the macOS system is configured to display a policy banner with the following command: /bin/ls -l /Library/Security/PolicyBanner.rtfd -rw-r--r--@ 1 admin sheel 37 Jan 27 11:18 /Library/Security/PolicyBanner.rtfd If "PolicyBanner.rtfd" does not exist, this is a finding. If the permissions for "PolicyBanner.rtfd" are not "644", this is a finding. The banner text of the document must read: "You are accessing a U.S. Government (USG) Information System (IS) that is provided for USG-authorized use only. By using this IS (which includes any device attached to this IS), you consent to the following conditions: -The USG routinely intercepts and monitors communications on this IS for purposes including, but not limited to, penetration testing, COMSEC monitoring, network operations and defense, personnel misconduct (PM), law enforcement (LE), and counterintelligence (CI) investigations. -At any time, the USG may inspect and seize data stored on this IS. -Communications using, or data stored on, this IS are not private, are subject to routine monitoring, interception, and search, and may be disclosed or used for any USG authorized purpose. -This IS includes security measures (e.g., authentication and access controls) to protect USG interests--not for your personal benefit or privacy. -Notwithstanding the above, using this IS does not constitute consent to PM, LE or CI investigative searching or monitoring of the content of privileged communications, or work product, related to personal representation or services by attorneys, psychotherapists, or clergy, and their assistants. Such communications and work product are private and confidential. See User Agreement for details." If the text is not worded exactly this way, this is a finding.
Configure the macOS system to display a policy banner by creating an RTF file containing the required text. Name the file "PolicyBanner.rtfd" and place it in "/Library/Security/". Update the permissions of the "/Library/Security/PolicyBanner.rtfd" file with the following command: /usr/bin/sudo /bin/chmod 644 /Library/Security/PolicyBanner.rtfd
Verify the macOS system is configured without ACLs applied to log files with the following command: /usr/bin/sudo /bin/ls -le $(/usr/bin/sudo /usr/bin/grep '^dir' /etc/security/audit_control | /usr/bin/awk -F: '{print $2}') | /usr/bin/grep -v current In the output from the above command, ACLs will be listed under any file that may contain them (e.g., "0: group:admin allow list,readattr,readextattr,readsecurity"). If any ACLs exists, this is a finding.
Configure the macOS system so that log files do not contain ACLs with the following command: /usr/bin/sudo /bin/chmod -N [audit log file]
Verify the macOS system is configured without ACLs applied to log folders with the following command: /usr/bin/sudo /bin/ls -lde $(/usr/bin/sudo /usr/bin/grep '^dir' /etc/security/audit_control | /usr/bin/awk -F: '{print $2}') In the output from the above command, ACLs will be listed under any folder that may contain them (e.g., "0: group:admin allow list,readattr,readextattr,readsecurity"). If any ACLs exists, this is a finding.
Configure the macOS system so that log folders do not contain ACLs with the following command: /usr/bin/sudo /bin/chmod -N [audit log folder]
Verify the macOS system is configured with dedicated user accounts to decrypt the hard disk upon startup with the following command: /usr/bin/sudo /usr/bin/fdesetup list fvuser,85F41F44-22B3-6CB7-85A1-BCC2EA2B887A If any unauthorized users are listed, this is a finding. Verify that the shell for authorized FileVault users is set to "/usr/bin/false" to prevent console logons: /usr/bin/sudo /usr/bin/dscl . read /Users/<FileVault_User> UserShell UserShell: /usr/bin/false If the FileVault users' shell is not set to "/usr/bin/false", this is a finding.
Configure the macOS system with a dedicated user account to decrypt the hard disk at startup and disable the logon ability of the newly created user account with the following commands: /usr/bin/sudo /usr/bin/fdesetup add -user <username> /usr/bin/sudo /usr/bin/dscl . change /Users/<FileVault_User> UserShell </path/to/current/shell> /usr/bin/false Remove all FileVault logon access from each user account defined on the system that is not a designated FileVault user: /usr/bin/sudo /usr/bin/fdesetup remove -user <username>
Verify the macOS system is configured to disable password forwarding with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "DisableFDEAutoLogin" DisableFDEAutoLogin = 1; If "DisableFDEAutoLogin" is not set to a value of "1", this is a finding.
Configure the macOS system to disable password forwarding by installing the "Smart Card Policy" configuration profile. Note: To ensure continued access to the operating system, consult the supplemental guidance provided with the STIG before applying the "Smart Card Policy".
If SSH is not being used, this is not applicable. Verify the macOS system is configured with the SSH daemon "ClientAliveInterval" option set to "900" or less with the following command: /usr/bin/grep -r ^ClientAliveInterval /etc/ssh/sshd_config* If "ClientAliveInterval" is not configured or has a value of "0", this is a finding. If "ClientAliveInterval" is not "900" or less, this is a finding. If conflicting results are returned, this is a finding.
Configure the macOS system to set the SSH daemon "ClientAliveInterval" option to "900" with the following command: /usr/bin/sudo /usr/bin/sed -i.bak 's/.*ClientAliveInterval.*/ClientAliveInterval 900/' /etc/ssh/sshd_config
If SSH is not being used, this is not applicable. Verify the macOS system is configured with the SSH daemon "ClientAliveCountMax" option set to "1" with the following command: /usr/bin/grep -r ^ClientAliveCountMax /etc/ssh/sshd_config* If the setting is not "ClientAliveCountMax 1", this is a finding. If conflicting results are returned, this is a finding.
Configure the macOS system to set the SSH daemon "ClientAliveCountMax" option to "1" with the following command: /usr/bin/sudo /usr/bin/sed -i.bak 's/.*ClientAliveCountMax.*/ClientAliveCountMax 1/' /etc/ssh/sshd_config
If SSH is not being used, this is not applicable. Verify the macOS system is configured with the SSH daemon "LoginGraceTime" option set to "30" or less with the following command: /usr/bin/grep -r ^LoginGraceTime /etc/ssh/sshd_config* If "LoginGraceTime" is not configured or has a value of "0", this is a finding. If "LoginGraceTime" is not set to "30" or less, this is a finding. If conflicting results are returned, this is a finding.
Configure the macOS system to set the SSH daemon "LoginGraceTime" option to "30" with the following command: /usr/bin/sudo /usr/bin/sed -i.bak 's/.*LoginGraceTime.*/LoginGraceTime 30/' /etc/ssh/sshd_config
Verify the macOS system is configured to use approved SSH ciphers within the SSH server configuration with the following command: /usr/bin/sudo /usr/sbin/sshd -T | /usr/bin/grep "ciphers" ciphers aes128-gcm@openssh.com If any ciphers other than "aes128-gcm@openssh.com" are listed, or the "ciphers" keyword is missing, this is a finding.
Configure the macOS system to use approved SSH ciphers by creating a plain text file in the /private/etc/ssh/sshd_config.d/ directory containing the following: Ciphers aes128-gcm@openssh.com The SSH service must be restarted for changes to take effect.
Verify the macOS system is configured to use approved SSH MACs within the SSH server configuration with the following command: /usr/bin/sudo /usr/sbin/sshd -T | /usr/bin/grep "macs" macs hmac-sha2-256 If any hashes other than "hmac-sha2-256" are listed, or the "macs" keyword is missing, this is a finding.
Configure the macOS system to use approved SSH MACs by creating a plain text file in the /private/etc/ssh/sshd_config.d/ directory containing the following: MACs hmac-sha2-256 The SSH service must be restarted for changes to take effect.
Verify the macOS system is configured to use approved SSH Key Exchange Algorithms within the SSH server configuration with the following command: /usr/bin/sudo /usr/sbin/sshd -T | /usr/bin/grep "kexalgorithms" kexalgorithms ecdh-sha2-nistp256 If any algorithms other than "ecdh-sha2-nistp256" are listed, or the "kexalgorithms" keyword is missing, this is a finding.
Configure the macOS system to use approved SSH Key Exchange Algorithms by creating a plain text file in the /private/etc/ssh/sshd_config.d/ directory containing the following: KexAlgorithms ecdh-sha2-nistp256 The SSH service must be restarted for changes to take effect.
Verify the macOS system is configured to audit privileged access with the following command: /usr/bin/sudo /usr/bin/grep ^flags /etc/security/audit_control If "ad" is not listed in the output, this is a finding.
Configure the macOS system to audit privileged access with the following command: /usr/bin/sudo /usr/bin/sed -i.bak '/^flags/ s/$/,ad/' /etc/security/audit_control; /usr/bin/sudo /usr/sbin/audit -s A text editor may also be used to implement the required updates to the "/etc/security/audit_control" file.
Verify the macOS system is configured to audit attempts to access/modify privileges with the following command: /usr/bin/sudo /usr/bin/grep ^flags /etc/security/audit_control If "lo" is not listed in the result of the check, this is a finding.
Configure the macOS system to audit attempts to access/modify privileges with the following command: /usr/bin/sudo sed -i.bak '/^flags/ s/$/,lo/' /etc/security/audit_control; /usr/bin/sudo /usr/sbin/audit -s A text editor may also be used to implement the required updates to the "/etc/security/audit_control" file.
Verify the macOS system is configured to enable the auditd service with the following command: /bin/launchctl print-disabled system| /usr/bin/grep com.apple.auditd "com.apple.auditd" => enabled If the results are not "com.apple.auditd => enabled", this is a finding.
Configure the macOS system to enable the auditd service with the following command: /usr/bin/sudo /bin/launchctl enable system/com.apple.auditd The system may need to be restarted for the update to take effect.
Verify the macOS system is configured to shut down upon audit failure with the following command: /usr/bin/sudo /usr/bin/grep ^policy /etc/security/audit_control | /usr/bin/grep ahlt If there is no result, this is a finding.
Configure the macOS system to shut down upon audit failure by editing the "/etc/security/audit_control" file and updating the policy value to include "ahlt" with the following command: /usr/bin/sudo /usr/bin/sed -i.bak '/^policy/ s/$/,ahlt/' /etc/security/audit_control; /usr/bin/sudo /usr/sbin/audit -s
Verify the macOS system is configured with audit log files owned by root with the following command: /usr/bin/sudo /bin/ls -le $(/usr/bin/sudo /usr/bin/grep '^dir' /etc/security/audit_control | /usr/bin/awk -F: '{print $2}') | /usr/bin/grep -v current If the files are not owned by root, this is a finding.
Configure the macOS system with audit log files owned by root with the following command: /usr/bin/sudo chown root [audit log file]
Verify the macOS system is configured with audit log folders owned by root with the following command: /usr/bin/sudo /bin/ls -lde $(/usr/bin/sudo /usr/bin/grep '^dir' /etc/security/audit_control | /usr/bin/awk -F: '{print $2}') If the folders are not owned by root, this is a finding.
Configure the macOS system with audit log folders owned by root with the following command: /usr/bin/sudo chown root [audit log folder]
Verify the macOS system is configured with audit log files group-owned by wheel with the following command: /usr/bin/sudo /bin/ls -le $(/usr/bin/sudo /usr/bin/grep '^dir' /etc/security/audit_control | /usr/bin/awk -F: '{print $2}') | /usr/bin/grep -v current If the files are not group-owned by wheel, this is a finding.
Configure the macOS system with audit log files group-owned by wheel with the following command: /usr/bin/sudo chgrp wheel [audit log file]
Verify the macOS system is configured with audit log folders group-owned by wheel with the following command: /usr/bin/sudo /bin/ls -lde $(/usr/bin/sudo /usr/bin/grep '^dir' /etc/security/audit_control | /usr/bin/awk -F: '{print $2}') If the folders are not group-owned by wheel, this is a finding.
Configure the macOS system with audit log folders group-owned by wheel with the following command: /usr/bin/sudo chgrp wheel [audit log folder]
Verify the macOS system is configured with audit log files set to mode 440 or less with the following command: /usr/bin/sudo /bin/ls -le $(/usr/bin/sudo /usr/bin/grep '^dir' /etc/security/audit_control | /usr/bin/awk -F: '{print $2}') | /usr/bin/grep -v current If the files are not mode 440 or less, this is a finding.
Configure the macOS system with audit log files set to mode 440 with the following command: /usr/bin/sudo /bin/chmod 440 [audit log file]
Verify the macOS system is configured with audit log folders set to mode 700 or less with the following command: /usr/bin/sudo /bin/ls -lde $(/usr/bin/sudo /usr/bin/grep '^dir' /etc/security/audit_control | /usr/bin/awk -F: '{print $2}') If the folders are not set to mode 700 or less, this is a finding.
Configure the macOS system with audit log folders set to mode 700 with the following command: /usr/bin/sudo /bin/chmod 700 [audit log folder]
Verify the macOS system is configured to audit enforcement actions with the following command: /usr/bin/sudo /usr/bin/grep ^flags /etc/security/audit_control If "fm", "-fr", "-fw", and "-fd" are not listed in the result of the check, this is a finding.
Configure the macOS system to audit enforcement actions with the following command: /usr/bin/sudo /usr/bin/sed -i.bak '/^flags/ s/$/,fm,-fr,-fw,-fd/' /etc/security/audit_control; /usr/bin/sudo /usr/sbin/audit -s A text editor may also be used to implement the required updates to the "/etc/security/audit_control" file.
Verify the macOS system is configured to store at least seven days of audit records with the following command: /usr/bin/sudo /usr/bin/grep ^expire-after /etc/security/audit_control expire-after:7d If "expire-after" is not set to "7d" or greater, this is a finding.
Configure the macOS system to store seven days of audit records with the following command: /usr/bin/sudo /usr/bin/sed -i.bak 's/.*expire-after.*/expire-after:7d/' /etc/security/audit_control; /usr/bin/sudo /usr/sbin/audit -s Alternatively, use a text editor to update the "/etc/security/audit_control" file.
Verify the macOS system is configured to require a minimum of 25 percent free disk space for audit record storage with the following command: /usr/bin/sudo /usr/bin/grep ^minfree /etc/security/audit_control minfree:25 If "minfree" is not set to "25", this is a finding.
Configure the macOS system to require 25 percent free disk space for audit record storage with the following command: /usr/bin/sudo /usr/bin/sed -i.bak 's/.*minfree.*/minfree:25/' /etc/security/audit_control; /usr/bin/sudo /usr/sbin/audit -s Alternatively, use a text editor to update the "/etc/security/audit_control" file.
Verify the macOS system is configured to print error messages to the console with the following command: /usr/bin/sudo /usr/bin/grep logger /etc/security/audit_warn logger -s -p security.warning "audit warning: $type $argument" If the argument "-s" is missing, or if "audit_warn" has not been otherwise modified to print errors to the console or send email alerts to the SA and ISSO, this is a finding.
Configure the macOS system to print error messages to the console with the following command: /usr/bin/sudo /usr/bin/sed -i.bak 's/logger -p/logger -s -p/' /etc/security/audit_warn; /usr/bin/sudo /usr/sbin/audit -s Alternatively, use a text editor to update the "/etc/security/audit_warn" file.
Verify the macOS system is configured to audit logon events with the following command: /usr/bin/sudo /usr/bin/grep ^flags /etc/security/audit_control If "aa" is not listed in the result of the check, this is a finding.
Configure the macOS system to audit logon events with the following command: /usr/bin/sudo /usr/bin/sed -i.bak '/^flags/ s/$/,aa/' /etc/security/audit_control; /usr/bin/sudo /usr/sbin/audit -s A text editor may also be used to implement the required updates to the "/etc/security/audit_control" file.
Verify the macOS system is configured to check the revocation status of user certificates with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "checkCertificateTrust" checkCertificateTrust = 1; If there is no result, or if "checkCertificateTrust" is not set to "1" or greater, this is a finding.
Configure the macOS system to check the revocation status of user certificates by installing the "Smart Card Policy" configuration profile. Note: To ensure continued access to the operating system, consult the supplemental guidance provided with the STIG before applying the "Smart Card Policy".
If SSH is not being used, this is not applicable. Verify the macOS system is configured to disable root logins over SSH with the following command: /usr/bin/grep -r ^PermitRootLogin /etc/ssh/sshd_config* If there is no result, or the result is set to "yes", this is a finding. If conflicting results are returned, this is a finding.
Configure the macOS system to disable root logins over SSH with the following command: /usr/bin/sudo /usr/bin/sed -i.bak 's/^[\#]*PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
Verify the macOS system is configured to disable the SMB File Sharing service with the following command: /bin/launchctl print-disabled system | /usr/bin/grep com.apple.smbd "com.apple.smbd" => disabled If the results are not "com.apple.smbd => disabled" or SMB file sharing has not been documented with the ISSO as an operational requirement, this is a finding.
Configure the macOS system to disable the SMB File Sharing service with the following command: /usr/bin/sudo /bin/launchctl disable system/com.apple.smbd The system may need to be restarted for the update to take effect.
Verify the macOS system is configured to disable the NFS daemon with the following command: /bin/launchctl print-disabled system | /usr/bin/grep com.apple.nfsd "com.apple.nfsd" => disabled If the results are not "com.apple.nfsd => disabled" or the use of NFS has not been documented with the ISSO as an operational requirement, this is a finding.
Configure the macOS system to disable the NFS daemon with the following command: /usr/bin/sudo /bin/launchctl disable system/com.apple.nfsd The system may need to be restarted for the update to take effect.
Verify the macOS system is configured to disable Location Services with the following command: /usr/bin/sudo /usr/bin/defaults read /var/db/locationd/Library/Preferences/ByHost/com.apple.locationd | /usr/bin/grep "LocationServicesEnabled" LocationServicesEnabled = 0; If "LocationServicesEnabled" is not set to "0" and the AO has not authorized the use of location services, this is a finding.
Configure the macOS system to disable Location Services with the following command: /usr/bin/sudo /usr/bin/defaults write /var/db/locationd/Library/Preferences/ByHost/com.apple.locationd LocationServicesEnabled -bool false The system may need to be restarted for the update to take effect.
Verify the macOS system is configured to disable Bonjour multicast advertising with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "NoMulticastAdvertisements" NoMulticastAdverstisements = 1; If there is no result, or if "NoMulticastAdvertisements" is not set to "1", this is a finding.
Configure the macOS system to disable Bonjour multicast advertising by installing the "Custom Policy" configuration profile.
Verify the macOS system is configured to disable the UUCP service with the following command: /bin/launchctl print-disabled system | /usr/bin/grep com.apple.uucp "com.apple.uucp" => disabled If the results are not "com.apple.uucp => disabled", this is a finding.
Configure the macOS system to disable the UUCP service with the following command: /usr/bin/sudo /bin/launchctl disable system/com.apple.uucp The system may need to be restarted for the update to take effect.
Verify the macOS system is configured to disable Internet Sharing with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "forceInternetSharingOff" forceInternetSharingOff = 1; If there is no result, or if "forceInternetSharingOff" is not set to "1", this is a finding.
Configure the macOS system to disable Internet Sharing by installing the "Custom Policy" configuration profile.
Verify the macOS system is configured to disable Web Sharing with the following command: /bin/launchctl print-disabled system | /usr/bin/grep org.apache.httpd "org.apache.httpd" => disabled If the results are not "org.apache.httpd => disabled", this is a finding.
Configure the macOS system to disable Web Sharing with the following command: /usr/bin/sudo /bin/launchctl disable system/org.apache.httpd The system may need to be restarted for the update to take effect.
Verify the macOS system is configured to disable AirDrop with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "allowAirDrop" allowAirDrop = 0; If there is no result, or if "allowAirDrop" is not set to "0", this is a finding.
Configure the macOS system to disable AirDrop by installing the "Restrictions Policy" configuration profile.
Verify the macOS system is configured to disable iCloud Calendar services with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "allowCloudCalendar" allowCloudCalendar = 0; If there is no result, or if "allowCloudCalendar" is not set to "0", this is a finding.
Configure the macOS system to disable iCloud Calendar services by installing the "Restrictions Policy" configuration profile.
Verify the macOS system is configured to disable iCloud Reminders services with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "allowCloudReminders" allowCloudReminders = 0; If there is no result, or if "allowCloudReminders" is not set to "0", this is a finding.
Configure the macOS system to disable iCloud Reminders services by installing the "Restrictions Policy" configuration profile.
Verify the macOS system is configured to disable iCloud Address Book services with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "allowCloudAddressBook" allowCloudAddressBook = 0; If there is no result, or if "allowCloudAddressBook" is not set to "0", this is a finding.
Configure the macOS system to disable iCloud Address Book services by installing the "Restrictions Policy" configuration profile.
Verify the macOS system is configured to disable iCloud Mail services with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "allowCloudMail" allowCloudMail = 0; If there is no result, or if "allowCloudMail" is not set to "0", this is a finding.
Configure the macOS system to disable iCloud Mail services by installing the "Restrictions Policy" configuration profile.
Verify the macOS system is configured to disable iCloud Notes services with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "allowCloudNotes" allowCloudNotes = 0; If there is no result, or if "allowCloudNotes" is not set to "0", this is a finding.
Configure the macOS system to disable iCloud Notes services by installing the "Restrictions Policy" configuration profile.
If the device or operating system does not have a camera installed, this requirement is not applicable. This requirement is not applicable to mobile devices (smartphones and tablets), where the use of the camera is a local AO decision. This requirement is not applicable to dedicated VTC suites located in approved VTC locations that are centrally managed. For an external camera, if there is not a method for the operator to manually disconnect camera at the end of collaborative computing sessions, this is a finding. For a built-in camera, the camera must be protected by a camera cover (e.g., laptop camera cover slide) when not in use. If the built-in camera is not protected with a camera cover, or is not physically disabled, this is a finding. If the camera is not disconnected, covered, or physically disabled, the following configuration is required: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "allowCamera" allowCamera = 0; If the result is "allowCamera = 1" and the collaborative computing device has not been authorized for use, this is a finding.
Configure the macOS system to disable the built-in camera by installing the "Restrictions Policy" configuration profile.
To check if Siri and dictation has been disabled, run the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep -e "Ironwood Allowed" If the output is not: "Ironwood Allowed = 0", this is a finding.
Configure the macOS system to disable Siri and dictation by installing the "Restrictions Policy" configuration profile.
Verify the macOS system is configured to disable sending diagnostic and usage data to Apple with the following command: /usr/bin/sudo /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "allowDiagnosticSubmission" allowDiagnosticSubmission = 0; If there is no result, or if "allowDiagnosticSubmission" is not set to "0", this is a finding. Alternatively, the settings are found in System Settings >> Privacy & Security >> Privacy >> Analytics & Improvements. If the box "Share Mac Analytics" is checked, this is a finding. If the box "Improve Siri & Dictation" is checked, this is a finding. If the box "Share with app developers" is checked, this is a finding.
Configure the macOS system to disable sending diagnostic and usage data to Apple by installing the "Restrictions Policy" configuration profile. Alternatively, the settings can be configured in System Settings >> Privacy & Security >> Privacy >> Analytics & Improvements by performing the following: - Uncheck the box, "Share Mac Analytics". - Uncheck the box "Improve Siri & Dictation". - Uncheck the box "Share with app developers".
Verify the macOS system is configured to disable Remote Apple Events with the following command: /bin/launchctl print-disabled system | /usr/bin/grep com.apple.AEServer "com.apple.AEServer" => disabled If the results are not "com.apple.AEServer => disabled", this is a finding.
Configure the macOS system to disable Remote Apple Events with the following command: /usr/bin/sudo /bin/launchctl disable system/com.apple.AEServer The system may need to be restarted for the update to take effect.
Verify the macOS system is configured to disable access to the Apple ID preference pane with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep -A 6 "DisabledPreferencePanes" If the result is not an array listing "DisabledPreferencePanes" containing "com.apple.preferences.AppleIDPrefPane", this is a finding.
Configure the macOS system to disable access to the Apple ID preference pane by installing the "Restrictions Policy" configuration profile.
Verify the macOS system is configured to disable access to the Internet Accounts preference pane with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep -A 6 "DisabledPreferencePanes" If the result is not an array listing "DisabledPreferencePanes" containing "com.apple.preferences.internetaccounts", this is a finding.
Configure the macOS system to disable access to the Internet Accounts preference pane by installing the "Restrictions Policy" configuration profile.
Verify the macOS system is configured to disable the Cloud Setup services with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "SkipCloudSetup" SkipCloudSetup = 1; If there is no result, or if "SkipCloudSetup" is not set to "1", this is a finding.
Configure the macOS system to disable the Cloud Setup services by installing the "Restrictions Policy" configuration profile.
Verify the macOS system is configured to disable the Privacy Setup services with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "SkipPrivacySetup" SkipPrivacySetup = 1; If there is no result, or if "SkipPrivacySetup" is not set to "1", this is a finding.
Configure the macOS system to disable the Privacy Setup services by installing the "Restrictions Policy" configuration profile.
Verify the macOS system is configured to disable the Cloud Storage Setup services with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "SkipiCloudStorageSetup" SkipiCloudStorageSetup = 1; If there is no result, or if "SkipiCloudStorageSetup" is not set to "1", this is a finding.
Configure the macOS system to disable the Cloud Storage Setup services by installing the "Restrictions Policy" configuration profile.
Verify the macOS system is configured to disable the tfptd service with the following command: /bin/launchctl print-disabled system | /usr/bin/grep com.apple.tftpd "com.apple.tftpd" => disabled If the results are not "com.apple.tftpd => disabled", this is a finding.
Configure the macOS system to disable the "tftpd" service with the following command: /usr/bin/sudo /bin/launchctl disable system/com.apple.tftpd The system may need to be restarted for the update to take effect.
Verify the macOS system is configured to disable the Siri Setup services with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "SkipSiriSetup" SkipSiriSetup = 1; If there is no result, or if "SkipSiriSetup" is not set to "1", this is a finding.
Configure the macOS system to disable the Siri Setup services by installing the "Restrictions Policy" configuration profile.
Verify the macOS system is configured to disable iCloud Keychain synchronization with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "allowCloudKeychainSync" allowCloudKeychainSync = 0; If there is no result, or if "allowCloudKeychainSync" is not set to "0", this is a finding.
Configure the macOS system to disable iCloud Keychain synchronization by installing the "Restrictions Policy" configuration profile.
Verify the macOS system is configured to disable iCloud Document synchronization with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "allowCloudDocumentSync" allowCloudDocumentSync = 0; If there is no result, or if "allowCloudDocumentSync" is not set to "0", this is a finding.
Configure the macOS system to disable iCloud Document synchronization by installing the "Restrictions Policy" configuration profile.
Verify the macOS system is configured to disable iCloud Bookmark synchronization with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "allowCloudBookmarks" allowCloudBookmarks = 0; If there is no result, or if "allowCloudBookmarks" is not set to "0", this is a finding.
Configure the macOS system to disable iCloud Bookmark synchronization by installing the "Restrictions Policy" configuration profile.
Verify the macOS system is configured to disable the iCloud Photo Library with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "allowCloudPhotoLibrary" allowCloudPhotoLibrary = 0; If there is no result, or if "allowCloudPhotoLibrary" is not set to "0", this is a finding.
Configure the macOS system to disable the iCloud Photo Library by installing the "Restrictions Policy" configuration profile.
Verify the macOS system is configured to disable the Screen Sharing feature with the following command: /usr/bin/sudo /bin/launchctl print-disabled system | /usr/bin/grep com.apple.screensharing "com.apple.screensharing => disabled" If "com.apple.screensharing" is not set to "disabled", this is a finding.
Configure the macOS system to disable the Screen Sharing service with the following command: /usr/bin/sudo /bin/launchctl disable system/com.apple.screensharing The system may need to be restarted for the update to take effect.
Verify the macOS system is configured to disable access to the TouchID & Password preference pane with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep -A 6 "DisabledPreferencePanes" If the result is not an array listing "DisabledPreferencePanes" containing "com.apple.preferences.password", this is a finding.
Configure the macOS system to disable access to the TouchID & Password preference pane by installing the "Restrictions Policy" configuration profile.
Verify the macOS system is configured to disable access to the Wallet & ApplePay preference pane with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep -A 6 "DisabledPreferencePanes" If the return is not two arrays "HiddenPreferencePanes" and "DisabledPreferencePanes", each containing "com.apple.preferences.wallet", this is a finding.
Configure the macOS system to disable access to the Wallet & ApplePay preference pane by installing the "Restrictions Policy" configuration profile.
Verify the macOS system is configured to disable access to the Siri preference pane with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep -A 6 "DisabledPreferencePanes" If the result is not an array listing "DisabledPreferencePanes" containing "com.apple.preference.speech", this is a finding.
Configure the macOS system to disable access to the Siri preference pane by installing the "Restrictions Policy" configuration profile.
Verify the macOS system is configured to only allow applications with a valid digital signature with the following commands: /usr/sbin/system_profiler SPApplicationsDataType | /usr/bin/grep -B 3 -A 4 -e "Obtained from: Unknown" | /usr/bin/grep -v -e "Location: /Library/Application Support/Script Editor/Templates" -e "Location: /System/Library/" | /usr/bin/awk -F "Location: " '{print $2}' | /usr/bin/sort -u If any results are returned and is not documented with the Information System Security Officer (ISSO) as an operational requirement, this is a finding. Verify only applications with a valid digital signature are allowed to run: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep -E "(EnableAssessment | AllowIdentifiedDevelopers)" If the result is not as follows, this is a finding. "AllowIdentifiedDevelopers = 1; EnableAssessment = 1;"
Configure the macOS system to only allow applications with a valid digital signature by installing the "Restrictions Policy" configuration profile.
Verify the macOS system is configured to disable Bluetooth with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "DisableBluetooth" DisableBluetooth = 1; If the result is not "DisableBluetooth = 1" and the use of Bluetooth has not been documented with the ISSO as an operational requirement, this is a finding. Verify the macOS system is configured to disable access to the Bluetooth preference pane with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep -A 6 "DisabledPreferencePanes" If the result is not an array listing "DisabledPreferencePanes" containing "com.apple.preferences.Bluetooth" and the use of Bluetooth has not been documented with the ISSO as an operational requirement, this is a finding.
Configure the macOS system to disable Bluetooth and disable access to the Bluetooth preference pane by installing the "Custom Policy" and "Restrictions Policy" configuration profiles.
Verify the macOS system is configured to disable the guest account with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "GuestAccount" DisableGuestAccount = 1; EnableGuestAccount = 0; If the result are not "DisableGuestAccount = 1" and "EnableGuestAccount = 0", this is a finding.
Configure the macOS system to disable the guest account by installing the "Login Window Policy" configuration profile.
Verify the macOS system is configured with the security assessment policy subsystem enabled with the following command: /usr/sbin/spctl --status assessments enabled If "assessments enabled" is not returned, this is a finding.
Configure the macOS system to enable the security assessment policy subsystem by installing the "Custom Policy" configuration profile.
Verify the macOS system is configured to not allow automatic logon with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "DisableAutoLoginClient" "com.apple.login.mcx.DisableAutoLoginClient" = 1; If "com.apple.login.mcx.DisableAutoLoginClient" is not set to "1", this is a finding.
Configure the macOS system to not allow automatic login by installing the "Login Window Policy" configuration profile.
Verify the macOS system is configured so that permissions are set correctly on user home directories with the following commands: /bin/ls -le /Users This command will return a listing of the permissions of the root of every user account configured on the system. For each of the users, the permissions must be "drwxr-xr-x+", with the user listed as the owner and the group listed as "staff". The plus(+) sign indicates an associated Access Control List, which must be: 0: group:everyone deny delete For every authorized user account, also run the following command: /usr/bin/sudo /bin/ls -le /Users/userid, where userid is an existing user. This command will return the permissions of all the objects under the users' home directory. The permissions for each of the subdirectories must be: drwx------+ 0: group:everyone deny delete The exception is the "Public" directory, whose permissions must match the following: drwxr-xr-x+ 0: group:everyone deny delete If the permissions returned by either of these checks differ from what is shown, this is a finding.
Configure the macOS system to set the appropriate permissions for each user on the system with the following command: /usr/sbin/diskutil resetUserPermissions / DeviceNode UID, where "DeviceNode UID" is the ID number for the user whose home directory permissions need to be repaired.
Verify the macOS system is configured to enforce installation of XProtect Remediator and Gatekeeper updates automatically with the following command: /usr/bin/defaults read /Library/Preferences/com.apple.SoftwareUpdate.plist | /usr/bin/grep "ConfigDataInstall" ConfigDataInstall = 1; If the XProtect service is being used and "ConfigDataInstall" is not set to "1", this is a finding. If XProtect is not active on the system, ask the system administrator (SA) or information system security officer (ISSO) if an approved antivirus solution is loaded on the system. The antivirus solution may be bundled with an approved host-based security solution. If no local antivirus solution is installed on the system, this is a finding.
Configure the macOS system to automatically update XProtect by installing the "Restrictions Policy" configuration profile. If XProtect is not being used, install an approved antivirus solution on the system.
Verify the macOS system is configured with approved DOD certificates with the following command: /usr/bin/sudo /usr/bin/security dump-keychain | /usr/bin/grep labl | /usr/bin/awk -F\" '{ print $4 }' If this list contains unapproved certificates, this is a finding.
Configure the macOS system with approved DOD certificates from the appropriate authority. Use Keychain Access from "/Applications/Utilities" to add certificates to the System Keychain or build a certificate root trust payload as described in the supplemental documentation supplied in this STIG package.
Verify the macOS system is configured to require at least one numeric character in password complexity with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "requireAlphanumeric" requireAlphanumeric = 1; If the result is not "requireAlphanumeric = 1", this is a finding.
Configure the macOS system to require at least one numeric character in password complexity by installing the "Passcode Policy" configuration profile.
Verify the macOS system is configured to enforce a 60-day maximum password lifetime with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "maxPINAgeInDays" maxPINAgeInDays = 60; If "maxPINAgeInDays" is set a value greater than "60", this is a finding.
Configure the macOS system to require the enforcement of a 60-day maximum password lifetime by installing the "Passcode Policy" configuration profile.
Verify the macOS system is configured to prohibit password reuse for a minimum of five generations with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "pinHistory" pinHistory = 5; If "pinHistory" is not set to "5" or greater, this is a finding.
Configure the macOS system to prohibit password reuse for five generations by installing the "Passcode Policy" configuration profile.
Verify the macOS system is configured to enforce a minimum 15-character password length with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "minLength" minLength = 15; If "minLength" is not set to "15", this is a finding.
Configure the macOS system to enforce a 15-character password length by installing the "Passcode Policy" configuration profile.
Verify the macOS system is configured to enforce at least one special character of password complexity with the following commands: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "minComplexChars" minComplexChar = 1; If "minComplexChars" is not set to "1", this is a finding. /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "allowSimple" allowSimple = 0; If "allowSimple" is not set to "0", this is a finding.
Configure the macOS system to enforce at least one special character of password complexity by installing the "Passcode Policy" configuration profile.
Verify the macOS system is configured to prevent displaying passwords hints with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "RetriesUntilHint" RetriesUntilHint = 0; If "RetriesUntilHint" is not set to "0", this is a finding.
Configure the macOS system to prevent displaying password hints by installing the "Login Window Policy" configuration profile.
For Apple Silicon-based systems, this is not applicable. Verify the macOS system is configured with a firmware password with the following command: /usr/bin/sudo /usr/sbin/firmwarepasswd -check Password Enabled:Yes If "Password Enabled" is not set to "Yes", this is a finding.
Configure the macOS system with a firmware password with the following command: /usr/bin/sudo /usr/sbin/firmwarepasswd -setpasswd Note: If firmware password or passcode is forgotten, the only way to reset the forgotten password is through a machine-specific binary generated and provided by Apple. Users must schedule a support call and provide proof of purchase before the firmware binary will be generated.
Verify the macOS system is configured to enforce multifactor authentication with the following commands: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "enforceSmartCard" enforceSmartCard = 1; If "enforceSmartCard" is not set to "1", this is a finding.
Configure the macOS system to enforce multifactor authentication by installing the "Smart Card Policy" configuration profile. Note: To ensure continued access to the operating system, consult the supplemental guidance provided with the STIG before applying the "Smart Card Policy".
For systems that are not using smart card authentication, this requirements is not applicable. Verify the macOS system is configured to require smart card authentication for the login command with the following command: /bin/cat /etc/pam.d/login If the text that returns does not include the line "auth sufficient pam_smartcard.so" at the TOP of the listing and "auth required pam_deny.so" as the last entry of the auth management group, this is a finding.
Configure the macOS system to require smart card authentication for the login command with the following procedure: /usr/bin/sudo /bin/cp /etc/pam.d/login /etc/pam.d/login_backup_`date "+%Y-%m-%d_%H:%M"` Replace the contents of "/etc/pam.d/login" with the following: # login: auth account password session auth sufficient pam_smartcard.so auth optional pam_krb5.so use_kcminit auth optional pam_ntlm.so try_first_pass auth optional pam_mount.so try_first_pass auth required pam_opendirectory.so try_first_pass auth required pam_deny.so account required pam_nologin.so account required pam_opendirectory.so password required pam_opendirectory.so session required pam_launchd.so session required pam_uwtmp.so session optional pam_mount.so
For systems that are not using smart card authentication, this requirement is not applicable. Verify the macOS system is configured to require smart card authentication for the "su" command with the following command: /bin/cat /etc/pam.d/su If the text that returns does not include the line, "auth sufficient pam_smartcard.so" at the TOP of the listing and the next line is not "auth required pam_rootok.so", this is a finding.
Configure the macOS system to require smart card authentication for the su command with the following procedure: /usr/bin/sudo /bin/cp /etc/pam.d/su /etc/pam.d/su_backup_`date "+%Y-%m-%d_%H:%M"` Replace the contents of "/etc/pam.d/su" with the following: # su: auth account session auth sufficient pam_smartcard.so auth required pam_rootok.so account required pam_group.so no_warn group=admin,wheel ruser root_only fail_safe account required pam_opendirectory.so no_check_shell password required pam_opendirectory.so session required pam_launchd.so
For systems that are not using smart card authentication, this requirement is not applicable. Verify the macOS system is configured to require smart card authentication for the "sudo" command with the following command: /bin/cat /etc/pam.d/sudo If the text that returns does not include the line, "auth sufficient pam_smartcard.so" at the top of the listing and "auth required pam_deny.so" as the last entry of the auth management group, this is a finding.
Configure the macOS system to require smart card authentication for the sudo command with the following procedure: /usr/bin/sudo /bin/cp /etc/pam.d/login /etc/pam.d/sudo_backup_`date "+%Y-%m-%d_%H:%M"` Replace the contents of "/etc/pam.d/sudo" with the following: # sudo: auth account password session auth sufficient pam_smartcard.so auth required pam_opendirectory.so auth required pam_deny.so account required pam_permit.so password required pam_deny.so session required pam_permit.so
Verify the macOS system is configured with system log files owned by root or a service account and group-owned by wheel or admin with the commands below. These commands must be run from inside "/var/log". /usr/bin/sudo /usr/bin/stat -f '%Su:%Sg:%N' $(/usr/bin/grep -v '^#' /etc/newsyslog.conf | /usr/bin/awk '{ print $1 }') 2> /dev/null /usr/bin/sudo /usr/bin/stat -f '%Su:%Sg:%N' $(/usr/bin/grep -e '^>' /etc/asl.conf /etc/asl/* | /usr/bin/awk '{ print $2 }') 2> /dev/null If there are any system log files that are not owned by "root" or a service account and group-owned by "wheel" or "admin", this is a finding.
Configure the macOS system with system log files owned by root or a service account and group-owned by wheel or admin with the following command: /usr/bin/sudo chown root:wheel [log file] Alternatively, if the file is managed by "newsyslog", find the configuration line in the directory "/etc/newsyslog.d/" or the file "/etc/newsyslog.conf" and ensure the owner:group column is set to "root:wheel" or the appropriate service account and group. If the file is managed by "aslmanager", find the configuration line in the directory "/etc/asl/" or the file "/etc/asl.conf" and ensure that "uid" and "gid" options are set to a service account and group, respectively.
Verify the macOS system is configured with system log files set to mode 640 or less with the commands below. These commands must be run from inside "/var/log". /usr/bin/sudo /usr/bin/stat -f '%A:%N' $(/usr/bin/grep -v '^#' /etc/newsyslog.conf | /usr/bin/awk '{ print $1 }') 2> /dev/null /usr/bin/sudo /usr/bin/stat -f '%A:%N' $(/usr/bin/grep -e '^>' /etc/asl.conf /etc/asl/* | /usr/bin/awk '{ print $2 }') 2> /dev/null If the permissions on log files are not "640" or less permissive, this is a finding.
Configure the macOS system with system log files set to mode 640 with the following command: /usr/bin/sudo chmod 640 [log file] Alternatively, if the file is managed by "newsyslog", find the configuration line in the directory "/etc/newsyslog.d/" or the file "/etc/newsyslog.conf" and edit the mode column to be "640". Or, if the file is managed by "aslmanager", find the configuration line in the directory "/etc/asl/" or the file "/etc/asl.conf" and add or edit the mode option to be "mode=0640".
Verify the macOS system requires reauthentication when using the "sudo" command to elevate privileges with the following command: /usr/bin/sudo /usr/bin/grep -r "timestamp_timeout" /etc/sudoers* /etc/sudoers.d/<customfile>:Defaults timestamp_timeout=0 If conflicting results are returned, this is a finding. If "timestamp_timeout" is set to a negative number, is commented out, or no results are returned, this is a finding.
Configure the macOS system to require reauthentication when using the "sudo" command by creating a plain text file in the /private/etc/sudoers.d/ directory containing the following: Defaults timestamp_timeout=0
Verify the macOS system is configured to enable System Integrity Protection with the following command: /usr/bin/csrutil status System Integrity Protection status: enabled. If the "System Integrity Protection" is not set to "enabled", this is a finding.
Configure the macOS system to enable "System Integrity Protection" by booting into "Recovery" mode, then launch "Terminal" from the "Utilities" menu, and run the following command: /usr/bin/csrutil enable
Verify the macOS system is configured to enable "FileVault" with the following command: /usr/bin/fdesetup status If "FileVault" is "Off" and the device is a mobile device or the organization has determined that the drive must encrypt data at rest, this is a finding.
Configure the macOS system to enable "FileVault" by opening System Settings >> Privacy & Security >> Security and navigate to the "FileVault" section. Use this panel to configure full-disk encryption. Alternatively, from the command line, run the following command to enable "FileVault": /usr/bin/sudo /usr/bin/fdesetup enable After "FileVault" is initially set up, additional users can be added.
Verify the macOS system is configured to enable the built-in firewall with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "EnableFirewall\|EnableStealthMode" EnableFirewall = 1; EnableStealthMode = 1; If "EnableFirewall" and "EnableStealthMode" are not set to "1", this is a finding.
Configure the macOS system to enable the built-in firewall by installing the "Restrictions Policy" configuration profile.
Verify the macOS system is configured to disable USB storage devices with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep -A 32 "mount-controls" bd = ( "read-only" ); blankbd = ( deny, eject ); blankcd = ( deny, eject ); blankdvd = ( deny, eject ); cd = ( "read-only" ); "disk-image" = ( "read-only" ); dvd = ( "read-only" ); dvdram = ( deny, eject ); "harddisk-external" = ( deny, eject ); If the result does not match the output above and is not documented with the Information System Security Officer (ISSO) as an operational requirement, this is a finding.
Configure the macOS system to disable USB storage devices by installing the "Restrictions Policy" configuration profile.
Verify the macOS system is configured to prompt for username and password at the logon window with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "SHOWFULLNAME" SHOWFULLNAME = 1; If "SHOWFULLNAME" is not set to "1", this is a finding.
Configure the macOS system to prompt for username and password at the logon window by installing the "Login Window Policy" configuration profile.
Verify the macOS system is configured to disable writing to external optical media devices with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "BurnSupport" BurnSupport = off; If "BurnSupport" is not set to "off" and is not documented with the Information System Security Officer (ISSO) as an operational requirement, this is a finding.
Configure the macOS system to disable writing to external optical media devices by installing the "Restrictions Policy" configuration profile.
Verify the macOS system is configured to disable prompts to setup TouchID with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "SkipTouchIDSetup" SkipTouchIDSetup = 1; If "SkipTouchIDSetup" is not set to "1", this is a finding.
Configure the macOS system to disable prompts to setup TouchID by installing the "Restrictions Policy" configuration profile.
Verify the macOS system is configured to disable Screentime Setup with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "SkipScreenTime" SkipScreenTime = 1; If "SkipScreenTime" is not set to "1", this is a finding.
Configure the macOS system to disable Screentime Setup by installing the "Restrictions Policy" configuration profile.
Verify the macOS system is configured to disable prompts to setup Unlock with Watch with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "SkipUnlockWithWatch" SkipUnlockWithWatch = 1; If "SkipUnlockWithWatch" is not set to "1", this is a finding.
Configure the macOS system to disable prompts to setup Unlock with Watch by installing the "Restrictions Policy" configuration profile.
Verify the macOS system is configured to prevent activity continuation between Apple devices with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "allowActivityContinuation" allowActivityContinuation = 0; If "allowActivityContinuation" is not set to "0", this is a finding.
Configure the macOS system to prevent activity continuation between Apple devices by installing the "Restrictions Policy" configuration profile.
Verify the macOS system is configured to prevent password proximity sharing with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "allowPasswordProximityRequests" allowPasswordProximityRequests = 0; If "allowPasswordProximityRequests" is not set to "0", this is a finding.
Configure the macOS system to prevent Configure the macOS system to prevent password proximity sharing by installing the "Restrictions Policy" configuration profile.
Verify the macOS system is configured to prevent users from erasing all system content and settings with the following command: /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "allowEraseContentAndSettings" allowEraseContentAndSettings = 0; If "allowEraseContentAndSettings" is not set to "0", this is a finding.
Configure the macOS system to prevent users from erasing all system content and settings by installing the "Restrictions Policy" configuration profile.
Verify the macOS system is configured to use approved SSH ciphers within the SSH client configuration with the following command: /usr/bin/sudo /usr/bin/grep -ir "ciphers" /etc/ssh/ssh_config* /etc/ssh/ssh_config.d/fips_ssh_config:Ciphers aes128-gcm@openssh.com If any ciphers other than "aes128-gcm@openssh.com" are listed, or the "ciphers" keyword is missing, this is a finding.
Configure the macOS system to use approved SSH ciphers by creating a plain text file in the /private/etc/ssh/ssh_config.d/ directory containing the following: Ciphers aes128-gcm@openssh.com The SSH service must be restarted for changes to take effect.
Verify the macOS system is configured to use approved SSH MACs within the SSH client configuration with the following command: /usr/bin/sudo /usr/bin/grep -ir "macs" /etc/ssh/ssh_config* /etc/ssh/ssh_config.d/fips_ssh_config:Macs hmac-sha2-256 If any hashes other than "hmac-sha2-256" are listed, or the "macs" keyword is missing, this is a finding.
Configure the macOS system to use approved SSH MACs by creating a plain text file in the /private/etc/ssh/ssh_config.d/ directory containing the following: MACs hmac-sha2-256 The SSH service must be restarted for changes to take effect.
Verify the macOS system is configured to use approved SSH Key Exchange Algorithms within the SSH client configuration with the following command: /usr/bin/sudo /usr/bin/grep -ir "kexalgorithms" /etc/ssh/ssh_config* /etc/ssh/ssh_config.d/fips_ssh_config:KexAlgorithms ecdh-sha2-nistp256 If any algorithms other than "ecdh-sha2-nistp256" are listed, or the "kexalgorithms" keyword is missing, this is a finding.
Configure the macOS system to use approved SSH Key Exchange Algorithms by creating a plain text file in the /private/etc/ssh/ssh_config.d/ directory containing the following: KexAlgorithms ecdh-sha2-nistp256 The SSH service must be restarted for changes to take effect.
Verify the macOS system is configured to require authentication to access all system-level preference panes with the following commands: /usr/bin/sudo /usr/bin/security authorizationdb read system.preferences | /usr/bin/grep -A1 shared <key>shared</key> <false/> If the "shared" key is not set to "false", this is a finding.
Configure the macOS system to require authentication to access all system-level preference panes with the following actions: Copy the authorization database to a file: /usr/bin/sudo /usr/bin/security authorizationdb read system.preferences > ~/Desktop/authdb.txt Edit the "shared" section of the file: <key>shared</key> <false/> Reload the authorization database: /usr/bin/sudo /usr/bin/security authorizationdb write system.preferences < ~/Desktop/authdb.txt