Apple OS X 10.10 (Yosemite) Workstation Security Technical Implementation Guide
Pick two releases to diff their requirements.
Open a previous version of this STIG.
Digest of Updates −2 ✎ 1
Comparison against the immediately-prior release (V1R2). Rule matching uses the Group Vuln ID. Content-change detection compares the rule’s description, check, and fix text after stripping inline markup — cosmetic-only edits aren’t flagged.
Removed rules 2
- V-59717 Medium The default global umask setting must be changed for user applications.
- V-59719 Medium The default global umask setting must be changed for system processes.
Content changes 1
- V-59731 Medium check The sticky bit must be set on all public directories.
- RMF Control
- AC-11
- Severity
- M
- CCI
- CCI-000057
- Version
- AOSX-10-000010
- Vuln IDs
-
- V-59405
- Rule IDs
-
- SV-73835r2_rule
Checks: C-60183r1_chk
To check if the system has a configuration profile configured to enable the screen saver after a time-out period, run the following command: system_profiler SPConfigurationProfileDataType | grep idleTime The check should return a value of '900' or less for idleTime. If not, this is a finding.
Fix: F-64801r2_fix
This setting is enforced using the "Login Window Policy" configuration profile.
- RMF Control
- AC-11
- Severity
- M
- CCI
- CCI-000056
- Version
- AOSX-10-000020
- Vuln IDs
-
- V-59527
- Rule IDs
-
- SV-73957r2_rule
Checks: C-60297r1_chk
To check if the system will prompt users to enter their passwords to unlock the screensaver, run the following command: system_profiler SPConfigurationProfileDataType | grep askForPassword If there is no result, or if askForPassword is not set to '1', this is a finding.
Fix: F-64937r2_fix
This setting is enforced using the "Login Window Policy" configuration profile.
- RMF Control
- AC-17
- Severity
- H
- CCI
- CCI-000068
- Version
- AOSX-10-000035
- Vuln IDs
-
- V-59529
- Rule IDs
-
- SV-73959r1_rule
Checks: C-60299r3_chk
To check if the 'rexec' service is disabled, use the following command: sudo launchctl print-disabled system | grep com.apple.rexecd If the results do not show the following: "com.apple.rexecd" => true this is a finding.
Fix: F-64939r1_fix
To disable the 'rexec' service, run the following command: sudo launchctl disable system/com.apple.rexecd The system may need to be restarted for the update to take effect.
- RMF Control
- AC-17
- Severity
- H
- CCI
- CCI-001453
- Version
- AOSX-10-000040
- Vuln IDs
-
- V-59531
- Rule IDs
-
- SV-73961r1_rule
Checks: C-60301r5_chk
To check if the 'telnet' service is disabled, use the following command: sudo launchctl print-disabled system | grep com.apple.telnetd If the results do not show the following: "com.apple.telnetd" => true this is a finding.
Fix: F-64941r1_fix
To disable the 'telnet' service, run the following command: sudo launchctl disable system/com.apple.telnetd The system may need to be restarted for the update to take effect.
- RMF Control
- CM-7
- Severity
- H
- CCI
- CCI-000381
- Version
- AOSX-10-000050
- Vuln IDs
-
- V-59533
- Rule IDs
-
- SV-73963r1_rule
Checks: C-60303r2_chk
To check if the 'rshd' service is disabled, use the following command: sudo launchctl print-disabled system | grep com.apple.rshd If the results do not show the following: "com.apple.rshd" => true this is a finding.
Fix: F-64943r1_fix
To disable the 'rshd' service, run the following command: sudo launchctl disable system/com.apple.rshd The system may need to be restarted for the update to take effect.
- RMF Control
- AC-17
- Severity
- M
- CCI
- CCI-000067
- Version
- AOSX-10-000030
- Vuln IDs
-
- V-59535
- Rule IDs
-
- SV-73965r1_rule
Checks: C-60305r1_chk
To check to make sure the audit daemon is configured to log all login events, both local and remote, run the following command: sudo grep ^flags /etc/security/audit_control The flag 'lo' should be included in the list of flags set. If it is not, this is a finding.
Fix: F-64945r1_fix
To make sure the appropriate flags are enabled for auditing, run the following command: sudo sed -i.bak '/^flags/ s/$/,lo/' /etc/security/audit_control; sudo audit -s A text editor may also be used to implement the required updates to the /etc/security/audit_control file.
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-000055
- Vuln IDs
-
- V-59537
- Rule IDs
-
- SV-73967r1_rule
Checks: C-60307r2_chk
To check if the 'screen sharing' service is disabled, use the following command: sudo launchctl print-disabled system | grep com.apple.screensharing If the results do not show the following: "com.apple.screensharing" => true this is a finding.
Fix: F-64947r1_fix
To disable the 'screen sharing' service, run the following command: sudo launchctl disable system/com.apple.screensharing The system may need to be restarted for the update to take effect.
- RMF Control
- CM-6
- Severity
- L
- CCI
- CCI-000366
- Version
- AOSX-10-000065
- Vuln IDs
-
- V-59539
- Rule IDs
-
- SV-73969r1_rule
Checks: C-60309r1_chk
If Bluetooth connectivity is required to facilitate use of approved external devices, this is not applicable. To check if there are any hardware components for Bluetooth loaded in the system, run the following command: sudo kextstat | grep -i bluetooth If there is a result, this is a finding.
Fix: F-64949r1_fix
Removing the kernel extensions for Bluetooth will remove the system's ability to load Bluetooth devices, use the following commands to remove them: sudo rm -rf /System/Library/Extensions/IOBluetoothFamily.kext /System/Library/Extensions/IOBluetoothHIDDriver.kext; sudo touch /System/Library/Extensions
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-000070
- Vuln IDs
-
- V-59541
- Rule IDs
-
- SV-73971r1_rule
Checks: C-60311r1_chk
If the system requires Wi-Fi to connect to an authorized network, this is not applicable. To check if the Wi-Fi network device is disabled, run the following command: sudo networksetup -listallnetworkservices A disabled device will have an asterisk in front of its name. If the Wi-Fi device is missing this asterisk, this is a finding.
Fix: F-64951r1_fix
To disable the Wi-Fi network device, run the following command: sudo networksetup -setnetworkserviceenabled 'Wi-Fi' off
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-000075
- Vuln IDs
-
- V-59543
- Rule IDs
-
- SV-73973r1_rule
Checks: C-60313r1_chk
To check if IR support is disabled, run the following command: sudo defaults read /Library/Preferences/com.apple.driver.AppleIRController DeviceEnabled If the result is not '0', this is a finding.
Fix: F-64953r1_fix
To disable IR, run the following command: sudo defaults write /Library/Preferences/com.apple.driver.AppleIRController DeviceEnabled -bool FALSE
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-000085
- Vuln IDs
-
- V-59545
- Rule IDs
-
- SV-73975r2_rule
Checks: C-60315r1_chk
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: system_profiler SPConfigurationProfileDataType | grep -A 2 'com.apple.digihub.blank.cd.appeared' If this is not defined or 'action' is not set to '1', this is a finding.
Fix: F-64955r2_fix
This setting is enforced using the "Custom Policy" configuration profile.
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-000090
- Vuln IDs
-
- V-59547
- Rule IDs
-
- SV-73977r2_rule
Checks: C-60317r1_chk
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: system_profiler SPConfigurationProfileDataType | grep -A 2 'com.apple.digihub.blank.dvd.appeared' If this is not defined or 'action' is not set to '1', this is a finding.
Fix: F-64957r2_fix
This setting is enforced using the "Custom Policy" configuration profile.
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-000095
- Vuln IDs
-
- V-59549
- Rule IDs
-
- SV-73979r2_rule
Checks: C-60319r1_chk
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: system_profiler SPConfigurationProfileDataType | grep -A 2 'com.apple.digihub.cd.music.appeared' If this is not defined or 'action' is not set to '1', this is a finding.
Fix: F-64959r2_fix
This setting is enforced using the "Custom Policy" configuration profile.
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-000100
- Vuln IDs
-
- V-59551
- Rule IDs
-
- SV-73981r2_rule
Checks: C-60321r2_chk
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: system_profiler SPConfigurationProfileDataType | grep -A 2 'com.apple.digihub.cd.picture.appeared' If this is not defined or 'action' is not set to '1', this is a finding.
Fix: F-64961r2_fix
This setting is enforced using the "Custom Policy" configuration profile.
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-000105
- Vuln IDs
-
- V-59553
- Rule IDs
-
- SV-73983r2_rule
Checks: C-60323r1_chk
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: system_profiler SPConfigurationProfileDataType | grep -A 2 'com.apple.digihub.dvd.video.appeared' If this is not defined or 'action' is not set to '1', this is a finding.
Fix: F-64963r2_fix
This setting is enforced using the "Custom Policy" configuration profile.
- RMF Control
- AC-2
- Severity
- M
- CCI
- CCI-000016
- Version
- AOSX-10-000110
- Vuln IDs
-
- V-59555
- Rule IDs
-
- SV-73985r1_rule
Checks: C-60325r2_chk
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: sudo pwpolicy -u username getaccountpolicies | tail -n +2 If there is no output, and password policy is not controlled by a directory server, 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 72hours (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: F-64965r5_fix
This setting may be enforced using a configuration profile or by a directory server. 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: sudo 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: sudo pwpolicy -u username setaccountpolicies pwpolicy.plist
- RMF Control
- AC-2
- Severity
- M
- CCI
- CCI-001682
- Version
- AOSX-10-000115
- Vuln IDs
-
- V-59557
- Rule IDs
-
- SV-73987r1_rule
Checks: C-60327r1_chk
If an emergency account has been created on the workstation, check the expiration settings of a local account using the following command, replacing username with the correct value: sudo pwpolicy -u username getaccountpolicies | tail -n +2 If there is output, ensure that the account policies do not restrict the ability to log on after a certain date or amount of time. If they do, this is a finding.
Fix: F-64967r3_fix
To remove all pwpolicy settings for an emergency account, run the following command, replacing username with the correct value: sudo 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: sudo 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 on 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: sudo pwpolicy -u username setaccountpolicies pwpolicy.plist
- RMF Control
- AC-2
- Severity
- M
- CCI
- CCI-000018
- Version
- AOSX-10-000120
- Vuln IDs
-
- V-59559
- Rule IDs
-
- SV-73989r1_rule
Checks: C-60329r1_chk
In order to view the currently configured flags for the audit daemon, run the following command: sudo grep ^flags /etc/security/audit_control The account creation events are logged by way of the 'ad' flag. If 'ad' is not listed in the result of the check, this is a finding.
Fix: F-64969r1_fix
To make sure the appropriate flags are enabled for auditing, run the following command: sudo sed -i.bak '/^flags/ s/$/,ad/' /etc/security/audit_control; sudo audit -s A text editor may also be used to implement the required updates to the /etc/security/audit_control file.
- RMF Control
- AC-2
- Severity
- M
- CCI
- CCI-001403
- Version
- AOSX-10-000125
- Vuln IDs
-
- V-59561
- Rule IDs
-
- SV-73991r1_rule
Checks: C-60331r1_chk
In order to view the currently configured flags for the audit daemon, run the following command: sudo grep ^flags /etc/security/audit_control The account creation events are logged by way of the 'ad' flag. If 'ad' is not listed in the result of the check, this is a finding.
Fix: F-64971r1_fix
To make sure the appropriate flags are enabled for auditing, run the following command: sudo sed -i.bak '/^flags/ s/$/,ad/' /etc/security/audit_control; sudo audit -s A text editor may also be used to implement the required updates to the /etc/security/audit_control file.
- RMF Control
- AC-2
- Severity
- M
- CCI
- CCI-001404
- Version
- AOSX-10-000130
- Vuln IDs
-
- V-59563
- Rule IDs
-
- SV-73993r1_rule
Checks: C-60333r1_chk
In order to view the currently configured flags for the audit daemon, run the following command: sudo grep ^flags /etc/security/audit_control The account modification events are logged by way of the 'ad' flag. If 'ad' is not listed in the result of the check, this is a finding.
Fix: F-64973r1_fix
To make sure the appropriate flags are enabled for auditing, run the following command: sudo sed -i.bak '/^flags/ s/$/,ad/' /etc/security/audit_control; sudo audit -s A text editor may also be used to implement the required updates to the /etc/security/audit_control file.
- RMF Control
- AC-2
- Severity
- M
- CCI
- CCI-001405
- Version
- AOSX-10-000135
- Vuln IDs
-
- V-59565
- Rule IDs
-
- SV-73995r1_rule
Checks: C-60335r1_chk
In order to view the currently configured flags for the audit daemon, run the following command: sudo grep ^flags /etc/security/audit_control The account modification events are logged by way of the 'ad' flag. If 'ad' is not listed in the result of the check, this is a finding.
Fix: F-64975r1_fix
To make sure the appropriate flags are enabled for auditing, run the following command: sudo sed -i.bak '/^flags/ s/$/,ad/' /etc/security/audit_control; sudo audit -s A text editor may also be used to implement the required updates to the /etc/security/audit_control file.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- AOSX-10-000139
- Vuln IDs
-
- V-59567
- Rule IDs
-
- SV-73997r2_rule
Checks: C-60337r4_chk
If SMB File Sharing is required, this is not applicable. To check if the 'SMB File Sharing' service is disabled, use the following command: sudo launchctl print-disabled system | grep com.apple.smbd If the results do not show the following: "com.apple.smbd" => true this is a finding.
Fix: F-64977r1_fix
To disable the 'SMB File Sharing' service, run the following command: sudo launchctl disable system/com.apple.smbd The system may need to be restarted for the update to take effect.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- AOSX-10-000140
- Vuln IDs
-
- V-59569
- Rule IDs
-
- SV-73999r1_rule
Checks: C-60339r2_chk
To check if the 'Apple File (AFP) Sharing' service is disabled, use the following command: sudo launchctl print-disabled system | grep com.apple.AppleFileServer If the results do not show the following: "com.apple.AppleFileServer" => true this is a finding.
Fix: F-64979r1_fix
To disable the 'Apple File (AFP) Sharing' service, run the following command: sudo launchctl disable system/com.apple.AppleFileServer The system may need to be restarted for the update to take effect.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- AOSX-10-000141
- Vuln IDs
-
- V-59571
- Rule IDs
-
- SV-74001r2_rule
Checks: C-60341r3_chk
If the NFS daemon is required, this is not applicable. To check if the NFS daemon is disabled, use the following command: sudo launchctl print-disabled system | grep com.apple.nfsd If the results do not show the following: "com.apple.nfsd" => true this is a finding.
Fix: F-64981r1_fix
To disable the 'NFS' daemon, run the following command: sudo launchctl disable system/com.apple.nfsd The system may need to be restarted for the update to take effect.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- AOSX-10-000142
- Vuln IDs
-
- V-59573
- Rule IDs
-
- SV-74003r2_rule
Checks: C-60343r3_chk
If the NFS lock daemon is required, this is not applicable. To check if the NFS lock daemon is disabled, use the following command: sudo launchctl print-disabled system | grep com.apple.lockd If the results do not show the following: "com.apple.lockd" => true this is a finding.
Fix: F-64983r1_fix
To disable the 'NFS lock' daemon, run the following command: sudo launchctl disable system/com.apple.lockd The system may need to be restarted for the update to take effect.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- AOSX-10-000143
- Vuln IDs
-
- V-59575
- Rule IDs
-
- SV-74005r2_rule
Checks: C-60345r3_chk
If the NFS stat daemon is required, this is not applicable. To check if the NFS stat daemon is disabled, use the following command: sudo launchctl print-disabled system | grep com.apple.statd.notify If the results do not show the following: "com.apple.statd.notify" => true this is a finding.
Fix: F-64985r1_fix
To disable the 'NFS stat' daemon, run the following command: sudo launchctl disable system/com.apple.statd.notify The system may need to be restarted for the update to take effect.
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-000155
- Vuln IDs
-
- V-59577
- Rule IDs
-
- SV-74007r1_rule
Checks: C-60347r1_chk
The system firewall must be configured with a default-deny policy. Ask the SA or ISSO if an approved firewall is loaded on the system. The recommended system is the McAfee HBSS. If there is no firewall installed on the system, this is a finding. If there is a firewall installed and it is not configured with a default deny policy, this is a finding.
Fix: F-64987r1_fix
Install an approved HBSS or firewall solution onto the system and configure it with a default-deny policy.
- RMF Control
- AU-12
- Severity
- M
- CCI
- CCI-000172
- Version
- AOSX-10-000170
- Vuln IDs
-
- V-59579
- Rule IDs
-
- SV-74009r1_rule
Checks: C-60349r1_chk
In order to view the currently configured flags for the audit daemon, run the following command: sudo grep ^flags /etc/security/audit_control Privileged activities are logged by way of the 'ad' flag. If 'ad' is not listed in the result of the check, this is a finding.
Fix: F-64989r1_fix
To make sure the appropriate flags are enabled for auditing, run the following command: sudo sed -i.bak '/^flags/ s/$/,ad/' /etc/security/audit_control; sudo audit -s A text editor may also be used to implement the required updates to the /etc/security/audit_control file.
- RMF Control
- AC-8
- Severity
- L
- CCI
- CCI-000048
- Version
- AOSX-10-000185
- Vuln IDs
-
- V-59581
- Rule IDs
-
- SV-74011r1_rule
Checks: C-60351r1_chk
The policy banner will show if a PolicyBanner.rtf or PolicyBanner.rtfd exists in the /Library/Security folder. Run this command to show the contents of that folder: ls -l /Library/Security/PolicyBanner.rtf* If neither PolicyBanner.rtf nor PolicyBanner.rtfd exists, this is a finding. 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: F-64991r1_fix
Create a RTF formatted file containing the required text. Name the file PolicyBanner.rtf or PolicyBanner.rtfd and place it in /Library/Security/
- RMF Control
- AC-8
- Severity
- L
- CCI
- CCI-000048
- Version
- AOSX-10-000186
- Vuln IDs
-
- V-59583
- Rule IDs
-
- SV-74013r1_rule
Checks: C-60353r1_chk
For systems that allow remote access through SSH, run the following command to ensure that /etc/banner exists: ls -l /etc/banner If /etc/banner does not exist, 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: F-64993r1_fix
For systems that allow remote access through SSH, create a plain text file containing the required text and save it as /etc/banner.
- RMF Control
- AC-8
- Severity
- L
- CCI
- CCI-000048
- Version
- AOSX-10-000187
- Vuln IDs
-
- V-59585
- Rule IDs
-
- SV-74015r1_rule
Checks: C-60355r1_chk
For systems that allow remote access through SSH, run the following command to ensure that /etc/banner is displayed before granting access: # grep Banner /etc/sshd_config If the sshd Banner configuration option does not point to "/etc/banner", this is a finding.
Fix: F-64995r1_fix
For systems that allow remote access through SSH, modify the /etc/sshd_config file to add or update the following line: Banner /etc/banner
- RMF Control
- AC-8
- Severity
- M
- CCI
- CCI-001384
- Version
- AOSX-10-000195
- Vuln IDs
-
- V-59587
- Rule IDs
-
- SV-74017r1_rule
Checks: C-60357r1_chk
The policy banner will show if a PolicyBanner.rtf or PolicyBanner.rtfd exists in the /Library/Security folder. Run this command to show the contents of that folder: ls -l /Library/Security/PolicyBanner.rtf* If neither PolicyBanner.rtf nor PolicyBanner.rtfd exists, this is a finding. 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: F-64997r1_fix
Create a RTF formatted file containing the required text. Name the file PolicyBanner.rtf or PolicyBanner.rtfd and place it in /Library/Security/
- RMF Control
- AU-12
- Severity
- M
- CCI
- CCI-000172
- Version
- AOSX-10-000200
- Vuln IDs
-
- V-59589
- Rule IDs
-
- SV-74019r1_rule
Checks: C-60359r1_chk
In order to view the currently configured flags for the audit daemon, run the following command: sudo grep ^flags /etc/security/audit_control Logon events are logged by way of the 'aa' flag. If 'aa' is not listed in the result of the check, this is a finding.
Fix: F-64999r1_fix
To make sure the appropriate flags are enabled for auditing, run the following command: sudo sed -i.bak '/^flags/ s/$/,aa/' /etc/security/audit_control; sudo audit -s A text editor may also be used to implement the required updates to the /etc/security/audit_control file.
- RMF Control
- AU-14
- Severity
- M
- CCI
- CCI-001464
- Version
- AOSX-10-000230
- Vuln IDs
-
- V-59591
- Rule IDs
-
- SV-74021r1_rule
Checks: C-60361r1_chk
To check if the audit service is running, use the following command: sudo launchctl list | grep com.apple.auditd If nothing is returned, the audit service is not running and this is a finding.
Fix: F-65001r1_fix
To enable the audit service, run the following command: sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.auditd.plist
- RMF Control
- AU-12
- Severity
- M
- CCI
- CCI-000169
- Version
- AOSX-10-000240
- Vuln IDs
-
- V-59593
- Rule IDs
-
- SV-74023r1_rule
Checks: C-60363r1_chk
The options to configure the audit daemon are located in the /etc/security/audit_control file. To view the current settings, run the following command: sudo grep ^flags /etc/security/audit_control If the 'lo', 'ad', and 'aa' options are not set, this is a finding.
Fix: F-65003r1_fix
To set the audit flags to the recommended setting, run the following command to add the flags 'lo', 'ad', and 'aa' all at once: sudo sed -i.bak '/^flags/ s/$/,lo,ad,aa/' /etc/security/audit_control; sudo audit -s A text editor may also be used to implement the required updates to the /etc/security/audit_control file.
- RMF Control
- AU-12
- Severity
- M
- CCI
- CCI-000172
- Version
- AOSX-10-000245
- Vuln IDs
-
- V-59595
- Rule IDs
-
- SV-74025r1_rule
Checks: C-60365r1_chk
In order to view the currently configured flags for the audit daemon, run the following command: sudo grep ^flags /etc/security/audit_control Privileged access, including the creation, modification, and deletion of local user accounts, is logged via the 'ad' flag. If 'ad' is not listed in the result of the check, this is a finding.
Fix: F-65005r1_fix
To make sure the appropriate flags are enabled for auditing, run the following command: sudo sed -i.bak '/^flags/ s/$/,ad/' /etc/security/audit_control; sudo audit -s A text editor may also be used to implement the required updates to the /etc/security/audit_control file.
- RMF Control
- AU-4
- Severity
- M
- CCI
- CCI-001849
- Version
- AOSX-10-000295
- Vuln IDs
-
- V-59597
- Rule IDs
-
- SV-74027r1_rule
Checks: C-60367r1_chk
The check displays the amount of time the audit system is configured to retain audit log files. The audit system will not delete logs until the specified condition has been met. To view the current setting, run the following command: sudo grep ^expire-after /etc/security/audit_control If this returns no results, or does not contain 7d or a larger value, this is a finding.
Fix: F-65007r1_fix
Edit the /etc/security/audit_control file, and change the value for 'expire-after' to the amount of time audit logs should be kept for the system. Use the following command to set the 'expire-after' value to '7d': sudo sed -i.bak 's/.*expire-after.*/expire-after:7d/' /etc/security/audit_control; sudo audit -s
- RMF Control
- AU-5
- Severity
- M
- CCI
- CCI-001855
- Version
- AOSX-10-000305
- Vuln IDs
-
- V-59599
- Rule IDs
-
- SV-74029r1_rule
Checks: C-60369r1_chk
The check displays the '% free' to leave available for the system. The audit system will not write logs if the volume has less than this percentage of free disk space. To view the current setting, run the following command: sudo grep ^minfree /etc/security/audit_control If this returns no results, or does not contain 25, this is a finding.
Fix: F-65009r1_fix
Edit the /etc/security/audit_control file, and change the value for 'minfree' to 25. Use the following command to set the 'minfree' value to '25%': sudo sed -i.bak 's/.*minfree.*/minfree:25/' /etc/security/audit_control; sudo audit -s A text editor may also be used to implement the required updates to the /etc/security/audit_control file.
- RMF Control
- AU-5
- Severity
- M
- CCI
- CCI-001858
- Version
- AOSX-10-000310
- Vuln IDs
-
- V-59601
- Rule IDs
-
- SV-74031r1_rule
Checks: C-60371r1_chk
By default, auditd only logs errors to syslog. To see if audit has been configured to print error messages to the console, run the following command: sudo grep logger /etc/security/audit_warn If the argument '-s' is missing, or if audit_warn has not been otherwise modified to print errors to the console or send email alerts to the SA and ISSO, this is a finding.
Fix: F-65011r1_fix
To make auditd log errors to standard error as well as syslogd, run the following command: sudo sed -i.bak 's/logger -p/logger -s -p/' /etc/security/audit_warn; sudo audit -s
- RMF Control
- AU-8
- Severity
- M
- CCI
- CCI-001891
- Version
- AOSX-10-000330
- Vuln IDs
-
- V-59603
- Rule IDs
-
- SV-74033r1_rule
Checks: C-60373r1_chk
The Network Time Protocol (NTP) service must be enabled on all networked systems. To check if the service is running, use the following command: sudo launchctl list | grep org.ntp.ntpd If nothing is returned, this is a finding. To ensure that an authorized NTP server is configured, run the following command or examine /etc/ntp.conf: sudo grep ^server /etc/ntp.conf Only approved time servers should be configured for use. If no server is configured, or if an unapproved time server is in use, this is a finding.
Fix: F-65013r1_fix
To enable the NTP service, run the following command: sudo launchctl load -w /System/Library/LaunchDaemons/org.ntp.ntpd.plist To configure one or more time servers for use, edit /etc/ntp.conf and enter each hostname or ip address on a separate line, prefixing each one with the keyword "server".
- RMF Control
- AU-9
- Severity
- M
- CCI
- CCI-000162
- Version
- AOSX-10-000331
- Vuln IDs
-
- V-59607
- Rule IDs
-
- SV-74037r1_rule
Checks: C-60377r1_chk
To check the ownership of the audit log files, run the following command: sudo ls -le $(sudo grep '^dir' /etc/security/audit_control | awk -F: '{print $2}') | grep -v current The results should show the owner (third column) to be root. If not, this is a finding.
Fix: F-65017r1_fix
For any log file that returns an incorrect owner, run the following command: sudo chown root [audit log file] [audit log file] is the full path to the log file in question.
- RMF Control
- AU-9
- Severity
- M
- CCI
- CCI-000162
- Version
- AOSX-10-000333
- Vuln IDs
-
- V-59609
- Rule IDs
-
- SV-74039r1_rule
Checks: C-60379r1_chk
To check the group-ownership of the audit log files, run the following command: sudo ls -le $(sudo grep '^dir' /etc/security/audit_control | awk -F: '{print $2}') | grep -v current The results should show the group owner (fourth column) to be wheel. If not, this is a finding.
Fix: F-65019r1_fix
For any log file that returns an incorrect group-0owner, run the following command: sudo chgrp wheel [audit log file] [audit log file] is the full path to the log file in question.
- RMF Control
- AU-9
- Severity
- M
- CCI
- CCI-000162
- Version
- AOSX-10-000334
- Vuln IDs
-
- V-59611
- Rule IDs
-
- SV-74041r1_rule
Checks: C-60381r1_chk
To check the group-ownership of the audit log folder, run the following command: sudo ls -lde $(sudo grep '^dir' /etc/security/audit_control | awk -F: '{print $2}') The results should show the group (fourth column) to be wheel. If not, this is a finding.
Fix: F-65021r1_fix
For any log folder that has an incorrect group, run the following command: sudo chgrp wheel [audit log folder]
- RMF Control
- AU-9
- Severity
- M
- CCI
- CCI-000162
- Version
- AOSX-10-000335
- Vuln IDs
-
- V-59613
- Rule IDs
-
- SV-74043r1_rule
Checks: C-60383r1_chk
To check the permissions of the audit log files, run the following command: sudo ls -le $(sudo grep '^dir' /etc/security/audit_control | awk -F: '{print $2}') | grep -v current The results should show the permissions (first column) to be 440 or less permissive. If not, this is a finding.
Fix: F-65023r1_fix
For any log file that returns an incorrect permission value, run the following command: sudo chmod 440 [audit log file] [audit log file] is the full path to the log file in question.
- RMF Control
- AU-9
- Severity
- M
- CCI
- CCI-000162
- Version
- AOSX-10-000336
- Vuln IDs
-
- V-59615
- Rule IDs
-
- SV-74045r1_rule
Checks: C-60385r1_chk
To check the permissions of the audit log folder, run the following command: sudo ls -lde $(sudo grep '^dir' /etc/security/audit_control | awk -F: '{print $2}') The results should show the permissions (first column) to be 700 or less permissive. If not, this is a finding.
Fix: F-65025r1_fix
For any log folder that returns an incorrect permission value, run the following command: sudo chmod 700 [audit log folder]
- RMF Control
- AU-9
- Severity
- M
- CCI
- CCI-000162
- Version
- AOSX-10-000337
- Vuln IDs
-
- V-59617
- Rule IDs
-
- SV-74047r1_rule
Checks: C-60387r1_chk
To check if a log file contains ACLs, run the following commands: sudo ls -le $(sudo grep '^dir' /etc/security/audit_control | awk -F: '{print $2}') | grep -v current In the output from the above commands, ACLs will be listed under any file that may contain them (e.g., '0: group:admin allow list,readattr,reaadextattr,readsecurity'). If any such line exists, this is a finding.
Fix: F-65027r1_fix
For any log file that contains ACLs, run the following command: sudo chmod -N [audit log file]
- RMF Control
- AU-9
- Severity
- M
- CCI
- CCI-000162
- Version
- AOSX-10-000338
- Vuln IDs
-
- V-59619
- Rule IDs
-
- SV-74049r1_rule
Checks: C-60389r1_chk
To check if a log folder contains ACLs, run the following commands: sudo ls -lde $(sudo grep '^dir' /etc/security/audit_control | awk -F: '{print $2}') In the output from the above commands, ACLs will be listed under any folder that may contain them (e.g., '0: group:admin allow list,readattr,reaadextattr,readsecurity'). If any such line exists, this is a finding.
Fix: F-65029r1_fix
For any log folder that contains ACLs, run the following command: sudo chmod -N [audit log folder]
- RMF Control
- CM-5
- Severity
- H
- CCI
- CCI-001749
- Version
- AOSX-10-000430
- Vuln IDs
-
- V-59621
- Rule IDs
-
- SV-74051r1_rule
Checks: C-60391r1_chk
To check the status of the Security assessment policy subsystem, run the following command: sudo spctl --status | grep enabled If nothing is returned, this is a finding.
Fix: F-65031r1_fix
To enable the Security assessment policy subsystem, run the following command: sudo spctl --master-enable
- RMF Control
- CM-5
- Severity
- M
- CCI
- CCI-001499
- Version
- AOSX-10-000435
- Vuln IDs
-
- V-59623
- Rule IDs
-
- SV-74053r1_rule
Checks: C-60393r1_chk
To check the permissions and ownership of the system files and make sure they haven't changed from the original installation, run the following command: sudo diskutil verifyPermissions / Any results indicating User/Group/Permissions differ, this is a finding.
Fix: F-65033r1_fix
To correct ownership and permissions of files found in the check, run the following command: sudo diskutil repairPermissions /
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-000455
- Vuln IDs
-
- V-59625
- Rule IDs
-
- SV-74055r1_rule
Checks: C-60395r1_chk
To check if the computer has a configuration profile applied to the workstation, run the following command: sudo profiles -H If there are no profiles installed, this is a finding.
Fix: F-65035r1_fix
Obtain a configuration profile from an MDM or trusted provider containing the configuration settings required to be applied.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-001774
- Version
- AOSX-10-000460
- Vuln IDs
-
- V-59627
- Rule IDs
-
- SV-74057r2_rule
Checks: C-60397r1_chk
To check if there is a configuration policy defined for Application Restrictions, run the following command: sudo profiles -Pv | grep 'Application Restrictions' If nothing is returned, this is a finding.
Fix: F-65037r2_fix
This setting is enforced using the "Restrictions Policy" configuration profile.
- RMF Control
- CM-7
- Severity
- L
- CCI
- CCI-000381
- Version
- AOSX-10-000475
- Vuln IDs
-
- V-59629
- Rule IDs
-
- SV-74059r1_rule
Checks: C-60399r1_chk
To check for the existence of FaceTime, run the following command: ls -ald /Applications/FaceTime.app If anything is returned, this is a finding.
Fix: F-65039r1_fix
To remove FaceTime, run the following command: sudo rm -Rf /Applications/FaceTime.app
- RMF Control
- CM-7
- Severity
- L
- CCI
- CCI-000381
- Version
- AOSX-10-000480
- Vuln IDs
-
- V-59631
- Rule IDs
-
- SV-74061r1_rule
Checks: C-60401r1_chk
To check for the existence of Game Center, run the following command: ls -ald /Applications/Game\ Center.app If anything is returned, this is a finding.
Fix: F-65041r1_fix
To remove Game Center, run the following command: sudo rm -Rf /Applications/Game\ Center.app
- RMF Control
- CM-7
- Severity
- L
- CCI
- CCI-000381
- Version
- AOSX-10-000490
- Vuln IDs
-
- V-59633
- Rule IDs
-
- SV-74063r1_rule
Checks: C-60403r1_chk
To check for the existence of Messages, run the following command: ls -ald /Applications/Messages.app If anything is returned, this is a finding.
Fix: F-65043r1_fix
To remove Messages, run the following command: sudo rm -Rf /Applications/Messages.app
- RMF Control
- CM-7
- Severity
- L
- CCI
- CCI-000381
- Version
- AOSX-10-000505
- Vuln IDs
-
- V-59635
- Rule IDs
-
- SV-74065r1_rule
Checks: C-60405r1_chk
To check for the existence of the Calendar application run the following command: ls -ald /Applications/Calendar.app If anything is returned, this is a finding.
Fix: F-65045r1_fix
To remove Calendar, run the following command: sudo rm -Rf /Applications/Calendar.app
- RMF Control
- CM-7
- Severity
- L
- CCI
- CCI-000381
- Version
- AOSX-10-000507
- Vuln IDs
-
- V-59637
- Rule IDs
-
- SV-74067r1_rule
Checks: C-60407r1_chk
To check for the existence of the Reminders application run the following command: ls -ald /Applications/Reminders.app If anything is returned, this is a finding.
Fix: F-65047r1_fix
To remove Reminders, run the following command: sudo rm -Rf /Applications/Reminders.app
- RMF Control
- CM-7
- Severity
- L
- CCI
- CCI-000381
- Version
- AOSX-10-000510
- Vuln IDs
-
- V-59639
- Rule IDs
-
- SV-74069r1_rule
Checks: C-60409r1_chk
To check for the existence of Contacts, run the following command: ls -ald /Applications/Contacts.app If anything is returned, this is a finding.
Fix: F-65049r1_fix
To remove Contacts run the following command: sudo rm -Rf /Applications/Contacts.app
- RMF Control
- CM-7
- Severity
- L
- CCI
- CCI-000381
- Version
- AOSX-10-000515
- Vuln IDs
-
- V-59641
- Rule IDs
-
- SV-74071r1_rule
Checks: C-60411r1_chk
To check for the existence of Mail, run the following command: ls -ald /Applications/Mail.app If anything is returned, this is a finding.
Fix: F-65051r1_fix
To remove Mail run the following command: sudo rm -Rf /Applications/Mail.app
- RMF Control
- AU-9
- Severity
- M
- CCI
- CCI-000162
- Version
- AOSX-10-000332
- Vuln IDs
-
- V-59643
- Rule IDs
-
- SV-74073r1_rule
Checks: C-60413r1_chk
To check the ownership of the audit log folder, run the following command: sudo ls -lde $(sudo grep '^dir' /etc/security/audit_control | awk -F: '{print $2}') The results should show the owner (third column) to be root. If not, this is a finding.
Fix: F-65053r1_fix
For any log folder that has an incorrect owner, run the following command: sudo chown root [audit log folder]
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- AOSX-10-000520
- Vuln IDs
-
- V-59645
- Rule IDs
-
- SV-74075r1_rule
Checks: C-60415r1_chk
The system preference panel iCloud must be removed or disabled along with the Internet Accounts preference pane in a configuration profile. To check for the existence of the iCloud preference panel, run the following command: ls -ld /System/Library/PreferencePanes/iCloudPref.prefPane If anything is returned, and access to the iCloud and Internet Accounts preference panes have not been disabled with a configuration profile, this is a finding.
Fix: F-65055r1_fix
Either disable access to the iCloud and Internet Accounts preference panes through a configuration profile or run the following command to remove the iCloud panel: sudo rm -rf /System/Library/PreferencePanes/iCloudPref.prefPane
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000382
- Version
- AOSX-10-000530
- Vuln IDs
-
- V-59647
- Rule IDs
-
- SV-74077r2_rule
Checks: C-60417r5_chk
Sending diagnostic & usage data to Apple must be disabled. 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. To check if a configuration profile is configured to enforce this setting, run the following command: sudo system_profiler SPConfigurationProfileDataType | grep AutoSubmit If AutoSubmit is not set to '0', this is a finding.
Fix: F-65057r7_fix
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. This setting can be enforced using the "Security Privacy Policy" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- AOSX-10-000531
- Vuln IDs
-
- V-59649
- Rule IDs
-
- SV-74079r1_rule
Checks: C-60419r3_chk
To check if the 'Find My Mac' service is disabled, use the following command: sudo launchctl print-disabled system | grep com.apple.findmymacd If the results do not show the following: "com.apple.findmymacd" => true this is a finding.
Fix: F-65059r1_fix
To disable the 'Find My Mac' service, run the following command: sudo launchctl disable system/com.apple.findmymacd The system may need to be restarted for the update to take effect.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- AOSX-10-000532
- Vuln IDs
-
- V-59651
- Rule IDs
-
- SV-74081r1_rule
Checks: C-60421r2_chk
To check if the 'Find My Mac messenger' service is disabled, use the following command: sudo launchctl print-disabled system | grep com.apple.findmymacmessenger If the results do not show the following: "com.apple.findmymacmessenger" => true this is a finding.
Fix: F-65061r1_fix
To disable the 'Find My Mac messenger' service, run the following command: sudo launchctl disable system/com.apple.findmymacmessenger The system may need to be restarted for the update to take effect.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- AOSX-10-000535
- Vuln IDs
-
- V-59653
- Rule IDs
-
- SV-74083r2_rule
Checks: C-60423r6_chk
Location Services must be disabled. 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 a configuration profile is configured to enforce this setting, run the following command: sudo system_profiler SPConfigurationProfileDataType | grep DisableLocationServices If DisableLocationServices is not set to '1', this is a finding.
Fix: F-65063r5_fix
The setting "Enable Location Services" is found in System Preferences >> Security & Privacy >> Privacy >> Location Services. Uncheck the box that says 'Enable Location Services'. This setting can be enforced using the "Security Privacy Policy" configuration profile.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- AOSX-10-000545
- Vuln IDs
-
- V-59655
- Rule IDs
-
- SV-74085r2_rule
Checks: C-60425r2_chk
Bonjour multicast advertising must be disabled on the system. To check if multicast advertisements have been disabled, run the following command: sudo defaults read /System/Library/LaunchDaemons/com.apple.mDNSResponder | grep NoMulticastAdvertisements If nothing is returned, this is a finding.
Fix: F-65065r2_fix
To configure Bonjour to disable multicast advertising, run the following command: sudo /usr/libexec/PlistBuddy -c "Add :ProgramArguments:2 string '-NoMulticastAdvertisements'" /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- AOSX-10-000550
- Vuln IDs
-
- V-59657
- Rule IDs
-
- SV-74087r1_rule
Checks: C-60427r2_chk
To check if the 'UUCP' service is disabled, use the following command: sudo launchctl print-disabled system | grep com.apple.uucp If the results do not show the following: "com.apple.uucp" => true this is a finding.
Fix: F-65067r1_fix
To disable the 'UUCP' service, run the following command: sudo launchctl disable system/com.apple.uucp The system may need to be restarted for the update to take effect.
- RMF Control
- IA-2
- Severity
- M
- CCI
- CCI-000770
- Version
- AOSX-10-000565
- Vuln IDs
-
- V-59659
- Rule IDs
-
- SV-74089r1_rule
Checks: C-60429r1_chk
To check if SSH has root logins enabled, run the following command: sudo grep ^PermitRootLogin /etc/sshd_config If there is no result, or the result is set to 'yes', this is a finding.
Fix: F-65069r1_fix
In order to make sure that PermitRootLogin is disabled by sshd, run the following command: sudo sed -i.bak 's/^[\#]*PermitRootLogin.*/PermitRootLogin no/' /etc/sshd_config
- RMF Control
- IA-2
- Severity
- M
- CCI
- CCI-001941
- Version
- AOSX-10-000570
- Vuln IDs
-
- V-59663
- Rule IDs
-
- SV-74093r1_rule
Checks: C-60433r1_chk
To check which protocol is configured for sshd, run the following: sudo grep ^Protocol /etc/sshd_config If there is no result or the result is not '2', this is a finding.
Fix: F-65073r1_fix
In order to make sure that 'Protocol 2' is used by sshd, run the following command: sudo sed -i.bak 's/.*Protocol.*/Protocol 2/' /etc/sshd_config
- RMF Control
- IA-2
- Severity
- M
- CCI
- CCI-001942
- Version
- AOSX-10-000575
- Vuln IDs
-
- V-59665
- Rule IDs
-
- SV-74095r1_rule
Checks: C-60435r1_chk
To check which protocol is configured for sshd, run the following: sudo grep ^Protocol /etc/sshd_config If there is no result or the result is not '2', this is a finding.
Fix: F-65075r1_fix
In order to make sure that 'Protocol 2' is used by sshd, run the following command: sudo sed -i.bak 's/.*Protocol.*/Protocol 2/' /etc/sshd_config
- RMF Control
- IA-5
- Severity
- M
- CCI
- CCI-000194
- Version
- AOSX-10-000585
- Vuln IDs
-
- V-59667
- Rule IDs
-
- SV-74097r2_rule
Checks: C-60437r2_chk
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: system_profiler SPConfigurationProfileDataType | 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: sudo pwpolicy getaccountpolicies Look for the line <key>policyCategoryPasswordContent</key>. If it does not exist, and password policy is not controlled by a directory server, 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: F-65077r6_fix
This setting may be enforced using the "Passcode Policy" configuration profile or by a directory server. To set the password policy without a configuration profile, run the following command to save a copy of the current pwpolicy account policy file: sudo 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: sudo 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.
- RMF Control
- IA-5
- Severity
- M
- CCI
- CCI-000205
- Version
- AOSX-10-000590
- Vuln IDs
-
- V-59669
- Rule IDs
-
- SV-74099r2_rule
Checks: C-60439r1_chk
To check the currently applied policies for password and accounts, use the following command: sudo system_profiler SPConfigurationProfileDataType | grep minLength The parameter minLength should be '15'. If it is less than '15', this is a finding.
Fix: F-65079r2_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.
- RMF Control
- IA-5
- Severity
- H
- CCI
- CCI-000197
- Version
- AOSX-10-000605
- Vuln IDs
-
- V-59671
- Rule IDs
-
- SV-74101r1_rule
Checks: C-60441r2_chk
To check if the 'telnet' service is disabled, use the following command: sudo launchctl print-disabled system | grep com.apple.telnetd If the results do not show the following: "com.apple.telnetd" => true this is a finding.
Fix: F-65081r1_fix
To disable the 'telnet' service, run the following command: sudo launchctl disable system/com.apple.telnetd The system may need to be restarted for the update to take effect.
- RMF Control
- MA-4
- Severity
- H
- CCI
- CCI-002890
- Version
- AOSX-10-000690
- Vuln IDs
-
- V-59673
- Rule IDs
-
- SV-74103r1_rule
Checks: C-60443r2_chk
To check if the 'telnet' service is disabled, use the following command: sudo launchctl print-disabled system | grep com.apple.telnetd If the results do not show the following: "com.apple.telnetd" => true this is a finding.
Fix: F-65083r1_fix
To disable the 'telnet' service, run the following command: sudo launchctl disable system/com.apple.telnetd The system may need to be restarted for the update to take effect.
- RMF Control
- MA-4
- Severity
- H
- CCI
- CCI-003123
- Version
- AOSX-10-000691
- Vuln IDs
-
- V-59675
- Rule IDs
-
- SV-74105r1_rule
Checks: C-60445r2_chk
To check if the 'telnet' service is disabled, use the following command: sudo launchctl print-disabled system | grep com.apple.telnetd If the results do not show the following: "com.apple.telnetd" => true this is a finding.
Fix: F-65085r1_fix
To disable the 'telnet' service, run the following command: sudo launchctl disable system/com.apple.telnetd The system may need to be restarted for the update to take effect.
- RMF Control
- MA-4
- Severity
- H
- CCI
- CCI-000877
- Version
- AOSX-10-000695
- Vuln IDs
-
- V-59677
- Rule IDs
-
- SV-74107r1_rule
Checks: C-60447r2_chk
To check if the 'telnet' service is disabled, use the following command: sudo launchctl print-disabled system | grep com.apple.telnetd If the results do not show the following: "com.apple.telnetd" => true this is a finding.
Fix: F-65087r1_fix
To disable the 'telnet' service, run the following command: sudo launchctl disable system/com.apple.telnetd The system may need to be restarted for the update to take effect.
- RMF Control
- CM-5
- Severity
- M
- CCI
- CCI-001749
- Version
- AOSX-10-000710
- Vuln IDs
-
- V-59679
- Rule IDs
-
- SV-74109r2_rule
Checks: C-60449r1_chk
To check to make sure only applications downloaded from the App Store are allowed to run, type the following code: system_profiler SPConfigurationProfileDataType | grep AllowIdentifiedDevelopers If 'AllowIdentifiedDevelopers' is not set to '1', this is a finding.
Fix: F-65089r2_fix
This setting is enforced using the "Security Privacy Policy" configuration profile.
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-000711
- Vuln IDs
-
- V-59681
- Rule IDs
-
- SV-74111r2_rule
Checks: C-60451r1_chk
To check to make sure the user cannot override Gatekeeper settings, type the following code: system_profiler SPConfigurationProfileDataType | grep DisableOverride If DisableOverride is not set to '1', this is a finding.
Fix: F-65091r2_fix
This setting is enforced using the "Security Privacy Policy" configuration profile.
- RMF Control
- SC-10
- Severity
- M
- CCI
- CCI-001133
- Version
- AOSX-10-000720
- Vuln IDs
-
- V-59683
- Rule IDs
-
- SV-74113r1_rule
Checks: C-60453r1_chk
The SSH daemon ClientAliveInterval option must be set correctly. To check the idle timeout setting for SSH sessions, run the following: sudo grep ^ClientAliveInterval /etc/sshd_config If the setting is not '600', this is a finding.
Fix: F-65093r1_fix
In order to make sure that ClientAliveInterval is set correctly, run the following command: sudo sed -i.bak 's/.*ClientAliveInterval.*/ClientAliveInterval 600/' /etc/sshd_config
- RMF Control
- SC-10
- Severity
- M
- CCI
- CCI-001133
- Version
- AOSX-10-000721
- Vuln IDs
-
- V-59685
- Rule IDs
-
- SV-74115r1_rule
Checks: C-60455r1_chk
The SSH daemon ClientAliveCountMax option must be set correctly. To ensure the SSH idle timeout will occur when the 'ClientAliveCountMax' is set, run the following command: sudo grep ^ClientAliveCountMax /etc/sshd_config If the setting is not 'ClientAliveCountMax 0', this is a finding.
Fix: F-65095r1_fix
In order to make sure that the SSH idle timeout occurs precisely when the 'ClientAliveCountMax' is set, run the following command: sudo sed -i.bak 's/.*ClientAliveCountMax.*/ClientAliveCountMax 0/' /etc/sshd_config
- RMF Control
- SC-10
- Severity
- M
- CCI
- CCI-001133
- Version
- AOSX-10-000722
- Vuln IDs
-
- V-59687
- Rule IDs
-
- SV-74117r1_rule
Checks: C-60457r1_chk
The SSH daemon LoginGraceTime must be set correctly. To check the amount of time that a user can login through SSH, run the following command: sudo grep ^LoginGraceTime /etc/sshd_config If the value is not set to '30' or less, this is a finding.
Fix: F-65097r1_fix
In order to make sure that LoginGraceTime is configured correctly, run the following command: sudo sed -i.bak 's/.*LoginGraceTime.*/LoginGraceTime 30/' /etc/sshd_config
- RMF Control
- SC-13
- Severity
- M
- CCI
- CCI-002450
- Version
- AOSX-10-000750
- Vuln IDs
-
- V-59689
- Rule IDs
-
- SV-74119r1_rule
Checks: C-60459r2_chk
To view a list of installed certificates, run the following command: sudo security dump-keychain | grep labl | awk -F\" '{ print $4 }' If this list does not contain approved certificates, this is a finding.
Fix: F-65099r1_fix
Obtain the approved DOD certificates from the appropriate authority. Use Keychain Access from /Applications/Utilities to add certificates to the System keychain.
- RMF Control
- SC-28
- Severity
- M
- CCI
- CCI-001199
- Version
- AOSX-10-000780
- Vuln IDs
-
- V-59691
- Rule IDs
-
- SV-74121r1_rule
Checks: C-60461r1_chk
To check if FileVault 2 is enabled, run the following command: sudo fdesetup status If FileVault is 'Off' and the device is a laptop, this is a finding.
Fix: F-65101r3_fix
Open System Preferences >> Security and Privacy, and navigate to the FileVault tab. Use this panel to configure full-disk encryption. Alternately, from the command line, run the following command to enable FileVault: sudo fdesetup enable After FileVault is initially set up, additional users can be added.
- RMF Control
- SC-28
- Severity
- M
- CCI
- CCI-002475
- Version
- AOSX-10-000785
- Vuln IDs
-
- V-59693
- Rule IDs
-
- SV-74123r1_rule
Checks: C-60463r1_chk
To check if FileVault 2 is enabled, run the following command: sudo fdesetup status If FileVault is 'Off', and the device is a laptop, this is a finding.
Fix: F-65103r3_fix
Open System Preferences >> Security and Privacy, and navigate to the FileVault tab. Use this panel to configure full-disk encryption. Alternately, from the command line, run the following command to enable FileVault: sudo fdesetup enable After FileVault is initially set up, additional users can be added.
- RMF Control
- SC-28
- Severity
- M
- CCI
- CCI-002476
- Version
- AOSX-10-000786
- Vuln IDs
-
- V-59695
- Rule IDs
-
- SV-74125r1_rule
Checks: C-60465r1_chk
To check if FileVault 2 is enabled, run the following command: sudo fdesetup status If FileVault is 'Off', and the device is a laptop, this is a finding.
Fix: F-65105r3_fix
Open System Preferences >> Security and Privacy, and navigate to the FileVault tab. Use this panel to configure full-disk encryption. Alternately, from the command line, run the following command to enable FileVault: sudo fdesetup enable After FileVault is initially set up, additional users can be added.
- RMF Control
- SI-2
- Severity
- M
- CCI
- CCI-001233
- Version
- AOSX-10-000835
- Vuln IDs
-
- V-59697
- Rule IDs
-
- SV-74127r1_rule
Checks: C-60467r1_chk
Ask the SA or ISSO if an approved tool capable of continuous scanning is loaded on the system. The recommended system is the McAfee HBSS. If no such tool is installed on the system, this is a finding.
Fix: F-65107r1_fix
Install an approved HBSS solution onto the system.
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-000850
- Vuln IDs
-
- V-59699
- Rule IDs
-
- SV-74129r2_rule
Checks: C-60469r1_chk
If an approved HBSS DCM/DLP solution is installed, this is not applicable. To ensure external USB drives are disabled, run the following command: system_profiler SPConfigurationProfileDataType | grep -A 3 harddisk-external If the option 'eject,alert' is not set for 'harddisk-external', this is a finding.
Fix: F-65109r2_fix
This setting is enforced using the "Restrictions Policy" configuration profile.
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-000862
- Vuln IDs
-
- V-59701
- Rule IDs
-
- SV-74131r2_rule
Checks: C-60471r1_chk
To check the status of the usbmuxd daemon, run the following command: sudo launchctl list | grep usbmuxd If there is any output, this is a finding.
Fix: F-65111r2_fix
To disable the usbmuxd daemon, run the following command: sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.usbmuxd.plist
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-000925
- Vuln IDs
-
- V-59703
- Rule IDs
-
- SV-74133r2_rule
Checks: C-60473r1_chk
To check if the system if configured to automatically log in, run the following command: system_profiler SPConfigurationProfileDataType | grep DisableAutoLoginClient If 'com.apple.login.mcx.DisableAutoLoginClient' is not set to '1', this is a finding.
Fix: F-65113r2_fix
This setting is enforced using the "Login Window Policy" configuration profile.
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-000930
- Vuln IDs
-
- V-59705
- Rule IDs
-
- SV-74135r2_rule
Checks: C-60475r1_chk
To check if the login window is configured to prompt for user name and password, run the following command: system_profiler SPConfigurationProfileDataType | grep SHOWFULLNAME If there is no result, or SHOWFULLNAME is not set to '1', this is a finding.
Fix: F-65115r2_fix
This setting is enforced using the "Login Window Policy" configuration profile.
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-000950
- Vuln IDs
-
- V-59707
- Rule IDs
-
- SV-74137r1_rule
Checks: C-60477r1_chk
If HBSS is used, this is not applicable. To check if the OS X firewall has logging enabled, run the following command: /usr/libexec/ApplicationFirewall/socketfilterfw --getloggingmode | grep on If the result does not show 'on', this is a finding.
Fix: F-65117r1_fix
To enable the firewall logging, run the following command: sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setloggingmode on
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-000955
- Vuln IDs
-
- V-59709
- Rule IDs
-
- SV-74139r1_rule
Checks: C-60479r1_chk
To check if this setting is disabled run the following command as the primary user: defaults -currentHost read com.apple.Bluetooth RemoteWakeEnabled If the return value is '1', this is a finding.
Fix: F-65119r3_fix
This control needs to be manually changed on the computer by opening System Preferences >> Bluetooth, Click Advanced, and make sure the 'Allow Bluetooth devices to wake this computer' is not checked.
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-000965
- Vuln IDs
-
- V-59711
- Rule IDs
-
- SV-74141r1_rule
Checks: C-60481r3_chk
To check if Bluetooth Sharing is enabled, open up System Preferences->Sharing and verify that 'Bluetooth Sharing' is not checked 'ON'. If it is 'ON', this is a finding.
Fix: F-65121r2_fix
To disable Bluetooth Sharing, open System Preferences->Sharing and uncheck the box next to Bluetooth Sharing.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000382
- Version
- AOSX-10-000975
- Vuln IDs
-
- V-59713
- Rule IDs
-
- SV-74143r1_rule
Checks: C-60483r3_chk
To check if the 'Remote Apple Events' service is disabled, use the following command: sudo launchctl print-disabled system | grep com.apple.AEServer If the results do not show the following: "com.apple.AEServer" => true this is a finding.
Fix: F-65123r1_fix
To disable the 'Remote Apple Events' service, run the following command: sudo launchctl disable system/com.apple.AEServer The system may need to be restarted for the update to take effect.
- RMF Control
- CM-6
- Severity
- H
- CCI
- CCI-000366
- Version
- AOSX-10-000995
- Vuln IDs
-
- V-59715
- Rule IDs
-
- SV-74145r1_rule
Checks: C-60485r1_chk
To check if the tty_tickets option is set for sudo, run the following command: sudo grep tty_tickets /etc/sudoers If there is no result, this is a finding.
Fix: F-65125r1_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.
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-001065
- Vuln IDs
-
- V-59721
- Rule IDs
-
- SV-74151r1_rule
Checks: C-60491r1_chk
To list all of the accounts with a UID of '0', run this command: sudo dscl . -list /Users UniqueID | grep -w 0 | wc -l If the result is not '1', this is a finding.
Fix: F-65131r1_fix
Investigate as to why any additional accounts were set up with a UID of '0'. Remove any invalid accounts.
- RMF Control
- CM-6
- Severity
- L
- CCI
- CCI-000366
- Version
- AOSX-10-001075
- Vuln IDs
-
- V-59723
- Rule IDs
-
- SV-74153r2_rule
Checks: C-60493r1_chk
To check that the finder will only present the option to securely empty trash run the following command as the primary user: system_profiler SPConfigurationProfileDataType | grep EmptyTrashSecurely If 'EmptyTrashSecurely' is not set to '1' or there is no result, this is a finding.
Fix: F-65133r2_fix
This setting is enforced using the "Custom Policy" configuration profile.
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-001080
- Vuln IDs
-
- V-59725
- Rule IDs
-
- SV-74155r1_rule
Checks: C-60495r1_chk
If an approved HBSS solution is installed per AOSX-10-000835, this is not applicable. To check if the OS X firewall has been enabled, run the following command: sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate If the result is 'disabled', this is a finding.
Fix: F-65135r1_fix
To enable the firewall run the following command: sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate on
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-001110
- Vuln IDs
-
- V-59727
- Rule IDs
-
- SV-74157r1_rule
Checks: C-60497r1_chk
To display all directories that are writable by all and not owned by root, run the following command: sudo find / -type d -perm +o+w -not -uid 0 If anything is returned, and those directories are not owned by a local admin or application account, this is a finding.
Fix: F-65137r1_fix
To change the ownership of any finding, run the following command: sudo find / -type d -perm +o+w -not -uid 0 -exec chown root {} \;
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-001115
- Vuln IDs
-
- V-59729
- Rule IDs
-
- SV-74159r1_rule
Checks: C-60499r3_chk
To check if the 'finger' service is disabled, use the following command: sudo launchctl print-disabled system | grep com.apple.fingerd If the results do not show the following: "com.apple.fingerd" => true this is a finding.
Fix: F-65139r1_fix
To disable the 'finger' service, run the following command: sudo launchctl disable system/com.apple.fingerd The system may need to be restarted for the update to take effect.
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-001120
- Vuln IDs
-
- V-59731
- Rule IDs
-
- SV-74161r2_rule
Checks: C-60501r2_chk
Run the following command to view all world-writable directories that do not have the sticky bit set: sudo find / -type d \( -perm -0002 -a ! -perm -1000 \) If anything is returned, this is a finding.
Fix: F-65141r1_fix
Run the following command to set the sticky bit on all world-writable directories: sudo find / -type d \( -perm -0002 -a ! -perm -1000 \) -exec chmod +t {} \;
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-001125
- Vuln IDs
-
- V-59733
- Rule IDs
-
- SV-74163r1_rule
Checks: C-60503r1_chk
To check if the prompt for Apple ID and iCloud are disabled for new users, run the following command: sudo defaults read /System/Library/User\ Template/English.lproj/Library/Preferences/com.apple.SetupAssistant If there is no result, if it prints out that the domain "does not exist", or the results do not include 'DidSeeCloudSetup = 1 AND LastSeenCloudProductVersion = 10.10', this is a finding.
Fix: F-65143r1_fix
To ensure that the prompt for Apple ID and iCloud is disabled, run the following commands: sudo defaults write /System/Library/User\ Template/English.lproj/Library/Preferences/com.apple.SetupAssistant DidSeeCloudSetup -bool TRUE; sudo defaults write /System/Library/User\ Template/English.lproj/Library/Preferences/com.apple.SetupAssistant LastSeenCloudProductVersion '10.10'
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-001130
- Vuln IDs
-
- V-59735
- Rule IDs
-
- SV-74165r1_rule
Checks: C-60505r1_chk
To see if any user account has configured an Apple ID for iCloud usage, run the following command: sudo find /Users/ -name 'MobileMeAccounts.plist' -exec defaults read '{}' \; If the results show any accounts listed, this is a finding.
Fix: F-65145r5_fix
This must be manually resolved. With the affected user logged in, open System Preferences >> iCloud. Choose 'Sign Out'.
- RMF Control
- CM-6
- Severity
- L
- CCI
- CCI-000366
- Version
- AOSX-10-001140
- Vuln IDs
-
- V-59737
- Rule IDs
-
- SV-74167r2_rule
Checks: C-60507r1_chk
To check if the iTunes music sharing is disabled, run the following command: system_profiler SPConfigurationProfileDataType | grep disableSharedMusic If 'disableSharedMusic' is not set to '1', this is a finding.
Fix: F-65147r2_fix
This setting is enforced using the "Custom Policy" configuration profile.
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-001145
- Vuln IDs
-
- V-59739
- Rule IDs
-
- SV-74169r1_rule
Checks: C-60509r2_chk
If available, provide a list of setuids provided by a vendor. To list all of the files with the setuid bit set, run the following command to send all results to a file named suidfilelist.: sudo find / -perm -4000 -exec ls -ldb {} \; > suidfilelist If any of the files listed are not documented as needing to have the setuid bit set by the vendor, this is a finding.
Fix: F-65149r1_fix
Document all of the files with the setuid bit set. Remove any undocumented files.
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-001195
- Vuln IDs
-
- V-59741
- Rule IDs
-
- SV-74171r1_rule
Checks: C-60511r1_chk
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: F-65151r1_fix
To configure the system to not accept source-routed packets, add the following line to /etc/sysctl.conf: net.inet.ip.accept_sourceroute=0
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-001200
- Vuln IDs
-
- V-59743
- Rule IDs
-
- SV-74173r1_rule
Checks: C-60513r1_chk
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: F-65153r1_fix
To configure the system to ignore ICMP redirect messages, add the following line to /etc/sysctl.conf: net.inet.icmp.drop_redirect=1
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-001205
- Vuln IDs
-
- V-59745
- Rule IDs
-
- SV-74175r1_rule
Checks: C-60515r1_chk
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: F-65155r1_fix
To configure the system to disable IP forwarding, add the following line to /etc/sysctl.conf: net.inet.ip.forwarding=0
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-001206
- Vuln IDs
-
- V-59747
- Rule IDs
-
- SV-74177r1_rule
Checks: C-60517r1_chk
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: F-65157r1_fix
To configure the system to disable IP forwarding, add the following line to /etc/sysctl.conf: net.inet6.ip6.forwarding=0
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-001210
- Vuln IDs
-
- V-59749
- Rule IDs
-
- SV-74179r1_rule
Checks: C-60519r1_chk
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: F-65159r1_fix
To configure the system to not send ICMP redirects, add the following line to /etc/sysctl.conf: net.inet.ip.redirect=0
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-001211
- Vuln IDs
-
- V-59751
- Rule IDs
-
- SV-74181r1_rule
Checks: C-60521r1_chk
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: F-65161r2_fix
To configure the system to not send ICMP redirects, add the following line to /etc/sysctl.conf: net.inet6.ip6.redirect=0
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-001215
- Vuln IDs
-
- V-59753
- Rule IDs
-
- SV-74183r1_rule
Checks: C-60523r1_chk
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: F-65163r1_fix
To configure the system to not forward source-routed packets, add the following line to /etc/sysctl.conf: net.inet.ip.sourceroute=0
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-001220
- Vuln IDs
-
- V-59755
- Rule IDs
-
- SV-74185r1_rule
Checks: C-60525r1_chk
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: F-65165r1_fix
To disable ICMP timestamp responses, add the following line to /etc/sysctl.conf: net.inet.icmp.timestamp=0
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-001235
- Vuln IDs
-
- V-59757
- Rule IDs
-
- SV-74187r1_rule
Checks: C-60527r1_chk
To list the network devices that are enabled on the system, run the following command: sudo networksetup -listallnetworkservices A disabled device will have an asterisk in front of its name. If any listed device that is not in use is missing this asterisk, this is a finding.
Fix: F-65167r2_fix
To disable a network device, run the following command, substituting the name of the device in place of '<networkservice>': sudo networksetup -setnetworkserviceenabled '<networkservice>' off
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-001240
- Vuln IDs
-
- V-59759
- Rule IDs
-
- SV-74189r1_rule
Checks: C-60529r1_chk
Run the following command to check if IPv6 is enabled on any network interfaces: sudo networksetup -listallnetworkservices | (while read dev; do echo "$dev"; networksetup -getinfo "$dev" | grep IPv6:; echo ; done) If there is an enabled network interface without the setting 'IPv6: Off' and it does not require IPv6, this is a finding.
Fix: F-65169r1_fix
Run the following command to turn off IPv6 addressing for the Ethernet interface: sudo networksetup -setv6off 'Ethernet' Repeat this command for each enabled interface, interface names are case sensitive.
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-001260
- Vuln IDs
-
- V-59761
- Rule IDs
-
- SV-74191r1_rule
Checks: C-60531r1_chk
To check if the system is using secure virtual memory run the following command: sysctl vm.swapusage If the result does not show '(encrypted)', this is a finding.
Fix: F-65171r1_fix
To ensure secure virtual memory is secure, run the following command: sudo defaults write /Library/Preferences/com.apple.virtualMemory DisableEncryptedSwap -bool FALSE
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- AOSX-10-001270
- Vuln IDs
-
- V-59763
- Rule IDs
-
- SV-74193r1_rule
Checks: C-60533r2_chk
To check if the 'Internet Sharing' service is disabled, use the following command: sudo launchctl print-disabled system | grep com.apple.NetworkSharing If the results do not show the following: "com.apple.NetworkSharing" => true this is a finding.
Fix: F-65173r1_fix
To disable the 'Internet Sharing' service, run the following command: sudo launchctl disable system/com.apple.NetworkSharing The system may need to be restarted for the update to take effect.
- RMF Control
- AC-7
- Severity
- M
- CCI
- CCI-000044
- Version
- AOSX-10-001325
- Vuln IDs
-
- V-59765
- Rule IDs
-
- SV-74195r2_rule
Checks: C-60535r3_chk
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: system_profiler SPConfigurationProfileDataType | 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: sudo pwpolicy getaccountpolicies Look for the line '<key>policyCategoryAuthentication</key>'. If this does not exist, and password policy is not controlled by a directory server, 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: F-65175r7_fix
To set the password policy without a configuration profile, run the following command to save a copy of the current pwpolicy account policy file: sudo 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: sudo 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: sudo 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.
- RMF Control
- AC-7
- Severity
- M
- CCI
- CCI-002238
- Version
- AOSX-10-001326
- Vuln IDs
-
- V-59767
- Rule IDs
-
- SV-74197r2_rule
Checks: C-60537r3_chk
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: system_profiler SPConfigurationProfileDataType | 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: sudo pwpolicy getaccountpolicies Look for the line '<key>policyCategoryAuthentication</key>'. If this does not exist, and password policy is not controlled by a directory server, 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: F-65177r6_fix
To set the password policy without a configuration profile, run the following command to save a copy of the current pwpolicy account policy file: sudo 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: sudo 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.
- RMF Control
- AU-5
- Severity
- M
- CCI
- CCI-000140
- Version
- AOSX-10-001355
- Vuln IDs
-
- V-59769
- Rule IDs
-
- SV-74199r1_rule
Checks: C-60539r1_chk
To view the setting for the audit control system, run the following command: sudo grep ^policy /etc/security/audit_control | grep ahlt If there is no result, this is a finding.
Fix: F-65179r1_fix
Edit the /etc/security/audit_control file, and change the value for policy to include the setting 'ahlt'. To programmatically do this, run the following command: sudo sed -i.bak '/^policy/ s/$/,ahlt/' /etc/security/audit_control; sudo audit -s
- RMF Control
- CM-6
- Severity
- H
- CCI
- CCI-000366
- Version
- AOSX-10-001465
- Vuln IDs
-
- V-59785
- Rule IDs
-
- SV-74215r1_rule
Checks: C-60541r1_chk
Ask the SA or ISSO if an approved anti-virus solution is loaded on the system. The anti-virus solution may be bundled with an approved host-based security solution. If there is no local anti-virus solution installed on the system, this is a finding.
Fix: F-65195r1_fix
Install an approved anti-virus solution onto the system.
- RMF Control
- CM-7
- Severity
- L
- CCI
- CCI-000381
- Version
- AOSX-10-002050
- Vuln IDs
-
- V-59787
- Rule IDs
-
- SV-74217r2_rule
Checks: C-60543r2_chk
AirDrop must be disabled. To check if AirDrop has been disabled, run the following command: sudo system_profiler SPConfigurationProfileDataType | grep DisableAirDrop If DisableAirDrop is not set to '1', this is a finding.
Fix: F-65197r2_fix
Disabling AirDrop is enforced using the "Restrictions Policy" configuration profile.
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-002055
- Vuln IDs
-
- V-59789
- Rule IDs
-
- SV-74219r1_rule
Checks: C-60545r1_chk
Ask the SA or ISSO if an approved PKI authentication solution is implemented on the system for user logins and privileged access. If a non-emergency account can log into the system or gain privileged access without a smart card, this is a finding.
Fix: F-65199r1_fix
Implement PKI authentication using approved third-party PKI tools, to integrate with an existing directory services infrastructure or local password database, where no directory services infrastructure exists.
- RMF Control
- CM-6
- Severity
- M
- CCI
- CCI-000366
- Version
- AOSX-10-002060
- Vuln IDs
-
- V-59791
- Rule IDs
-
- SV-74221r1_rule
Checks: C-60547r1_chk
To determine if the system is integrated to a directory server, ask the SA or ISSO or run the following command: sudo dscl localhost -list . | grep -vE '(Contact | Search | Local)' If nothing is returned, or if the system is not integrated into a directory service infrastructure, this is a finding.
Fix: F-65201r1_fix
Integrate the system into an existing directory services infrastructure, such as Active Directory.
- RMF Control
- AU-12
- Severity
- M
- CCI
- CCI-000172
- Version
- AOSX-10-002065
- Vuln IDs
-
- V-59793
- Rule IDs
-
- SV-74223r1_rule
Checks: C-60549r1_chk
In order to view the currently configured flags for the audit daemon, run the following command: sudo grep ^flags /etc/security/audit_control Privileged access, including administrative use of the command line tools kextload and kextunload, is logged via the 'ad' flag. If 'ad' is not listed in the result of the check, this is a finding.
Fix: F-65203r1_fix
To make sure the appropriate flags are enabled for auditing, run the following command: sudo sed -i.bak '/^flags/ s/$/,ad/' /etc/security/audit_control; sudo audit -s A text editor may also be used to implement the required updates to the /etc/security/audit_control file.
- RMF Control
- AU-12
- Severity
- M
- CCI
- CCI-000172
- Version
- AOSX-10-002070
- Vuln IDs
-
- V-59795
- Rule IDs
-
- SV-74225r1_rule
Checks: C-60551r1_chk
In order to view the currently configured flags for the audit daemon, run the following command: sudo grep ^flags /etc/security/audit_control Changes to file permissions are logged by way of the 'fm' flag. If 'fm' is not listed in the result of the check, this is a finding.
Fix: F-65205r1_fix
To make sure the appropriate flags are enabled for auditing, run the following command: sudo sed -i.bak '/^flags/ s/$/,fm/' /etc/security/audit_control; sudo audit -s A text editor may also be used to implement the required updates to the /etc/security/audit_control file.
- RMF Control
- AU-12
- Severity
- M
- CCI
- CCI-000172
- Version
- AOSX-10-002075
- Vuln IDs
-
- V-59797
- Rule IDs
-
- SV-74227r1_rule
Checks: C-60553r1_chk
In order to view the currently configured flags for the audit daemon, run the following command: sudo grep ^flags /etc/security/audit_control Changes to file permissions are logged by way of the 'fm' flag. If 'fm' is not listed in the result of the check, this is a finding.
Fix: F-65207r1_fix
To make sure the appropriate flags are enabled for auditing, run the following command: sudo sed -i.bak '/^flags/ s/$/,fm/' /etc/security/audit_control; sudo audit -s A text editor may also be used to implement the required updates to the /etc/security/audit_control file.
- RMF Control
- AU-12
- Severity
- M
- CCI
- CCI-000172
- Version
- AOSX-10-002080
- Vuln IDs
-
- V-59799
- Rule IDs
-
- SV-74229r1_rule
Checks: C-60555r1_chk
In order to view the currently configured flags for the audit daemon, run the following command: sudo grep ^flags /etc/security/audit_control Changes to file permissions are logged by way of the 'fm' flag. If 'fm' is not listed in the result of the check, this is a finding.
Fix: F-65209r1_fix
To make sure the appropriate flags are enabled for auditing, run the following command: sudo sed -i.bak '/^flags/ s/$/,fm/' /etc/security/audit_control; sudo audit -s A text editor may also be used to implement the required updates to the /etc/security/audit_control file.
- RMF Control
- IA-5
- Severity
- M
- CCI
- CCI-000199
- Version
- AOSX-10-002085
- Vuln IDs
-
- V-59801
- Rule IDs
-
- SV-74231r2_rule
Checks: C-60557r3_chk
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: system_profiler SPConfigurationProfileDataType | 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: sudo pwpolicy getaccountpolicies Look for the line <key>policyCategoryPasswordChange</key>. If it does not exist, and password policy is not controlled by a directory server, 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: F-65211r5_fix
This setting may be enforced using the "Passcode Policy" configuration profile or by a directory server. To set the password policy without a configuration profile, run the following command to save a copy of the current pwpolicy account policy file: sudo 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: sudo 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.
- RMF Control
- IA-5
- Severity
- M
- CCI
- CCI-000200
- Version
- AOSX-10-002090
- Vuln IDs
-
- V-59803
- Rule IDs
-
- SV-74233r2_rule
Checks: C-60559r3_chk
Password policy can be set with the "Passcode 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 | 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: sudo pwpolicy getaccountpolicies Look for the line <key>policyCategoryPasswordContent</key>. If it does not exist, and password policy is not controlled by a directory server, 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: F-65213r3_fix
This setting may be enforced using the "Passcode Policy" configuration profile or by a directory server. To set the password policy without a configuration profile, run the following command to save a copy of the current pwpolicy account policy file: sudo 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: sudo 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.
- RMF Control
- AU-12
- Severity
- M
- CCI
- CCI-000172
- Version
- AOSX-10-002095
- Vuln IDs
-
- V-59805
- Rule IDs
-
- SV-74235r1_rule
Checks: C-60561r1_chk
In order to view the currently configured flags for the audit daemon, run the following command: sudo grep ^flags /etc/security/audit_control Changes to file permissions are logged by way of the 'fm' flag. If 'fm' is not listed in the result of the check, this is a finding.
Fix: F-65215r1_fix
To make sure the appropriate flags are enabled for auditing, run the following command: sudo sed -i.bak '/^flags/ s/$/,fm/' /etc/security/audit_control; sudo audit -s A text editor may also be used to implement the required updates to the /etc/security/audit_control file.
- RMF Control
- AU-12
- Severity
- M
- CCI
- CCI-000172
- Version
- AOSX-10-002100
- Vuln IDs
-
- V-59807
- Rule IDs
-
- SV-74237r1_rule
Checks: C-60563r1_chk
The options to configure the audit daemon are located in the /etc/security/audit_control file. To view the current settings, run the following command: sudo grep ^flags /etc/security/audit_control If the 'lo', 'ad', and 'aa' options are not set, this is a finding.
Fix: F-65217r1_fix
To set the audit flags to the recommended setting, run the following command to add the flags 'lo', 'ad', and 'aa' all at once: sudo sed -i.bak '/^flags/ s/$/,lo,ad,aa/' /etc/security/audit_control; sudo audit -s A text editor may also be used to implement the required updates to the /etc/security/audit_control file.
- RMF Control
- SI-11
- Severity
- M
- CCI
- CCI-001314
- Version
- AOSX-10-002105
- Vuln IDs
-
- V-59809
- Rule IDs
-
- SV-74239r1_rule
Checks: C-60565r3_chk
Log files are controlled by newsyslog and aslmanager. These commands check for log files that exist on the system and print out the log with corresponding ownership. Run them from inside /var/log: sudo stat -f '%Su:%Sg:%N' $(grep -v '^#' /etc/newsyslog.conf | awk '{ print $1 }') 2> /dev/null sudo stat -f '%Su:%Sg:%N' $(grep -e '^>' /etc/asl.conf /etc/asl/* | awk '{ print $2 }') 2> /dev/null If there are any system log files that are not owned by root and group-owned by wheel or admin, this is a finding. Service logs may be owned by the service user account or group.
Fix: F-65219r1_fix
For any log file that returns an incorrect owner or group value, run the following command: sudo chown root:wheel [log file] [log file] is the full path to the log file in question. If the file is managed by newsyslog, find the configuration line in the directory /etc/newsyslog.d/ or the file /etc/newsyslog.conf and ensure that the owner:group column is set to root:wheel or the appropriate service user account and group. If the file is managed by aslmanager, find the configuration line in the directory /etc/asl/ or the file /etc/asl.conf and ensure that uid and gid options are either not present or are set to a service user account and group respectively.
- RMF Control
- SI-11
- Severity
- M
- CCI
- CCI-001314
- Version
- AOSX-10-002106
- Vuln IDs
-
- V-59811
- Rule IDs
-
- SV-74241r1_rule
Checks: C-60567r2_chk
These commands check for log files that exist on the system and print out the log with corresponding permissions. Run them from inside /var/log: sudo stat -f '%A:%N' $(grep -v '^#' /etc/newsyslog.conf | awk '{ print $1 }') 2> /dev/null sudo stat -f '%A:%N' $(grep -e '^>' /etc/asl.conf /etc/asl/* | awk '{ print $2 }') 2> /dev/null The correct permissions on log files should be '640' or less permissive for system logs. Any file with more permissive settings is a finding.
Fix: F-65221r1_fix
For any log file that returns an incorrect permission value, run the following command: sudo chmod 640 [log file] [log file] is the full path to the log file in question. If the file is managed by newsyslog, find the configuration line in the directory /etc/newsyslog.d/ or the file /etc/newsyslog.conf and edit the mode column to be 640 or less permissive. If the file is managed by aslmanager, find the configuration line in the directory /etc/asl/ or the file /etc/asl.conf and add or edit the mode option to be 'mode=0640' or less permissive.
- RMF Control
- SI-11
- Severity
- M
- CCI
- CCI-001314
- Version
- AOSX-10-002107
- Vuln IDs
-
- V-59813
- Rule IDs
-
- SV-74243r1_rule
Checks: C-60569r3_chk
These commands check for log files that exist on the system and print out the list of ACLs if there are any. sudo ls -ld@ $(grep -v '^#' /etc/newsyslog.conf | awk '{ print $1 }') 2> /dev/null sudo ls -ld@ $(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: F-65223r1_fix
For any log file that returns an ACL, run the following command: sudo chmod -N [log file] [log file] is the full path to the log file in question.
- RMF Control
- CM-5
- Severity
- M
- CCI
- CCI-001814
- Version
- AOSX-10-002110
- Vuln IDs
-
- V-59815
- Rule IDs
-
- SV-74245r1_rule
Checks: C-60571r1_chk
In order to view the currently configured flags for the audit daemon, run the following command: sudo grep ^flags /etc/security/audit_control Enforcement actions are logged by way of the 'fm' flag, which audits permission changes, and '-fr' and '-fw', which denote failed attempts to read or write to a file. If 'fm', '-fr', and '-fw' are not listed in the result of the check, this is a finding.
Fix: F-65225r1_fix
To make sure the appropriate flags are enabled for auditing, run the following command to add 'fm', '-fr', and '-fw' at the same time: sudo sed -i.bak '/^flags/ s/$/,fm,-fr,-fw/' /etc/security/audit_control; sudo audit -s A text editor may also be used to implement the required updates to the /etc/security/audit_control file.
- RMF Control
- MA-4
- Severity
- M
- CCI
- CCI-002884
- Version
- AOSX-10-002115
- Vuln IDs
-
- V-59817
- Rule IDs
-
- SV-74247r1_rule
Checks: C-60573r1_chk
In order to view the currently configured flags for the audit daemon, run the following command: sudo grep ^flags /etc/security/audit_control Administrative actions and changes to configuration settings are logged by way of the 'ad' flag. If 'ad' is not listed in the result of the check, this is a finding.
Fix: F-65227r1_fix
To make sure the appropriate flags are enabled for auditing, run the following command: sudo sed -i.bak '/^flags/ s/$/,ad/' /etc/security/audit_control; sudo audit -s A text editor may also be used to implement the required updates to the /etc/security/audit_control file.
- RMF Control
- AC-6
- Severity
- M
- CCI
- CCI-002234
- Version
- AOSX-10-002120
- Vuln IDs
-
- V-59819
- Rule IDs
-
- SV-74249r1_rule
Checks: C-60575r1_chk
In order to view the currently configured flags for the audit daemon, run the following command: sudo grep ^flags /etc/security/audit_control Privileged access is logged via the 'ad' flag. If 'ad' is not listed in the result of the check, this is a finding.
Fix: F-65229r1_fix
To make sure the appropriate flags are enabled for auditing, run the following command: sudo sed -i.bak '/^flags/ s/$/,ad/' /etc/security/audit_control; sudo audit -s A text editor may also be used to implement the required updates to the /etc/security/audit_control file.
- RMF Control
- AU-12
- Severity
- M
- CCI
- CCI-000172
- Version
- AOSX-10-002125
- Vuln IDs
-
- V-59821
- Rule IDs
-
- SV-74251r1_rule
Checks: C-60577r1_chk
In order to view the currently configured flags for the audit daemon, run the following command: sudo grep ^flags /etc/security/audit_control Attempts to log in as another user are logged by way of the 'lo' flag. If 'lo' is not listed in the result of the check, this is a finding.
Fix: F-65231r1_fix
To make sure the appropriate flags are enabled for auditing, run the following command: sudo sed -i.bak '/^flags/ s/$/,lo/' /etc/security/audit_control; sudo audit -s A text editor may also be used to implement the required updates to the /etc/security/audit_control file.
- RMF Control
- AC-7
- Severity
- M
- CCI
- CCI-002238
- Version
- AOSX-10-001324
- Vuln IDs
-
- V-59823
- Rule IDs
-
- SV-74253r2_rule
Checks: C-60579r3_chk
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: system_profiler SPConfigurationProfileDataType | 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: sudo pwpolicy getaccountpolicies Look for the line '<key>policyCategoryAuthentication</key>'. If this does not exist, and password policy is not controlled by a directory server, 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: F-65233r7_fix
This setting may be enforced using the "Passcode Policy" configuration profile or by a directory server. 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: sudo 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: sudo 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.
- RMF Control
- CM-7
- Severity
- M
- CCI
- CCI-000381
- Version
- AOSX-10-001275
- Vuln IDs
-
- V-59825
- Rule IDs
-
- SV-74255r1_rule
Checks: C-60581r2_chk
To check if the 'Web Sharing' service is disabled, use the following command: sudo launchctl print-disabled system | grep org.apache.httpd If the results do not show the following: "org.apache.httpd" => true this is a finding.
Fix: F-65235r1_fix
To disable the 'Web Sharing' service, run the following command: sudo launchctl disable system/org.apache.httpd The system may need to be restarted for the update to take effect.
- RMF Control
- AC-11
- Severity
- L
- CCI
- CCI-000060
- Version
- AOSX-10-000005
- Vuln IDs
-
- V-60389
- Rule IDs
-
- SV-74819r2_rule
Checks: C-61317r1_chk
To view the currently selected screen saver for the logged in user, run the following command: system_profiler SPConfigurationProfileDataType | grep moduleName If there is no result or defined moduleName, this is a finding.
Fix: F-66011r2_fix
This setting is enforced using the "Login Window Policy" configuration profile.