Apple OS X 10.12 Security Technical Implementation Guide

V1R4 2018-12-24       U_Apple_OS_X_10-12_STIG_V1R4_Manual-xccdf.xml
V1R5 2019-07-01       U_Apple_OS_X_10-12_V1R5_Manual-xccdf.xml
This 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 email to the following address: [email protected]
Comparison
All 121
No Change 120
Updated 1
Added 0
Removed 0
V-75945 No Change
Findings ID: AOSX-12-000005 Rule ID: SV-90633r1_rule Severity: low CCI: CCI-000060

Discussion

A default screen saver must be configured for all users, as the screen saver will act as a session time-out lock for the system and must conceal the contents of the screen from unauthorized users. The screen saver 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-on user, run the following command:

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep loginWindowModulePath

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

Fix

This setting is enforced using the "Login Window Policy" configuration profile.
V-75947 No Change
Findings ID: AOSX-12-000006 Rule ID: SV-90635r2_rule Severity: medium CCI: CCI-000060

Discussion

Although hot comers can be used to initiate a session lock or launch useful applications, they can also be configured to disable an automatic session lock from initiating. Such a configuration introduces 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 is configured to disable hot corners, run the following commands:

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep '"wvous-bl-corner = 0;"'
/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep '"wvous-tl-corner = 0;"'
/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep '"wvous-br-corner = 0;"'
/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep '"wvous-tr-corner = 0;"'

If any of the commands returns no result, this is a finding.

Fix

This setting is enforced using the "Custom Policy" configuration profile.
V-75949 No Change
Findings ID: AOSX-12-000007 Rule ID: SV-90637r1_rule Severity: medium CCI: CCI-000056

Discussion

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

Checks

To check if the system is configured to prevent Apple Watch from terminating a session lock, run the following command:

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "allowAutoUnlock = 0;"

If there is no result, this is a finding.

Fix

This setting is enforced using the "Security Privacy Policy" configuration profile.
V-75951 No Change
Findings ID: AOSX-12-000010 Rule ID: SV-90639r1_rule Severity: medium CCI: CCI-000057

Discussion

A screen saver must be enabled and set to require a password to unlock. The timeout should be set to 15 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:

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep idleTime

The check should return a value of "900" or less for "idleTime".

If it does not, this is a finding.

Fix

This setting is enforced using the "Login Window Policy" configuration profile.
V-75953 No Change
Findings ID: AOSX-12-000020 Rule ID: SV-90641r1_rule Severity: medium CCI: CCI-000056

Discussion

Users must be prompted to enter their passwords when unlocking the screen saver. The screen saver 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 screen saver, run the following command:

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/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 the "Login Window Policy" configuration profile.
V-75955 No Change
Findings ID: AOSX-12-000025 Rule ID: SV-90643r1_rule Severity: medium CCI: CCI-000056

Discussion

A screen saver must be enabled and set to require a password to unlock. An excessive grace period impacts the ability for a session to be truly locked, requiring authentication to unlock.

Checks

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

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep askForPasswordDelay

If there is no result, or if "askForPasswordDelay" is not set to "5.0" or less, this is a finding.

Fix

This setting is enforced using the "Login Window Policy" configuration profile.
V-75957 No Change
Findings ID: AOSX-12-000030 Rule ID: SV-90645r1_rule Severity: medium CCI: CCI-000067

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 and the escalation of privileges mitigates this risk.

Satisfies: SRG-OS-000032-GPOS-00013, SRG-OS-000064-GPOS-00033, SRG-OS-000462-GPOS-00206

Checks

To view the currently configured flags for the audit daemon, run the following command:

/usr/bin/sudo /usr/bin/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 ensure the appropriate flags are enabled for auditing, run the following command:

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

A text editor may also be used to implement the required updates to the "/etc/security/audit_control" file.
V-75959 No Change
Findings ID: AOSX-12-000035 Rule ID: SV-90647r1_rule Severity: high CCI: CCI-000068

Discussion

Without confidentiality and integrity 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., Remote Desktop Protocol [RDP]), thereby providing a degree of confidentiality. The encryption strength of a mechanism is selected based on the security categorization of the information.

Satisfies: SRG-OS-000033-GPOS-00014, SRG-OS-000423-GPOS-00187, SRG-OS-000424-GPOS-00188, SRG-OS-000425-GPOS-00189, SRG-OS-000426-GPOS-00190

Checks

For systems that allow remote access through SSH, run the following command:

/usr/bin/sudo /bin/launchctl print-disabled system | /usr/bin/grep com.openssh.sshd

If the results do not show the following, this is a finding.

"com.openssh.sshd" => false

Fix

To enable the SSH service, run the following command:

/usr/bin/sudo /bin/launchctl enable system/com.openssh.sshd

The system may need to be restarted for the update to take effect.
V-75961 No Change
Findings ID: AOSX-12-000050 Rule ID: SV-90649r1_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 that cannot be disabled.

The "rshd" service must be disabled.

Checks

To check if the "rshd" service is disabled, use the following command:

/usr/bin/sudo /bin/launchctl print-disabled system | /usr/bin/grep com.apple.rshd

If the results do not show the following, this is a finding:

"com.apple.rshd" => true

Fix

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

/usr/bin/sudo /bin/launchctl disable system/com.apple.rshd

The system may need to be restarted for the update to take effect.
V-75963 No Change
Findings ID: AOSX-12-000055 Rule ID: SV-90651r1_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 the Screen Sharing service is disabled, use the following command:

/usr/bin/sudo /bin/launchctl print-disabled system | /usr/bin/grep com.apple.screensharing

If the results do not show the following, this is a finding:

"com.apple.screensharing" => true

Fix

To disable the Screen Sharing service, run the following command:

/usr/bin/sudo /bin/launchctl disable system/com.apple.screensharing

The system may need to be restarted for the update to take effect.
V-75965 No Change
Findings ID: AOSX-12-000065 Rule ID: SV-90653r1_rule Severity: low CCI: CCI-000366

Discussion

The Bluetooth kernel extension must be disabled, as wireless access introduces unnecessary security risks. Disabling Bluetooth support with a configuration profile mitigates this risk.

Checks

If Bluetooth connectivity is required to facilitate use of approved external devices, this is not applicable.

To check if Bluetooth is disabled, run the following command:

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep DisableBluetooth

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

Fix

This setting is enforced using the "Bluetooth Policy" configuration profile.
V-75967 No Change
Findings ID: AOSX-12-000070 Rule ID: SV-90655r1_rule Severity: medium CCI: CCI-001443

Discussion

Use of Wi-Fi to connect to unauthorized networks may facilitate the exfiltration of mission data.

Satisfies: SRG-OS-000300-GPOS-00118, SRG-OS-000480-GPOS-00227

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:

/usr/bin/sudo /usr/sbin/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:

/usr/bin/sudo /usr/sbin/networksetup -setnetworkserviceenabled "Wi-Fi" off
V-75969 No Change
Findings ID: AOSX-12-000075 Rule ID: SV-90657r1_rule Severity: medium CCI: CCI-000366

Discussion

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 device.

Checks

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

/usr/bin/sudo /usr/bin/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:

/usr/bin/sudo /usr/bin/defaults write /Library/Preferences/com.apple.driver.AppleIRController DeviceEnabled -bool FALSE
V-75971 No Change
Findings ID: AOSX-12-000085 Rule ID: SV-90659r1_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

If an approved HBSS DCM/DLP solution is installed, this is not applicable.

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

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/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 the "Custom Policy" configuration profile.
V-75973 No Change
Findings ID: AOSX-12-000090 Rule ID: SV-90661r1_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

If an approved HBSS DCM/DLP solution is installed, this is not applicable.

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

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/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 the "Custom Policy" configuration profile.
V-75975 No Change
Findings ID: AOSX-12-000095 Rule ID: SV-90663r1_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

If an approved HBSS DCM/DLP solution is installed, this is not applicable.

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

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/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 the "Custom Policy" configuration profile.
V-75977 No Change
Findings ID: AOSX-12-000100 Rule ID: SV-90665r1_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

If an approved HBSS DCM/DLP solution is installed, this is not applicable.

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

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/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 the "Custom Policy" configuration profile.
V-75979 No Change
Findings ID: AOSX-12-000105 Rule ID: SV-90667r1_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

If an approved HBSS DCM/DLP solution is installed, this is not applicable.

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

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/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 the "Custom Policy" configuration profile.
V-75981 No Change
Findings ID: AOSX-12-000110 Rule ID: SV-90669r1_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

Verify if a password policy is enforced by a directory service by asking the System Administrator (SA) or Information System Security Officer (ISSO).

If no policy is enforced by a directory service, a password policy can be set with the "pwpolicy" utility. The variable names may vary depending on how the policy was set.

To check if the password policy is configured to disable a temporary account after 72 hours, run the following command to output the password policy to the screen, substituting the correct user name in place of username:

/usr/bin/sudo /usr/bin/pwpolicy -u username getaccountpolicies | tail -n +2

If there is no output, and password policy is not controlled by a directory service, this is a finding.

Otherwise, look for the line "<key>policyCategoryAuthentication</key>".

In the array that follows, there should be a <dict> section that contains a check <string> that allows users to log in if "policyAttributeCurrentTime" is less than the result of adding "policyAttributeCreationTime" to 72 hours (259299 seconds). The check might use a variable defined in its "policyParameters" section.

If the check does not exist or if the check adds too great an amount of time to "policyAttributeCreationTime", this is a finding.

Fix

This setting may be enforced using a configuration profile or by a directory service.

To set the password policy without a configuration profile, run the following command to save a copy of the current policy file, substituting the correct user name in place of "username":

/usr/bin/sudo /usr/bin/pwpolicy -u username getaccountpolicies | tail -n +2 > pwpolicy.plist

Open the resulting password policy file in a text editor.

If other policy settings are present, and the line "<key>policyCategoryAuthentication</key>" already exists, insert the following text after the <array> tag that immediately follows it:

<dict>
<key>policyContent</key>
<string>policyAttributeCurrentTime < policyAttributeCreationTime + 259299</string>
<key>policyIdentifier</key>
<string>Disable Temporary Account</string>
</dict>

At a minimum, edit the file to ensure that it contains the following text:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>policyCategoryAuthentication</key>
<array>
<dict>
<key>policyContent</key>
<string>policyAttributeCurrentTime < policyAttributeCreationTime + 259299</string>
<key>policyIdentifier</key>
<string>Disable Temporary Account</string>
</dict>
</array>
</dict>
</plist>

After saving the file and exiting to the command prompt, run the following command to load the new policy file, substituting the correct user name in place of "username":

/usr/bin/sudo /usr/bin/pwpolicy -u username setaccountpolicies pwpolicy.plist
V-75983 No Change
Findings ID: AOSX-12-000115 Rule ID: SV-90671r1_rule Severity: medium CCI: CCI-001682

Discussion

Emergency administrator accounts are privileged accounts 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 logon 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 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 system, check the expiration settings of a local account using the following command, replacing "username" with the correct value:

/usr/bin/sudo /usr/bin/pwpolicy -u username getaccountpolicies | tail -n +2

If there is output, verify that the account policies do not restrict the ability to log in after a certain date or amount of time.

If they do, this is a finding.

Fix

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

/usr/bin/sudo /usr/bin/pwpolicy -u username clearaccountpolicies

Otherwise, to change the password policy for an emergency account and only remove some policy sections, run the following command to save a copy of the current policy file for the specified username:

/usr/bin/sudo /usr/bin/pwpolicy -u username getaccountpolicies | tail -n +2 > pwpolicy.plist

Open the resulting password policy file in a text editor and remove any policyContent sections that would restrict the ability to log in after a certain date or amount of time.

To remove the section cleanly, remove the entire text that begins with <dict>, contains the like <key>policyContent<'/key>, and ends with </dict>.

After saving the file and exiting to the command prompt, run the following command to load the new policy file:

/usr/bin/sudo /usr/bin/pwpolicy -u username setaccountpolicies pwpolicy.plist
V-75985 No Change
Findings ID: AOSX-12-000120 Rule ID: SV-90673r1_rule Severity: medium CCI: CCI-000018

Discussion

Without generating audit records that are specific to the security and mission needs of the organization, it would be difficult to establish, correlate, and investigate the events relating to an incident or identify those responsible for one. Audit records can be generated from various components within the information system (e.g., module or policy filter).

Satisfies: SRG-OS-000004-GPOS-00004, SRG-OS-000239-GPOS-00089, SRG-OS-000240-GPOS-00090, SRG-OS-000241-GPOS-00091, SRG-OS-000327-GPOS-00127, SRG-OS-000392-GPOS-00172, SRG-OS-000471-GPOS-00215, SRG-OS-000471-GPOS-00216, SRG-OS-000476-GPOS-00221, SRG-OS-000477-GPOS-00222

Checks

To view the currently configured flags for the audit daemon, run the following command:

/usr/bin/sudo /usr/bin/grep ^flags /etc/security/audit_control

Administrative and Privileged access, including administrative use of the command line tools "kextload" and "kextunload" 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 ensure the appropriate flags are enabled for auditing, run the following command:

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

A text editor may also be used to implement the required updates to the "/etc/security/audit_control" file.
V-75987 No Change
Findings ID: AOSX-12-000139 Rule ID: SV-90675r1_rule Severity: medium CCI: CCI-000381

Discussion

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

Checks

If SMB File Sharing is required, this is not applicable.

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

/usr/bin/sudo /bin/launchctl print-disabled system | /usr/bin/grep com.apple.smbd

If the results do not show the following, this is a finding:

"com.apple.smbd" => true

Fix

To disable the SMB File Sharing service, run the following command:

/usr/bin/sudo /bin/launchctl disable system/com.apple.smbd

The system may need to be restarted for the update to take effect.
V-75989 No Change
Findings ID: AOSX-12-000140 Rule ID: SV-90677r1_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

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

/usr/bin/sudo /bin/launchctl print-disabled system | /usr/bin/grep com.apple.AppleFileServer

If the results do not show the following, this is a finding:

"com.apple.AppleFileServer" => true

Fix

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

/usr/bin/sudo /bin/launchctl disable system/com.apple.AppleFileServer

The system may need to be restarted for the update to take effect.
V-75991 No Change
Findings ID: AOSX-12-000141 Rule ID: SV-90679r1_rule Severity: medium CCI: CCI-000381

Discussion

If the system does not require access to NFS file shares or is not acting as an NFS server, 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

If the NFS daemon is required, this is not applicable.

To check if the NFS daemon is disabled, use the following command:

/usr/bin/sudo /bin/launchctl print-disabled system | /usr/bin/grep com.apple.nfsd

If the results do not show the following, this is a finding:

"com.apple.nfsd" => true

Fix

To disable the NFS daemon, run the following command:

/usr/bin/sudo /bin/launchctl disable system/com.apple.nfsd

The system may need to be restarted for the update to take effect.
V-75993 No Change
Findings ID: AOSX-12-000142 Rule ID: SV-90681r1_rule Severity: medium CCI: CCI-000381

Discussion

If the system does not require access to NFS file shares or is not acting as an NFS server, 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

If the NFS lock daemon is required, this is not applicable.

To check if the NFS lock daemon is disabled, use the following command:

/usr/bin/sudo /bin/launchctl print-disabled system | /usr/bin/grep com.apple.lockd

If the results do not show the following, this is a finding:

"com.apple.lockd" => true

Fix

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

/usr/bin/sudo /bin/launchctl disable system/com.apple.lockd

The system may need to be restarted for the update to take effect.
V-75995 No Change
Findings ID: AOSX-12-000143 Rule ID: SV-90683r1_rule Severity: medium CCI: CCI-000381

Discussion

If the system does not require access to NFS file shares or is not acting as an NFS server, 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

If the NFS stat daemon is required, this is not applicable.

To check if the NFS stat daemon is disabled, use the following command:

/usr/bin/sudo /bin/launchctl print-disabled system | /usr/bin/grep com.apple.statd.notify

If the results do not show the following, this is a finding:

"com.apple.statd.notify" => true

Fix

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

/usr/bin/sudo /bin/launchctl disable system/com.apple.statd.notify

The system may need to be restarted for the update to take effect.
V-75997 No Change
Findings ID: AOSX-12-000155 Rule ID: SV-90685r1_rule Severity: medium CCI: CCI-000366

Discussion

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

Checks

Ask the System Administrator (SA) or Information System Security Officer (ISSO) if an approved firewall is loaded on the system. The recommended system is the McAfee HBSS.

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

If a firewall is 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-75999 No Change
Findings ID: AOSX-12-000186 Rule ID: SV-90687r1_rule Severity: medium 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

Verify the operating system displays the Standard Mandatory DoD Notice and Consent Banner before granting access to the operating system.

Check to see if the operating system has the correct text listed in the "/etc/banner" file with the following command:

# more /etc/banner

The command should return the following text:
"You are accessing a U.S. Government (USG) Information System (IS) that is provided for USG-authorized use only.

By using this IS (which includes any device attached to this IS), you consent to the following conditions:

-The USG routinely intercepts and monitors communications on this IS for purposes including, but not limited to, penetration testing, COMSEC monitoring, network operations and defense, personnel misconduct (PM), law enforcement (LE), and counterintelligence (CI) investigations.

-At any time, the USG may inspect and seize data stored on this IS.

-Communications using, or data stored on, this IS are not private, are subject to routine monitoring, interception, and search, and may be disclosed or used for any USG-authorized purpose.

-This IS includes security measures (e.g., authentication and access controls) to protect USG interests--not for your personal benefit or privacy.

-Notwithstanding the above, using this IS does not constitute consent to PM, LE or CI investigative searching or monitoring of the content of privileged communications, or work product, related to personal representation or services by attorneys, psychotherapists, or clergy, and their assistants. Such communications and work product are private and confidential. See User Agreement for details."

If the operating system does not display a graphical logon banner or the banner does not match the Standard Mandatory DoD Notice and Consent Banner, this is a finding.

If the text in the "/etc/banner" file does not match the Standard Mandatory DoD Notice and Consent Banner, this is a finding.

Fix

Create a text file containing the required DoD text.

Name the file "banner" and place it in "/etc/".
V-76001 No Change
Findings ID: AOSX-12-000187 Rule ID: SV-90689r1_rule Severity: medium 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.

Satisfies: SRG-OS-000023-GPOS-00006, SRG-OS-000024-GPOS-00007

Checks

For systems that allow remote access through SSH, run the following command to verify that "/etc/banner" is displayed before granting access:

# /usr/bin/grep Banner /etc/ssh/sshd_config

If the sshd Banner configuration option does not point to "/etc/banner", this is a finding.

Fix

For systems that allow remote access through SSH, modify the "/etc/ssh/sshd_config" file to add or update the following line:

Banner /etc/banner
V-76003 No Change
Findings ID: AOSX-12-000195 Rule ID: SV-90691r1_rule Severity: medium 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.

Satisfies: SRG-OS-000023-GPOS-00006, SRG-OS-000024-GPOS-00007, SRG-OS-000228-GPOS-00088

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:

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

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

The banner text of the document MUST read:

"You are accessing a U.S. Government (USG) Information System (IS) that is provided for USG-authorized use only. By using this IS (which includes any device attached to this IS), you consent to the following conditions:
-The USG routinely intercepts and monitors communications on this IS for purposes including, but not limited to, penetration testing, COMSEC monitoring, network operations and defense, personnel misconduct (PM), law enforcement (LE), and counterintelligence (CI) investigations.
-At any time, the USG may inspect and seize data stored on this IS.
-Communications using, or data stored on, this IS are not private, are subject to routine monitoring, interception, and search, and may be disclosed or used for any USG authorized purpose.
-This IS includes security measures (e.g., authentication and access controls) to protect USG interests--not for your personal benefit or privacy.
-Notwithstanding the above, using this IS does not constitute consent to PM, LE or CI investigative searching or monitoring of the content of privileged communications, or work product, related to personal representation or services by attorneys, psychotherapists, or clergy, and their assistants. Such communications and work product are private and confidential. See User Agreement for details."

If the text is not worded exactly this way, this is a finding.

Fix

Create an RTF file containing the required text. Name the file "PolicyBanner.rtf" or "PolicyBanner.rtfd" and place it in "/Library/Security/".
V-76005 No Change
Findings ID: AOSX-12-000200 Rule ID: SV-90693r1_rule Severity: medium CCI: CCI-000172

Discussion

Without generating audit records that are specific to the security and mission needs of the organization, it would be difficult to establish, correlate, and investigate the events relating to an incident or identify those responsible for one.

Audit records can be generated from various components within the information system (e.g., module or policy filter).

Satisfies: SRG-OS-000470-GPOS-00214, SRG-OS-000472-GPOS-00217, SRG-OS-000473-GPOS-00218, SRG-OS-000475-GPOS-00220

Checks

To view the currently configured flags for the audit daemon, run the following command:

/usr/bin/sudo /usr/bin/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 ensure the appropriate flags are enabled for auditing, run the following command:

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

A text editor may also be used to implement the required updates to the "/etc/security/audit_control" file.
V-76007 No Change
Findings ID: AOSX-12-000230 Rule ID: SV-90695r1_rule Severity: medium CCI: CCI-000130

Discussion

Without establishing what type of events occurred, when they occurred, and by whom it would be difficult to establish, correlate, and investigate the events leading up to an outage or attack.

Audit record content that may be necessary to satisfy this requirement includes, for example, time stamps, source and destination addresses, user/process identifiers, event descriptions, success/fail indications, filenames involved, and access control or flow control rules invoked.

Associating event types with detected events in the operating system audit logs provides a means of investigating an attack, recognizing resource utilization or capacity thresholds, or identifying an improperly configured operating system.

Satisfies: SRG-OS-000037-GPOS-00015, SRG-OS-000038-GPOS-00016, SRG-OS-000039-GPOS-00017, SRG-OS-000040-GPOS-00018, SRG-OS-000041-GPOS-00019, SRG-OS-000042-GPOS-00020, SRG-OS-000042-GPOS-00021, SRG-OS-000055-GPOS-00026, SRG-OS-000254-GPOS-00095, SRG-OS-000255-GPOS-00096, SRG-OS-000255-GPOS-00096, SRG-OS-000299-GPOS-00117, SRG-OS-000303-GPOS-00120, SRG-OS-000358-GPOS-00145, SRG-OS-000359-GPOS-00146

Checks

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

/usr/bin/sudo /bin/launchctl list | /usr/bin/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:

/usr/bin/sudo /bin/launchctl load -w /System/Library/LaunchDaemons/com.apple.auditd.plist
V-76009 No Change
Findings ID: AOSX-12-000240 Rule ID: SV-90697r1_rule Severity: medium CCI: CCI-000154

Discussion

The System Integrity Protection is vital to prevent unauthorized and unintended information transfer via shared system resources, protect audit tools from unauthorized access, modification, and deletion, limit privileges to change software resident within software libraries, limit the ability of non-privileged users to grant other users direct access to the contents of their home directories/folders.

SIP also ensures the presence of an audit record generation capability for DoD-defined auditable events for all operating system components, supports on-demand and after-the-fact reporting requirements, does not alter original content or time ordering of audit records, and does not alter original content or time ordering of audit records.

Satisfies: SRG-OS-000051-GPOS-00024, SRG-OS-000054-GPOS-00025, SRG-OS-000062-GPOS-00031, SRG-OS-000122-GPOS-00063, SRG-OS-000138-GPOS-00069, SRG-OS-000256-GPOS-00097, SRG-OS-000257-GPOS-00098, SRG-OS-000258-GPOS-00099, SRG-OS-000259-GPOS-00100, SRG-OS-000348-GPOS-00136, SRG-OS-000349-GPOS-00137, SRG-OS-000350-GPOS-00138, SRG-OS-000351-GPOS-00139, SRG-OS-000352-GPOS-00140, SRG-OS-000353-GPOS-00141, SRG-OS-000354-GPOS-00142, SRG-OS-000480-GPOS-00228, SRG-OS-000480-GPOS-00230

Checks

System Integrity Protection is a security feature, enabled by default, that protects certain system processes and files from being modified or tampered with. Check the current status of "System Integrity Protection" with the following command:

/usr/bin/csrutil status

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

System Integrity Protection status: enabled

Fix

To reenable "System Integrity Protection", boot the affected system into "Recovery" mode, launch "Terminal" from the "Utilities" menu, and run the following command:

/usr/bin/csrutil enable
V-76011 No Change
Findings ID: AOSX-12-000295 Rule ID: SV-90699r1_rule Severity: medium CCI: CCI-001849

Discussion

The audit service must be configured to require that records are kept for seven 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 seven 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:

/usr/bin/sudo /usr/bin/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":

/usr/bin/sudo /usr/bin/sed -i.bak 's/.*expire-after.*/expire-after:7d/' /etc/security/audit_control; /usr/bin/sudo /usr/sbin/audit -s

A text editor may also be used to implement the required updates to the "/etc/security/audit_control" file.
V-76013 No Change
Findings ID: AOSX-12-000305 Rule ID: SV-90701r1_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 percent, security personnel are notified immediately when the storage volume is 75 percent 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:

/usr/bin/sudo /usr/bin/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" using the following command:

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

A text editor may also be used to implement the required updates to the "/etc/security/audit_control file".
V-76015 No Change
Findings ID: AOSX-12-000310 Rule ID: SV-90703r1_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:

/usr/bin/sudo /usr/bin/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:

/usr/bin/sudo /usr/bin/sed -i.bak 's/logger -p/logger -s -p/' /etc/security/audit_warn; /usr/bin/sudo /usr/sbin/audit -s
V-76017 No Change
Findings ID: AOSX-12-000330 Rule ID: SV-90705r1_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).

Satisfies: SRG-OS-000355-GPOS-00143, SRG-OS-000356-GPOS-00144

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:

/usr/bin/sudo /bin/launchctl list | grep org.ntp.ntpd

If nothing is returned, this is a finding.

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

/usr/bin/sudo /usr/bin/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:

/usr/bin/sudo /bin/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-76019 No Change
Findings ID: AOSX-12-000331 Rule ID: SV-90707r1_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 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:

/usr/bin/sudo ls -le $(/usr/bin/sudo /usr/bin/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 they do not, this is a finding.

Fix

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

/usr/bin/sudo chown root [audit log file]

[audit log file] is the full path to the log file in question.
V-76021 No Change
Findings ID: AOSX-12-000332 Rule ID: SV-90709r1_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 be readable and writable only 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:

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

The results should show the owner (third column) to be "root".

If it does not, this is a finding.

Fix

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

/usr/bin/sudo chown root [audit log folder]
V-76023 No Change
Findings ID: AOSX-12-000333 Rule ID: SV-90711r1_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 users. If log files are set to be readable and writable only 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:

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

The results should show the group owner (fourth column) to be "wheel".

If they do not, this is a finding.

Fix

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

/usr/bin/sudo chgrp wheel [audit log file]

[audit log file] is the full path to the log file in question.
V-76025 No Change
Findings ID: AOSX-12-000334 Rule ID: SV-90713r1_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 be readable and writable only 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:

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

The results should show the group (fourth column) to be "wheel".

If they do not, this is a finding.

Fix

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

/usr/bin/sudo chgrp wheel [audit log folder]
V-76027 No Change
Findings ID: AOSX-12-000335 Rule ID: SV-90715r1_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 be readable and writable only 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:

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

The results should show the permissions (first column) to be "440" or less permissive.

If they do not, this is a finding.

Fix

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

/usr/bin/sudo chmod 440 [audit log file]

[audit log file] is the full path to the log file in question.
V-76029 No Change
Findings ID: AOSX-12-000336 Rule ID: SV-90717r1_rule Severity: medium CCI: CCI-000162

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 users. If log folders are set to be readable and writable only by root or administrative users with sudo, the risk is mitigated.

Satisfies: SRG-OS-000057-GPOS-00027, SRG-OS-000058-GPOS-00028, SRG-OS-000059-GPOS-00029

Checks

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

/usr/bin/sudo ls -lde $(/usr/bin/sudo /usr/bin/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 they do not, this is a finding.

Fix

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

/usr/bin/sudo chmod 700 [audit log folder]
V-76031 No Change
Findings ID: AOSX-12-000337 Rule ID: SV-90719r1_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 users. If log files are set to be readable and writable only by root or administrative users with sudo, the risk is mitigated.

Checks

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

/usr/bin/sudo ls -le $(/usr/bin/sudo /usr/bin/grep '^dir' /etc/security/audit_control | awk -F: '{print $2}') | /usr/bin/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:

/usr/bin/sudo chmod -N [audit log file]
V-76033 No Change
Findings ID: AOSX-12-000338 Rule ID: SV-90721r1_rule Severity: medium CCI: CCI-000162

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 users. If log folders are set to be readable and writable only by root or administrative users with sudo, the risk is mitigated.

Checks

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

/usr/bin/sudo ls -lde $(/usr/bin/sudo /usr/bin/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:

/usr/bin/sudo chmod -N [audit log folder]
V-76035 No Change
Findings ID: AOSX-12-000430 Rule ID: SV-90723r1_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 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:

/usr/bin/sudo /usr/sbin/spctl --status | /usr/bin/grep enabled

If nothing is returned, this is a finding.

Fix

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

/usr/bin/sudo /usr/sbin/spctl --master-enable
V-76037 No Change
Findings ID: AOSX-12-000475 Rule ID: SV-90725r1_rule Severity: low 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 that cannot be disabled.

The application FaceTime establishes connections to Apple's iCloud, despite using security controls to disable iCloud access.

Satisfies: SRG-OS-000095-GPOS-00049, SRG-OS-000370-GPOS-00155

Checks

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

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "familyControlsEnabled = 1;"

If nothing is returned, this is a finding.

To check if FaceTime is disabled, run the following command:

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "displayName = FaceTime;"

If anything is returned, this is a finding.

Built-in applications such as "FaceTime" should be evaluated against mission needs and should only appear in the list of allowed applications if specifically required.

Fix

This setting is enforced using the "Applications Restrictions Policy" configuration profile.
V-76039 No Change
Findings ID: AOSX-12-000490 Rule ID: SV-90727r1_rule Severity: low 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 that cannot be disabled.

The application Messages establishes connections to Apple's iCloud, despite using security controls to disable iCloud access.

Satisfies: SRG-OS-000095-GPOS-00049, SRG-OS-000370-GPOS-00155

Checks

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

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "familyControlsEnabled = 1;"

If nothing is returned, this is a finding.

To check if Messages is disabled, run the following command:

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "allowChat = 0;"

If anything is returned, this is a finding.

Built-in applications such as Messages should be evaluated against mission needs and should only appear in the list of allowed applications if specifically required.

Fix

This setting is enforced using the "Applications Restrictions Policy" configuration profile.
V-76041 No Change
Findings ID: AOSX-12-000505 Rule ID: SV-90729r1_rule Severity: low 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 that cannot be disabled.

The application Calendar establishes connections to Apple's iCloud, despite using security controls to disable iCloud access.

Satisfies: SRG-OS-000095-GPOS-00049, SRG-OS-000370-GPOS-00155

Checks

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

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "familyControlsEnabled = 1;"

If nothing is returned, this is a finding.

To check if iCloudCalendar is disabled, run the following command:

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "allowCloudCalendar = 0;"

If nothing is returned, this is a finding.

Built-in applications such as iCloud Calendar should be evaluated against mission needs and should only appear in the list of allowed applications if specifically required.

Fix

This setting is enforced using the "Applications Restrictions Policy" configuration profile.
V-76043 No Change
Findings ID: AOSX-12-000507 Rule ID: SV-90731r1_rule Severity: low 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 that cannot be disabled.

The application Reminders establishes connections to Apple's iCloud, despite using security controls to disable iCloud access.

Satisfies: SRG-OS-000095-GPOS-00049, SRG-OS-000370-GPOS-00155

Checks

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

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "familyControlsEnabled = 1;"

If nothing is returned, this is a finding.

To check if iCloud Reminders is disabled, run the following command:

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "allowCloudReminders = 0;"

If nothing is returned, this is a finding.

Built-in applications such as iCloud Reminders should be evaluated against mission needs and should only appear in the list of allowed applications if specifically required.

Fix

This setting is enforced using the "Applications Restrictions Policy" configuration profile.
V-76045 No Change
Findings ID: AOSX-12-000510 Rule ID: SV-90733r1_rule Severity: low 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 that cannot be disabled.

The application Contacts establishes connections to Apple's iCloud, despite using security controls to disable iCloud access.

Satisfies: SRG-OS-000095-GPOS-00049, SRG-OS-000370-GPOS-00155

Checks

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

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "familyControlsEnabled = 1;"

If nothing is returned, this is a finding.

To check if iCloud Address Book is disabled, run the following command:

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "allowCloudAddressBook = 0;"

If nothing is returned, this is a finding.

Built-in applications such as iCloud Address Book should be evaluated against mission needs and should only appear in the list of allowed applications if specifically required.

Fix

This setting is enforced using the "Applications Restrictions Policy" configuration profile.
V-76047 No Change
Findings ID: AOSX-12-000515 Rule ID: SV-90735r1_rule Severity: low 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 that cannot be disabled.

The application Mail establishes connections to Apple's iCloud, despite using security controls to disable iCloud access.

Satisfies: SRG-OS-000095-GPOS-00049, SRG-OS-000370-GPOS-00155

Checks

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

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "familyControlsEnabled = 1;"

If nothing is returned, this is a finding.

To check if Mail iCloud is disabled, run the following command:

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "allowCloudMail = 0;"

If nothing is returned, this is a finding.

Built-in applications such as the Mail iCloud should be evaluated against mission needs and should only appear in the list of allowed applications if specifically required.

Fix

This setting is enforced using the "Applications Restrictions Policy" configuration profile.
V-76049 No Change
Findings ID: AOSX-12-000517 Rule ID: SV-90737r1_rule Severity: low 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 that cannot be disabled.

The application Notes establishes connections to Apple's iCloud, despite using security controls to disable iCloud access.

Satisfies: SRG-OS-000095-GPOS-00049, SRG-OS-000370-GPOS-00155

Checks

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

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "familyControlsEnabled = 1;"

If nothing is returned, this is a finding.

To check if iCloud Notes is disabled, run the following command:

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "allowCloudNotes = 0;"

If nothing is returned, this is a finding.

Built-in applications such as iCloud Notes should be evaluated against mission needs and should only appear in the list of allowed applications if specifically required.

Fix

This setting is enforced using the "Applications Restrictions Policy" configuration profile.
V-76051 No Change
Findings ID: AOSX-12-000518 Rule ID: SV-90739r1_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 that cannot be disabled.

The system preference panel's iCloud and Internet Accounts must be disabled.

Satisfies: SRG-OS-000095-GPOS-00049, SRG-OS-000370-GPOS-00155

Checks

To check if the system has been configured to disable the camera, run the following command:

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "allowCamera = 0;"

If there is no result, this is a finding.

Fix

This setting is enforced using the "Applications Restrictions Policy" configuration profile.
V-76053 No Change
Findings ID: AOSX-12-000520 Rule ID: SV-90741r1_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 that cannot be disabled.

The system preference panel's iCloud and Internet Accounts must be disabled.

Satisfies: SRG-OS-000095-GPOS-00049, SRG-OS-000370-GPOS-00155

Checks

To check if the system has the correct setting in the configuration profile to disable access to the iCloud preference pane, run the following command:

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep -A 5 'DisabledPreferencePanes'

If nothing is returned, this is a finding.

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

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep com.apple.preferences.icloud

If nothing is returned, this is a finding.

Fix

This setting is enforced using the "Restrictions Policy" configuration profile.
V-76055 No Change
Findings ID: AOSX-12-000521 Rule ID: SV-90743r1_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 that cannot be disabled.

The system preference panel's iCloud and Internet Accounts must be disabled.

Satisfies: SRG-OS-000095-GPOS-00049, SRG-OS-000370-GPOS-00155

Checks

To check if "Internet Accounts" has been disabled, run the following command:

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep com.apple.preferences.internetaccounts

If nothing is returned, this is a finding.

Fix

This setting is enforced using the "Restrictions Policy" configuration profile.
V-76057 No Change
Findings ID: AOSX-12-000522 Rule ID: SV-90745r1_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 that cannot be disabled.

The system preference panel's iCloud and Internet Accounts must be disabled.

Satisfies: SRG-OS-000095-GPOS-00049, SRG-OS-000370-GPOS-00155

Checks

To check if "Siri" has been disabled, run the following command:

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep com.apple.preference.speech

If nothing is returned, this is a finding.

Fix

This setting is enforced using the "Restrictions Policy" configuration profile.
V-76059 No Change
Findings ID: AOSX-12-000523 Rule ID: SV-90747r1_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 that cannot be disabled.

The system preference panel's iCloud and Internet Accounts must be disabled.

Satisfies: SRG-OS-000095-GPOS-00049, SRG-OS-000370-GPOS-00155

Checks

To check if Siri and dictation has been disabled, run the following command:

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "IronwoodAllowed = 0;"

If nothing is returned, this is a finding.

Fix

This setting is enforced using the "Restrictions Policy" configuration profile.
V-76061 No Change
Findings ID: AOSX-12-000530 Rule ID: SV-90749r1_rule Severity: medium CCI: CCI-000382

Discussion

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 and usage data to Apple must be disabled.

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

/usr/bin/sudo /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep AutoSubmit

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

Alternately, the setting is found in System Preferences >> Security & Privacy >> Privacy >> Diagnostics & Usage.

If the box that says "Send diagnostic & usage data to Apple" is checked, this is a finding.

Fix

This setting is enforced using the "Security and Privacy Policy" configuration profile.

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

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

To apply the setting from the command line, run the following commands:

/usr/bin/defaults read "/Library/Application Support/CrashReporter/DiagnosticMessagesHistory.plist" AutoSubmit
/usr/bin/sudo /usr/bin/defaults write "/Library/Application Support/CrashReporter/DiagnosticMessagesHistory.plist" AutoSubmit -bool false
/usr/bin/sudo /bin/chmod 644 /Library/Application\ Support/CrashReporter/DiagnosticMessagesHistory.plist
/usr/bin/sudo /usr/bin/chgrp admin /Library/Application\ Support/CrashReporter/DiagnosticMessagesHistory.plist
V-76063 No Change
Findings ID: AOSX-12-000531 Rule ID: SV-90751r1_rule Severity: medium CCI: CCI-000381

Discussion

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.

Satisfies: SRG-OS-000095-GPOS-00049, SRG-OS-000370-GPOS-00155

Checks

To check if Find My Mac is disabled, use the following command:

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "allowCloudFMM = 0;"

If nothing is returned, this is a finding.

Fix

This setting is enforced using the "Restrictions Policy" configuration profile.
V-76065 No Change
Findings ID: AOSX-12-000535 Rule ID: SV-90753r1_rule Severity: medium CCI: CCI-000381

Discussion

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. To check if a configuration profile is configured to enforce this setting, run the following command:

/usr/bin/sudo /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep DisableLocationServices

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

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

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

To check if the setting was applied on the command line, run the following command:

/usr/bin/sudo /usr/bin/defaults read /private/var/db/locationd/Library/Preferences/ByHost/com.apple.locationd.`/usr/sbin/system_profiler SPHardwareDataType | /usr/bin/grep "Hardware UUID" | /usr/bin/cut -c22-57` LocationServicesEnabled

If the output is "1" this is a finding.

Fix

This setting is enforced using the "Custom Policy" configuration profile.

The setting "Enable Location Services" can be found in System Preferences >> Security & Privacy >> Privacy >> Location Services. Uncheck the box that says "Enable Location Services".

It can also be set with the following command:

/usr/bin/sudo /usr/bin/defaults write /private/var/db/locationd/Library/Preferences/ByHost/com.apple.locationd.`/usr/sbin/system_profiler SPHardwareDataType | /usr/bin/grep "Hardware UUID" | /usr/bin/cut -c22-57` LocationServicesEnabled -bool false
V-76067 No Change
Findings ID: AOSX-12-000545 Rule ID: SV-90755r1_rule Severity: medium CCI: CCI-000381

Discussion

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

To check if Bonjour multicast advertising has been disabled, run the following command:

/usr/bin/sudo /usr/bin/defaults read /Library/Preferences/com.apple.mDNSResponder | /usr/bin/grep NoMulticastAdvertisements

If an error is returned, nothing is returned, or "NoMulticastAdvertisements" is not set to "1", this is a finding.

Fix

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

/usr/bin/sudo /usr/bin/defaults write /Library/Preferences/com.apple.mDNSResponder.plist NoMulticastAdvertisements -bool true

The system will need to be restarted for the update to take effect.
V-76069 No Change
Findings ID: AOSX-12-000550 Rule ID: SV-90757r1_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 that cannot be disabled.

The system must not have the UUCP service active.

Checks

To check if the UUCP service is disabled, use the following command:

/usr/bin/sudo /bin/launchctl print-disabled system | /usr/bin/grep com.apple.uucp

If the results do not show the following, this is a finding:

"com.apple.uucp" => true

Fix

To disable the UUCP service, run the following command:

/usr/bin/sudo /bin/launchctl disable system/com.apple.uucp

The system may need to be restarted for the update to take effect.
V-76071 No Change
Findings ID: AOSX-12-000565 Rule ID: SV-90759r2_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:

/usr/bin/sudo /usr/bin/grep ^PermitRootLogin /etc/ssh/sshd_config

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

Fix

To ensure that "PermitRootLogin" is disabled by sshd, run the following command:

/usr/bin/sudo /usr/bin/sed -i.bak ‘' 's/^[\#]*PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
V-76073 No Change
Findings ID: AOSX-12-000570 Rule ID: SV-90761r1_rule Severity: medium CCI: CCI-001941

Discussion

Use of weak or untested encryption algorithms undermines the purposes of using encryption to protect data. The operating system must implement cryptographic modules adhering to the higher standards approved by the federal government since this provides assurance they have been tested and validated.

Satisfies: SRG-OS-000112-GPOS-00057, SRG-OS-000113-GPOS-00058, SRG-OS-000396-GPOS-00176

Checks

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

/usr/bin/sudo /usr/bin/grep ^Protocol /etc/ssh/sshd_config

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

Fix

To ensure that "Protocol 2" is used by sshd, run the following command:

/usr/bin/sudo /usr/bin/sed -i.bak 's/.*Protocol.*/Protocol 2/' /etc/ssh/sshd_config
V-76075 No Change
Findings ID: AOSX-12-000585 Rule ID: SV-90763r1_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 determines 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

Password policy can be set with a configuration profile or the "pwpolicy" utility. If password policy is set with a configuration profile, run the following command to check if the system is configured to require that passwords contain at least one numeric character:

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep requireAlphanumeric

If "requireAlphanumeric" is not set to "1" or is undefined, this is a finding.

If password policy is set with the "pwpolicy utility", run the following command instead:

/usr/bin/sudo /usr/bin/pwpolicy getaccountpolicies

Look for the line "<key>policyCategoryPasswordContent</key>".

If it does not exist, and password policy is not controlled by a directory service, this is a finding.

Otherwise, in the array section that follows it, there should be a <dict> section that contains a check <string> that "matches" the variable "policyAttributePassword" to the regular expression "(.*[0-9].*){1,}+" or to a similar expression that will ensure the password contains a character in the range 0-9 one or more times.

If this check allows users to create passwords without at least one numeric character, or if no such check exists, this is a finding.

Fix

This setting may be enforced using the "Passcode Policy" configuration profile or by a directory service.

To set the password policy without a configuration profile, run the following command to save a copy of the current "pwpolicy" account policy file:

/usr/bin/sudo /usr/bin/pwpolicy getaccountpolicies | tail -n +2 > pwpolicy.plist

Open the generated file in a text editor.

If the file does not yet contain any policy settings, replace <dict/> with <dict></dict>; then insert the following text after the opening <dict> tag and before the closing </dict> tag.

The same text can also be used if the line "<key>policyCategoryPasswordContent</key>" is not present.

<key>policyCategoryPasswordContent</key>
<array>
<dict>
<key>policyContent</key>
<string>policyAttributePassword matches '(.*[0-9].*){1,}+'</string>
<key>policyIdentifier</key>
<string>com.apple.policy.legacy.requiresNumeric</string>
<key>policyParameters</key>
<dict>
<key>minimumNumericCharacters</key>
<integer>1</integer>
</dict>
</dict>
</array>

If the file does contain policy settings, and the line "<key>policyCategoryPasswordContent</key>" does exist, insert the following text after the opening <array> tag that comes right after it:

<dict>
<key>policyContent</key>
<string>policyAttributePassword matches '(.*[0-9].*){1,}+'</string>
<key>policyIdentifier</key>
<string>com.apple.policy.legacy.requiresNumeric</string>
<key>policyParameters</key>
<dict>
<key>minimumNumericCharacters</key>
<integer>1</integer>
</dict>
</dict>

After saving the file and exiting to the command prompt, run the following command to load the new policy file:

/usr/bin/sudo /usr/bin/pwpolicy setaccountpolicies pwpolicy.plist

Note: Updates to password restrictions must be thoroughly evaluated in a test environment. Mistakes in configuration may block password change and local user creation operations, as well as lock out all local users, including administrators.
V-76077 No Change
Findings ID: AOSX-12-000587 Rule ID: SV-90765r1_rule Severity: medium CCI: CCI-001619

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 in determining 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. Special characters are those characters that are not alphanumeric. Examples include: ~ ! @ # $ % ^ *.

Checks

Password policy can be set with a configuration profile or the "pwpolicy" utility. If password policy is set with a configuration profile, run the following command to check if the system is configured to require that passwords contain at least one special character:

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep minComplexChars

If "minComplexChars" is not set to "1" or is undefined, this is a finding.

Run the following command to check if the system is configured to require that passwords not contain repeated sequential characters or characters in increasing and decreasing sequential order:

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep allowSimple

If "allowSimple" is not set to "0" or is undefined, this is a finding.

Fix

This setting may be enforced using the "Passcode Policy" configuration profile or by a directory service.
V-76079 No Change
Findings ID: AOSX-12-000590 Rule ID: SV-90767r1_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 passwords and accounts, use the following command:

/usr/bin/sudo /usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep minLength

The parameter minLength should be "15".

If it is less than "15", this is a finding.

Fix

This setting is enforced using the "Passcode Policy" configuration profile.

Note: Updates to password restrictions must be thoroughly evaluated in a test environment. Mistakes in configuration may block password change and local user creation operations, as well as lock out all local users, including administrators.
V-76081 No Change
Findings ID: AOSX-12-000605 Rule ID: SV-90769r1_rule Severity: high CCI: CCI-000197

Discussion

The "telnet" service must be disabled as it sends all data in a clear-text form that can be easily intercepted and read. The data needs to be protected at all times during transmission, and encryption is the standard method for protecting data in transit.

If the data is not encrypted during transmission, it 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, non-local maintenance sessions, and diagnostic communications that uses encryption, such as SSH.

Satisfies: SRG-OS-000074-GPOS-00042, SRG-OS-000125-GPOS-00065, SRG-OS-000250-GPOS-00093, SRG-OS-000393-GPOS-00173, SRG-OS-000394-GPOS-00174

Checks

To check if the "telnet" service is disabled, use the following command:

/usr/bin/sudo /bin/launchctl print-disabled system | /usr/bin/grep com.apple.telnetd

If the results do not show the following, this is a finding:

"com.apple.telnetd" => true

Fix

To disable the "telnet" service, run the following command:

/usr/bin/sudo /bin/launchctl disable system/com.apple.telnetd

The system may need to be restarted for the update to take effect.
V-76083 No Change
Findings ID: AOSX-12-000606 Rule ID: SV-90771r1_rule Severity: high CCI: CCI-000197

Discussion

The "ftp" service must be disabled as it sends all data in a clear-text form that can be easily intercepted and read. The data needs to be protected at all times during transmission, and encryption is the standard method for protecting data in transit.

If the data is not encrypted during transmission, it can be plainly read (i.e., clear text) and easily compromised. Disabling ftp is one way to mitigate this risk. Administrators should be instructed to use an alternate service for data transmission that uses encryption, such as SFTP.

Checks

To check if the "ftp" service is disabled, use the following command:

/usr/bin/sudo /bin/launchctl print-disabled system | /usr/bin/grep com.apple.ftpd

If the results do not show the following, this is a finding:

"com.apple.ftpd" => true

Fix

To disable the "ftp" service, run the following command:

/usr/bin/sudo /bin/launchctl disable system/com.apple.ftpd

The system may need to be restarted for the update to take effect.
V-76085 Updated
Findings ID: AOSX-12-000710 Rule ID: SV-90773r21_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 the OS X to verify that the application has not been modified by a malicious third party.

Checks

To verify only applications downloaded from the App Store are allowed to run, type the following command:

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep EnableAssessment

If "EnableAssessment" is not set to "1", this is a finding.

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep AllowIdentifiedDevelopers

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

Fix

This setting is enforced using the "Security and Privacy Policy" configuration profile.
V-76087 No Change
Findings ID: AOSX-12-000711 Rule ID: SV-90775r1_rule Severity: medium CCI: CCI-000366

Discussion

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

Checks

To verify the user cannot override Gatekeeper settings, type the following code:

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep DisableOverride

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

Fix

This setting is enforced using the "Security and Privacy Policy" configuration profile.
V-76089 No Change
Findings ID: AOSX-12-000720 Rule ID: SV-90777r1_rule Severity: medium CCI: CCI-001133

Discussion

SSH should be configured to log users out after a 15-minute interval of inactivity and to wait only 30 seconds before timing out logon 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 logon 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:

/usr/bin/sudo /usr/bin/grep ^ClientAliveInterval /etc/ssh/sshd_config

If the setting is not "900" or less, this is a finding.

Fix

To ensure that "ClientAliveInterval" is set correctly, run the following command:

/usr/bin/sudo /usr/bin/sed -i.bak 's/.*ClientAliveInterval.*/ClientAliveInterval 900/' /etc/ssh/sshd_config
V-76091 No Change
Findings ID: AOSX-12-000721 Rule ID: SV-90779r1_rule Severity: medium CCI: CCI-001133

Discussion

SSH should be configured to log users out after a 15-minute interval of inactivity and to wait only 30 seconds before timing out logon 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 logon attempt will also free up resources committed by the managed network element.

Checks

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

/usr/bin/sudo /usr/bin/grep ^ClientAliveCountMax /etc/ssh/sshd_config

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

Fix

To ensure that the SSH idle timeout occurs precisely when the "ClientAliveCountMax" is set, run the following command:

/usr/bin/sudo /usr/bin/sed -i.bak 's/.*ClientAliveCountMax.*/ClientAliveCountMax 0/' /etc/ssh/sshd_config
V-76093 No Change
Findings ID: AOSX-12-000722 Rule ID: SV-90781r1_rule Severity: medium CCI: CCI-001133

Discussion

SSH should be configured to log users out after a 15-minute interval of inactivity and to wait only 30 seconds before timing out logon 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 logon 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 log on through SSH, run the following command:

/usr/bin/sudo /usr/bin/grep ^LoginGraceTime /etc/ssh/sshd_config

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

Fix

To ensure that "LoginGraceTime" is configured correctly, run the following command:

/usr/bin/sudo /usr/bin/sed -i.bak 's/.*LoginGraceTime.*/LoginGraceTime 30/' /etc/ssh/sshd_config
V-76095 No Change
Findings ID: AOSX-12-000750 Rule ID: SV-90783r1_rule Severity: medium CCI: CCI-000185

Discussion

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

For user certificates, each organization obtains 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.

Satisfies: SRG-OS-000066-GPOS-00034, SRG-OS-000478-GPOS-00223

Checks

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

/usr/bin/sudo /usr/bin/security dump-keychain | /usr/bin/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-76097 No Change
Findings ID: AOSX-12-000780 Rule ID: SV-90785r1_rule Severity: medium CCI: CCI-001199

Discussion

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 lost or stolen, and the contents of their data storage (e.g., hard drives and non-volatile memory) can be read, copied, or altered. By encrypting the system hard drive, the confidentiality and integrity of any data stored on the system is ensured. FileVault Disk Encryption mitigates this risk.

Satisfies: SRG-OS-000185-GPOS-00079, SRG-OS-000404-GPOS-00183, SRG-OS-000405-GPOS-00184

Checks

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

/usr/bin/sudo /usr/bin/fdesetup status

If "FileVault" is "Off" and the device is a mobile device or the organization has determined that the drive must encrypt data at rest, this is a finding.

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":

/usr/bin/sudo /usr/bin/fdesetup enable

After "FileVault" is initially set up, additional users can be added.
V-76099 No Change
Findings ID: AOSX-12-000835 Rule ID: SV-90787r1_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 System Administrator (SA) or Information System Security Officer (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-76101 No Change
Findings ID: AOSX-12-000850 Rule ID: SV-90789r1_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 if an approved data-loss prevention (DLP) solution is not installed.

Checks

If an approved HBSS DCM/DLP solution is installed, this is not applicable.

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

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep -A 3 harddisk-external

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

Fix

This setting is enforced using the "Restrictions Policy" configuration profile.
V-76103 No Change
Findings ID: AOSX-12-000862 Rule ID: SV-90791r1_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 if the "usbmuxd" daemon is disabled, use the following command:

/usr/bin/sudo /bin/launchctl print-disabled system | /usr/bin/grep com.apple.usbmuxd

If the results do not show the following, this is a finding:

"com.apple.usbmuxd" => true

Fix

To disable the "usbmuxd" daemon, run the following command:

/usr/bin/sudo /bin/launchctl disable system/com.apple.usbmuxd

The system may need to be restarted for the update to take effect.
V-76105 No Change
Findings ID: AOSX-12-000925 Rule ID: SV-90793r1_rule Severity: medium CCI: CCI-000366

Discussion

When automatic logons are enabled, the default user account is automatically logged on 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 to log on. Disabling automatic logons mitigates this risk.

Checks

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

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep DisableAutoLoginClient

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

Fix

This setting is enforced using the "Login Window Policy" configuration profile.
V-76107 No Change
Findings ID: AOSX-12-000930 Rule ID: SV-90795r1_rule Severity: medium CCI: CCI-000366

Discussion

The logon 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 logon 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 logon window is configured to prompt for user name and password, run the following command:

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep SHOWFULLNAME

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

Fix

This setting is enforced using the "Login Window Policy" configuration profile.
V-76109 No Change
Findings ID: AOSX-12-000950 Rule ID: SV-90797r1_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 | /usr/bin/grep on

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

Fix

To enable the firewall logging, run the following command:

/usr/bin/sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setloggingmode on
V-76111 No Change
Findings ID: AOSX-12-000955 Rule ID: SV-90799r1_rule Severity: medium CCI: CCI-000366

Discussion

A session 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 want to log out because of the temporary nature of the absence.

The session lock is implemented at the point where session activity can be determined.

Regardless of where the session lock is determined and implemented, once invoked, the session lock must remain in place until the user reauthenticates. No other activity aside from reauthentication must unlock the system.

Checks

To check if the Bluetooth Remote Wake setting is disabled, run the following two commands as the primary user:

/usr/bin/defaults -currentHost read com.apple.Bluetooth RemoteWakeEnabled

/usr/bin/defaults read /Users/`whoami`/Library/Preferences/ByHost/com.apple.Bluetooth.`/usr/sbin/system_profiler SPHardwareDataType | grep "Hardware UUID" | cut -c22-57`.plist RemoteWakeEnabled

If there is an error or nothing is returned, or the return value is "1" for either command, this is a finding.

Fix

Manually change this control on the computer by opening System Preferences >> Bluetooth.

Click "Advanced" and ensure the "Allow Bluetooth devices to wake this computer" is not checked. This control is not necessary if Bluetooth has been completely disabled.

The following can be run from the command line to disable "Remote Wake" for the current user:

/usr/bin/defaults write /Users/`whoami`/Library/Preferences/ByHost/com.apple.Bluetooth.`/usr/sbin/system_profiler SPHardwareDataType | /usr/bin/grep "Hardware UUID" | /usr/bin/cut -c22-57`.plist RemoteWakeEnabled 0
V-76113 No Change
Findings ID: AOSX-12-000965 Rule ID: SV-90801r1_rule Severity: medium CCI: CCI-000366

Discussion

Bluetooth sharing allows users to wirelessly transmit files between the OS X and Bluetooth-enabled devices, including personally owned cellphones 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 System Preferences >> Sharing and verify that "Bluetooth Sharing" is not checked "ON".

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

The following command can be run from the command line:

/usr/bin/defaults read /Users/`whoami`/Library/Preferences/ByHost/com.apple.Bluetooth.`/usr/sbin/system_profiler SPHardwareDataType | grep "Hardware UUID" | cut -c22-57`.plist PrefKeyServicesEnabled

If there is an error or nothing is returned, or the return value is "1", this is a finding.

Fix

To disable Bluetooth Sharing, open System Preferences >> Sharing and uncheck the box next to "Bluetooth Sharing". This control is not necessary if Bluetooth has been completely disabled.

The following can be run from the command line to disable "Bluetooth Sharing" for the current user:

/usr/bin/defaults write /Users/`whoami`/Library/Preferences/ByHost/com.apple.Bluetooth.`/usr/sbin/system_profiler SPHardwareDataType | /usr/bin/grep "Hardware UUID" | /usr/bin/cut -c22-57`.plist PrefKeyServicesEnabled 0
V-76115 No Change
Findings ID: AOSX-12-000975 Rule ID: SV-90803r1_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 that cannot be disabled.

Remote Apple Events must be disabled.

Checks

To check if Remote Apple Events is disabled, use the following command:

/usr/bin/sudo /bin/launchctl print-disabled system | /usr/bin/grep com.apple.AEServer

If the results do not show the following, this is a finding.

"com.apple.AEServer" => true

Fix

To disable Remote Apple Events, run the following command:

/usr/bin/sudo /bin/launchctl disable system/com.apple.AEServer

The system may need to be restarted for the update to take effect.
V-76117 No Change
Findings ID: AOSX-12-000995 Rule ID: SV-90805r1_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 logon session, as this prevents a malicious user from taking advantage of an unlocked computer or an abandoned logon session to bypass the normal password prompt requirement.

Without the "tty_tickets" option, all open local and remote logon 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 "/usr/bin/sudo", run the following command:

/usr/bin/sudo /usr/bin/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-76119 No Change
Findings ID: AOSX-12-001080 Rule ID: SV-90807r1_rule Severity: medium CCI: CCI-000366

Discussion

The Application Firewall is the built-in firewall that comes with 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, this is not applicable.

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

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

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

Fix

To enable the firewall, run the following command:

/usr/bin/sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate on
V-76121 No Change
Findings ID: AOSX-12-001110 Rule ID: SV-90809r1_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:

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

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

Fix

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

/usr/bin/sudo find / -type d -perm +o+w -not -uid 0 -exec chown root {} \;
V-76123 No Change
Findings ID: AOSX-12-001115 Rule ID: SV-90811r1_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 is disabled, use the following command:

/usr/bin/sudo /bin/launchctl print-disabled system | /usr/bin/grep com.apple.fingerd

If the results do not show the following, this is a finding:

"com.apple.fingerd" => true

Fix

To disable the "finger" service, run the following command:

/usr/bin/sudo /bin/launchctl disable system/com.apple.fingerd

The system may need to be restarted for the update to take effect.
V-76125 No Change
Findings ID: AOSX-12-001120 Rule ID: SV-90813r1_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 do not have the "sticky bit" set:

/usr/bin/sudo /usr/bin/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:

/usr/bin/sudo /usr/bin/find / -type d \( -perm -0002 -a ! -perm -1000 \) -exec chmod +t {} \;
V-76127 No Change
Findings ID: AOSX-12-001125 Rule ID: SV-90815r1_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 logon.

Checks

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

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

If there is no result, if it prints out that the domain "does not exist", or the results do not include "DidSeeCloudSetup = 1 AND LastSeenCloudProductVersion = 10.12", this is a finding.

Fix

This setting is enforced using the "Disable iCloud Policy" configuration profile.
V-76129 No Change
Findings ID: AOSX-12-001130 Rule ID: SV-90817r1_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:

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

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

Fix

This must be resolved manually.

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

Choose "Sign Out".
V-76131 No Change
Findings ID: AOSX-12-001140 Rule ID: SV-90819r1_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 iTunes Music Sharing is disabled, run the following command:

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep disableSharedMusic

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

Fix

This setting is enforced using the "Custom Policy" configuration profile.
V-76133 No Change
Findings ID: AOSX-12-001145 Rule ID: SV-90821r1_rule Severity: medium CCI: CCI-000366

Discussion

Very few of the executables that come preinstalled on the 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":

/usr/bin/sudo find / -perm -4000 -exec /bin/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-76135 No Change
Findings ID: AOSX-12-001200 Rule ID: SV-90823r1_rule Severity: medium CCI: CCI-000366

Discussion

ICMP redirects are broadcast 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", creating the file if necessary:

net.inet.icmp.drop_redirect=1
V-76137 No Change
Findings ID: AOSX-12-001205 Rule ID: SV-90825r1_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", creating the file if necessary:

net.inet.ip.forwarding=0
V-76139 No Change
Findings ID: AOSX-12-001206 Rule ID: SV-90827r1_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", creating the file if necessary:

net.inet6.ip6.forwarding=0
V-76141 No Change
Findings ID: AOSX-12-001210 Rule ID: SV-90829r1_rule Severity: medium CCI: CCI-000366

Discussion

ICMP redirects are broadcast 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", creating the file if necessary:

net.inet.ip.redirect=0
V-76143 No Change
Findings ID: AOSX-12-001211 Rule ID: SV-90831r1_rule Severity: medium CCI: CCI-000366

Discussion

ICMP redirects are broadcast 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", creating the file if necessary:

net.inet6.ip6.redirect=0
V-76145 No Change
Findings ID: AOSX-12-001215 Rule ID: SV-90833r1_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", creating the file if necessary:

net.inet.ip.sourceroute=0
V-76147 No Change
Findings ID: AOSX-12-001220 Rule ID: SV-90835r1_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", creating the file if necessary:

net.inet.icmp.timestamp=0
V-76149 No Change
Findings ID: AOSX-12-001235 Rule ID: SV-90837r1_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:

/usr/bin/sudo /usr/sbin/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>'":

/usr/bin/sudo /usr/sbin/networksetup -setnetworkserviceenabled '<networkservice>' off
V-76151 No Change
Findings ID: AOSX-12-001270 Rule ID: SV-90839r1_rule Severity: medium CCI: CCI-000381

Discussion

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

To check if Internet Sharing is disabled, use the following command:

/usr/bin/sudo /bin/launchctl print-disabled system | /usr/bin/grep com.apple.NetworkSharing

If the results do not show the following, this is a finding:

"com.apple.NetworkSharing" => true

Fix

To disable Internet Sharing, run the following command:

/usr/bin/sudo /bin/launchctl disable system/com.apple.NetworkSharing

The system may need to be restarted for the update to take effect.
V-76153 No Change
Findings ID: AOSX-12-001275 Rule ID: SV-90841r1_rule Severity: medium CCI: CCI-000381

Discussion

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.

Web Sharing is non-essential and must be disabled.

Checks

To check if Web Sharing is disabled, use the following command:

/usr/bin/sudo /bin/launchctl print-disabled system | /usr/bin/grep org.apache.httpd

If the results do not show the following, this is a finding:

"org.apache.httpd" => true

Fix

To disable Web Sharing, run the following command:

/usr/bin/sudo /bin/launchctl disable system/org.apache.httpd

The system may need to be restarted for the update to take effect.
V-76155 No Change
Findings ID: AOSX-12-001324 Rule ID: SV-90843r1_rule Severity: medium CCI: CCI-002238

Discussion

Setting a lockout time period of 15 minutes is an effective deterrent against brute forcing that also makes allowances for legitimate mistakes by users. When three invalid logon attempts are made, the account will be locked.

Checks

Password policy can be set with a configuration profile or the "pwpolicy" utility. If password policy is set with a configuration profile, run the following command to check if the system has the correct setting for the logon reset timer:

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep 'minutesUntilFailedLoginReset'

If "minutesUntilFailedLoginReset" is not set to "15", this is a finding.

If password policy is set with the "pwpolicy" utility, the variable names may vary depending on how the policy was set. To check if the password policy is configured to disable an account for 15 minutes after 3 unsuccessful logon attempts, run the following command to output the password policy to the screen:

/usr/bin/sudo /usr/bin/pwpolicy getaccountpolicies

Look for the line "<key>policyCategoryAuthentication</key>".

If this does not exist, and password policy is not controlled by a directory service, this is a finding.

In the array that follows, there should one or more <dict> sections that describe policy checks. One should contain a <string> that allows users to log on if "policyAttributeFailedAuthentications" is less than "policyAttributeMaximumFailedAuthentications". Under policyParameters, "policyAttributeMaximumFailedAuthentications" should be set to "3".

If "policyAttributeMaximumFailedAuthentications" is not set to "3", this is a finding.

In the same check or in another <dict> section, there should be a <string> that allows users to log on if the "policyAttributeCurrentTime" is greater than the result of adding "15" minutes (900 seconds) to "policyAttributeLastFailedAuthenticationTime". The check might use a variable defined in its "policyParameters" section.

If the check does not exist or if the check adds too great an amount of time, this is a finding.

Fix

This setting may be enforced using the "Passcode Policy" configuration profile or by a directory service.

The following two lines within the configuration enforce lockout expiration to "15" minutes:

<key>autoEnableInSeconds</key>
<integer>900</integer>

To set the password policy without a configuration profile, run the following command to save a copy of the current "pwpolicy" account policy file:

/usr/bin/sudo /usr/bin/pwpolicy getaccountpolicies | tail -n +2 > pwpolicy.plist

Open the generated file in a text editor and ensure it contains the following text after the opening <dict> tag and before the closing </dict> tag.

Replace <dict/> first with <dict></dict> if necessary.

<key>policyCategoryAuthentication</key>
<array>
<dict>
<key>policyContent</key>
<string>(policyAttributeFailedAuthentications < policyAttributeMaximumFailedAuthentications) OR (policyAttributeCurrentTime > (policyAttributeLastFailedAuthenticationTime + autoEnableInSeconds))</string>
<key>policyIdentifier</key>
<string>Authentication Lockout</string>
<key>policyParameters</key>
<dict>
<key>autoEnableInSeconds</key>
<integer>900</integer>
<key>policyAttributeMaximumFailedAuthentications</key>
<integer>3</integer>
</dict>
</dict>
</array>

If the line "<key>policyCategoryAuthentication</key>" already exists, the following text should be used instead and inserted after the first <array> tag that follows it:

<dict>
<key>policyContent</key>
<string>(policyAttributeFailedAuthentications < policyAttributeMaximumFailedAuthentications) OR (policyAttributeCurrentTime > (policyAttributeLastFailedAuthenticationTime + autoEnableInSeconds))</string>
<key>policyIdentifier</key>
<string>Authentication Lockout</string>
<key>policyParameters</key>
<dict>
<key>autoEnableInSeconds</key>
<integer>900</integer>
<key>policyAttributeMaximumFailedAuthentications</key>
<integer>3</integer>
</dict>
</dict>

After saving the file and exiting to the command prompt, run the following command to load the new policy file:

/usr/bin/sudo /usr/bin/pwpolicy setaccountpolicies pwpolicy.plist

Note: Updates to password restrictions must be thoroughly evaluated in a test environment. Mistakes in configuration may block password change and local user creation operations, as well as lock out all local users, including administrators.
V-76157 No Change
Findings ID: AOSX-12-001325 Rule ID: SV-90845r1_rule Severity: medium CCI: CCI-000044

Discussion

By limiting the number of failed logon 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

Password policy can be set with a configuration profile or the "pwpolicy" utility. If password policy is set with a configuration profile, run the following command to check if the system has the correct setting for the number of permitted failed logon attempts:

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep 'maxFailedAttempts'

If "maxFailedAttempts" is not set to "3", this is a finding.

If password policy is set with the "pwpolicy" utility, the variable names may vary depending on how the policy was set. To check if the password policy is configured to disable an account for 15 minutes after 3 unsuccessful logon attempts, run the following command to output the password policy to the screen:

/usr/bin/sudo /usr/bin/pwpolicy getaccountpolicies

Look for the line "<key>policyCategoryAuthentication</key>".

If this does not exist, and password policy is not controlled by a directory service, this is a finding.

In the array that follows, there should be one or more <dict> sections that describe policy checks. One should contain a <string> that allows users to log on if "policyAttributeFailedAuthentications" is less than "policyAttributeMaximumFailedAuthentications". Under policyParameters, "policyAttributeMaximumFailedAuthentications" should be set to "3".

If "policyAttributeMaximumFailedAuthentications" is not set to "3", this is a finding.

In the same check or in another <dict> section, there should be a <string> that allows users to log on if the "policyAttributeCurrentTime" is greater than the result of adding "15" minutes (900 seconds) to "policyAttributeLastFailedAuthenticationTime". The check might use a variable defined in its policyParameters section.

If the check does not exist or if the check adds too great an amount of time, this is a finding.

Fix

This setting may be enforced using the "Passcode Policy" configuration profile or by a directory service.

To set the password policy without a configuration profile, run the following command to save a copy of the current "pwpolicy" account policy file:

/usr/bin/sudo /usr/bin/pwpolicy getaccountpolicies | tail -n +2 > pwpolicy.plist

Open the generated file in a text editor and ensure it contains the following text after the opening <dict> tag and before the closing </dict> tag. Replace <dict/> first with <dict></dict> if necessary.

<key>policyCategoryAuthentication</key>
<array>
<dict>
<key>policyContent</key>
<string>(policyAttributeFailedAuthentications < policyAttributeMaximumFailedAuthentications) OR (policyAttributeCurrentTime > (policyAttributeLastFailedAuthenticationTime + autoEnableInSeconds))</string>
<key>policyIdentifier</key>
<string>Authentication Lockout</string>
<key>policyParameters</key>
<dict>
<key>autoEnableInSeconds</key>
<integer>900</integer>
<key>policyAttributeMaximumFailedAuthentications</key>
<integer>3</integer>
</dict>
</dict>
</array>

If the line "<key>policyCategoryAuthentication</key>" already exists, the following text should be used instead and inserted after the first <array> tag that follows it:

<dict>
<key>policyContent</key>
<string>(policyAttributeFailedAuthentications < policyAttributeMaximumFailedAuthentications) OR (policyAttributeCurrentTime > (policyAttributeLastFailedAuthenticationTime + autoEnableInSeconds))</string>
<key>policyIdentifier</key>
<string>Authentication Lockout</string>
<key>policyParameters</key>
<dict>
<key>autoEnableInSeconds</key>
<integer>900</integer>
<key>policyAttributeMaximumFailedAuthentications</key>
<integer>3</integer>
</dict>
</dict>

After saving the file and exiting to the command prompt, run the following command to load the new policy file:

/usr/bin/sudo /usr/bin/pwpolicy setaccountpolicies pwpolicy.plist

<key>policyCategoryAuthentication</key>
<array>
<dict>
<key>policyContent</key>
<string>(policyAttributeFailedAuthentications < policyAttributeMaximumFailedAuthentications) OR (policyAttributeCurrentTime > (policyAttributeLastFailedAuthenticationTime + autoEnableInSeconds))</string>
<key>policyIdentifier</key>
<string>Authentication Lockout</string>
<key>policyParameters</key>
<dict>
<key>autoEnableInSeconds</key>
<integer>900</integer>
<key>policyAttributeMaximumFailedAuthentications</key>
<integer>3</integer>
</dict>
</dict>
</array>

If the line <key>policyCategoryAuthentication</key> already exists, the following text should be used instead and inserted after the first <array> tag that follows it:

<dict>
<key>policyContent</key>
<string>(policyAttributeFailedAuthentications < policyAttributeMaximumFailedAuthentications) OR (policyAttributeCurrentTime > (policyAttributeLastFailedAuthenticationTime + autoEnableInSeconds))</string>
<key>policyIdentifier</key>
<string>Authentication Lockout</string>
<key>policyParameters</key>
<dict>
<key>autoEnableInSeconds</key>
<integer>900</integer>
<key>policyAttributeMaximumFailedAuthentications</key>
<integer>3</integer>
</dict>
</dict>

After saving the file and exiting to the command prompt, run the following command to load the new policy file:

/usr/bin/sudo /usr/bin/pwpolicy setaccountpolicies pwpolicy.plist

Note: Updates to password restrictions must be thoroughly evaluated in a test environment. Mistakes in configuration or bugs in OS X may block password change and local user creation operations, as well as lock out all local users, including administrators.
V-76159 No Change
Findings ID: AOSX-12-001326 Rule ID: SV-90847r1_rule Severity: medium CCI: CCI-002238

Discussion

By limiting the number of failed logon 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

Password policy can be set with a configuration profile or the "pwpolicy" utility. If password policy is set with a configuration profile, run the following command to check if the system has the correct setting for the number of permitted failed logon attempts and the logon reset timer:

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep 'maxFailedAttempts\|minutesUntilFailedLoginReset'

If "maxFailedAttempts" is not set to "3" and "minutesUntilFailedLoginReset" is not set to "15", this is a finding.

If password policy is set with the "pwpolicy" utility, the variable names may vary depending on how the policy was set. To check if the password policy is configured to disable an account for 15 minutes after 3 unsuccessful logon attempts, run the following command to output the password policy to the screen:

/usr/bin/sudo /usr/bin/pwpolicy getaccountpolicies

Look for the line "<key>policyCategoryAuthentication</key>".

If this does not exist, and password policy is not controlled by a directory service, this is a finding.

In the array that follows, there should be one or more <dict> sections that describe policy checks. One should contain a <string> that allows users to log on if "policyAttributeFailedAuthentications" is less than "policyAttributeMaximumFailedAuthentications". Under policyParameters, "policyAttributeMaximumFailedAuthentications" should be set to "3".

If "policyAttributeMaximumFailedAuthentications" is not set to "3", this is a finding.

In the same check or in another <dict> section, there should be a <string> that allows users to log on if the "policyAttributeCurrentTime" is greater than the result of adding "15" minutes (900 seconds) to "policyAttributeLastFailedAuthenticationTime". The check might use a variable defined in its "policyParameters" section.

If the check does not exist or if the check adds too great an amount of time, this is a finding.

Fix

This setting may be enforced using the "Passcode Policy" configuration profile or by a directory service.

To set the password policy without a configuration profile, run the following command to save a copy of the current "pwpolicy" account policy file:

/usr/bin/sudo /usr/bin/pwpolicy getaccountpolicies | tail -n +2 > pwpolicy.plist

Open the generated file in a text editor and ensure it contains the following text after the opening <dict> tag and before the closing </dict> tag.

Replace <dict/> first with <dict></dict> if necessary.

<key>policyCategoryAuthentication</key>
<array>
<dict>
<key>policyContent</key>
<string>(policyAttributeFailedAuthentications < policyAttributeMaximumFailedAuthentications) OR (policyAttributeCurrentTime > (policyAttributeLastFailedAuthenticationTime + autoEnableInSeconds))</string>
<key>policyIdentifier</key>
<string>Authentication Lockout</string>
<key>policyParameters</key>
<dict>
<key>autoEnableInSeconds</key>
<integer>900</integer>
<key>policyAttributeMaximumFailedAuthentications</key>
<integer>3</integer>
</dict>
</dict>
</array>

If the line "<key>policyCategoryAuthentication</key>" already exists, the following text should be used instead and inserted after the first <array> tag that follows it:

<dict>
<key>policyContent</key>
<string>(policyAttributeFailedAuthentications < policyAttributeMaximumFailedAuthentications) OR (policyAttributeCurrentTime > (policyAttributeLastFailedAuthenticationTime + autoEnableInSeconds))</string>
<key>policyIdentifier</key>
<string>Authentication Lockout</string>
<key>policyParameters</key>
<dict>
<key>autoEnableInSeconds</key>
<integer>900</integer>
<key>policyAttributeMaximumFailedAuthentications</key>
<integer>3</integer>
</dict>
</dict>

After saving the file and exiting to the command prompt, run the following command to load the new policy file:

/usr/bin/sudo /usr/bin/pwpolicy setaccountpolicies pwpolicy.plist

Note: Updates to password restrictions must be thoroughly evaluated in a test environment. Mistakes in configuration or bugs in OS X may block password change and local user creation operations, as well as lock out all local users, including administrators.
V-76161 No Change
Findings ID: AOSX-12-001355 Rule ID: SV-90849r1_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 on 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 /usr/bin/grep ^policy /etc/security/audit_control | /usr/bin/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 do this programmatically, run the following command:

sudo /usr/bin/sed -i.bak '/^policy/ s/$/,ahlt/' /etc/security/audit_control; sudo /usr/sbin/audit -s
V-76163 No Change
Findings ID: AOSX-12-001465 Rule ID: SV-90851r1_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 System Administrator (SA) or Information System Security Officer (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-76165 No Change
Findings ID: AOSX-12-002050 Rule ID: SV-90853r1_rule Severity: low CCI: CCI-000381

Discussion

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

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

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep DisableAirDrop

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

Fix

Disabling AirDrop is enforced using the "Restrictions Policy" configuration profile.
V-76167 No Change
Findings ID: AOSX-12-002060 Rule ID: SV-90855r1_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 allow centralized management of users and passwords.

Checks

To determine if the system is integrated to a directory service, ask the System Administrator (SA) or Information System Security Officer (ISSO) or run the following command:

/usr/bin/sudo dscl localhost -list . | /usr/bin/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.
V-76169 No Change
Findings ID: AOSX-12-002085 Rule ID: SV-90857r1_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

Password policy can be set with a configuration profile or the "pwpolicy" utility. If password policy is set with a configuration profile, run the following command to check if the system is configured to require users to change their passwords every 60 days:

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep maxPINAgeInDays

If "maxPINAgeInDays" is not set to "60" or a shorter interval, or is undefined, this is a finding.

If password policy is set with the "pwpolicy" utility, run the following command instead:

/usr/bin/sudo /usr/bin/pwpolicy getaccountpolicies

Look for the line <key>policyCategoryPasswordChange</key>.

If it does not exist, and password policy is not controlled by a directory service, this is a finding.

Otherwise, in the array section that follows it, there should be a <dict> section that contains a check <string> that compares the variable "policyAttributeLastPasswordChangeTime" to the variable "policyAttributeCurrentTime". It may contain additional variables defined in the "policyParameters" section that follows it. All comparisons are done in seconds.

If this check allows users to log in with passwords older than "60" days, or if no such check exists, this is a finding.

Fix

This setting may be enforced using the "Passcode Policy" configuration profile or by a directory service.

To set the password policy without a configuration profile, run the following command to save a copy of the current "pwpolicy" account policy file:

/usr/bin/sudo /usr/bin/pwpolicy getaccountpolicies | tail -n +2 > pwpolicy.plist

Open the generated file in a text editor.

If the file does not yet contain any policy settings, replace <dict/> with <dict></dict>.

If there already is a policy block that refers to password expiration, ensure it is set to "60" days.

If the line "<key>policyCategoryPasswordChange</key>" is not present in the file, add the following text immediately after the opening <dict> tag in the file:

<key>policyCategoryPasswordChange</key>
<array>
<dict>
<key>policyContent</key>
<string>policyAttributeCurrentTime > policyAttributeLastPasswordChangeTime + (policyAttributeExpiresEveryNDays * 24 * 60 * 60)</string>
<key>policyIdentifier</key>
<string>Password Change Interval</string>
<key>policyParameters</key>
<dict>
<key>policyAttributeExpiresEveryNDays</key>
<integer>60</integer>
</dict>
</dict>
</array>

If the line "<key>policyCategoryPasswordChange</key>" is already present in the file, the following text should be added just after the opening <array> tag that follows the line instead:

<dict>
<key>policyContent</key>
<string>policyAttributeCurrentTime > policyAttributeLastPasswordChangeTime + (policyAttributeExpiresEveryNDays * 24 * 60 * 60)</string>
<key>policyIdentifier</key>
<string>Password Change Interval</string>
<key>policyParameters</key>
<dict>
<key>policyAttributeExpiresEveryNDays</key>
<integer>60</integer>
</dict>
</dict>

After saving the file and exiting to the command prompt, run the following command to load the new policy file:

/usr/bin/sudo /usr/bin/pwpolicy setaccountpolicies pwpolicy.plist

Note: Updates to password restrictions must be thoroughly evaluated in a test environment. Mistakes in configuration may block password change and local user creation operations, as well as lock out all local users, including administrators.
V-76171 No Change
Findings ID: AOSX-12-002090 Rule ID: SV-90859r1_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

Password policy can be set with the "Password Policy" configuration profile or the "pwpolicy" utility. If password policy is set with a configuration profile, run the following command to check if the system is configured to require that users cannot reuse one of their five previously used passwords:

system_profiler SPConfigurationProfileDataType | /usr/bin/grep pinHistory

If "pinHistory" is not set to "5" or higher, or is undefined, this is a finding.

If password policy is set with the "pwpolicy" utility, run the following command instead:

/usr/bin/sudo /usr/bin/pwpolicy getaccountpolicies

Look for the line "<key>policyCategoryPasswordContent</key>".

If it does not exist, and password policy is not controlled by a directory service, this is a finding.

Otherwise, in the array section that follows it, there should be a <dict> section that contains a check <string> such as "<string>none policyAttributePasswordHashes in policyAttributePasswordHistory</string>". This searches for the hash of the user-entered password in the list of previous password hashes. In the "policyParameters" section that follows it, "policyAttributePasswordHistoryDepth" must be set to "5" or greater.

If this parameter is not set to "5" or greater, or if no such check exists, this is a finding.

Fix

This setting may be enforced using the "Passcode Policy" configuration profile or by a directory service.

To set the password policy without a configuration profile, run the following command to save a copy of the current "pwpolicy" account policy file:

/usr/bin/sudo /usr/bin/pwpolicy getaccountpolicies | tail -n +2 > pwpolicy.plist

Open the generated file in a text editor. If the file does not yet contain any policy settings, replace <dict/> with <dict></dict>. If there already is a policy block that refers to password history, ensure it is set to "5". If the line "<key>policyCategoryPasswordContent</key>" is not present in the file, add the following text immediately after the opening <dict> tag in the file:

<key>policyCategoryPasswordContent</key>
<array>
<dict>
<key>policyContent</key>
<string>none policyAttributePasswordHashes in policyAttributePasswordHistory</string>
<key>policyIdentifier</key>
<string>Password History</string>
<key>policyParameters</key>
<dict>
<key>policyAttributePasswordHistoryDepth</key>
<integer>5</integer>
</dict>
</dict>
</array>

If the line "<key>policyCategoryPasswordContent</key>" is already present in the file, the following text should be added just after the opening <array> tag that follows the line instead:

<dict>
<key>policyContent</key>
<string>none policyAttributePasswordHashes in policyAttributePasswordHistory</string>
<key>policyIdentifier</key>
<string>Password History</string>
<key>policyParameters</key>
<dict>
<key>policyAttributePasswordHistoryDepth</key>
<integer>5</integer>
</dict>
</dict>

After saving the file and exiting to the command prompt, run the following command to load the new policy file:

/usr/bin/sudo /usr/bin/pwpolicy setaccountpolicies pwpolicy.plist

Note: Updates to password restrictions must be thoroughly evaluated in a test environment. Mistakes in configuration may block password change and local user creation operations, as well as lock out all local users, including administrators.
V-76173 No Change
Findings ID: AOSX-12-002105 Rule ID: SV-90861r1_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":

/usr/bin/sudo stat -f '%Su:%Sg:%N' $(/usr/bin/grep -v '^#' /etc/newsyslog.conf | awk '{ print $1 }') 2> /dev/null
/usr/bin/sudo stat -f '%Su:%Sg:%N' $(/usr/bin/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:

/usr/bin/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-76175 No Change
Findings ID: AOSX-12-002106 Rule ID: SV-90863r1_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":

/usr/bin/sudo stat -f '%A:%N' $(/usr/bin/grep -v '^#' /etc/newsyslog.conf | awk '{ print $1 }') 2> /dev/null
/usr/bin/sudo stat -f '%A:%N' $(/usr/bin/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:

/usr/bin/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-76177 No Change
Findings ID: AOSX-12-002107 Rule ID: SV-90865r1_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.

/usr/bin/sudo ls [email protected] $(/usr/bin/grep -v '^#' /etc/newsyslog.conf | awk '{ print $1 }') 2> /dev/null
/usr/bin/sudo ls [email protected] $(/usr/bin/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:

/usr/bin/sudo chmod -N [log file]

[log file] is the full path to the log file in question.
V-76179 No Change
Findings ID: AOSX-12-002110 Rule ID: SV-90867r1_rule Severity: medium CCI: CCI-000172

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.

Satisfies: SRG-OS-000365-GPOS-00152, SRG-OS-000458-GPOS-00203, SRG-OS-000461-GPOS-00205, SRG-OS-000463-GPOS-00207, SRG-OS-000465-GPOS-00209, SRG-OS-000466-GPOS-00210, SRG-OS-000467-GPOS-00211, SRG-OS-000468-GPOS-00212, SRG-OS-000474-GPOS-00219

Checks

To view the currently configured flags for the audit daemon, run the following command:

/usr/bin/sudo /usr/bin/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 set the audit flags to the recommended setting, run the following command to add the flags "fm", "-fr", and "-fw" all at once:

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

A text editor may also be used to implement the required updates to the "/etc/security/audit_control" file.
V-76181 No Change
Findings ID: AOSX-12-030014 Rule ID: SV-90869r1_rule Severity: medium CCI: CCI-000058

Discussion

A session 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 want to log out because of the temporary nature of the absence.

The session lock is implemented at the point where session activity can be determined. Rather than be forced to wait for a period of time to expire before the user session can be locked, operating systems need to provide users with the ability to manually invoke a session lock so users may secure their session should they need to temporarily vacate the immediate physical vicinity.

Checks

To check if support for session locking with removal of a token is enabled, run the following command:

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "tokenRemovalAction = 1;"

If there is no result, this is a finding.

Fix

This setting is enforced using the "Security and Privacy Policy" configuration profile.
V-76183 No Change
Findings ID: AOSX-12-362149 Rule ID: SV-90871r1_rule Severity: medium CCI: CCI-001812

Discussion

Allowing regular users to install software, without explicit privileges, creates the risk that untested or potentially malicious software will be installed on the system. Explicit privileges (escalated or administrative privileges) provide the regular user with explicit capabilities and control that exceeds the rights of a regular user.

Operating system functionality will vary, and while users are not permitted to install unapproved software, there may be instances where the organization allows the user to install approved software packages, such as from an approved software repository.

The operating system or software configuration management utility must enforce control of software installation by users based upon what types of software installations are permitted (e.g., updates and security patches to existing software) and what types of installations are prohibited (e.g., software whose pedigree with regard to being potentially malicious is unknown or suspect) by the organization.

Checks

To check if the system is configured to prohibit user installation of software, first check to ensure the Parental Controls are enabled with the following command:

/usr/sbin/system_profiler SPConfigurationProfileDataType | /usr/bin/grep "familyControlsEnabled = 1;"

If there is no result, this is a finding.

Next, check that a blacklist has been properly configured for the user's home directories with the following command:

/usr/sbin/system_profiler –xml SPConfigurationProfileDataType | /usr/bin/sed -n '/pathBlackList/,/key/p' | /usr/bin/grep "<string>/Users/</string>"

If there is no result, this is a finding.

Fix

This setting is enforced using the "Application Restrictions Policy" configuration profile.
V-76269 No Change
Findings ID: AOSX-12-001195 Rule ID: SV-90957r1_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", creating the file if necessary:

net.inet.ip.accept_sourceroute=0