Apple OS X 10.9 (Mavericks) Workstation Security Technical Implementation Guide

V1R1 2015-02-26       U_Apple_OS_X_10-9_Workstation_V1R1_STIG_Manual-xccdf.xml
V1R2 2017-01-05       U_Apple_OS_X_10-9_Workstation_V1R2_Manual-xccdf.xml
The Apple OS X 10.9 Workstation Security Technical Implementation Guide is published as a tool to improve the security of Department of Defense (DoD) information systems. The requirements are derived from the National Institute of Standards and Technology (NIST) 800-53 and related documents. Comments or proposed revisions to this document should be sent via e-mail to the following address: [email protected]
Comparison
All 134
No Change 133
Updated 0
Added 1
Removed 0
V-58251 No Change
Findings ID: AOSX-09-000005 Rule ID: SV-72681r1_rule Severity: low CCI: CCI-000060

Discussion

A default screensaver must be configured for all users, as the screensaver will act as a session time-out lock for the system and must be one that conceals the contents of the screen from unauthorized users. The screensaver must not display any sensitive information or reveal the contents of the locked session screen. Publicly viewable images can include static or dynamic images such as patterns used with screen savers, photographic images, solid colors, a clock, a battery life indicator, or a blank screen.

Checks

To view the currently selected screen saver for the logged in user, run the following command:

system_profiler SPConfigurationProfileDataType | grep moduleName

If there is no result or defined moduleName, this is a finding.

Fix

This setting is enforced using a configuration profile.
V-58253 No Change
Findings ID: AOSX-09-000010 Rule ID: SV-72683r1_rule Severity: medium CCI: CCI-000057

Discussion

A screensaver must be enabled and set to require a password to unlock. The timeout should be set to fifteen minutes of inactivity. This mitigates the risk that a user might forget to manually lock the screen before stepping away from the computer.

A session time-out lock is a temporary action taken when a user stops work and moves away from the immediate physical vicinity of the information system, but does not log out because of the temporary nature of the absence. Rather than relying on the user to manually lock their operating system session prior to vacating the vicinity, operating systems need to be able to identify when a user's session has idled and take action to initiate the session lock.

Checks

To check if the system has a configuration profile configured to enable the screen saver after a time-out period, run the following command:

system_profiler SPConfigurationProfileDataType | grep idleTime

The check should return a value of '900' or less for idleTime. If not, this is a finding.

Fix

This setting is enforced using a configuration profile.
V-58255 No Change
Findings ID: AOSX-09-000020 Rule ID: SV-72685r1_rule Severity: medium CCI: CCI-000056

Discussion

Users must be prompted to enter their passwords when unlocking the screensaver. The screensaver acts as a session lock and prevents unauthorized users from accessing the current user's account.

Checks

To check if the system will prompt users to enter their passwords to unlock the screensaver, run the following command:

system_profiler SPConfigurationProfileDataType | grep askForPassword

If there is no result, or if askForPassword is not set to '1', this is a finding.

Fix

This setting is enforced using a configuration profile.
V-58257 No Change
Findings ID: AOSX-09-000030 Rule ID: SV-72687r1_rule Severity: medium CCI: CCI-000067

Discussion

Remote access services, such as those providing remote access to network devices and information systems, increase risk and expose those systems to possible cyber attacks, so all remote access should be closely monitored and audited. Only authorized users should be permitted to remotely access DoD non-public information systems. An attacker might attempt to log in as an authorized user, through stolen credentials, unpatched exploits of the remote access service, or brute force attempts to guess a valid username and password. If a user is attempting to log in to a system from an unusual location or at an unusual time, or if there are many failed attempts, there is a possibility that the system is the target of a cyber attack. Auditing logon events mitigates this risk by recording all logon attempts, successful and unsuccessful, to the system.

Checks

To check to make sure the audit daemon is configured to log all login events, both local and remote, run the following command:

sudo grep ^flags /etc/security/audit_control

The flag 'lo' should be included in the list of flags set. If it is not, this is a finding.

Fix

To make sure the appropriate flags are enabled for auditing, run the following command:

sudo sed -i.bak '/^flags/ s/$/,lo/' /etc/security/audit_control; sudo audit -s

A text editor may also be used to implement the required update to the /etc/security/audit_control file.
V-58259 No Change
Findings ID: AOSX-09-000035 Rule ID: SV-72689r1_rule Severity: high CCI: CCI-000068

Discussion

The 'rexec' service must be disabled. The 'rexec' service does not implement crypto and has had several security vulnerabilities in the past. It is disabled by default; enabling it would increase the attack surface of the system.

Without confidentiality protection mechanisms, unauthorized individuals may gain access to sensitive information via a remote access session.

Remote access is access to DoD non-public information systems by an authorized user (or an information system) communicating through an external, non-organization-controlled network. Remote access methods include, for example, dial-up, broadband, and wireless.

Encryption provides a means to secure the remote connection to prevent unauthorized access to the data traversing the remote access connection (e.g., RDP) thereby providing a degree of confidentiality. The encryption strength of mechanism is selected based on the security categorization of the information.

Checks

The service 'rexec' should be disabled, to check the status of the service, run the following command:

sudo /usr/libexec/PlistBuddy -c 'print com.apple.rexecd:Disabled' /var/db/launchd.db/com.apple.launchd/overrides.plist

If the returned value isn't 'true' or doesn't exist, this is a finding.

Fix

To disable the 'rexec' service, run the following command:

sudo defaults write /private/var/db/launchd.db/com.apple.launchd/overrides.plist 'com.apple.rexecd' -dict Disabled -bool true
V-58261 No Change
Findings ID: AOSX-09-000040 Rule ID: SV-72691r1_rule Severity: high CCI: CCI-001453

Discussion

The telnet service must be disabled, as it sends all data, including the user's password, in a clear text form that can be easily intercepted and read. Passwords need to be protected at all times and encryption is the standard method for protecting passwords. If passwords are not encrypted, they can be plainly read (i.e., clear text) and easily compromised. Disabling telnet is one way to mitigate this risk. Authorized users should be instructed to use an alternate service that implements cryptography for remote access sessions, such as SSH.

Checks

The service 'telnet' should be disabled, to check the status of the service, run the following command:

sudo /usr/libexec/PlistBuddy -c 'print com.apple.telnetd:Disabled' /var/db/launchd.db/com.apple.launchd/overrides.plist

If the returned value isn't 'true' or doesn't exist, this is a finding.

Fix

To set the telnet service to disabled, run the following command:

sudo defaults write /private/var/db/launchd.db/com.apple.launchd/overrides.plist 'com.apple.telnetd' -dict Disabled -bool true
V-58263 No Change
Findings ID: AOSX-09-000050 Rule ID: SV-72693r1_rule Severity: high CCI: CCI-000381

Discussion

It is detrimental for operating systems to provide, or install by default, functionality exceeding requirements or mission objectives. These unnecessary capabilities or services are often overlooked and therefore may remain unsecured. They increase the risk to the platform by providing additional attack vectors.

Operating systems are capable of providing a wide variety of functions and services. Some of the functions and services, provided by default, may not be necessary to support essential organizational operations (e.g., key missions, functions).

Examples of non-essential capabilities include, but are not limited to, games, software packages, tools, and demonstration software, not related to requirements or providing a wide array of functionality not required for every mission, but cannot be disabled.

The 'rshd' service must be disabled.

Checks

The 'rshd' service should be disabled. To check the status of the service, run the following command:

sudo /usr/libexec/PlistBuddy -c 'print com.apple.rshd:Disabled' /var/db/launchd.db/com.apple.launchd/overrides.plist

If the returned value isn't 'true', this is a finding.

Fix

To disable the 'rshd' service, run the following command:

sudo defaults write /private/var/db/launchd.db/com.apple.launchd/overrides.plist 'com.apple.rshd' -dict Disabled -bool true
V-58265 No Change
Findings ID: AOSX-09-000055 Rule ID: SV-72695r1_rule Severity: medium CCI: CCI-000366

Discussion

The Screen Sharing feature allows remote users to view or control the desktop of the current user. A malicious user can take advantage of Screen Sharing to gain full access to the system remotely, either with stolen credentials or by guessing the username and password. Disabling Screen Sharing mitigates this risk.

Checks

To check if screen sharing is disabled, run the following command:

sudo /usr/libexec/PlistBuddy -c 'print com.apple.screensharing:Disabled' /var/db/launchd.db/com.apple.launchd/overrides.plist

If the returned value isn't 'true' or doesn't exist, this is a finding.

Fix

To disable screen sharing, run the following command:

sudo defaults write /private/var/db/launchd.db/com.apple.launchd/overrides.plist 'com.apple.screensharing' -dict Disabled -bool true
V-58267 No Change
Findings ID: AOSX-09-000065 Rule ID: SV-72697r1_rule Severity: low CCI: CCI-000366

Discussion

The Bluetooth kernel extension must be removed, as wireless access introduces unnecessary security risks. Removing Bluetooth support entirely mitigates this risk.

Checks

To check if there are any hardware components for Bluetooth loaded in the system, run the following command:

sudo kextstat | grep -i bluetooth

If there is a result, this is a finding.

Fix

Removing the kernel extensions for Bluetooth will remove the system's ability to load Bluetooth devices, use the following commands to remove them:

sudo rm -rf /System/Library/Extensions/IOBluetoothFamily.kext /System/Library/Extensions/IOBluetoothHIDDriver.kext; sudo touch /System/Library/Extensions
V-58269 No Change
Findings ID: AOSX-09-000070 Rule ID: SV-72699r1_rule Severity: medium CCI: CCI-000366

Discussion

The kernel extension for Wi-Fi network devices such as Airport must be removed to ensure that users will not be able to reactivate wireless networking at a later time. System updates will sometimes replace deleted kernel extensions. Administrator users may need to periodically check to ensure that the file remains deleted. Alternately, the wireless card hardware may be removed from the system.

Checks

If the system requires Wi-Fi to connect to an authorized network, this is not applicable.

To check if the Wi-Fi network device is disabled, run the following command:

sudo networksetup -listallnetworkservices

A disabled device will have an asterisk in front of its name. If the Wi-Fi device is missing this asterisk, this is a finding.

Fix

To disable the Wi-Fi network device, run the following command:

sudo networksetup -setnetworkserviceenabled 'Wi-Fi' off
V-58271 No Change
Findings ID: AOSX-09-000075 Rule ID: SV-72701r1_rule Severity: medium CCI: CCI-000366

Discussion

Infrared [IR] kernel support must be disabled to prevent users from controlling the system with IR devices. By default, if IR is enabled, the system will accept IR control from any remote.

Checks

To check if IR support is disabled, run the following command:

sudo defaults read /Library/Preferences/com.apple.driver.AppleIRController DeviceEnabled

If the result is not '0', this is a finding.

Fix

To disable IR, run the following command:

sudo defaults write /Library/Preferences/com.apple.driver.AppleIRController DeviceEnabled -bool FALSE
V-58273 No Change
Findings ID: AOSX-09-000085 Rule ID: SV-72703r1_rule Severity: medium CCI: CCI-000366

Discussion

Applications should not be configured to launch automatically when a disk is inserted. This potentially circumvents anti-virus software and allows malicious users to craft disks that can exploit user applications. Disabling Automatic Actions for blank CDs mitigates this risk.

Checks

To check if the system has the correct setting for blank CDs in the configuration profile, run the following command:

system_profiler SPConfigurationProfileDataType | grep -A 2 'com.apple.digihub.blank.cd.appeared'

If this is not defined or 'action' is not set to '1', this is a finding.

Fix

This setting is enforced using a configuration profile.
V-58275 No Change
Findings ID: AOSX-09-000090 Rule ID: SV-72705r1_rule Severity: medium CCI: CCI-000366

Discussion

Applications should not be configured to launch automatically when a disk is inserted. This potentially circumvents anti-virus software and allows malicious users to craft disks that can exploit user applications. Disabling Automatic Actions for blank DVDs mitigates this risk.

Checks

To check if the system has the correct setting for blank DVDs in the configuration profile, run the following command:

system_profiler SPConfigurationProfileDataType | grep -A 2 'com.apple.digihub.blank.dvd.appeared'

If this is not defined or 'action' is not set to '1', this is a finding.

Fix

This setting is enforced using a configuration profile.
V-58277 No Change
Findings ID: AOSX-09-000095 Rule ID: SV-72707r1_rule Severity: medium CCI: CCI-000366

Discussion

Applications should not be configured to launch automatically when a disk is inserted. This potentially circumvents anti-virus software and allows malicious users to craft disks that can exploit user applications. Disabling Automatic Actions for music CDs mitigates this risk.

Checks

To check if the system has the correct setting for music CDs in the configuration profile, run the following command:

system_profiler SPConfigurationProfileDataType | grep -A 2 'com.apple.digihub.cd.music.appeared'

If this is not defined or 'action' is not set to '1', this is a finding.

Fix

This setting is enforced using a configuration profile.
V-58279 No Change
Findings ID: AOSX-09-000100 Rule ID: SV-72709r1_rule Severity: medium CCI: CCI-000366

Discussion

Applications should not be configured to launch automatically when a disk is inserted. This potentially circumvents anti-virus software and allows malicious users to craft disks that can exploit user applications. Disabling Automatic Actions for picture CDs mitigates this risk.

Checks

To check if the system has the correct setting for picture CDs in the configuration profile, run the following command:

system_profiler SPConfigurationProfileDataType | grep -A 2 'com.apple.digihub.cd.picture.appeared'

If this is not defined or 'action' is not set to '1', this is a finding.

Fix

This setting is enforced using a configuration profile.
V-58281 No Change
Findings ID: AOSX-09-000105 Rule ID: SV-72711r1_rule Severity: medium CCI: CCI-000366

Discussion

Applications should not be configured to launch automatically when a disk is inserted. This potentially circumvents anti-virus software and allows malicious users to craft disks that can exploit user applications. Disabling Automatic Actions for video DVDs mitigates this risk.

Checks

To check if the system has the correct setting for video DVDs in the configuration profile, run the following command:

system_profiler SPConfigurationProfileDataType | grep -A 2 'com.apple.digihub.dvd.video.appeared'

If this is not defined or 'action' is not set to '1', this is a finding.

Fix

This setting is enforced using a configuration profile.
V-58283 No Change
Findings ID: AOSX-09-000110 Rule ID: SV-72713r1_rule Severity: medium CCI: CCI-000016

Discussion

If temporary user accounts remain active when no longer needed or for an excessive period, these accounts may be targeted by attackers to gain unauthorized access. To mitigate this risk, automated termination of all temporary accounts must be set upon account creation.

Temporary accounts are established as part of normal account activation procedures when there is a need for short-term accounts without the demand for immediacy in account activation.

If temporary accounts are used, the operating system must be configured to automatically terminate these types of accounts after a DoD-defined time period of 72 hours.

To address access requirements, many operating systems may be integrated with enterprise level authentication/access mechanisms that meet or exceed access control policy requirements.

Checks

If a temporary user has been created on the workstation, check the expiration settings using the following command, substituting the correct user name in place of username:

sudo pwpolicy -u username get-effective-policy | tr ' ' '\n' | grep 'usingHardExpirationDate\|hardExpireDateGMT'

The value of 'usingHardExpirationDate' should be '1', and the value for the 'hardExpireDateGMT' should be a valid date. If they are not set correctly, and password policy is not controlled by a directory server, this is a finding.

Fix

To set an expiration date for a temporary account, use the following command, substituting the correct user name in place of username:

sudo pwpolicy -u username setpolicy 'usingHardExpirationDate=1 hardExpireDateGMT=mm/dd/yy'
V-58285 No Change
Findings ID: AOSX-09-000115 Rule ID: SV-72715r1_rule Severity: medium CCI: CCI-001682

Discussion

Emergency administrator accounts are privileged accounts which are established in response to crisis situations where the need for rapid account activation is required. Therefore, emergency account activation may bypass normal account authorization processes. If these accounts are automatically disabled, system maintenance during emergencies may not be possible, thus adversely affecting system availability.

Emergency administrator accounts are different from infrequently used accounts (i.e., local login accounts used by system administrators when network or normal logon/access is not available). Infrequently used accounts also remain available and are not subject to automatic termination dates. However, an emergency administrator account is normally a different account which is created for use by vendors or system maintainers.

To address access requirements, many operating systems can be integrated with enterprise-level authentication/access mechanisms that meet or exceed access control policy requirements.

Checks

If an emergency account has been created on the workstation, check the expiration settings using the following command, replacing username with the correct value:

sudo pwpolicy -u username get-effective-policy | tr ' ' '\n' | grep 'usingHardExpirationDate\|maxMinutesUntilDisabled

If anything is returned, this is a finding.

Fix

To remove all pwpolicy settings for the emergency account, run the following command, replacing username with the correct value:

sudo dscl . -delete /Users/username PasswordPolicyOptions
V-58287 No Change
Findings ID: AOSX-09-000120 Rule ID: SV-72717r1_rule Severity: medium CCI: CCI-000018

Discussion

Once an attacker establishes initial access to a system, the attacker often attempts to create a persistent method of re-establishing access. One way to accomplish this is for the attacker to create a new account. Auditing of account creation mitigates this risk.

To address access requirements, many operating systems may be integrated with enterprise level authentication/access/auditing mechanisms that meet or exceed access control policy requirements.

Checks

In order to view the currently configured flags for the audit daemon, run the following command:

sudo grep ^flags /etc/security/audit_control

The account creation events are logged by way of the 'ad' flag. If 'ad' is not listed in the result of the check, this is a finding.

Fix

To make sure the appropriate flags are enabled for auditing, run the following command:

sudo sed -i.bak '/^flags/ s/$/,ad/' /etc/security/audit_control; sudo audit -s

A text editor may also be used to implement the required update to the /etc/security/audit_control file.
V-58289 No Change
Findings ID: AOSX-09-000125 Rule ID: SV-72719r1_rule Severity: medium CCI: CCI-001403

Discussion

Once an attacker establishes initial access to a system, the attacker often attempts to create a persistent method of re-establishing access. One way to accomplish this is for the attacker to create a new account or modify an existing one. Auditing of account creation and modification is one method for mitigating this risk.

To address access requirements, many operating systems can be integrated with enterprise-level authentication/access/auditing mechanisms that meet or exceed access control policy requirements.

Checks

In order to view the currently configured flags for the audit daemon, run the following command:

sudo grep ^flags /etc/security/audit_control

The account creation events are logged by way of the 'ad' flag. If 'ad' is not listed in the result of the check, this is a finding.

Fix

To make sure the appropriate flags are enabled for auditing, run the following command:

sudo sed -i.bak '/^flags/ s/$/,ad/' /etc/security/audit_control; sudo audit -s

A text editor may also be used to implement the required update to the /etc/security/audit_control file.
V-58291 No Change
Findings ID: AOSX-09-000130 Rule ID: SV-72721r1_rule Severity: medium CCI: CCI-001404

Discussion

When operating system accounts are disabled, user accessibility is affected. The system must audit account disablement actions so that administrator users can detect and respond to such events. Such a capability greatly reduces the risk that operating system accessibility will be negatively affected for extended periods of time and provides logging that can be used for forensic purposes.

To address access requirements, many operating systems can be integrated with enterprise-level authentication/access/auditing mechanisms that meet or exceed access control policy requirements.

Checks

In order to view the currently configured flags for the audit daemon, run the following command:

sudo grep ^flags /etc/security/audit_control

The account modification events are logged by way of the 'ad' flag. If 'ad' is not listed in the result of the check, this is a finding.

Fix

To make sure the appropriate flags are enabled for auditing, run the following command:

sudo sed -i.bak '/^flags/ s/$/,ad/' /etc/security/audit_control; sudo audit -s

A text editor may also be used to implement the required update to the /etc/security/audit_control file.
V-58293 No Change
Findings ID: AOSX-09-000135 Rule ID: SV-72723r1_rule Severity: medium CCI: CCI-001405

Discussion

When operating system accounts are removed, user accessibility is affected. The system must audit account removal actions so that administrator users can detect and respond to such events. Such a capability greatly reduces the risk that operating system accessibility will be negatively affected for extended periods of time and provides logging that can be used for forensic purposes.

To address access requirements, many operating systems can be integrated with enterprise-level authentication/access/auditing mechanisms that meet or exceed access control policy requirements.

Checks

In order to view the currently configured flags for the audit daemon, run the following command:

sudo grep ^flags /etc/security/audit_control

The account modification events are logged by way of the 'ad' flag. If 'ad' is not listed in the result of the check, this is a finding.

Fix

To make sure the appropriate flags are enabled for auditing, run the following command:

sudo sed -i.bak '/^flags/ s/$/,ad/' /etc/security/audit_control; sudo audit -s

A text editor may also be used to implement the required update to the /etc/security/audit_control file.
V-58295 No Change
Findings ID: AOSX-09-000139 Rule ID: SV-72725r1_rule Severity: medium CCI: CCI-000381

Discussion

File Sharing is non-essential and must be disabled. Enabling any service increases the attack surface for an intruder. By disabling unnecessary services, the attack surface is minimized.

Checks

SMB File Sharing must be disabled.

To check if SMB File Sharing is disabled, run the following command:

sudo /usr/libexec/PlistBuddy -c 'print com.apple.smbd:Disabled' /var/db/launchd.db/com.apple.launchd/overrides.plist

If the returned value isn't 'true', this is a finding.

Fix

To disable SMB File Sharing, run the following command:

sudo defaults write /private/var/db/launchd.db/com.apple.launchd/overrides.plist 'com.apple.smbd' -dict Disabled -bool true
V-58297 No Change
Findings ID: AOSX-09-000140 Rule ID: SV-72727r1_rule Severity: medium CCI: CCI-000381

Discussion

File Sharing is non-essential and must be disabled. Enabling any service increases the attack surface for an intruder. By disabling unnecessary services, the attack surface is minimized.

Checks

Apple File (AFP) Sharing must be disabled.

To check if Apple File (AFP) Sharing is disabled, run the following command:

sudo /usr/libexec/PlistBuddy -c 'print com.apple.AppleFileServer:Disabled' /var/db/launchd.db/com.apple.launchd/overrides.plist

If the returned value isn't 'true', this is a finding.

Fix

To disable Apple File (AFP) Sharing, run the following command:

sudo defaults write /private/var/db/launchd.db/com.apple.launchd/overrides.plist 'com.apple.AppleFileServer' -dict Disabled -bool true
V-58299 No Change
Findings ID: AOSX-09-000141 Rule ID: SV-72729r1_rule Severity: medium CCI: CCI-000381

Discussion

If the system does not require access to NFS (Network File System) file shares or is not acting as an NFS server, then support for NFS is non-essential and NFS services must be disabled. NFS is a network file system protocol supported by Unix-like operating systems. Enabling any service increases the attack surface for an intruder. By disabling unnecessary services, the attack surface is minimized.

Checks

The NFS daemon must be disabled. To check if NFS is disabled, run the following command:

sudo /usr/libexec/PlistBuddy -c 'print com.apple.nfsd:Disabled' /var/db/launchd.db/com.apple.launchd/overrides.plist

If the returned value isn't 'true', this is a finding.

Fix

To disable NFS, run the following command:

sudo defaults write /private/var/db/launchd.db/com.apple.launchd/overrides.plist 'com.apple.nfsd' -dict Disabled -bool true
V-58301 No Change
Findings ID: AOSX-09-000142 Rule ID: SV-72731r1_rule Severity: medium CCI: CCI-000381

Discussion

If the system does not require access to NFS (Network File System) file shares or is not acting as an NFS server, then support for NFS is non-essential and NFS services must be disabled. NFS is a network file system protocol supported by Unix-like operating systems. Enabling any service increases the attack surface for an intruder. By disabling unnecessary services, the attack surface is minimized.

Checks

The NFS lock daemon must be disabled. To check if the NFS lock daemon is disabled, run the following command:

sudo /usr/libexec/PlistBuddy -c 'print com.apple.lockd:Disabled' /var/db/launchd.db/com.apple.launchd/overrides.plist

If the returned value isn't 'true', this is a finding.

Fix

To disable the NFS lock daemon, run the following command:

sudo defaults write /private/var/db/launchd.db/com.apple.launchd/overrides.plist 'com.apple.lockd' -dict Disabled -bool true
V-58303 No Change
Findings ID: AOSX-09-000143 Rule ID: SV-72733r1_rule Severity: medium CCI: CCI-000381

Discussion

If the system does not require access to NFS (Network File System) file shares or is not acting as an NFS server, then support for NFS is non-essential and NFS services must be disabled. NFS is a network file system protocol supported by Unix-like operating systems. Enabling any service increases the attack surface for an intruder. By disabling unnecessary services, the attack surface is minimized.

Checks

The NFS stat daemon must be disabled. To check if the NFS stat daemon is disabled, run the following command:

sudo /usr/libexec/PlistBuddy -c 'print com.apple.statd.notify:Disabled' /var/db/launchd.db/com.apple.launchd/overrides.plist

If the returned value isn't 'true', this is a finding.

Fix

To disable the NFS stat daemon, run the following command:

sudo defaults write /private/var/db/launchd.db/com.apple.launchd/overrides.plist 'com.apple.statd.notify' -dict Disabled -bool true
V-58305 No Change
Findings ID: AOSX-09-000155 Rule ID: SV-72735r1_rule Severity: medium CCI: CCI-000366

Discussion

An approved firewall must be installed and enabled to work in concert with the Mac OS X Application Firewall. When configured correctly, firewalls protect computers from network attacks by blocking or limiting access to open network ports.

Checks

The system firewall must be configured with a default-deny policy. Ask the SA or ISSO if an approved firewall is loaded on the system. The recommended system is the McAfee HBSS.

If there is no firewall installed on the system, this is a finding.

If there is a firewall installed and it is not configured with a default deny policy, this is a finding.

Fix

Install an approved HBSS or firewall solution onto the system and configure it with a default-deny policy.
V-58307 No Change
Findings ID: AOSX-09-000170 Rule ID: SV-72737r1_rule Severity: medium CCI: CCI-000172

Discussion

Misuse of privileged functions, either intentionally or unintentionally by authorized users, or by unauthorized external entities that have compromised information system accounts, is a serious and ongoing concern and can have significant adverse impacts on organizations. Auditing the use of privileged functions is one way to detect such misuse, and identify the risk from insider threats and the advanced persistent threat.

Checks

In order to view the currently configured flags for the audit daemon, run the following command:

sudo grep ^flags /etc/security/audit_control

Privileged activities are logged by way of the 'ad' flag. If 'ad' is not listed in the result of the check, this is a finding.

Fix

To make sure the appropriate flags are enabled for auditing, run the following command:

sudo sed -i.bak '/^flags/ s/$/,ad/' /etc/security/audit_control; sudo audit -s

A text editor may also be used to implement the required update to the /etc/security/audit_control file.
V-58309 No Change
Findings ID: AOSX-09-000185 Rule ID: SV-72739r1_rule Severity: low CCI: CCI-000048

Discussion

Display of a standardized and approved use notification before granting access to the operating system ensures privacy and security notification verbiage used is consistent with applicable federal laws, Executive Orders, directives, policies, regulations, standards, and guidance.

System use notifications are required only for access via logon interfaces with human users and are not required when such human interfaces do not exist.

The banner must be formatted in accordance with DTM-08-060.

Checks

The policy banner will show if a PolicyBanner.rtf or PolicyBanner.rtfd exists in the /Library/Security folder. Run this command to show the contents of that folder:

ls -l /Library/Security/PolicyBanner.rtf*

If neither PolicyBanner.rtf nor PolicyBanner.rtfd exists, this is a finding.

For systems that allow remote access through SSH, run the following command to ensure that /etc/motd exists:

ls -l /etc/motd

If /etc/motd does not exist, this is a finding.

The banner text of each 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.

Fix

Create a RTF formatted file containing the required text. Name the file PolicyBanner.rtf or PolicyBanner.rtfd and place it in /Library/Security/

For systems that allow remote access through SSH, create a plain text file containing the required text and save it as /etc/motd.
V-58311 No Change
Findings ID: AOSX-09-000195 Rule ID: SV-72741r1_rule Severity: medium CCI: CCI-001384

Discussion

Display of a standardized and approved use notification before granting access to the operating system ensures privacy and security notification verbiage used is consistent with applicable federal laws, Executive Orders, directives, policies, regulations, standards, and guidance.

System use notifications are required only for access via logon interfaces with human users and are not required when such human interfaces do not exist.

The banner must be formatted in accordance with DTM-08-060.

Checks

The policy banner will show if a PolicyBanner.rtf or PolicyBanner.rtfd exists in the /Library/Security folder. Run this command to show the contents of that folder:

ls -l /Library/Security/PolicyBanner.rtf*

If neither PolicyBanner.rtf nor PolicyBanner.rtfd exists, this is a finding.

For systems that allow remote access through SSH, run the following command to ensure that /etc/motd exists:

ls -l /etc/motd

If /etc/motd does not exist, this is a finding.

The banner text of each 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.

Fix

Create a RTF formatted file containing the required text. Name the file PolicyBanner.rtf or PolicyBanner.rtfd and place it in /Library/Security/

For systems that allow remote access through SSH, create a plain text file containing the required text and save it as /etc/motd.
V-58313 No Change
Findings ID: AOSX-09-000200 Rule ID: SV-72743r1_rule Severity: medium CCI: CCI-000172

Discussion

An attacker might attempt to log in as an authorized user, through stolen credentials, unpatched exploits, or brute force attempts to guess a valid username and password. If a user is attempting to log in to a system at an unusual time, or if there are many failed attempts, there is a possibility that the system is the target of an attack. Auditing logon events mitigates this risk by recording all logon attempts, successful and unsuccessful, to the system.

Checks

In order to view the currently configured flags for the audit daemon, run the following command:

sudo grep ^flags /etc/security/audit_control

Logon events are logged by way of the 'aa' flag. If 'aa' is not listed in the result of the check, this is a finding.

Fix

To make sure the appropriate flags are enabled for auditing, run the following command:

sudo sed -i.bak '/^flags/ s/$/,aa/' /etc/security/audit_control; sudo audit -s

A text editor may also be used to implement the required update to the /etc/security/audit_control file.
V-58315 No Change
Findings ID: AOSX-09-000230 Rule ID: SV-72745r1_rule Severity: medium CCI: CCI-001464

Discussion

If auditing is enabled late in the startup process, the actions of some start-up processes may not be audited. Some audit systems also maintain state information only available if auditing is enabled before a given process is created.

Checks

To check if the audit service is running, use the following command:

sudo launchctl list | grep com.apple.auditd

If nothing is returned, the audit service is not running and this is a finding.

Fix

To enable the audit service, run the following command:

sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.auditd.plist
V-58317 No Change
Findings ID: AOSX-09-000240 Rule ID: SV-72747r1_rule Severity: medium CCI: CCI-000169

Discussion

Without the capability to generate audit records, it would be difficult to establish, correlate, and investigate the events relating to an incident, or identify those responsible for one. DoD has defined the list of events for which the operating system will provide an audit record generation capability as the following:

(i) Successful and unsuccessful attempts to access, modify, or delete privileges, security objects, security levels, or categories of information (e.g., classification levels);

(ii) Access actions, such as successful and unsuccessful logon attempts, privileged activities or other system level access, starting and ending time for user access to the system, concurrent logons from different workstations, successful and unsuccessful accesses to objects, all program initiations, and all direct access to the information system;

(iii) All account creations, modifications, disabling, and terminations; and

(iv) All kernel module load, unload, and restart actions.

Checks

The options to configure the audit daemon are located in the /etc/security/audit_control file. To view the current settings, run the following command:

sudo grep ^flags /etc/security/audit_control

If the 'lo', 'ad', and 'aa' options are not set, this is a finding.

Fix

To set the audit flags to the recommended setting, run the following command to add the flags 'lo', 'ad', and 'aa' all at once:

sudo sed -i.bak '/^flags/ s/$/,lo,ad,aa/' /etc/security/audit_control; sudo audit -s

A text editor may also be used to implement the required update to the /etc/security/audit_control file.
V-58319 No Change
Findings ID: AOSX-09-000245 Rule ID: SV-72749r1_rule Severity: medium CCI: CCI-000172

Discussion

Account creations and account modifications such as disablement and termination, can all be signs of an intrusion and should be audited. Once an attacker establishes access to a system, the attacker may attempt to create an account to reestablish access at a later time. The attacker may also attempt to modify accounts in an attempt to change an existing account's privileges or disable or delete accounts in a denial-of-service attack. Auditing of account creation, modification, disabling, and termination events mitigates this risk.

Checks

In order to view the currently configured flags for the audit daemon, run the following command:

sudo grep ^flags /etc/security/audit_control

Privileged access, including the creation, modification, and deletion of local user accounts, is logged via the 'ad' flag. If 'ad' is not listed in the result of the check, this is a finding.

Fix

To make sure the appropriate flags are enabled for auditing, run the following command:

sudo sed -i.bak '/^flags/ s/$/,ad/' /etc/security/audit_control; sudo audit -s

A text editor may also be used to implement the required update to the /etc/security/audit_control file.
V-58321 No Change
Findings ID: AOSX-09-000295 Rule ID: SV-72751r1_rule Severity: medium CCI: CCI-001849

Discussion

The audit service must be configured to require that records are kept for 7 days or longer before deletion when there is no central audit record storage facility. When expire-after is set to 7d, the audit service will not delete audit logs until the log data is at least 7 days old.

Checks

The check displays the amount of time the audit system is configured to retain audit log files. The audit system will not delete logs until the specified condition has been met. To view the current setting, run the following command:

sudo grep ^expire-after /etc/security/audit_control

If this returns no results, or does not contain 7d or a larger value, this is a finding.

Fix

Edit the /etc/security/audit_control file, and change the value for 'expire-after' to the amount of time audit logs should be kept for the system. Use the following command to set the 'expire-after' value to '7d':

sudo sed -i.bak 's/.*expire-after.*/expire-after:7d/' /etc/security/audit_control; sudo audit -s
V-58323 No Change
Findings ID: AOSX-09-000305 Rule ID: SV-72753r1_rule Severity: medium CCI: CCI-001855

Discussion

The audit service must be configured to require a minimum percentage of free disk space in order to run. This ensures that audit will notify the administrator that action is required to free up more disk space for audit logs.

When minfree is set to 25%, security personnel are notified immediately when the storage volume is 75% full and are able to plan for audit record storage capacity expansion.

Checks

The check displays the '% free' to leave available for the system. The audit system will not write logs if the volume has less than this percentage of free disk space. To view the current setting, run the following command:

sudo grep ^minfree /etc/security/audit_control

If this returns no results, or does not contain 25, this is a finding.

Fix

Edit the /etc/security/audit_control file, and change the value for 'minfree' to 25. Use the following command to set the 'minfree' value to '25%':

sudo sed -i.bak 's/.*minfree.*/minfree:25/' /etc/security/audit_control; sudo audit -s

A text editor may also be used to implement the required update to the /etc/security/audit_control file.
V-58325 No Change
Findings ID: AOSX-09-000310 Rule ID: SV-72755r1_rule Severity: medium CCI: CCI-001858

Discussion

The audit service should be configured to immediately print messages to the console or email administrator users when an auditing failure occurs. It is critical for the appropriate personnel to be aware if a system is at risk of failing to process audit logs as required. Without a real-time alert, security personnel may be unaware of an impending failure of the audit capability and system operation may be adversely affected.

Checks

By default, auditd only logs errors to syslog. To see if audit has been configured to print error messages to the console, run the following command:

sudo grep logger /etc/security/audit_warn

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.

Fix

To make auditd log errors to standard error as well as syslogd, run the following command:

sudo sed -i.bak 's/logger -p/logger -s -p/' /etc/security/audit_warn; sudo audit -s
V-58327 No Change
Findings ID: AOSX-09-000330 Rule ID: SV-72757r1_rule Severity: medium CCI: CCI-001891

Discussion

Inaccurate time stamps make it more difficult to correlate events and can lead to an inaccurate analysis. Determining the correct time a particular event occurred on a system is critical when conducting forensic analysis and investigating system events. Sources outside of the configured acceptable allowance (drift) may be inaccurate.

Synchronizing internal information system clocks provides uniformity of time stamps for information systems with multiple system clocks and systems connected over a network.

Organizations should consider endpoints that may not have regular access to the authoritative time server (e.g., mobile, teleworking, and tactical endpoints).

Checks

The Network Time Protocol (NTP) service must be enabled on all networked systems. To check if the service is running, use the following command:

sudo launchctl list | grep org.ntp.ntpd

If nothing is returned, this is a finding.

To ensure that an authorized NTP server is configured, run the following command or examine /etc/ntp.conf:

sudo grep ^server /etc/ntp.conf

Only approved time servers should be configured for use. If no server is configured, or if an unapproved time server is in use, this is a finding.

Fix

To enable the NTP service, run the following command:

sudo launchctl load -w /System/Library/LaunchDaemons/org.ntp.ntpd.plist

To configure one or more time servers for use, edit /etc/ntp.conf and enter each hostname or ip address on a separate line, prefixing each one with the keyword "server".
V-58329 No Change
Findings ID: AOSX-09-000335 Rule ID: SV-72759r1_rule Severity: medium CCI: CCI-000162

Discussion

The audit service must be configured to create log files with the correct permissions to prevent normal users from reading audit logs. Audit logs contain sensitive data about the system and about users. If log files are set to only be readable and writable by root or administrative users with sudo, the risk is mitigated.

Checks

To check the permissions of the audit log files, run the following command:

sudo ls -le $(sudo grep '^dir' /etc/security/audit_control | awk -F: '{print $2}') | grep -v current

The results should show the permissions (first column) to be 440 or less permissive. If not, this is a finding.

Fix

For any log files that returns an incorrect permission value, run the following command:

sudo chmod 440 [audit log file]

[audit log file] is the full path to the log file in question.
V-58331 No Change
Findings ID: AOSX-09-000336 Rule ID: SV-72761r1_rule Severity: medium CCI: CCI-000163

Discussion

The audit service must be configured to create log files with the correct permissions to prevent normal users from reading audit logs. Audit logs contain sensitive data about the system and about users. If log folders are set to only be readable and writable by root or administrative users with sudo, the risk is mitigated.

Checks

To check the permissions of the audit log folder, run the following command:

sudo ls -lde $(sudo grep '^dir' /etc/security/audit_control | awk -F: '{print $2}')

The results should show the permissions (first column) to be 700 or less permissive. If not, this is a finding.

Fix

For any log folder that returns an incorrect permission value, run the following command:

sudo chmod 700 [audit log folder]
V-58333 No Change
Findings ID: AOSX-09-000337 Rule ID: SV-72763r1_rule Severity: medium CCI: CCI-000164

Discussion

The audit service must be configured to create log files with the correct permissions to prevent normal users from reading audit logs. Audit logs contain sensitive data about the system and about users. If log files are set to only be readable and writable by root or administrative users with sudo, the risk is mitigated.

Checks

To check if a log file contains ACLs, run the following commands:

sudo ls -le $(sudo grep '^dir' /etc/security/audit_control | awk -F: '{print $2}') | grep -v current

In the output from the above commands, ACLs will be listed under any file that may contain them (e.g., '0: group:admin allow list,readattr,reaadextattr,readsecurity'). If any such line exists, this is a finding.

Fix

For any log file that contains ACLs, run the following command:

sudo chmod -N [audit log file]
V-58339 No Change
Findings ID: AOSX-09-000435 Rule ID: SV-72769r1_rule Severity: medium CCI: CCI-001499

Discussion

File permissions should be compared against the default set of permissions that were set at the time of the initial install. Changes to default file permissions can make the system less secure and disrupt the functionality of installed applications. Unless changes are required to harden a system, the default permissions should be kept. If the operating system were to allow any user to make changes to software libraries, then those changes might be implemented without undergoing the appropriate testing and approvals that are part of a robust change management process. Verifying that permissions remain unchanged mitigates this risk.

This requirement applies to operating systems with software libraries that are accessible and configurable, as in the case of interpreted languages. Software libraries also include privileged programs which execute with escalated privileges. Only qualified and authorized individuals shall be allowed to obtain access to information system components for purposes of initiating changes, including upgrades and modifications.

Checks

To check the permissions and ownership of the system files and make sure they haven't changed from the original installation, run the following command:

sudo diskutil verifyPermissions /

Any results indicating User/Group/Permissions differ is a finding.

Fix

To correct ownership and permissions of files found in the check, run the following command:

sudo diskutil repairPermissions /
V-58341 No Change
Findings ID: AOSX-09-000430 Rule ID: SV-72771r1_rule Severity: high CCI: CCI-001749

Discussion

Any changes to the hardware, software, and/or firmware components of the information system and/or application can potentially have significant effects on the overall security of the system.

Accordingly, software defined by the organization as critical software must be signed with a certificate that is recognized and approved by the organization.

Checks

To check the status of the Security assessment policy subsystem, run the following command:

sudo spctl --status | grep enabled

If nothing is returned, this is a finding.

Fix

To enable the Security assessment policy subsystem, run the following command:

sudo spctl --master-enable
V-58343 No Change
Findings ID: AOSX-09-000455 Rule ID: SV-72773r1_rule Severity: medium CCI: CCI-000366

Discussion

Configuration settings must be verified by a centrally managed system such as an MDM to ensure that they have not been changed. Configuration settings are the configurable security-related parameters of information technology products that are part of the information system. Security-related parameters are those parameters impacting the security state of the system including parameters related to meeting other security control requirements. Rather than visiting each and every system when verifying configuration changes, organizations will employ automated tools that can make changes across all systems. This greatly increases efficiency and manageability of applications in a large scale environment.

Checks

To check if the computer has a configuration profile applied to the workstation, run the following command:

sudo profiles -H

If there are no profiles installed, this is a finding.

Fix

Obtain a configuration profile from an MDM or trusted provider containing the configuration settings required to be applied.
V-58345 No Change
Findings ID: AOSX-09-000460 Rule ID: SV-72775r1_rule Severity: medium CCI: CCI-001774

Discussion

Application Restrictions must be enabled for user accounts and configured to only allow users to execute approved applications. Utilizing a whitelist such as Application Restrictions provides a configuration management method for allowing the execution of only authorized software. Using only authorized software decreases risk by limiting the number of potential vulnerabilities.

The organization must identify authorized software programs and permit execution of authorized software. The process used to identify software programs that are authorized to execute on organizational information systems is commonly referred to as whitelisting.

Checks

To check if there is a configuration policy defined for Application Restrictions, run the following command:

sudo profiles -Pv | grep 'Application Restrictions'

If nothing is returned, this is a finding.

Fix

This setting is enforced using a configuration profile.
V-58347 No Change
Findings ID: AOSX-09-000520 Rule ID: SV-72777r1_rule Severity: medium CCI: CCI-000381

Discussion

It is detrimental for operating systems to provide, or install by default, functionality exceeding requirements or mission objectives. These unnecessary capabilities or services are often overlooked and therefore may remain unsecured. They increase the risk to the platform by providing additional attack vectors.

Operating systems are capable of providing a wide variety of functions and services. Some of the functions and services, provided by default, may not be necessary to support essential organizational operations (e.g., key missions, functions).

Examples of non-essential capabilities include, but are not limited to, games, software packages, tools, and demonstration software, not related to requirements or providing a wide array of functionality not required for every mission, but cannot be disabled.

The system preference panel iCloud must be removed.

Checks

The system preference panel iCloud must be removed or disabled along with the Internet Accounts preference pane in a configuration profile. To check for the existence of the iCloud preference panel, run the following command:

ls -ld /System/Library/PreferencePanes/iCloudPref.prefPane

If anything is returned, and access to the iCloud and Internet Accounts preference panes have not been disabled with a configuration profile, this is a finding.

Fix

Either disable access to the iCloud and Internet Accounts preference panes through a configuration profile or run the following command to remove the iCloud panel:

sudo rm -rf /System/Library/PreferencePanes/iCloudPref.prefPane
V-58349 No Change
Findings ID: AOSX-09-000530 Rule ID: SV-72779r1_rule Severity: medium CCI: CCI-000382

Discussion

In order to prevent unauthorized connection of devices, unauthorized transfer of information, or unauthorized tunneling (i.e., embedding of data types within data types), organizations must disable or restrict unused or unnecessary physical and logical ports/protocols on information systems.

Operating systems are capable of providing a wide variety of functions and services. Some of the functions and services provided by default may not be necessary to support essential organizational operations. Additionally, it is sometimes convenient to provide multiple services from a single component (e.g., VPN and IPS); however, doing so increases risk over limiting the services provided by any one component.

To support the requirements and principles of least functionality, the operating system must support the organizational requirements providing only essential capabilities and limiting the use of ports, protocols, and/or services to only those required, authorized, and approved to conduct official business or to address authorized quality of life issues.

Sending diagnostic and usage data to Apple must be disabled.

Checks

Sending diagnostic & usage data to Apple must be disabled. The setting is found in System Preferences->Security & Privacy->Diagnostics & Usage. If the box that says "Send diagnostic & usage data to Apple" is checked, this is a finding.

To check if a configuration profile is configured to enforce this setting, run the following command:

sudo system_profiler SPConfigurationProfileDataType | grep AutoSubmit

If AutoSubmit is not set to '0', this is a finding.

Fix

The setting "Send diagnostic & usage data to Apple" is found in System Preferences->Security & Privacy->Diagnostics & Usage.

Uncheck the box that says "Send diagnostic & usage data to Apple".

This setting can be enforced using a configuration profile.
V-58351 No Change
Findings ID: AOSX-09-000531 Rule ID: SV-72781r1_rule Severity: medium CCI: CCI-000381

Discussion

In order to prevent unauthorized connection of devices, unauthorized transfer of information, or unauthorized tunneling (i.e., embedding of data types within data types), organizations must disable or restrict unused or unnecessary physical and logical ports/protocols on information systems.

Operating systems are capable of providing a wide variety of functions and services. Some of the functions and services provided by default may not be necessary to support essential organizational operations. Additionally, it is sometimes convenient to provide multiple services from a single component (e.g., VPN and IPS); however, doing so increases risk over limiting the services provided by any one component.

To support the requirements and principles of least functionality, the operating system must support the organizational requirements providing only essential capabilities and limiting the use of ports, protocols, and/or services to only those required, authorized, and approved to conduct official business or to address authorized quality of life issues.

Find My Mac must be disabled.

Checks

Find My Mac must be disabled. To check if Find My Mac is disabled on the system, run the following command:

sudo /usr/libexec/PlistBuddy -c 'print com.apple.findmymacd:Disabled' /var/db/launchd.db/com.apple.launchd/overrides.plist

If the returned value isn't 'true' or doesn't exist, this is a finding.

Fix

To disable Find My Mac, run the following command:

sudo defaults write /private/var/db/launchd.db/com.apple.launchd/overrides.plist 'com.apple.findmymacd' -dict Disabled -bool true
V-58353 No Change
Findings ID: AOSX-09-000532 Rule ID: SV-72783r1_rule Severity: medium CCI: CCI-000381

Discussion

In order to prevent unauthorized connection of devices, unauthorized transfer of information, or unauthorized tunneling (i.e., embedding of data types within data types), organizations must disable or restrict unused or unnecessary physical and logical ports/protocols on information systems.

Operating systems are capable of providing a wide variety of functions and services. Some of the functions and services provided by default may not be necessary to support essential organizational operations. Additionally, it is sometimes convenient to provide multiple services from a single component (e.g., VPN and IPS); however, doing so increases risk over limiting the services provided by any one component.

To support the requirements and principles of least functionality, the operating system must support the organizational requirements providing only essential capabilities and limiting the use of ports, protocols, and/or services to only those required, authorized, and approved to conduct official business or to address authorized quality of life issues.

Find My Mac messenger must be disabled.

Checks

Find My Mac messenger must be disabled. To check if Find My Mac messenger is disabled on the system, run the following command:

sudo /usr/libexec/PlistBuddy -c 'print com.apple.findmymacmessenger:Disabled' /var/db/launchd.db/com.apple.launchd/overrides.plist

If the returned value isn't 'true' or doesn't exist, this is a finding.

Fix

To disable Find My Mac messenger, run the following command:

sudo defaults write /private/var/db/launchd.db/com.apple.launchd/overrides.plist 'com.apple.findmymacmessenger' -dict Disabled -bool true
V-58355 No Change
Findings ID: AOSX-09-000535 Rule ID: SV-72785r1_rule Severity: medium CCI: CCI-000381

Discussion

In order to prevent unauthorized connection of devices, unauthorized transfer of information, or unauthorized tunneling (i.e., embedding of data types within data types), organizations must disable or restrict unused or unnecessary physical and logical ports/protocols on information systems.

Operating systems are capable of providing a wide variety of functions and services. Some of the functions and services provided by default may not be necessary to support essential organizational operations. Additionally, it is sometimes convenient to provide multiple services from a single component (e.g., VPN and IPS); however, doing so increases risk over limiting the services provided by any one component.

To support the requirements and principles of least functionality, the operating system must support the organizational requirements providing only essential capabilities and limiting the use of ports, protocols, and/or services to only those required, authorized, and approved to conduct official business or to address authorized quality of life issues.

Location Services must be disabled.

Checks

Location Services must be disabled. The setting is found in System Preferences->Security & Privacy->Location Services.

If the box that says 'Enable Location Services' is checked, this is a finding.

To check if a configuration profile is configured to enforce this setting, run the following command:

sudo system_profiler SPConfigurationProfileDataType | grep DisableLocationServices

If DisableLocationServices is not set to '1', this is a finding.

Fix

The setting "Enable Location Services" is found in System Preferences->Security & Privacy->Location Services.

Uncheck the box that says 'Enable Location Services'.

This setting can be enforced using a configuration profile.
V-58357 No Change
Findings ID: AOSX-09-000545 Rule ID: SV-72787r1_rule Severity: medium CCI: CCI-000381

Discussion

In order to prevent unauthorized connection of devices, unauthorized transfer of information, or unauthorized tunneling (i.e., embedding of data types within data types), organizations must disable or restrict unused or unnecessary physical and logical ports/protocols on information systems.

Operating systems are capable of providing a wide variety of functions and services. Some of the functions and services provided by default may not be necessary to support essential organizational operations. Additionally, it is sometimes convenient to provide multiple services from a single component (e.g., VPN and IPS); however, doing so increases risk over limiting the services provided by any one component.

To support the requirements and principles of least functionality, the operating system must support the organizational requirements providing only essential capabilities and limiting the use of ports, protocols, and/or services to only those required, authorized, and approved to conduct official business or to address authorized quality of life issues.

Bonjour multicast advertising must be disabled on the system.

Checks

Bonjour multicast advertising must be disabled on the system. To check if multicast advertisements have been disabled, run the following command:

sudo defaults read /System/Library/LaunchDaemons/com.apple.mDNSResponder | grep NoMulticastAdvertisements

If nothing is returned, this is a finding.

Fix

To configure Bonjour to disable multicast advertising, run the following command:

sudo /usr/libexec/PlistBuddy -c 'Add :ProgramArguments:2 string '-NoMulticastAdvertisements /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
V-58359 No Change
Findings ID: AOSX-09-000550 Rule ID: SV-72789r1_rule Severity: medium CCI: CCI-000381

Discussion

It is detrimental for operating systems to provide, or install by default, functionality exceeding requirements or mission objectives. These unnecessary capabilities or services are often overlooked and therefore may remain unsecured. They increase the risk to the platform by providing additional attack vectors.

Operating systems are capable of providing a wide variety of functions and services. Some of the functions and services, provided by default, may not be necessary to support essential organizational operations (e.g., key missions, functions).

Examples of non-essential capabilities include, but are not limited to, games, software packages, tools, and demonstration software, not related to requirements or providing a wide array of functionality not required for every mission, but cannot be disabled.

The system must not have the UUCP service active.

Checks

The system must not have the UUCP service active. To check if UUCP is disabled, run the following command:

sudo /usr/libexec/PlistBuddy -c 'print com.apple.uucp:Disabled' /var/db/launchd.db/com.apple.launchd/overrides.plist

If the returned value isn't 'true', this is a finding.

Fix

To disable UUCP, run the following command:

sudo defaults write /private/var/db/launchd.db/com.apple.launchd/overrides.plist 'com.apple.uucp' -dict Disabled -bool true
V-58361 No Change
Findings ID: AOSX-09-000565 Rule ID: SV-72791r1_rule Severity: medium CCI: CCI-000770

Discussion

Administrator users must never log in directly as root. To assure individual accountability and prevent unauthorized access, logging in as root over a remote connection must be disabled. Administrators should only run commands as root after first authenticating with their individual user names and passwords.

Checks

To check if SSH has root logins enabled, run the following command:

sudo grep ^PermitRootLogin /etc/sshd_config

If there is no result, or the result is set to 'yes', this is a finding.

Fix

In order to make sure that PermitRootLogin is disabled by sshd, run the following command:

sudo sed -i.bak 's/^[\#]*PermitRootLogin.*/PermitRootLogin no/' /etc/sshd_config
V-58363 No Change
Findings ID: AOSX-09-000570 Rule ID: SV-72793r1_rule Severity: medium CCI: CCI-001941

Discussion

The SSH Version should be explicitly set to Version 2. Version 2 supports strong crypto and was rewritten from scratch to resolve several weaknesses in Version 1 that make it extremely vulnerable to attackers. The weaker crypto in Version 1 is potentially susceptible to certain forms of replay attacks. The system default is to only enable Version 2.

A replay attack may enable an unauthorized user to gain access to the operating system. Authentication sessions between the authenticator and the operating system validating the user credentials must not be vulnerable to a replay attack. An authentication process resists replay attacks if it is impractical to achieve a successful authentication by recording and replaying a previous authentication message.

Checks

To check which protocol is configured for sshd, run the following:

sudo grep ^Protocol /etc/sshd_config

If there is no result or the result is not '2', this is a finding.

Fix

In order to make sure that 'Protocol 2' is used by sshd, run the following command:

sudo sed -i.bak 's/.*Protocol.*/Protocol 2/' /etc/sshd_config
V-58365 No Change
Findings ID: AOSX-09-000575 Rule ID: SV-72795r1_rule Severity: medium CCI: CCI-001942

Discussion

The SSH Version should be explicitly set to Version 2. Version 2 supports strong crypto and was rewritten from scratch to resolve several weaknesses in Version 1 that make it extremely vulnerable to attackers. The weaker crypto in Version 1 is potentially susceptible to certain forms of replay attacks. The system default is to only enable Version 2.

A replay attack may enable an unauthorized user to gain access to the operating system. Authentication sessions between the authenticator and the operating system validating the user credentials must not be vulnerable to a replay attack. An authentication process resists replay attacks if it is impractical to achieve a successful authentication by recording and replaying a previous authentication message.

Checks

To check which protocol is configured for sshd, run the following:

sudo grep ^Protocol /etc/sshd_config

If there is no result or the result is not '2', this is a finding.

Fix

In order to make sure that 'Protocol 2' is used by sshd, run the following command:

sudo sed -i.bak 's/.*Protocol.*/Protocol 2/' /etc/sshd_config
V-58367 No Change
Findings ID: AOSX-09-000585 Rule ID: SV-72797r1_rule Severity: medium CCI: CCI-000194

Discussion

Use of a complex password helps to increase the time and resources required to compromise the password. Password complexity, or strength, is a measure of the effectiveness of a password in resisting attempts at guessing and brute-force attacks.

Password complexity is one factor of several that determine how long it takes to crack a password. The more complex the password, the greater the number of possible combinations that need to be tested before the password is compromised.

Checks

To check if the password policy is configured to require that at least one numeric character be used, run the following command:

sudo pwpolicy getglobalpolicy | tr ' ' '\n' | grep requiresNumeric

If the result is not 'requiresNumeric=1', and password policy is not controlled by a directory server, this is a finding.

Fix

To set the password policy, run the following command:

sudo pwpolicy setglobalpolicy 'requiresNumeric=1'
V-58369 No Change
Findings ID: AOSX-09-000590 Rule ID: SV-72799r1_rule Severity: medium CCI: CCI-000205

Discussion

The minimum password length must be set to 15 characters. Password complexity, or strength, is a measure of the effectiveness of a password in resisting attempts at guessing and brute-force attacks. Password length is one factor of several that helps to determine strength and how long it takes to crack a password. The use of more characters in a password helps to exponentially increase the time and/or resources required to compromise the password.

Checks

To check the currently applied policies for password and accounts, use the following command:

sudo system_profiler SPConfigurationProfileDataType | grep minLength

The parameter minLength should be '15'. If it is less than '15', this is a finding.

Fix

This setting is enforced using a configuration profile.
V-58371 No Change
Findings ID: AOSX-09-000605 Rule ID: SV-72801r1_rule Severity: high CCI: CCI-000197

Discussion

The telnet service must be disabled, as it sends all data, including the user's password in a clear text form that can be easily intercepted and read. Passwords need to be protected at all times and encryption is the standard method for protecting passwords. If passwords are not encrypted, they can be plainly read (i.e., clear text) and easily compromised. Disabling telnet is one way to mitigate this risk.

Checks

The service 'telnet' should be disabled, to check the status of the service, run the following command:

sudo /usr/libexec/PlistBuddy -c 'print com.apple.telnetd:Disabled' /var/db/launchd.db/com.apple.launchd/overrides.plist

If the returned value isn't 'true' or doesn't exist, this is a finding.

Fix

To set the telnet service to disabled, run the following command:

sudo defaults write /private/var/db/launchd.db/com.apple.launchd/overrides.plist 'com.apple.telnetd' -dict Disabled -bool true
V-58373 No Change
Findings ID: AOSX-09-000690 Rule ID: SV-72803r1_rule Severity: high CCI: CCI-002890

Discussion

The telnet service must be disabled, as it sends all data, including the user's password, in a clear text form that can be easily intercepted and read. Passwords need to be protected at all times and encryption is the standard method for protecting passwords. If passwords are not encrypted, they can be plainly read (i.e., clear text) and easily compromised. Disabling telnet is one way to mitigate this risk. Administrator users should be instructed to use an alternate service that implements cryptography such as SSH.

Checks

The service 'telnet' should be disabled, to check the status of the service, run the following command:

sudo /usr/libexec/PlistBuddy -c 'print com.apple.telnetd:Disabled' /var/db/launchd.db/com.apple.launchd/overrides.plist

If the returned value isn't 'true' or doesn't exist, this is a finding.

Fix

To set the 'telnet' service to disabled, run the following command:

sudo defaults write /private/var/db/launchd.db/com.apple.launchd/overrides.plist 'com.apple.telnetd' -dict Disabled -bool true
V-58375 No Change
Findings ID: AOSX-09-000691 Rule ID: SV-72805r1_rule Severity: high CCI: CCI-003123

Discussion

The telnet service must be disabled, as it sends all data, including the user's password, in a clear text form that can be easily intercepted and read. Passwords need to be protected at all times and encryption is the standard method for protecting passwords. If passwords are not encrypted, they can be plainly read (i.e., clear text) and easily compromised. Disabling telnet is one way to mitigate this risk. Administrator users should be instructed to use an alternate service that implements cryptography such as SSH.

Checks

The service 'telnet' should be disabled, to check the status of the service, run the following command:

sudo /usr/libexec/PlistBuddy -c 'print com.apple.telnetd:Disabled' /var/db/launchd.db/com.apple.launchd/overrides.plist

If the returned value isn't 'true' or doesn't exist, this is a finding.

Fix

To set the 'telnet' service to disabled, run the following command:

sudo defaults write /private/var/db/launchd.db/com.apple.launchd/overrides.plist 'com.apple.telnetd' -dict Disabled -bool true
V-58377 No Change
Findings ID: AOSX-09-000695 Rule ID: SV-72807r1_rule Severity: high CCI: CCI-000877

Discussion

The telnet service must be disabled, as it sends all data, including the user's password, in a clear text form that can be easily intercepted and read. Passwords need to be protected at all times and encryption is the standard method for protecting passwords. If passwords are not encrypted, they can be plainly read (i.e., clear text) and easily compromised. Disabling telnet is one way to mitigate this risk. Administrators should be instructed to use an alternate service for remote access sessions that uses encryption, such as SSH.

Checks

The service 'telnet' should be disabled, to check the status of the service, run the following command:

sudo /usr/libexec/PlistBuddy -c 'print com.apple.telnetd:Disabled' /var/db/launchd.db/com.apple.launchd/overrides.plist

If the returned value isn't 'true' or doesn't exist, this is a finding.

Fix

To set the 'telnet' service to disabled, run the following command:

sudo defaults write /private/var/db/launchd.db/com.apple.launchd/overrides.plist 'com.apple.telnetd' -dict Disabled -bool true
V-58379 No Change
Findings ID: AOSX-09-000710 Rule ID: SV-72809r1_rule Severity: medium CCI: CCI-001749

Discussion

Gatekeeper settings must be configured correctly to only allow the system to run applications downloaded from the Mac App Store or applications signed with a valid Apple Developer ID code. Administrator users will still have the option to override these settings on a per app basis. Gatekeeper is a security feature that ensures that applications must be digitally signed by an Apple issued certificate in order to run. Digital signatures allow Mac OS X to verify that the application has not been modified by a malicious third party.

Checks

To check to make sure only applications downloaded from the App Store are allowed to run, type the following code:

system_profiler SPConfigurationProfileDataType | grep AllowIdentifiedDevelopers

If 'AllowIdentifiedDevelopers' is not set to '1', this is a finding.

Fix

This setting is enforced using a configuration profile.
V-58383 No Change
Findings ID: AOSX-09-000720 Rule ID: SV-72813r1_rule Severity: medium CCI: CCI-001133

Discussion

SSH should be configured to log users out after a 15 minute interval of inactivity and to only wait 30 seconds before timing out login attempts. Terminating an idle session within a short time period reduces the window of opportunity for unauthorized personnel to take control of a management session enabled on the console or console port that has been left unattended. In addition, quickly terminating an idle session or an incomplete login attempt will also free up resources committed by the managed network element.

Checks

The SSH daemon ClientAliveInterval option must be set correctly. To check the idle timeout setting for SSH sessions, run the following:

sudo grep ^ClientAliveInterval /etc/sshd_config

If the setting is not '600', this is a finding.

Fix

In order to make sure that ClientAliveInterval is set correctly, run the following command:

sudo sed -i.bak 's/.*ClientAliveInterval.*/ClientAliveInterval 600/' /etc/sshd_config
V-58385 No Change
Findings ID: AOSX-09-000721 Rule ID: SV-72815r1_rule Severity: medium CCI: CCI-001133

Discussion

SSH should be configured to log users out after a 15 minute interval of inactivity and to only wait 30 seconds before timing out login attempts. Terminating an idle session within a short time period reduces the window of opportunity for unauthorized personnel to take control of a management session enabled on the console or console port that has been left unattended. In addition, quickly terminating an idle session or an incomplete login attempt will also free up resources committed by the managed network element.

Checks

The SSH daemon ClientAliveCountMax option must be set correctly. To ensure the SSH idle timeout will occur when the 'ClientAliveCountMax' is set, run the following command:

sudo grep ^ClientAliveCountMax /etc/sshd_config

If the setting is not 'ClientAliveCountMax 0', this is a finding.

Fix

In order to make sure that the SSH idle timeout occurs precisely when the 'ClientAliveCountMax' is set, run the following command:

sudo sed -i.bak 's/.*ClientAliveCountMax.*/ClientAliveCountMax 0/' /etc/sshd_config
V-58387 No Change
Findings ID: AOSX-09-000722 Rule ID: SV-72817r1_rule Severity: medium CCI: CCI-001133

Discussion

SSH should be configured to log users out after a 15 minute interval of inactivity and to only wait 30 seconds before timing out login attempts. Terminating an idle session within a short time period reduces the window of opportunity for unauthorized personnel to take control of a management session enabled on the console or console port that has been left unattended. In addition, quickly terminating an idle session or an incomplete login attempt will also free up resources committed by the managed network element.

Checks

The SSH daemon LoginGraceTime must be set correctly. To check the amount of time that a user can login through SSH, run the following command:

sudo grep ^LoginGraceTime /etc/sshd_config

If the value is not set to '30' or less, this is a finding.

Fix

In order to make sure that LoginGraceTime is configured correctly, run the following command:

sudo sed -i.bak 's/.*LoginGraceTime.*/LoginGraceTime 30/' /etc/sshd_config
V-58389 No Change
Findings ID: AOSX-09-000750 Rule ID: SV-72819r1_rule Severity: medium CCI: CCI-002450

Discussion

DoD-approved certificates must be installed to the System Keychain so that they will be available to all users.

For user certificates, each organization attains certificates from an approved, shared service provider, as required by OMB policy. For federal agencies operating a legacy public key infrastructure cross-certified with the Federal Bridge Certification Authority at medium assurance or higher, this Certification Authority will suffice. This control focuses on certificates with a visibility external to the information system and does not include certificates related to internal system operations, for example, application-specific time services.

Checks

To view a list of installed certificates, run the following command:

sudo security dump-keychain | grep labl | awk -F\" '{ print $4 }'

If this list does not contain approved certificates, this is a finding.

Fix

Obtain the approved DOD certificates from the appropriate authority.

Use Keychain Access from /Applications/Utilities to add certificates to the System keychain.
V-58391 No Change
Findings ID: AOSX-09-000780 Rule ID: SV-72821r1_rule Severity: medium CCI: CCI-001199

Discussion

FileVault Disk Encryption must be enabled. By encrypting the system hard drive, the confidentiality and integrity of any data stored on the system is ensured.

Information at rest refers to the state of information when it is located on a secondary storage device (e.g., disk drive and tape drive) within an organizational information system. Mobile devices, laptops, desktops, and storage devices can be either lost or stolen, and the contents of their data storage (e.g., hard drives and non-volatile memory) can be read, copied, or altered. FileVault Disk Encryption mitigates this risk.

Checks

To check if FileVault 2 is enabled, run the following command:

sudo fdesetup status

If FileVault is 'Off' and the device is a laptop, this is a finding.

Fix

Open System Preferences->Security and Privacy, and navigate to the FileVault tab. Use this panel to configure full-disk encryption.

Alternately, from the command line, run the following command to enable FileVault:

sudo fdesetup enable

After FileVault is initially set up, additional users can be added.
V-58393 No Change
Findings ID: AOSX-09-000786 Rule ID: SV-72823r1_rule Severity: medium CCI: CCI-002476

Discussion

FileVault Disk Encryption must be enabled. This ensures that any data stored on the hard drive will be protected by cryptographic means when the system is powered off, mitigating the risk of unauthorized disclosure of that data.

Selection of a cryptographic mechanism is based on the need to protect the integrity of organizational information. The strength of the mechanism is commensurate with the security category and/or classification of the information. Organizations have the flexibility to either encrypt all information on storage devices (i.e., full disk encryption) or encrypt specific data structures (e.g., files, records, or fields).

Checks

To check if FileVault 2 is enabled, run the following command:

sudo fdesetup status

If FileVault is 'Off', and the device is a laptop, this is a finding.

Fix

Open System Preferences->Security & Privacy, and navigate to the FileVault tab. Use this panel to configure full-disk encryption.

Alternately, from the command line, run the following command to enable FileVault:

sudo fdesetup enable

After FileVault is initially set up, additional users can be added.
V-58395 No Change
Findings ID: AOSX-09-000785 Rule ID: SV-72825r1_rule Severity: medium CCI: CCI-002475

Discussion

FileVault Disk Encryption must be enabled. This ensures that any data stored on the hard drive will be protected by cryptographic means when the system is powered off, mitigating the risk of unauthorized modification of that data.

Selection of a cryptographic mechanism is based on the need to protect the integrity of organizational information. The strength of the mechanism is commensurate with the security category and/or classification of the information. Organizations have the flexibility to either encrypt all information on storage devices (i.e., full disk encryption) or encrypt specific data structures (e.g., files, records, or fields).

Checks

To check if FileVault 2 is enabled, run the following command:

sudo fdesetup status

If FileVault is 'Off', and the device is a laptop, this is a finding.

Fix

Open System Preferences->Security & Privacy, and navigate to the FileVault tab. Use this panel to configure full-disk encryption.

Alternately, from the command line, run the following command to enable FileVault:

sudo fdesetup enable

After FileVault is initially set up, additional users can be added.
V-58397 No Change
Findings ID: AOSX-09-000835 Rule ID: SV-72827r1_rule Severity: medium CCI: CCI-001233

Discussion

An approved tool for continuous network scanning must be installed and configured to run.

Without the use of automated mechanisms to scan for security flaws on a continuous and/or periodic basis, the operating system or other system components may remain vulnerable to the exploits presented by undetected software flaws.

To support this requirement, the operating system may have an integrated solution incorporating continuous scanning using HBSS and periodic scanning using other tools, as specified in the requirement.

Checks

Ask the SA or ISSO if an approved tool capable of continuous scanning is loaded on the system.

The recommended system is the McAfee HBSS. If no such tool is installed on the system, this is a finding.

Fix

Install an approved HBSS solution onto the system.
V-58399 No Change
Findings ID: AOSX-09-000850 Rule ID: SV-72829r1_rule Severity: medium CCI: CCI-000366

Discussion

External hard drives, such as USB, must be disabled for users. USB hard drives are a potential vector for malware and can be used to exfiltrate sensitive data.

Checks

To ensure external USB drives are disabled, run the following command:

system_profiler SPConfigurationProfileDataType | grep -A 3 harddisk-external

If the option 'alert' is not set for 'harddisk-external', this is a finding.

Fix

This setting is enforced using a configuration profile.
V-58401 No Change
Findings ID: AOSX-09-000862 Rule ID: SV-72831r1_rule Severity: medium CCI: CCI-000366

Discussion

Connections to unauthorized iOS devices (iPhones, iPods, and iPads) open the system to possible compromise via exfiltration of system data. Disabling the usbmuxd daemon blocks connections to iOS devices.

Checks

To check the status of the usbmuxd daemon, run the following command:

sudo launchctl list | grep usbmuxd

If there is any output, this is a finding.

Fix

To disable the usbmuxd daemon, run the following command:

sudo launchtctl unload -w /System/Library/LaunchDaemons/com.apple.usbmuxd.plist
V-58403 No Change
Findings ID: AOSX-09-000925 Rule ID: SV-72833r1_rule Severity: medium CCI: CCI-000366

Discussion

When automatic logins are enabled, the default user account is automatically logged in at boot time without prompting the user for a password. Even if the screen is later locked, a malicious user would be able to reboot the computer in order to log in. Disabling automatic logins mitigates this risk.

Checks

To check if the system if configured to automatically log in, run the following command:

system_profiler SPConfigurationProfileDataType | grep DisableAutoLoginClient

If 'com.apple.login.mcx.DisableAutoLoginClient' is not set to '1', this is a finding.

Fix

This setting is enforced using a configuration profile.
V-58405 No Change
Findings ID: AOSX-09-000930 Rule ID: SV-72835r1_rule Severity: medium CCI: CCI-000366

Discussion

The login window must be configured to prompt all users for both a username and a password. By default, the system displays a list of known users at the login screen. This gives an advantage to an attacker with physical access to the system, as the attacker would only have to guess the password for one of the listed accounts.

Checks

To check if the login window is configured to prompt for user name and password, run the following command:

system_profiler SPConfigurationProfileDataType | grep SHOWFULLNAME

If there is no result, or SHOWFULLNAME is not set to '1', this is a finding.

Fix

This setting is enforced using a configuration profile.
V-58407 No Change
Findings ID: AOSX-09-000950 Rule ID: SV-72837r1_rule Severity: medium CCI: CCI-000366

Discussion

Firewall logging must be enabled. This ensures that malicious network activity will be logged to the system.

Checks

If HBSS is used, this is not applicable.

To check if the OS X firewall has logging enabled, run the following command:

/usr/libexec/ApplicationFirewall/socketfilterfw --getloggingmode | grep on

If the result does not show 'on', this is a finding.

Fix

To enable the firewall logging, run the following command:

sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setloggingmode on
V-58409 No Change
Findings ID: AOSX-09-000955 Rule ID: SV-72839r1_rule Severity: medium CCI: CCI-000366

Discussion

Bluetooth devices must not be allowed to wake the computer. If Bluetooth is not required, turn it off. If Bluetooth is necessary, disable allowing Bluetooth devices to wake the computer.

Checks

To check if this setting is disabled run the following command as the primary user:

defaults -currentHost read com.apple.Bluetooth RemoteWakeEnabled

If the return value is '1', this is a finding.

Fix

This control needs to be manually changed on the computer by opening System Preferences->Bluetooth, Click Advanced, and make sure the 'Allow Bluetooth devices to wake this computer' is not checked.
V-58411 No Change
Findings ID: AOSX-09-000965 Rule ID: SV-72841r1_rule Severity: medium CCI: CCI-000366

Discussion

Bluetooth sharing allows users to wirelessly transmit files between Mac OS X and Bluetooth-enabled devices, including personally owned cell phones and tablets. A malicious user might introduce viruses or malware onto the system or extract sensitive files. Disabling Bluetooth Sharing mitigates this risk.

Checks

To check if Bluetooth Sharing is enabled, Open up System Preferences->Sharing and verify that 'Bluetooth Sharing' is not checked 'ON'.

If it is 'ON', this is a finding.

Fix

To disable Bluetooth Sharing, open System Preferences->Sharing and uncheck the box next to Bluetooth Sharing.
V-58413 No Change
Findings ID: AOSX-09-000975 Rule ID: SV-72843r1_rule Severity: medium CCI: CCI-000382

Discussion

It is detrimental for operating systems to provide, or install by default, functionality exceeding requirements or mission objectives. These unnecessary capabilities or services are often overlooked and therefore may remain unsecured. They increase the risk to the platform by providing additional attack vectors.

Operating systems are capable of providing a wide variety of functions and services. Some of the functions and services, provided by default, may not be necessary to support essential organizational operations (e.g., key missions, functions).

Examples of non-essential capabilities include, but are not limited to, games, software packages, tools, and demonstration software, not related to requirements or providing a wide array of functionality not required for every mission, but cannot be disabled.

Remote Apple Events must be disabled.

Checks

Remote Apple Events must be disabled. To check if Remote Apple Events is disabled, run the following command:

sudo /usr/libexec/PlistBuddy -c 'print com.apple.AEServer:Disabled' /var/db/launchd.db/com.apple.launchd/overrides.plist

If the returned value isn't 'true', this is a finding.

Fix

To disable Remote Apple Events, run the following command:

sudo defaults write /private/var/db/launchd.db/com.apple.launchd/overrides.plist 'com.apple.AEServer' -dict Disabled -bool true
V-58415 No Change
Findings ID: AOSX-09-000995 Rule ID: SV-72845r1_rule Severity: high CCI: CCI-000366

Discussion

The sudo command must be configured to prompt for the administrator user's password at least once in each newly opened Terminal window or remote login session, as this prevents a malicious user from taking advantage of an unlocked computer or an abandoned login session to bypass the normal password prompt requirement. Without the tty_tickets option, all open local and remote login sessions would be authenticated to use sudo without a password for the duration of the configured password timeout window.

Checks

To check if the tty_tickets option is set for sudo, run the following command:

sudo grep tty_tickets /etc/sudoers

If there is no result, this is a finding.

Fix

Edit the /etc/sudoers file to contain the line:

Defaults tty_tickets

This line can be placed in the Defaults section or at the end of the file.
V-58417 No Change
Findings ID: AOSX-09-001015 Rule ID: SV-72847r1_rule Severity: medium CCI: CCI-000366

Discussion

The default global umask setting must be set to '027' for user applications. The setting '027' ensures that user created files and directories will be readable, but not writable, by users that share the same group id. Users with a different group id will not be able to read or write those files. This mitigates the risk that unauthorized users might be able to read and write files saved to the system by user applications.

Checks

To view the umask setting, run the following command:

awk '{ print $2 }' /etc/launchd-user.conf

If the command produces an error, or the result is not '027', this is a finding.

Fix

To set the umask setting for user applications, run the following command:

sudo sh -c 'echo 'umask 027' > /etc/launchd-user.conf'
V-58419 No Change
Findings ID: AOSX-09-001020 Rule ID: SV-72849r1_rule Severity: medium CCI: CCI-000366

Discussion

The default global umask setting must be set to '022' for system processes. The setting '022' ensures that system process created files and directories will only be readable by other users and processes, not writable. This mitigates the risk that unauthorized users might be able to write to files and directories created by system processes. A more restrictive setting could potentially break the normal functionality of the system.

Checks

To view the umask setting, run the following command:

umask

If the setting is not '022', this is a finding.

Fix

To set the umask setting for applications, run the following command:

sudo sh -c 'echo 'umask 022' > /etc/launchd.conf'
V-58421 No Change
Findings ID: AOSX-09-001065 Rule ID: SV-72851r1_rule Severity: medium CCI: CCI-000366

Discussion

The built in root account is disabled by default and administrator users are required to use sudo to run a process with the UID '0'. If another account with UID '0' exists, this is a sign of a network intrusion or a malicious user that is attempting to circumvent security controls.

Checks

To list all of the accounts with a UID of '0', run this command:

sudo dscl . -list /Users UniqueID | grep -w 0 | wc -l

If the result is not '1', this is a finding.

Fix

Investigate as to why any additional accounts were set up with a UID of '0'.

Remove any invalid accounts.
V-58423 No Change
Findings ID: AOSX-09-001075 Rule ID: SV-72853r1_rule Severity: low CCI: CCI-000366

Discussion

Finder must be configured to always empty Trash securely in order to prevent data recovery tools from accessing the deleted files. Files emptied from the Trash by normal means are still present on the hard drive and can be recovered up until the moment the system overwrites that particular location on disk. A malicious user with physical access to a system could take advantage of this property to access potentially sensitive files that the normal system owner or user assumed were safely deleted. Configuring Finder to always empty trash securely mitigates this risk.

Checks

To check that the finder will only present the option to securely empty trash run the following command as the primary user:

system_profiler SPConfigurationProfileDataType | grep EmptyTrashSecurely

If 'EmptyTrashSecurely' is not set to '1' or there is no result, this is a finding.

Fix

This setting is enforced using a configuration profile.
V-58425 No Change
Findings ID: AOSX-09-001080 Rule ID: SV-72855r1_rule Severity: medium CCI: CCI-000366

Discussion

The Application Firewall is the built in firewall that comes with Mac OS X and must be enabled. Firewalls protect computers from network attacks by blocking or limiting access to open network ports. Application firewalls limit which applications are allowed to communicate over the network.

Checks

If an approved HBSS solution is installed per AOSX-09-000835, this is not applicable.

To check if the OS X firewall has been enabled, run the following command:

sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate

If the result is 'disabled', this is a finding.

Fix

To enable the firewall run the following command:

sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate on
V-58427 No Change
Findings ID: AOSX-09-001110 Rule ID: SV-72857r1_rule Severity: medium CCI: CCI-000366

Discussion

All public directories must be owned by root, the local admin user, or an application account. Directory owners have permission to delete any files contained in that directory, even if the files are owned by other user accounts. By setting the owner to an administrator or application account, regular users will not be permitted to delete each other's files.

Checks

To display all directories that are writable by all and not owned by root, run the following command:

sudo find / -type d -perm +o+w -not -uid 0

If anything is returned, and those directories are not owned by a local admin or application account, this is a finding.

Fix

To change the ownership of any finding, run the following command:

sudo find / -type d -perm +o+w -not -uid 0 -exec chown root {} \;
V-58429 No Change
Findings ID: AOSX-09-001115 Rule ID: SV-72859r1_rule Severity: medium CCI: CCI-000366

Discussion

The finger service has had several security vulnerabilities in the past and is not a necessary service. It is disabled by default; enabling it would increase the attack surface of the system.

Checks

To check if the finger service has been disabled, run the following command:

sudo /usr/libexec/PlistBuddy -c 'print com.apple.fingerd:Disabled' /var/db/launchd.db/com.apple.launchd/overrides.plist

If the returned value isn't 'true' or doesn't exist, this is a finding.

Fix

To ensure that the finger service is disabled, run the following command:

sudo defaults write /private/var/db/launchd.db/com.apple.launchd/overrides.plist 'com.apple.fingerd' -dict Disabled -bool true
V-58431 No Change
Findings ID: AOSX-09-001120 Rule ID: SV-72861r1_rule Severity: medium CCI: CCI-000366

Discussion

The sticky bit must be set on all public directories, as it prevents users with write access to the directory from deleting or renaming files that belong to other users inside it.

Checks

Run the following command to view all world-writable directories that have the sticky bit set:

sudo find / -type d \( -perm -0002 -a ! -perm -1000 \)

If anything is returned, this is a finding.

Fix

Run the following command to set the sticky bit on all world-writable directories:

sudo find / -type d \( -perm -0002 -a ! -perm -1000 \) -exec chmod +t {} \;
V-58433 No Change
Findings ID: AOSX-09-001125 Rule ID: SV-72863r1_rule Severity: medium CCI: CCI-000366

Discussion

The prompt for Apple ID and iCloud must be disabled, as it might mislead new users into creating unwanted Apple IDs and iCloud storage accounts upon their first login.

Checks

To check if the prompt for Apple ID and iCloud are disabled for new users, run the following command:

sudo defaults read /System/Library/User\ Template/English.lproj/Library/Preferences/com.apple.SetupAssistant

If there is no result, or the results do not include 'DidSeeCloudSetup = 1 AND LastSeenCloudProductVersion = 10.9', this is a finding.

Fix

To ensure that the prompt for Apple ID and iCloud is disabled, run the following commands:

sudo defaults write /System/Library/User\ Template/English.lproj/Library/Preferences/com.apple.SetupAssistant DidSeeCloudSetup -bool TRUE; sudo defaults write /System/Library/User\ Template/English.lproj/Library/Preferences/com.apple.SetupAssistant LastSeenCloudProductVersion '10.9'
V-58435 No Change
Findings ID: AOSX-09-001130 Rule ID: SV-72865r1_rule Severity: medium CCI: CCI-000366

Discussion

Users should not sign into iCloud, as this leads to the possibility that sensitive data could be saved to iCloud storage or that users could inadvertently introduce viruses or malware previously saved to iCloud from other systems.

Checks

To see if any user account has configured an Apple ID for iCloud usage, run the following command:

sudo find /Users/ -name 'MobileMeAccounts.plist' -exec defaults read '{}' \;

If the results show any accounts listed, this is a finding.

Fix

This must be manually resolved.

With the affected user logged in, open System Preferences->iCloud.

Choose 'Sign Out'.
V-58437 No Change
Findings ID: AOSX-09-001140 Rule ID: SV-72867r1_rule Severity: low CCI: CCI-000366

Discussion

When iTunes Music Sharing is enabled, the computer starts a network listening service that shares the contents of the user's music collection with other users in the same subnet. Unnecessary network services should always be disabled because they increase the attack surface of the system. Disabling iTunes Music Sharing mitigates this risk.

Checks

To check if the iTunes music sharing is disabled, run the following command:

system_profiler SPConfigurationProfileDataType | grep disableSharedMusic

If 'disableSharedMusic' is not set to '1', this is a finding.

Fix

This setting is enforced using a configuration profile.
V-58439 No Change
Findings ID: AOSX-09-001145 Rule ID: SV-72869r1_rule Severity: medium CCI: CCI-000366

Discussion

None of the executables that come preinstalled on Mac OS X have the setuid bit set, and administrators should never add the setuid bit to any executable that does not already have it set by the vendor. Executables with the setuid bit set allow anyone that executes them to be temporarily assigned the UID of the file owner. In practice, this almost always is the root account. While some vendors depend on this file attribute for proper operation, security problems can result if setuid is assigned to programs allowing reading and writing of files, or shell escapes, as this could lead to unprivileged users gaining privileged access to files and directories on the system.

Checks

If available, provide a list of setuids provided by a vendor. To list all of the files with the setuid bit set, run the following command to send all results to a file named suidfilelist:

sudo find / -perm -4000 -exec ls -ldb {} \; > suidfilelist

If any of the files listed are not documented as needing to have the setuid bit set by the vendor, this is a finding.

Fix

Document all of the files with the setuid bit set.

Remove any undocumented files.
V-58441 No Change
Findings ID: AOSX-09-001195 Rule ID: SV-72871r1_rule Severity: medium CCI: CCI-000366

Discussion

A source-routed packet attempts to specify the network path the packet should take. If the system is not configured to block the incoming source-routed packets, an attacker can redirect the system's network traffic. Configuring the system to drop incoming source-routed IPv4 packets mitigates this risk.

Checks

To check if the system is configured to accept source-routed packets, run the following command:

sysctl net.inet.ip.accept_sourceroute

If the value is not '0', this is a finding.

Fix

To configure the system to not accept source-routed packets, add the following line to /etc/sysctl.conf:

net.inet.ip.accept_sourceroute=0
V-58443 No Change
Findings ID: AOSX-09-001200 Rule ID: SV-72873r1_rule Severity: medium CCI: CCI-000366

Discussion

ICMP redirects are broadcast in order to reshape network traffic. A malicious user could craft fake redirect packets and try to force all network traffic to pass through a network sniffer. If the system is not configured to ignore these packets, it could be susceptible to this kind of attack.

Checks

To check if the system is configured to ignore ICMP redirect messages, run the following command:

sysctl net.inet.icmp.drop_redirect

If the value is not '1', this is a finding.

Fix

To configure the system to ignore ICMP redirect messages, add the following line to /etc/sysctl.conf:

net.inet.icmp.drop_redirect=1
V-58445 No Change
Findings ID: AOSX-09-001205 Rule ID: SV-72875r1_rule Severity: medium CCI: CCI-000366

Discussion

IP forwarding for IPv4 must not be enabled, as only authorized systems should be permitted to operate as routers.

Checks

To check if IP forwarding is enabled, run the following command:

sysctl net.inet.ip.forwarding

If the values are not '0', this is a finding.

Fix

To configure the system to disable IP forwarding, add the following line to /etc/sysctl.conf:

net.inet.ip.forwarding=0
V-58447 Added
Findings ID: AOSX-09-001206 Rule ID: SV-72877r1_rule Severity: medium CCI: CCI-000366

Discussion

IP forwarding for IPv6 must not be enabled, as only authorized systems should be permitted to operate as routers.

Checks

To check if IP forwarding is enabled, run the following command: sysctl net.inet6.ip6.forwarding If the values are not '0', this is a finding.

Fix

To configure the system to disable IP forwarding, add the following line to /etc/sysctl.conf: net.inet6.ip6.forwarding=0
V-58449 No Change
Findings ID: AOSX-09-001210 Rule ID: SV-72879r1_rule Severity: medium CCI: CCI-000366

Discussion

ICMP redirects are broadcast in order to reshape network traffic. A malicious user could use the system to send fake redirect packets and try to force all network traffic to pass through a network sniffer. Disabling ICMP redirect broadcasts mitigates this risk.

Checks

To check if the system is configured to send ICMP redirects, run the following command:

sysctl net.inet.ip.redirect

If the values are not set to '0', this is a finding.

Fix

To configure the system to not send ICMP redirects, add the following line to /etc/sysctl.conf:

net.inet.ip.redirect=0
V-58451 No Change
Findings ID: AOSX-09-001211 Rule ID: SV-72881r1_rule Severity: medium CCI: CCI-000366

Discussion

ICMP redirects are broadcast in order to reshape network traffic. A malicious user could use the system to send fake redirect packets and try to force all network traffic to pass through a network sniffer. Disabling ICMP redirect broadcasts mitigates this risk.

Checks

To check if the system is configured to send ICMP redirects, run the following command:

sysctl net.inet6.ip6.redirect

If the values are not set to '0', this is a finding.

Fix

To configure the system to not send ICMP redirects, add the following line to /etc/sysctl.conf:

net.inet6.ip6.redirect=0
V-58453 No Change
Findings ID: AOSX-09-001215 Rule ID: SV-72883r1_rule Severity: medium CCI: CCI-000366

Discussion

A source-routed packet attempts to specify the network path that the system should take. If the system is not configured to block the sending of source-routed packets, an attacker can redirect the system's network traffic.

Checks

To check if the system is configured to forward source-routed packets, run the following command:

sysctl net.inet.ip.sourceroute

If the value is not set to '0', this is a finding.

Fix

To configure the system to not forward source-routed packets, add the following line to /etc/sysctl.conf:

net.inet.ip.sourceroute=0
V-58455 No Change
Findings ID: AOSX-09-001220 Rule ID: SV-72885r1_rule Severity: medium CCI: CCI-000366

Discussion

ICMP Timestamp requests reveal information about the system and can be used to determine which operating system is installed. Precise time data can also be used to launch time based attacks against the system. Configuring the system to drop incoming ICMPv4 timestamp requests mitigates these risks.

Checks

To check if the system is configured to process ICMP timestamp requests, run the following command:

sysctl net.inet.icmp.timestamp

If the value is not set to '0', this is a finding.

Fix

To disable ICMP timestamp responses, add the following line to /etc/sysctl.conf:

net.inet.icmp.timestamp=0
V-58457 No Change
Findings ID: AOSX-09-001235 Rule ID: SV-72887r1_rule Severity: medium CCI: CCI-000366

Discussion

If an unused network device is left enabled, a user might be able to activate it at a later time. Unused network devices should be disabled.

Checks

To list the network devices that are enabled on the system, run the following command:

sudo networksetup -listallnetworkservices

A disabled device will have an asterisk in front of its name. If any listed device that is not in use is missing this asterisk, this is a finding.

Fix

To disable a network device, run the following command, substituting the name of the device in place of '<networkservice>':

sudo networksetup -setnetworkserviceenabled '<networkservice>' off
V-58459 No Change
Findings ID: AOSX-09-001240 Rule ID: SV-72889r1_rule Severity: medium CCI: CCI-000366

Discussion

Security appliances and firewalls are not always IPv6 aware, meaning that IPv6 traffic is frequently unfiltered and unprotected. If it is not in use, it should be disabled.

Checks

Run the following command to check if IPv6 is enabled on any network interfaces:

sudo networksetup -listallnetworkservices | (while read dev; do echo "$dev"; networksetup -getinfo "$dev" | grep IPv6:; echo ; done)

If there is an enabled network interface without the setting 'IPv6: Off' and it does not require IPv6, this is a finding.

Fix

Run the following command to turn off IPv6 addressing for the Ethernet interface:

sudo networksetup -setv6off 'Ethernet'

Repeat this command for each enabled interface, interface names are case sensitive.
V-58461 No Change
Findings ID: AOSX-09-001260 Rule ID: SV-72891r1_rule Severity: medium CCI: CCI-000366

Discussion

Secure virtual memory must be enabled. Secure virtual memory ensures that data in memory is encrypted when it is swapped to disk. This prevents users and applications from accessing potentially sensitive information, such as user names and passwords, from the swap space on the hard drive.

Checks

To check if the system is using secure virtual memory run the following command:

sysctl vm.swapusage

If the result does not show '(encrypted)', this is a finding.

Fix

To ensure secure virtual memory is secure, run the following command:

sudo defaults write /Library/Preferences/com.apple.virtualMemory DisableEncryptedSwap -bool FALSE
V-58463 No Change
Findings ID: AOSX-09-001270 Rule ID: SV-72893r1_rule Severity: medium CCI: CCI-000381

Discussion

In order to prevent unauthorized connection of devices, unauthorized transfer of information, or unauthorized tunneling (i.e., embedding of data types within data types), organizations must disable or restrict unused or unnecessary physical and logical ports/protocols on information systems.

Operating systems are capable of providing a wide variety of functions and services. Some of the functions and services provided by default may not be necessary to support essential organizational operations. Additionally, it is sometimes convenient to provide multiple services from a single component (e.g., VPN and IPS); however, doing so increases risk over limiting the services provided by any one component.

To support the requirements and principles of least functionality, the operating system must support the organizational requirements providing only essential capabilities and limiting the use of ports, protocols, and/or services to only those required, authorized, and approved to conduct official business or to address authorized quality of life issues.

Internet Sharing must be disabled.

Checks

Internet Sharing must be disabled. To check if Internet sharing is disabled, run the following command:

sudo /usr/libexec/PlistBuddy -c 'print com.apple.InternetSharing:Disabled' /var/db/launchd.db/com.apple.launchd/overrides.plist

If the returned value isn't 'true' or doesn't exist, this is a finding.

Fix

To disable Internet Sharing, run the following command:

sudo defaults write /private/var/db/launchd.db/com.apple.launchd/overrides.plist 'com.apple.InternetSharing' -dict Disabled -bool true
V-58465 No Change
Findings ID: AOSX-09-001275 Rule ID: SV-72895r1_rule Severity: medium CCI: CCI-000381

Discussion

Web Sharing is non-essential and must be disabled. Enabling any service increases the attack surface for an intruder. By disabling unnecessary services, the attack surface is minimized.

Checks

Web Sharing must be disabled. To check if Web Sharing is enabled, run the following command:

sudo /usr/libexec/PlistBuddy -c 'print org.apache.httpd:Disabled' /var/db/launchd.db/com.apple.launchd/overrides.plist

If the returned value isn't 'true', this is a finding.

Fix

To disable Web Sharing, run the following command:

sudo defaults write /private/var/db/launchd.db/com.apple.launchd/overrides.plist 'org.apache.httpd' -dict Disabled -bool true
V-58467 No Change
Findings ID: AOSX-09-001324 Rule ID: SV-72897r1_rule Severity: medium CCI: CCI-002238

Discussion

Setting a lockout expiration of 15 minutes is an effective deterrent against brute forcing that also makes allowances for legitimate mistakes by users.

Checks

To check if the password policy is configured to disable an account after 3 unsuccessful login attempts, run the following command:

sudo pwpolicy getglobalpolicy | tr ' ' '\n' | grep 'maxFailedLoginAttempts'

If the result is not 'maxFailedLoginAttempts=3' and password policy is not controlled by a directory server, this is a finding.

Fix

To set the password policy, run the following command:

sudo pwpolicy setglobalpolicy 'maxFailedLoginAttempts=3'
V-58469 No Change
Findings ID: AOSX-09-001325 Rule ID: SV-72899r1_rule Severity: medium CCI: CCI-000044

Discussion

By limiting the number of failed login attempts, the risk of unauthorized system access via user password guessing, otherwise known as brute forcing, is reduced. Limits are imposed by locking the account.

Checks

To check if the password policy is configured to disable an account for 15 minutes in the event 3 unsuccessful login are attempted, run the following command:

sudo pwpolicy getglobalpolicy | tr ' ' '\n' | grep 'minutesUntilFailedLoginReset'

If the result is not 'minutesUntilFailedLoginReset=15', and password policy is not controlled by a directory server, this is a finding.

Fix

To set the password policy, run the following command:

sudo pwpolicy setglobalpolicy 'minutesUntilFailedLoginReset=15'
V-58471 No Change
Findings ID: AOSX-09-001326 Rule ID: SV-72901r1_rule Severity: medium CCI: CCI-002238

Discussion

By limiting the number of failed login attempts, the risk of unauthorized system access via user password guessing, otherwise known as brute forcing, is reduced. Limits are imposed by locking the account. Setting a lockout expiration of 15 minutes is an effective deterrent against brute forcing that also makes allowances for legitimate mistakes by users.

Checks

To check if the password policy is configured to disable an account for 15 minutes after 3 unsuccessful login attempts, run the following command:

sudo pwpolicy getglobalpolicy | tr ' ' '\n' | grep 'maxFailedLoginAttempts\|minutesUntilFailedLoginReset'

If the result is not 'maxFailedLoginAttempts=3' and 'minutesUntilFailedLoginReset=15', and password policy is not controlled by a directory server, this is a finding.

Fix

To set the password policy, run the following command:

sudo pwpolicy setglobalpolicy 'maxFailedLoginAttempts=3 minutesUntilFailedLoginReset=15'
V-58473 No Change
Findings ID: AOSX-09-001355 Rule ID: SV-72903r1_rule Severity: medium CCI: CCI-000140

Discussion

The audit service should shut down the computer if it is unable to audit system events. Once audit failure occurs, user and system activity is no longer recorded and malicious activity could go undetected. Audit processing failures include: software/hardware errors; failures in the audit capturing mechanisms; and audit storage capacity being reached or exceeded. Responses to audit failure depend upon the nature of the failure mode.

When availability is an overriding concern, other approved actions in response to an audit failure are as follows:

(i) If the failure was caused by the lack of audit record storage capacity, the operating system must continue generating audit records if possible (automatically restarting the audit service if necessary), overwriting the oldest audit records in a first-in-first-out manner.

(ii) If audit records are sent to a centralized collection server and communication with this server is lost or the server fails, the operating system must queue audit records locally until communication is restored or until the audit records are retrieved manually. Upon restoration of the connection to the centralized collection server, action should be taken to synchronize the local audit data with the collection server.

Checks

To view the setting for the audit control system, run the following command:

sudo grep ^policy /etc/security/audit_control | grep ahlt

If there is no result, this is a finding.

Fix

Edit the /etc/security/audit_control file, and change the value for policy to include the setting 'ahlt'. To programmatically do this, run the following command:

sudo sed -i.bak '/^policy/ s/$/,ahlt/' /etc/security/audit_control; sudo audit -s
V-58475 No Change
Findings ID: AOSX-09-001465 Rule ID: SV-72905r1_rule Severity: high CCI: CCI-000366

Discussion

An approved anti-virus product must be installed and configured to run.

Malicious software can establish a base on individual desktops and servers. Employing an automated mechanism to detect this type of software will aid in elimination of the software from the operating system.

Checks

Ask the SA or ISSO if an approved anti-virus solution is loaded on the system. The anti-virus solution may be bundled with an approved host-based security solution.

If there is no local anti-virus solution installed on the system, this is a finding.

Fix

Install an approved anti-virus solution onto the system.
V-58477 No Change
Findings ID: AOSX-09-002050 Rule ID: SV-72907r1_rule Severity: low CCI: CCI-000381

Discussion

In order to prevent unauthorized connection of devices, unauthorized transfer of information, or unauthorized tunneling (i.e., embedding of data types within data types), organizations must disable or restrict unused or unnecessary physical and logical ports/protocols on information systems.

Operating systems are capable of providing a wide variety of functions and services. Some of the functions and services provided by default may not be necessary to support essential organizational operations. Additionally, it is sometimes convenient to provide multiple services from a single component (e.g., VPN and IPS); however, doing so increases risk over limiting the services provided by any one component.

To support the requirements and principles of least functionality, the operating system must support the organizational requirements providing only essential capabilities and limiting the use of ports, protocols, and/or services to only those required, authorized, and approved to conduct official business or to address authorized quality of life issues.

Airdrop must be disabled.

Checks

Airdrop must be disabled. To check if Airdrop has been disabled, run the following command:

sudo system_profiler SPConfigurationProfileDataType | grep DisableAirDrop

If DisableAirDrop is not set to '1', this is a finding.

Fix

Disabling AirDrop is enforced using a configuration profile.
V-58479 No Change
Findings ID: AOSX-09-002055 Rule ID: SV-72909r1_rule Severity: medium CCI: CCI-000366

Discussion

Password-based authentication has become a prime target for malicious actors. Multifactor authentication using PKI technologies mitigates most, if not all, risks associated with traditional password use. (Use of username and password for last-resort emergency access to a system for maintenance is acceptable, however.)

Checks

Ask the SA or ISSO if an approved PKI authentication solution is implemented on the system for user logins and privileged access.

If a non-emergency account can log into the system or gain privileged access without a smart card, this is a finding.

Fix

Implement PKI authentication using approved third-party PKI tools, to integrate with an existing directory services infrastructure or local password database, where no directory services infrastructure exists.
V-58481 No Change
Findings ID: AOSX-09-002060 Rule ID: SV-72911r1_rule Severity: medium CCI: CCI-000366

Discussion

Distinct user account databases on each separate system cause problems with username and password policy enforcement. Most approved directory services infrastructure solutions, such as Active Directory, allow centralized management of users and passwords.

Checks

To determine if the system is integrated to a directory server, ask the SA or ISSO or run the following command:

sudo dscl localhost -list . | grep -vE '(Contact | Search | Local)'

If nothing is returned, or if the system is not integrated into a directory service infrastructure, this is a finding.

Fix

Integrate the system into an existing directory services infrastructure, such as Active Directory.
V-58483 No Change
Findings ID: AOSX-09-002065 Rule ID: SV-72913r1_rule Severity: medium CCI: CCI-000172

Discussion

Kernel modules, called kernel extensions in Mac OS X, are compiled segments of code that are dynamically loaded into the kernel as required to support specific pieces of hardware or functionality. Privileged users are permitted to load or unload kernel extensions manually. An attacker might attempt to load a kernel extension that is known to be insecure to increase the attack surface of the system, or a user might plug in an unauthorized device that then triggers a kernel extension to be loaded. Auditing administrative actions, which include the loading or unloading of kernel extensions, mitigates this risk.

Checks

In order to view the currently configured flags for the audit daemon, run the following command:

sudo grep ^flags /etc/security/audit_control

Privileged access, including administrative use of the command line tools kextload and kextunload, is logged via the 'ad' flag.

If 'ad' is not listed in the result of the check, this is a finding.

Fix

To make sure the appropriate flags are enabled for auditing, run the following command:

sudo sed -i.bak '/^flags/ s/$/,ad/' /etc/security/audit_control; sudo audit -s

A text editor may also be used to implement the required update to the /etc/security/audit_control file.
V-58485 No Change
Findings ID: AOSX-09-002070 Rule ID: SV-72915r1_rule Severity: medium CCI: CCI-000172

Discussion

The permissions on a file establish which users are permitted to access or modify it. An attacker may attempt to change the permissions on a file to prevent legitimate users from accessing it or to grant additional access to an account the attacker controls. Auditing successful and unsuccessful attempts to modify security objects such as file permissions mitigates this risk.

Checks

In order to view the currently configured flags for the audit daemon, run the following command:

sudo grep ^flags /etc/security/audit_control

Changes to file permissions are logged by way of the 'fm' flag.

If 'fm' is not listed in the result of the check, this is a finding.

Fix

To make sure the appropriate flags are enabled for auditing, run the following command:

sudo sed -i.bak '/^flags/ s/$/,fm/' /etc/security/audit_control; sudo audit -s

A text editor may also be used to implement the required update to the /etc/security/audit_control file.
V-58487 No Change
Findings ID: AOSX-09-002075 Rule ID: SV-72917r1_rule Severity: medium CCI: CCI-000172

Discussion

The permissions on a file establish which users are permitted to access or modify it. An attacker may attempt to change the permissions on a file to prevent legitimate users from accessing it or to grant additional access to an account the attacker controls. Auditing successful and unsuccessful attempts to modify security objects such as file permissions mitigates this risk.

Checks

In order to view the currently configured flags for the audit daemon, run the following command:

sudo grep ^flags /etc/security/audit_control

Changes to file permissions are logged by way of the 'fm' flag.

If 'fm' is not listed in the result of the check, this is a finding.

Fix

To make sure the appropriate flags are enabled for auditing, run the following command:

sudo sed -i.bak '/^flags/ s/$/,fm/' /etc/security/audit_control; sudo audit -s

A text editor may also be used to implement the required update to the /etc/security/audit_control file.
V-58489 No Change
Findings ID: AOSX-09-002080 Rule ID: SV-72919r1_rule Severity: medium CCI: CCI-000172

Discussion

The permissions on a file establish which users are permitted to access or modify it. An attacker may attempt to change the permissions on a file to prevent legitimate users from accessing it or to grant additional access to an account the attacker controls. Auditing successful and unsuccessful attempts to modify security objects such as file permissions mitigates this risk.

Checks

In order to view the currently configured flags for the audit daemon, run the following command:

sudo grep ^flags /etc/security/audit_control

Changes to file permissions are logged by way of the 'fm' flag.

If 'fm' is not listed in the result of the check, this is a finding.

Fix

To make sure the appropriate flags are enabled for auditing, run the following command:

sudo sed -i.bak '/^flags/ s/$/,fm/' /etc/security/audit_control; sudo audit -s

A text editor may also be used to implement the required update to the /etc/security/audit_control file.
V-58491 No Change
Findings ID: AOSX-09-002085 Rule ID: SV-72921r1_rule Severity: medium CCI: CCI-000199

Discussion

Any password, no matter how complex, can eventually be cracked. Therefore, passwords need to be changed periodically.

One method of minimizing this risk is to use complex passwords and periodically change them. If the operating system does not limit the lifetime of passwords and force users to change their passwords, there is the risk that the operating system passwords could be compromised.

Checks

To check if the password policy is configured to require that users change their password every 60 days, run the following command:

sudo pwpolicy getglobalpolicy | tr ' ' '\n' | grep maxMinutesUntilChangePassword

If the result is not 'maxMinutesUntilChangePassword=86400', and password policy is not controlled by a directory server, this is a finding.

Fix

To set the password policy, run the following command:

sudo pwpolicy setglobalpolicy 'maxMinutesUntilChangePassword=86400'
V-58493 No Change
Findings ID: AOSX-09-002090 Rule ID: SV-72923r1_rule Severity: medium CCI: CCI-000200

Discussion

Password complexity, or strength, is a measure of the effectiveness of a password in resisting attempts at guessing and brute-force attacks. If the information system or application allows the user to consecutively reuse their password when that password has exceeded its defined lifetime, the end result is a password that is not changed as per policy requirements.

Checks

To check if the password policy is configured to prevent users from reusing one of their five previously used passwords, run the following command:

sudo pwpolicy getglobalpolicy | tr ' ' '\n' | grep usingHistory

If the result is not 'usingHistory=5', and password policy is not controlled by a directory server, this is a finding.

Fix

To set the password policy, run the following command:

sudo pwpolicy setglobalpolicy 'usingHistory=5'
V-58495 No Change
Findings ID: AOSX-09-002095 Rule ID: SV-72925r1_rule Severity: medium CCI: CCI-000172

Discussion

The permissions on a file establish which users and groups are permitted to access or modify it. An attacker may attempt to change the permissions on a file to prevent legitimate users from accessing it or to grant additional access to an account the attacker controls. Auditing successful and unsuccessful attempts to modify security objects such as file permissions mitigates this risk.

Checks

In order to view the currently configured flags for the audit daemon, run the following command:

sudo grep ^flags /etc/security/audit_control

Changes to file permissions are logged by way of the 'fm' flag.

If 'fm' is not listed in the result of the check, this is a finding.

Fix

To make sure the appropriate flags are enabled for auditing, run the following command:

sudo sed -i.bak '/^flags/ s/$/,fm/' /etc/security/audit_control; sudo audit -s

A text editor may also be used to implement the required update to the /etc/security/audit_control file.
V-58497 No Change
Findings ID: AOSX-09-002100 Rule ID: SV-72927r1_rule Severity: medium CCI: CCI-000172

Discussion

Frequently, an attacker that successfully gains access to a system has only gained access to an account with limited privileges, such as a guest account or a service account. The attacker must attempt to change to another user account with normal or elevated privileges in order to proceed. Auditing successful and unsuccessful attempts to elevate privileges mitigates this risk.

Checks

The options to configure the audit daemon are located in the /etc/security/audit_control file. To view the current settings, run the following command:

sudo grep ^flags /etc/security/audit_control

If the 'lo', 'ad', and 'aa' options are not set, this is a finding.

Fix

To set the audit flags to the recommended setting, run the following command to add the flags 'lo', 'ad', and 'aa' all at once:

sudo sed -i.bak '/^flags/ s/$/,lo,ad,aa/' /etc/security/audit_control; sudo audit -s

A text editor may also be used to implement the required update to the /etc/security/audit_control file.
V-58499 No Change
Findings ID: AOSX-09-002105 Rule ID: SV-72929r1_rule Severity: medium CCI: CCI-001314

Discussion

System logs should only be readable by root or admin users. System logs frequently contain sensitive information that could be used by an attacker. Setting the correct owner mitigates this risk.

Checks

Log files are controlled by newsyslog and aslmanager.

These commands check for log files that exist on the system and print out the log with corresponding ownership. Run them from inside /var/log:

sudo stat -f '%Su:%Sg:%N' $(grep -v '^#' /etc/newsyslog.conf | awk '{ print $1 }') 2> /dev/null
sudo stat -f '%Su:%Sg:%N' $(grep -e '^>' /etc/asl.conf /etc/asl/* | awk '{ print $2 }') 2> /dev/null

If there are any system log files that are not owned by root and group-owned by wheel or admin, this is a finding.

Service logs may be owned by the service user account or group.

Fix

For any log file that returns an incorrect owner or group value, run the following command:

sudo chown root:wheel [log file]

[log file] is the full path to the log file in question.

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 that the owner:group column is set to root:wheel or the appropriate service user 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 either not present or are set to a service user account and group respectively.
V-58501 No Change
Findings ID: AOSX-09-002106 Rule ID: SV-72931r1_rule Severity: medium CCI: CCI-001314

Discussion

System logs should only be readable by root or admin users. System logs frequently contain sensitive information that could be used by an attacker. Setting the correct permissions mitigates this risk.

Checks

These commands check for log files that exist on the system and print out the log with corresponding permissions. Run them from inside /var/log:

sudo stat -f '%A:%N' $(grep -v '^#' /etc/newsyslog.conf | awk '{ print $1 }') 2> /dev/null
sudo stat -f '%A:%N' $(grep -e '^>' /etc/asl.conf /etc/asl/* | awk '{ print $2 }') 2> /dev/null

The correct permissions on log files should be '640' or less permissive for system logs. Any file with more permissive settings is a finding.

Fix

For any log file that returns an incorrect permission value, run the following command:

sudo chmod 640 [log file]

[log file] is the full path to the log file in question.

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 less permissive.

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' or less permissive.
V-58503 No Change
Findings ID: AOSX-09-002107 Rule ID: SV-72933r1_rule Severity: medium CCI: CCI-001314

Discussion

System logs should only be readable by root or admin users. System logs frequently contain sensitive information that could be used by an attacker. Setting the correct ACLs mitigates this risk.

Checks

These commands check for log files that exist on the system and print out the list of ACLs if there are any.

sudo ls [email protected] $(grep -v '^#' /etc/newsyslog.conf | awk '{ print $1 }') 2> /dev/null
sudo ls [email protected] $(grep -e '^>' /etc/asl.conf /etc/asl/* | awk '{ print $2 }') 2> /dev/null

ACLs will be listed under any file that may contain them. i.e. '0: group:admin allow list,readattr,reaadextattr,readsecurity'

If any system log file contains this information, this is a finding.

Fix

For any log file that returns an ACL, run the following command:

sudo chmod -N [log file]

[log file] is the full path to the log file in question.
V-58505 No Change
Findings ID: AOSX-09-002110 Rule ID: SV-72935r1_rule Severity: medium CCI: CCI-001814

Discussion

By auditing access restriction enforcement, changes to application and OS configuration files can be audited. Without auditing the enforcement of access restrictions, it will be difficult to identify attempted attacks and an audit trail will not be available for forensic investigation.

Enforcement actions are the methods or mechanisms used to prevent unauthorized changes to configuration settings. Enforcement action methods may be as simple as denying access to a file based on the application of file permissions (access restriction). Audit items may consist of lists of actions blocked by access restrictions or changes identified after the fact.

Checks

In order to view the currently configured flags for the audit daemon, run the following command:

sudo grep ^flags /etc/security/audit_control

Enforcement actions are logged by way of the 'fm' flag, which audits permission changes, and '-fr' and '-fw', which denote failed attempts to read or write to a file.

If 'fm', '-fr', and '-fw' are not listed in the result of the check, this is a finding.

Fix

To make sure the appropriate flags are enabled for auditing, run the following command to add 'fm', '-fr', and '-fw' at the same time:

sudo sed -i.bak '/^flags/ s/$/,fm,-fr,-fw/' /etc/security/audit_control; sudo audit -s

A text editor may also be used to implement the required update to the /etc/security/audit_control file.
V-58507 No Change
Findings ID: AOSX-09-002115 Rule ID: SV-72937r1_rule Severity: medium CCI: CCI-002884

Discussion

If events associated with non-local administrative access or diagnostic sessions are not logged, a major tool for assessing and investigating attacks would not be available.

This requirement addresses auditing-related issues associated with maintenance tools used specifically for diagnostic and repair actions on organizational information systems.

Non-local maintenance and diagnostic activities are those activities conducted by individuals communicating through a network, either an external network (e.g., the Internet) or an internal network. Local maintenance and diagnostic activities are those activities carried out by individuals physically present at the information system or information system component and not communicating across a network connection.

This requirement applies to hardware/software diagnostic test equipment or tools. This requirement does not cover hardware/software components that may support information system maintenance, yet are a part of the system, for example, the software implementing "ping", "ls", "ipconfig", or the hardware and software implementing the monitoring port of an Ethernet switch.

Checks

In order to view the currently configured flags for the audit daemon, run the following command:

sudo grep ^flags /etc/security/audit_control

Administrative actions and changes to configuration settings are logged by way of the 'ad' flag.

If 'ad' is not listed in the result of the check, this is a finding.

Fix

To make sure the appropriate flags are enabled for auditing, run the following command:

sudo sed -i.bak '/^flags/ s/$/,ad/' /etc/security/audit_control; sudo audit -s

A text editor may also be used to implement the required update to the /etc/security/audit_control file.
V-58509 No Change
Findings ID: AOSX-09-002120 Rule ID: SV-72939r1_rule Severity: medium CCI: CCI-002234

Discussion

Misuse of privileged functions, either intentionally or unintentionally by authorized users, or by unauthorized external entities that have compromised information system accounts, is a serious and ongoing concern and can have significant adverse impacts on organizations. Auditing the use of privileged functions is one way to detect such misuse, and identify the risk from insider threats and the advanced persistent threat.

Checks

In order to view the currently configured flags for the audit daemon, run the following command:

sudo grep ^flags /etc/security/audit_control

Privileged access is logged via the 'ad' flag.

If 'ad' is not listed in the result of the check, this is a finding.

Fix

To make sure the appropriate flags are enabled for auditing, run the following command:

sudo sed -i.bak '/^flags/ s/$/,ad/' /etc/security/audit_control; sudo audit -s

A text editor may also be used to implement the required update to the /etc/security/audit_control file.
V-58511 No Change
Findings ID: AOSX-09-002125 Rule ID: SV-72941r1_rule Severity: medium CCI: CCI-000172

Discussion

Frequently, an attacker that successfully gains access to a system has only gained access to an account with limited privileges, such as a guest account or a service account. The attacker must attempt to change to another user account with normal or elevated privileges in order to proceed. Auditing successful and unsuccessful attempts to switch to another user account mitigates this risk.

Checks

In order to view the currently configured flags for the audit daemon, run the following command:

sudo grep ^flags /etc/security/audit_control

Attempts to log in as another user are logged by way of the 'lo' flag.

If 'lo' is not listed in the result of the check, this is a finding.

Fix

To make sure the appropriate flags are enabled for auditing, run the following command:

sudo sed -i.bak '/^flags/ s/$/,lo/' /etc/security/audit_control; sudo audit -s

A text editor may also be used to implement the required update to the /etc/security/audit_control file.
V-58541 No Change
Findings ID: AOSX-09-000711 Rule ID: SV-72971r1_rule Severity: medium CCI: CCI-000366

Discussion

Gatekeeper must be configured with a configuration profile in order to prevent normal users from overriding its setting. If users are allowed to disable Gatekeeper or set it to a less restrictive setting, then it is possible that malware could be introduced into the system. Gatekeeper is a security feature that ensures that applications must be digitally signed by an Apple issued certificate in order to run. Digital signatures allow Mac OS X to verify that the application has not been modified by a malicious third party.

Checks

To check to make sure the user cannot override Gatekeeper settings, type the following code:

system_profiler SPConfigurationProfileDataType | grep DisableOverride

If DisableOverride is not set to '1', this is a finding.

Fix

This setting is enforced using a configuration profile.
V-58891 No Change
Findings ID: AOSX-09-000331 Rule ID: SV-73321r1_rule Severity: medium CCI: CCI-000162

Discussion

The audit service must be configured to create log files with the correct ownership to prevent normal users from reading audit logs. Audit logs contain sensitive data about the system and about users. If log files are set to only be readable and writable by root or administrative users with sudo, the risk is mitigated.

Checks

To check the ownership of the audit log files, run the following command:

sudo ls -le $(sudo grep '^dir' /etc/security/audit_control | awk -F: '{print $2}') | grep -v current

The results should show the owner (third column) to be root. If not, this is a finding.

Fix

For any log file that returns an incorrect owner, run the following command:

sudo chown root [audit log file]

[audit log file] is the full path to the log file in question.
V-58893 No Change
Findings ID: AOSX-09-000332 Rule ID: SV-73323r1_rule Severity: medium CCI: CCI-000162

Discussion

The audit service must be configured to create log files with the correct ownership to prevent normal users from reading audit logs. Audit logs contain sensitive data about the system and about users. If log files are set to only be readable and writable by root or administrative users with sudo, the risk is mitigated.

Checks

To check the ownership of the audit log folder, run the following command:

sudo ls -lde $(sudo grep '^dir' /etc/security/audit_control | awk -F: '{print $2}')

The results should show the owner (third column) to be root. If not, this is a finding.

Fix

For any log folder that has an incorrect owner, run the following command:

sudo chown root [audit log folder]
V-58895 No Change
Findings ID: AOSX-09-000333 Rule ID: SV-73325r1_rule Severity: medium CCI: CCI-000162

Discussion

The audit service must be configured to create log files with the correct group-ownership to prevent normal users from reading audit logs. Audit logs contain sensitive data about the system and about users. If log files are set to only be readable and writable by root or administrative users with sudo, the risk is mitigated.

Checks

To check the group-ownership of the audit log files, run the following command:

sudo ls -le $(sudo grep '^dir' /etc/security/audit_control | awk -F: '{print $2}') | grep -v current

The results should show the group owner (fourth column) to be wheel. If not, this is a finding.

Fix

For any log file that returns an incorrect group-owner, run the following command:

sudo chgrp wheel [audit log file]

[audit log file] is the full path to the log file in question.
V-58897 No Change
Findings ID: AOSX-09-000334 Rule ID: SV-73327r1_rule Severity: medium CCI: CCI-000163

Discussion

The audit service must be configured to create log files with the correct group-ownership to prevent normal users from reading audit logs. Audit logs contain sensitive data about the system and about users. If log files are set to only be readable and writable by root or administrative users with sudo, the risk is mitigated.

Checks

To check the group-ownership of the audit log folder, run the following command:

sudo ls -lde $(sudo grep '^dir' /etc/security/audit_control | awk -F: '{print $2}')

The results should show the group (fourth column) to be wheel. If not, this is a finding.

Fix

For any log folder that has an incorrect group, run the following command:

sudo chgrp wheel [audit log folder]
V-58899 No Change
Findings ID: AOSX-09-000338 Rule ID: SV-73329r1_rule Severity: medium CCI: CCI-000164

Discussion

The audit service must be configured to create log folders with the correct permissions to prevent normal users from reading audit logs. Audit logs contain sensitive data about the system and about users. If log folders are set to only be readable and writable by root or administrative users with sudo, the risk is mitigated.

Checks

To check if a log folder contains ACLs, run the following commands:

sudo ls -lde $(sudo grep '^dir' /etc/security/audit_control | awk -F: '{print $2}')

In the output from the above commands, ACLs will be listed under any folder that may contain them (e.g., '0: group:admin allow list,readattr,reaadextattr,readsecurity'). If any such line exists, this is a finding.

Fix

For any log folder that contains ACLs, run the following command:

sudo chmod -N [audit log folder]