Select any two versions of this STIG to compare the individual requirements
Select any old version/release of this STIG to view the previous requirements
Verify ASET is being used. # crontab -l |grep aset If there is an output, then check to make sure the files in question are in the /usr/aset/masters directory. # ls -l /usr/aset/masters The following files should be in the listing: tune.high, tune.low, tune.med, and uid_aliases. If any of the files are not in the directory listing, this is a finding.
Install the default ASET configuration files.
Perform the following to determine if ASET is configured to check NIS+. # grep YPCHECK /usr/aset/asetenv If NIS+ is running and the YPCHECK variable is set to false, then this is a finding.
Edit the ASET configuration and set YPCHECK to true on systems running NIS. (If NIS+ is configured, YPCHECK must only be set to false to avoid going into NIS compatibility mode.) Configure NIS to use YPCHECK.
This can be checked in the /etc/default/sulogin file (on Solaris 5.X systems) to check if the system runs sulogin, or an equivalent, when booting into single-user mode.
Edit /etc/default/sulogin and set PASSREQ=YES or remove /etc/default/sulogin entirely. NOTE: This is a default on Solaris 5.5.1 and later.
Use the last command to check for multiple accesses to an account from different workstations/IP addresses. If users log directly onto accounts, rather than using the su command from their own named account to access them, this is a finding (such as logging directly on to Oracle). Also, ask the SA or the IAO if shared accounts are logged into directly or if users log on to an individual account and switch user to the shared account.
Use the switch user (su) command from a named account login to access shared accounts. Maintain audit trails that identify the actual user of the account name. Document requirements and procedures for users/administrators to log into their own accounts first and then switch user (su) to the shared account.
Verify RETRIES is set in the login file. # grep RETRIES /etc/default/login If RETRIES is not set or is more than 3, this is a finding. Verify the account locks after invalid login attempts. # grep LOCK_AFTER_RETRIES /etc/security/policy.conf If LOCK_AFTER_RETRIES is not set to YES, this is a finding.
Set RETRIES to 3 in the /etc/default/login file. #vi /etc/default/login Set LOCK_AFTER_RETRIES to YES in the /etc/security/policy.conf file. #vi /etc/security/policy.conf
Check the SLEEPTIME parameter in the /etc/default/login file. # grep SLEEPTIME /etc/default/login If SLEEPTIME is not listed, commented out, or less than 4, this is a finding.
Edit the /etc/default/login file and set SLEEPTIME to 4.
Examine the dtsession timeout variable setting: # cat /etc/dt/config/C/sys.resources | grep -i dtsession | grep -i lockTimeout If the dtsession timeout is greater than 15, commented or does not exist, this is a finding. Examine the Open Windows timeout settings, both global and for every user. # cat /usr/openwin/lib/app-defaults/XScreenSaver | egrep -i '\*(lock|timeout):' If the global Open Windows timeout is greater than 15 minutes, commented or does not exist, this is a finding. If the global lock setting is not true, this is a finding. # cut -d: -f6 /etc/passwd | xargs -iX egrep -i '^(lock|timeout):' X/.xscreensaver If the Open Windows timeout is greater than 15 minutes for any user, this is a finding. If the lock setting is not true for any user, this is a finding.
Configure the CDE lock manager to lock your screen after a certain amount of inactive time. To configure the CDE lock manager to lock the screen after 15 minutes of inactive time, enter the following commands (be sure NOT to overwrite an existing file). # cp /usr/dt/config/C/sys.resources /etc/dt/config/C/sys.resources # vi /etc/dt/config/C/sys.resources Locate and add/uncomment/change the line to N=15. dtsession*lockTimeout: <N> dtsession*lockTimeout: 15 Log out of CDE and log back in to verify that the timeout is in effect. The timeout parameter in /usr/openwin/lib/app-defaults/XScreenSaver and all users' .xscreensaver files should also be confirmed to be uncommented and set to 0:15:00.
Indications of inactive accounts are those without entries in the last log. Check the date in the last log to verify it is within the last 35 days. Obtain a listing of user accounts. #cat /etc/passwd | cut -f1 -d ":" Run the last command for each user account. # last < user account > If any user's account has not been accessed in the last 35 days and the account is not disabled via an entry in the password field in the /etc/passwd or /etc/shadow (or equivalent), check the /etc/passwd file to check if the account has a valid shell. If an inactive account is found that is not disabled, this is a finding.
All inactive accounts will have /bin/false, /usr/bin/false, or /dev/null as the default shell in the /etc/passwd file and have the password disabled. Disable the inactive accounts. Examine the inactive accounts using the last command. Note the date of last login for each account. If any (other than system and application accounts) exceed 35 days, then disable them by placing a shell of /bin/false or /dev/null in the shell field of the passwd file entry for that account. An alternative, and preferable method, is to disable the account using smc or the passwd command. # passwd -l < account to lock >
Check the system for duplicate UID 0 assignments by listing all accounts assigned UID 0. Procedure: # awk -F: '$3 == 0' /etc/passwd If any accounts other than root are assigned UID 0, this is a finding.
Remove or change the UID of accounts other than root that have UID 0.
Check for world-writable permissions on all directories in the root user's executable search path. Procedure (on multiple lines): # echo $PATH | sed 's/ /\\ /g; s/:/ /g' | xargs ls -ld If any of the directories in the PATH variable are world-writable, this is a finding.
For each world-writable path in root's executable search path, perform one of the following. 1. Remove the world-writable permission on the directory. Procedure: # chmod o-w <path> 2. Remove the world-writable directory from the executable search path. Procedure: Identify and edit the initialization file referencing the world-writable directory and remove it from the PATH variable.
Check the mode of library files. Procedure: # ls -lLR /usr/lib /lib /usr/sfw/lib If any of the library files have a mode more permissive than 0755, this is a finding.
Change the mode of library files to 0755 or less permissive. Procedure (example): # chmod 0755 /path/to/library-file NOTE: Library files should have an extension of .a or .so, possibly followed by a version number.
Check the ownership of each user's home directory listed in the /etc/passwd file. Procedure: # cut -d : -f 6 /etc/passwd | xargs -n1 ls -ld | more If any user's home directory is not owned by the assigned user, this is a finding.
Change the owner of a user's home directory to its assigned user. Procedure: # chown <user> <home directory>
Check the group ownership for each user in the /etc/passwd file. Procedure: # cut -d : -f 6 /etc/passwd | xargs -n1 ls -ld | more If any user's home directory is not group-owned by the assigned user's primary group, this is a finding. Home directories for application accounts requiring different group ownership must be documented using site-defined procedures.
Change the group owner for user's home directories to the primary group of the assigned user. Procedure: # chgrp groupname directoryname (Replace examples with appropriate group and home directory.) Document all changes.
Check global initialization files permissions. # ls -l /etc/.login # ls -l /etc/profile # ls -l /etc/bashrc # ls -l /etc/environment # ls -l /etc/security/environ # ls -l /etc/csh.login # ls -l /etc/csh.cshrc If global initialization files exist and are more permissive than 0644, this is a finding.
Change the mode of the global initialization file(s) to 0644. # chmod 0644 <global initialization file>
Check the ownership of global initialization files. Procedure: # ls -lL /etc/.login /etc/profile /etc/bashrc /etc/environment /etc/security/environ /etc/csh.login /etc/csh.cshrc If any global initialization file exists and is not owned by root, this is a finding.
Change the ownership of global initialization files with incorrect ownership. Procedure: # chown bin <global initialization files>
Check the group ownership of global initialization files. Procedure: # ls -lL /etc/.login /etc/profile /etc/bashrc /etc/environment /etc/security/environ /etc/csh.login /etc/csh.cshrc If any global initialization file exists and is not group-owned by root, sys, or bin, this is a finding.
Change the group ownership of the global initialization file(s) with incorrect group ownership. Procedure: # chgrp root <global initialization file>
Check global initialization files for the presence of "mesg -n" or "mesg n". Procedure: # grep mesg /etc/.login /etc/profile /etc/bashrc /etc/environment /etc/security/environ /etc/csh.login /etc/csh.cshrc If no existing global initialization files contain "mesg -n" or "mesg n", this is a finding.
Edit /etc/profile or another global initialization script and add the mesg -n command.
Check user home directories for local initialization files group-owned by a group other than the user's primary group or root. 1. List user accounts and their primary GID. # cut -d : -f 1,4 /etc/passwd 2. Check local initialization files for each user. # ls -al /<usershomedirectory>/.login # ls -al /<usershomedirectory>/.cshrc # ls -al /<usershomedirectory>/.logout # ls -al /<usershomedirectory>/.profile # ls -al /<usershomedirectory>/.bash_profile # ls -al /<usershomedirectory>/.bashrc # ls -al /<usershomedirectory>/.bash_logout # ls -al /<usershomedirectory>/.env # ls -al /<usershomedirectory>/.dtprofile # ls -al /<usershomedirectory>/.dispatch # ls -al /<usershomedirectory>/.emacs # ls -al /<usershomedirectory>/.exrc # find /<usershomedirectory>/.dt ! -fstype nfs ! -group <primary_group> -exec ls -ld {} \; 3. If any file is not group-owned by root or the user's primary GID, this is a finding.
Change the group-owner of the local initialization file to the user's primary group, or root. # chgrp [USER's primary GID] ~USER/[local initialization file]
Check /etc/vfstab and verify the "nosuid" mount option is used on any user filesystem (such as /export/home) or filesystems mounted from removable media or network shares. # cat /etc/vfstab Check zfs filesystems for setuid mounts. #zfs get setuid
Use the following procedure for UFS filesystems. Edit /etc/vfstab and add the "nosuid" mount option to any user filesystem (such as /export/home) or filesystems mounted from removable media or network shares. Use the following procedure for ZFS filesystems. # zfs setuid = off < file system >
Ask the system administrator if network bridging software is installed on the system or the system is configured for network bridging. If network bridging software is installed or the system is configured for network bridging, this is a finding.
Remove the network bridging software and configuration from the system.
Check the status of the rpcbind service. # svcs network/rpc/bind If the service is online and is not documented as required, this is a finding.
Disable the portmap service. # svcadm disable network/rpc/bind
# svcs network/shell If the service is enabled, this is a finding.
Disable the remote shell service and restart inetd. Procedure: # svcadm disable network/shell # svcadm refresh inetd
Determine if the rlogind service is running. # svcs rlogin If the rlogin service is enabled, this is a finding.
Disable the rlogind service. # svcadm disable rlogin # svcadm refresh inetd
Determine if any network analysis tools are installed. Procedure: # find / -name ethereal # find / -name wireshark # find / -name tshark # find / -name netcat # find / -name tcpdump # find / -name snoop If any network analysis tools are found, this is a finding.
Remove the network analysis tool binary from the system. The snoop binary is part of the SUNWrcmdc package, which may also be removed if none of its components are required. Procedure: # rm <binary> # pkgrm SUNWrcmdc
Check the group ownership of the print service configuration files. Procedure: # ls -lL /etc/printers.conf /etc/apache/httpd-standalone-ipp.conf /etc/smb.conf /etc/sfw/smb.conf /etc/samba/smb.conf /etc/sfw/samba/smb.conf If the files are not group-owned by root, bin, or sys, this is a finding.
Change the group owner of the print service configuration files. Procedure: # chgrp bin /etc/apache/httpd-standalone-ipp.conf # chgrp root /etc/printers.conf /etc/smb.conf /etc/sfw/smb.conf /etc/samba/smb.conf /etc/sfw/samba/smb.conf
Note: If sendmail is not installed, this requirement is not applicable. Find the alias files on the system. Procedure: # egrep '^O(A| AliasFile)' /etc/mail/sendmail.cf If the "alias file" is an NIS or LDAP map, this check is not applicable. The default location is /etc/mail/aliases. Check the group ownership of the alias file and the hashed version of it used by sendmail. Procedure: # ls -lL /etc/mail/aliases /etc/mail/aliases.db If the files are not group-owned by root, sys, smmsp, or bin, this is a finding.
Change the group owner of the /etc/mail/aliases files. Procedure: # chgrp bin /etc/mail/aliases # chgrp smmsp /etc/mail/aliases.db
Check if Help is disabled in Sendmail. Procedure: # telnet <host> 25 > help If the help command returns any Sendmail version information, this is a finding. If telnet is unavailable for testing, check the value of the HelpFile parameter in the sendmail.cf file. # grep HelpFile /etc/mail/sendmail.cf If the contents of the file indicated by the HelpFile parameter contains any Sendmail version information, this is a finding.
To disable the SMTP HELP command, clear the Sendmail help file. # echo > /etc/mail/helpfile
Check for the Sendmail version being displayed in the greeting. # telnet localhost 25 If a version number is displayed, this is a finding. If telnet is unavailable for testing, check the value of the SmtpGreetingMessage parameter in the sendmail.cf file. # grep SmtpGreetingMessage /etc/mail/sendmail.cf If the value of the SmtpGreetingMessage parameter contains the $v or $Z macros, this is a finding.
Ensure Sendmail or its equivalent has been configured to mask the version information. If necessary, change the O SmtpGreetingMessage line in the /etc/mail/sendmail.cf file as noted below. O SmtpGreetingMessage=$j Sendmail $v/$Z; $b Change it to: O SmtpGreetingMessage= Mail Server Ready ; $b
Search for any .forward files on the system. # find / -name .forward -print This is considered a finding if any .forward files are found on the system.
Remove .forward files from the system. # rm .forward Update the sendmail.cf file to ignore .forward files by adding ForwardPath="".
Determine the version of the SMTP service software, using a non-privileged account. $ /usr/lib/sendmail -d0 -bt < /dev/null (Note: While this command will report the sendmail version almost immediately, it will take several moments to return to the shell prompt. Press ctrl-C to terminate the sendmail process.) Version 8.14.4 is the latest required version. Version 8.14.4+Sun is available from Oracle for Solaris. If the sendmail version is not at least 8.14.4 or Oracle's latest version, this is a finding.
Obtain and install the latest version of Sendmail from Oracle through normal software update processes, as implemented locally.
Check for an enabled debug command provided by the SMTP service. Procedure: # telnet localhost 25 debug If the command does not return a 500 error code of command unrecognized, this is a finding. If telnet is unavailable for testing, check the version of sendmail. Run the following as a non-privileged user. $ echo \$Z | /usr/sbin/sendmail -bt -d0 If the version reported is less than 8.6, this is a finding.
Obtain and install a more recent version of Sendmail, which does not implement the DEBUG feature.
Check the SMTP service for an active decode command. Procedure: # telnet localhost 25 decode If the command does not return a 500 error code of command unrecognized, this is a finding. If telnet is unavailable for testing, check for the existence of the decode and uudecode aliases in the sendmail aliases file. Find the active sendmail aliases file. # grep AliasFile /etc/mail/sendmail.cf (The aliases file is usually at /etc/mail/aliases) Look for decode aliases in the aliases file. # grep decode /etc/mail/aliases If there is an uncommented decode or uudecode alias in the aliases file, this is a finding.
Comment out active decode and uudecode aliases in the aliases file. # vi /usr/mail/aliases Activate updated aliases file. # newaliases
Verify the tftp service is enabled. # svcs tftp If the tftp service is not installed or enabled, this check is not applicable. Check the /etc/passwd file to determine if TFTP is configured properly. Procedure: # grep tftp /etc/passwd If a "tftp" user account does not exist and TFTP is active, this is a finding. Check the user shell for the "tftp" user. If it is not /bin/false or equivalent, this is a finding. Check the home directory assigned to the "tftp" user. If no home directory is set, or the directory specified is not dedicated to the use of the TFTP service, this is a finding.
Create a TFTP user account if none exists. Assign a non-login shell to the TFTP user account, such as /bin/false. Assign a home directory to the TFTP user account.
Ask the SA if the log host server is collecting data for hosts outside the local enclave. If it is, this is a finding.
Configure the hosts outside of the local enclave to not log to this system.
# svcprop system-log | grep log_from_remote If the config/log_from_remote value is not false, this is a finding.
# svccfg -s system-log setprop config/log_from_remote=false # svcadm refresh system-log
Check the SSH daemon configuration for allowed protocol versions. # grep -i protocol /etc/ssh/sshd_config | grep -v '^#' If the variables Protocol 2,1 or Protocol 1 are defined on a line without a leading comment, this is a finding.
Edit the configuration file and modify the Protocol line to look like: Protocol 2 Reload sshd: kill -HUP <PID of sshd>
Determine if the system is configured for IPv4 forwarding. # svcs | grep svc:/network/ipv4-forwarding If the service is enabled, this is a finding.
Disable IPv4 forwarding on the system. # svcadm disable svc:/network/ipv4-forwarding
Check if the system is configured for IPv6 forwarding. # ndd /dev/ip6 ip6_forwarding If the value is not 0, this is a finding.
Disable IPv6 forwarding. # ndd -set /dev/ip6 ip6_forwarding 0 Edit startup scripts as necessary; add this command or remove commands setting the value to 1.
Check the permissions on exported NFS file systems. Procedure: # exportfs -v OR # more /etc/dfs/sharetab If the exported file systems do not contain the rw or ro options specifying a list of hosts or networks, this is a finding.
Edit /etc/dfs/dfstab and add ro and/or rw options (as appropriate) specifying a list of hosts or networks which are permitted access. Re-export the file systems.
If an IM client is installed, ask the SA if it has access to any public domain IM servers. If it does have access to public servers, this is a finding.
Uninstall the IM client from the system, or configure the client to only connect to DoD-approved IM services.
Verify the SWAT daemon is running under inetd. # svcs swat If SWAT is disabled or not installed, this is not applicable. Verify that TCP_wrappers is enabled for the SWAT daemon. # inetadm -l swat | grep tcp_wrappers If the tcp_wrappers value is unset or is set to FALSE, this is a finding. Verify access to the SWAT daemon is limited to localhost through the use of TCP_Wrappers. # more /etc/hosts.allow # more /etc/hosts.deny If the hosts.allow and hosts.deny access control files are configured such that remote access to SWAT is enabled, this is a finding. Ask the SA if SSH port forwarding is used to enable remote access to SWAT. If it is, this is not a finding. If all access to SWAT is via localhost using a local web browser, this is not a finding.
Enable tcp_wrappers for the SWAT daemon. # inetadm -m swat tcp_wrappers=true OR # inetadm -M tcp_wrappers=true Relfresh the inetd daemon. # svcadm refresh inetd Configure the hosts.allow and hosts.deny files to limit access to SWAT to localhost. Example: # echo ALL: ALL >> /etc/hosts.deny # echo swat: localhost >> /etc/hosts.allow
For each security tool on the system, determine if the tool is configured to notify the IAO and SA of any detected security problem. If such notifications are not configured, this is a finding.
Configure the security tools on the system to notify the IAO and SA when any security issues are detected.
Check the root crontab (crontab -l) for the presence of a package check command, such as, pkgchk -n. If no such cron job is found, this is a finding.
Add a cron job to run a package verification command, such as, pkgchk -n.
# svcprop -p defaults svc:/network/inetd | grep tcp_wrappers This should return a line with the following: defaults/tcp_wrappers boolean true If the above line contains the word false, this is a finding.
Enable tcp_wrappers. # svccfg -s svc:/network/inetd setprop defaults/tcp_wrappers=true # svcadm refresh inetd
Check for the existence of the /etc/hosts.allow and /etc/hosts.deny files. Procedure: # ls -la /etc/hosts.allow # ls -la /etc/hosts.deny If either file does not exist, this is a finding. Check for the presence of a default deny entry. Procedure: # grep "ALL: ALL" /etc/hosts.deny If the "ALL: ALL" entry is not present in the /etc/hosts.deny file, any TCP service from a host or network not matching other rules will be allowed access. If the entry is not in /etc/hosts.deny, this is a finding.
Edit the /etc/hosts.allow and /etc/hosts.deny files to configure access restrictions.
This is N/A for systems that do not have wireless network adapters. Verify that there are no wireless interfaces configured on the system: # ifconfig -a eth0 Link encap:Ethernet HWaddr b8:ac:6f:65:31:e5 inet addr:192.168.2.100 Bcast:192.168.2.255 Mask:255.255.255.0 inet6 addr: fe80::baac:6fff:fe65:31e5/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2697529 errors:0 dropped:0 overruns:0 frame:0 TX packets:2630541 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:2159382827 (2.0 GiB) TX bytes:1389552776 (1.2 GiB) Interrupt:17 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:2849 errors:0 dropped:0 overruns:0 frame:0 TX packets:2849 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:2778290 (2.6 MiB) TX bytes:2778290 (2.6 MiB) If a wireless interface is configured, it must be documented and approved by the local Authorizing Official. If a wireless interface is configured and has not been documented and approved, this is a finding.
Configure the system to disable all wireless network interfaces.
Check if the system is using NSS LDAP. # grep -v '^#' /etc/nsswitch.conf | grep ldap If no lines are returned, this vulnerability is not applicable. Verify the permissions of the certificate database files. # ls -lL /var/ldap/cert8.db /var/ldap/key3.db /var/ldap/secmod.db If the permissions of any of the files contain a "+", and extended ACL is present, this is a finding.
Remove the extended ACL from the certificate database files. # chmod A- /var/ldap/cert8.db /var/ldap/key3.db /var/ldap/secmod.db
Ask the SA if the system uses removable media for the boot loader. If it does, this is a finding.
Configure the system to use a bootloader installed on fixed media.
This check applies to the global zone only. Determine the type of zone that you are currently securing. # zonename If the command output is "global", this check applies. On systems that have a ZFS root, the active menu.lst file is typically located at /pool-name/boot/grub/menu.lst where "pool-name" is the mount point for the top-level dataset. On systems that have a UFS root, the active menu.lst file is typically located at /boot/grub/menu.lst. To locate the active GRUB menu, use the bootadm command with the list-menu option: # bootadm list-menu Determine if the system uses the GRUB boot loader. Procedure: # more /pool-name/boot/grub/menu.lst or # more /boot/grub/menu.lst If menu.lst does not exist, this is a finding.
Configure the system to use the GRUB bootloader.
This check applies to the global zone only. Determine the type of zone that you are currently securing. # zonename If the command output is "global", this check applies. On systems that have a ZFS root, the active menu.lst file is typically located at /pool-name/boot/grub/menu.lst where "pool-name" is the mount point for the top-level dataset. On systems that have a UFS root, the active menu.lst file is typically located at /boot/grub/menu.lst. To locate the active GRUB menu, use the bootadm command with the list-menu option: # bootadm list-menu Check the menu.lst file for the use of passwords. Procedure: # more /pool-name/boot/grub/menu.lst or # more /boot/grub/menu.lst Check for a password configuration line, such as the one below. password --md5 <password-hash> This line should be just below the line beginning with "timeout". Please note <password-hash> will be replaced by the actual MD5 encrypted password. If the password line is not in either of the files, this is a finding.
The GRUB console boot loader can be configured to use an MD5 encrypted password by adding password --md5 password-hash to the /pool-name/boot/grub/menu.lst or /boot/grub/menu.lst file. Use grub-md5-crypt to generate MD5 passwords from the command line.
This check applies to the global zone only. Determine the type of zone that you are currently securing. # zonename If the command output is "global", this check applies. On systems that have a ZFS root, the active menu.lst file is typically located at /pool-name/boot/grub/menu.lst where "pool-name" is the mount point for the top-level dataset. On systems that have a UFS root, the active menu.lst file is typically located at /boot/grub/menu.lst. To locate the active GRUB menu, use the bootadm command with the list-menu option: # bootadm list-menu Check the boot configuration for password settings. List any password configuration from the active menu file (substitute the file determined above in place of the example file provided below, if necessary). # grep password /pool-name/boot/grub/menu.lst or # grep password /boot/grub/menu.lst Check for a password configuration line, such as: password --md5 <password-hash> If the boot loader passwords are not protected using an MD5 hash or stronger, this is a finding.
Configure the GRUB bootloader to require a password. Procedure: Obtain the location of the active GRUB menu file. # bootadm list-menu Create a password hash using GRUB. The location of the GRUB binary may be different based on the specific system. # /boot/grub/bin/grub grub> md5crypt Password: <password> Encrypted: <password hash> grub> quit The encrypted password hash will be returned. Edit the GRUB menu configuration file, and add a line such as the following, substituting the password hash obtained above: password --md5 <password hash>
This check applies to the global zone only. Determine the type zone that you are currently securing. # zonename If the command output is "global", this check applies. On systems that have a ZFS root, the active menu.lst file is typically located at /pool-name/boot/grub/menu.lst where "pool-name" is the mount point for the top-level dataset. On systems that have a UFS root, the active menu.lst file is typically located at /boot/grub/menu.lst. To locate the active GRUB menu, use the bootadm command with the list-menu option: # bootadm list-menu Check the permissions of the menu.lst file. Procedure: # ls -lL /pool-name/boot/grub/menu.lst or # ls -lL /boot/grub/menu.lst If the permissions of the menu.lst file contain "+", an extended ACL is present, and this is a finding.
If the file with the extended ACL resides on a UFS filesystem: # getfacl /boot/grub/menu.lst Remove each ACE from the file. # setfacl -r [ACE] /boot/grub/menu.lst If the file with the extended ACL resides on a ZFS filesystem: # chmod A- /pool-name/boot/grub/menu.lst
This check applies to the global zone only. Determine the type of zone that you are currently securing. # zonename If the command output is "global", this check applies. On systems that have a ZFS root, the active menu.lst file is typically located at /pool-name/boot/grub/menu.lst where "pool-name" is the mount point for the top-level dataset. On systems that have a UFS root, the active menu.lst file is typically located at /boot/grub/menu.lst. To locate the active GRUB menu, use the bootadm command with the list-menu option: # bootadm list-menu Check the ownership of the menu.lst file. Procedure: # ls -lL /pool-name/boot/grub/menu.lst or # ls -lL /boot/grub/menu.lst If the owner of the file is not root, this is a finding.
Change the ownership of the file. # chown root /pool-name/boot/grub/menu.lst or # chown root /boot/grub/menu.lst
This check applies to the global zone only. Determine the type of zone that you are currently securing. # zonename If the command output is "global", this check applies. On systems that have a ZFS root, the active menu.lst file is typically located at /pool-name/boot/grub/menu.lst where "pool-name" is the mount point for the top-level dataset. On systems that have a UFS root, the active menu.lst file is typically located at /boot/grub/menu.lst. To locate the active GRUB menu, use the bootadm command with the list-menu option: # bootadm list-menu Check the group ownership of the menu.lst file. Procedure: # ls -lL /pool-name/boot/grub/menu.lst or # ls -lL /boot/grub/menu.lst If the group owner of the file is not root, bin, sys, or system this is a finding.
Change the group ownership of the file. # chgrp root /pool-name/boot/grub/menu.lst or # chgrp root /boot/grub/menu.lst
# grep mount /etc/rmmount.conf Confirm the nosuid option is configured. mount * hsfs udfs ufs -o nosuid If the nosuid option is not configured in the /etc/rmmount.conf file, this is a finding.
Edit /etc/rmmount.conf and add the nosuid mount option to the configuration.
Perform: # more /etc/security/audit_user If /etc/security/audit_user has entries other than root, ensure the users defined are audited with the same flags as all users as defined in /etc/security/audit_control file.
Edit the audit_user file and remove specific user configurations differing from the global audit settings.
Check /etc/security/audit_user ownership. # ls -lL /etc/security/audit_user If /etc/security/audit_user is not owned by root, this is a finding.
Change the owner of the /etc/security/audit_user file to root. # chown root /etc/security/audit_user
Check /etc/security/audit_user group ownership. # ls -lL /etc/security/audit_user If /etc/security/audit_user is not group owned by root, sys, or bin, this is a finding.
Change the group owner of the audit_user file to root, bin, or sys. Example: # chgrp root /etc/security/audit_user
Check /etc/security/audit_user permissions. # ls -lL /etc/security/audit_user If /etc/security/audit_user is more permissive than 0640, this is a finding.
Change the mode of the audit_user file to 0640. # chmod 0640 /etc/security/audit_user
Check the permissions of the file. # ls -lL /etc/security/audit_user If the permissions of the file contain a "+", an extended ACL is present, this is a finding.
Remove the extended ACL from the file. # chmod A- /etc/security/audit_user
# more /usr/aset/masters/uid_aliases If the /usr/aset/masters/uid_aliases file is not empty or all contents are not commented out, this is a finding.
Empty or comment out the entries in the uid_aliases file.
Perform the following to determine if ASET is being used. # crontab -l |grep aset A returned entry would indicate ASET is being utilized. Determine if ASET is configured to check firewall settings. # grep TASKS /usr/aset/asetenv | grep firewall If an entry is not returned, this is a finding.
If the system is used as a firewall and ASET is used, ensure the firewall parameter is configured in /usr/aset/asetenv.
Determine if ASET is being used. # crontab -l | grep aset Check the configuration of ASET. # more /usr/aset/asetenv OR Check that asetenv has not been modified since installation. # pkgchk SUNWast If there are any changes below the following two lines that are not comments, this is a finding. # Don't change from here on down ... # # there shouldn't be any reason to. # In addition, if any of the following lines do not match, this is a finding. TASKS="firewall env sysconf usrgrp tune cklist eeprom" CKLISTPATH_LOW=${ASETDIR}/tasks:#${ASETDIR} \ /util:${ASETDIR}/masters:/etc CKLISTPATH_MED=${CKLISTPATH_LOW}:/usr/bin:/usr/ucb CKLISTPATH_HIGH=${CKLISTPATH_MED}:/usr/lib:/sbin: \ /usr/sbin:/usr/ucblib YPCHECK=false PERIODIC_SCHEDULE="0 0 * * *" UID_ALIASES=${ASETDIR}/masters/uid_aliases (The default asetenv file can be found on the Solaris installation media.)
Restore the ASET configuration to vendor default and only modify the portions of the configuration designated as customizable.
Determine if ASET is being used. # crontab -l | grep aset If ASET is not used on the system, this is not applicable. If ASET is being used, but is not invoked with the "-u /usr/aset/userlist" option, this is a finding. Check the /usr/aset/userlist file. # ls -lL /usr/aset/userlist If /usr/aset/userlist file does not exist, this is a finding. An empty /usr/aset/userlist file, while not optimal, is not a finding.
Create the /usr/aset/userlist file and populate it with a list of authorized users.
If ASET is not used on the system, this is not applicable. Check the ownership of the /usr/aset/userlist file. # ls -lL /usr/aset/userlist If the owner of the file is not root, this is a finding.
Use the chmod command to change the owner of the /usr/aset/userlist file. # chown root /usr/aset/userlist
Check the group ownership of the file. # ls -lLd /usr/aset/userlist If the group owner of the file is not root, this is a finding.
Change the group ownership of the file. # chgrp root /usr/aset/userlist
# ls -lL /usr/aset/userlist If /usr/aset/userlist has a mode more permissive than 0600, this is a finding.
Change the mode of the /usr/aset/userlist file to 0600. # chmod 0600 /usr/aset/userlist
Check the permissions of the file. # ls -lLd /usr/aset/userlist If the permissions of the file or directory contains a "+", an extended ACL is present, this is a finding.
Remove the extended ACL from the file. # chmod A- /usr/aset/userlist
To enable NFS server logging the log option must be applied to all exported file systems in the /etc/dfs/dfstab. Perform the following to verify NFS is enabled. # share The preceding command will display all exported filesystems. Each line should contain a log entry to indicate logging is enabled. If the log entry is not present, this is a finding. If the share command does not return anything, then this is not an NFS server and this is considered not applicable. NFS version 4 does not support server logging. Verify NFS_SERVER_VERSMAX in /etc/default/nfs. # grep NFS_SERVER_VERSMAX /etc/default/nfs If NFS_SERVER_VERSMAX is commented out or set to any value but 2 or 3, this is a finding.
Edit /etc/dfs/dfstab and add the log option to all exported filesystems. Run the shareall command for the changes to take effect. NFS version 2 or 3 must be forced by updating the NFS_SERVER_VERSMAX variable appropriately in /etc/default/nfs and restarting the NFS daemon.
Search for all files with hidden extended attributes. # find / -xattr -print -exec runat {} ls -al \; If hidden extended file attributes exist, this is a finding.
Remove the hidden extended file attributes. # runat <file name> rm <attribute name>
Check passwd and group files for non-root user ids and group ids with a GID of 0. # more /etc/passwd # more /etc/group OR # awk -F: '$4 == 0' /etc/passwd # awk -F: '$3 == 0' /etc/group Confirm the only account with a group id of 0 is root. If the root account is not the only account with GID of 0, this is a finding.
Change the default GID of non-root accounts to a valid GID other than 0.
Check the ownership of the files and directories. # ls -lLdR /etc/zones If the owner of the file is not root, this is a finding. If zones are not installed on the system, this is not a finding.
Change the ownership of the files and directories. # chown -R root /etc/zones
Check the group ownership of the files and directories. # ls -lLRa /etc/zones If the group owner of the directory and all files is not root, sys, or bin, this is a finding. If zones are not installed on the system, this is not a finding.
Change the group ownership of the files and directories. # chgrp -R sys /etc/zones # chgrp root /etc/zones/*.xml # chgrp bin /etc/zones/SUN*.xml
Check the permissions of the files and directories. # ls -lLdR /etc/zones If the mode of a directory is more permissive than 0755, or the mode of a file more permissive than 0644, this is a finding. If zones are not installed on the system, this is not a finding.
Change the mode of the file or directory. # chmod 0644 <file> For directories: # chmod 0755 <directory>
Check the permissions of the file. # ls -lLd /etc/zones # ls -lLR /etc/zones If the permissions of the file or directory contains a "+", an extended ACL is present, this is a finding. If zones are not installed on the system, this is not a finding.
Remove the extended ACL from the file. # chmod A- <file>
If the system is not a global zone, this vulnerability is not applicable. List the non-global zones on the system. # zoneadm list -vi List the configuration for each zone. # zonecfg -z <zone> info Check the inherit-pkg-dir lines. If no such lines exist, this is not a finding. If the lines contain only those defined for sparse root zones (/lib, /platform, /sbin, /usr), this is not a finding. Otherwise, this is a finding.
Remove the inherit-pkg-dir lines or the directories not defined for sparse root zones. # zonecfg -z <zone> remove inherit-pkg-dir=<somedir>
If the system is not a global zone, this vulnerability is not applicable. List the non-global zones on the system. # zoneadm list -vi List the configuration for each zone. # zonecfg -z <zone> info Check the limitpriv lines. If a line set other than default, this is a finding. If limitpriv is not set, this is not a finding.
Change the limitpriv setting to default. # zonecfg -z <zone> set limitpriv=default
If the system is not a global zone, this vulnerability is not applicable. List the non-global zones on the system. # zoneadm list -vi List the configuration for each zone. # zonecfg -z <zone> info Check for device lines. If such a line exists, this is a finding.
Remove all device assignments from the non-global zone. # zonecfg -z <zone> remove device <device>
Note: This STIG has been moved to sunset and will no longer be maintained. # uname -a Oracle has committed to indefinite "sustaining support" for recent Solaris operating system releases. Verify proof of purchase of support from Oracle. If the release is not supported, this is a finding.
Upgrade to a supported version of the operating system.
Use the smpatch(1m) utility to check for available security updates from Oracle. # smpatch analyze If there are security updates available, this is a finding.
Apply available security updates from Oracle. # smpatch update
Determine if a file integrity baseline, which includes cryptographic hashes, has been created and maintained for the system. If no file integrity baseline exists for the system, this is a finding. If the file integrity baseline contains no cryptographic hashes, this is a finding. If the file integrity baseline is not maintained (has not been updated to be consistent with the latest approved system configuration changes), this is a finding.
Create a file integrity baseline, including cryptographic hashes, for the system.
Determine if there is a cron job, scheduled to run weekly or more frequently, to run the file integrity tool to check for unauthorized system libraries or binaries, or unauthorized modification to authorized system libraries or binaries. Procedure: # crontab -l If there is no cron job meeting these requirements, this is a finding. NOTE: The frequency may be increased to daily, if necessary, in accordance with the contingency plan.
Create a cron job, scheduled to run weekly or more frequently, to run the file integrity tool to check for unauthorized system libraries or binaries, or unauthorized modification to authorized system libraries or binaries. NOTE: The frequency may be increased to daily, if necessary, in accordance with the contingency plan.
NTP must be used and used only in the global zone. Determine the zone currently being secured. # zonename If the command output is not "global", NTP must be disabled. Check the system for a running NTP daemon. # svcs \*ntp\* | grep online If NTP or NTP4 is online, this is a finding. If the output from "zonename" is "global", NTP must be enabled. Check the system for a running NTP daemon. # svcs \*ntp\* | grep online If NTP or NTP4 is not online, this is a finding. If NTP is running, confirm the servers and peers or multicast client (as applicable) are local or an authoritative U.S. DoD source. # more /etc/inet/ntp.conf If a nonlocal/nonauthoritative (U.S. DoD source) time-server is used, this is a finding.
Use a local authoritative time server synchronizing to an authorized DoD time source. Ensure all systems in the facility feed from one or more local time servers that feed from the authoritative time server.
NTP must be used and used only in the global zone. Determine the type of zone currently being secured. # zonename If the command output is not "global", then NTP must be disabled. Check the system for a running NTP daemon. # svcs \*ntp\* | grep online If NTP or NTP4 is online, this is a finding. If the output from "zonename" is "global", then NTP must be enabled. Check the system for a running NTP daemon. # svcs \*ntp\* | grep online If NTP or NTP 4 is not online, this is a finding.
Determine the type of zone currently being secured. # zonename If the command output is not "global", then NTP and NTP4 must be disabled. # svcadm disable ntp # svcadm disable ntp4 If the output from "zonename" is "global", then NTP or NTP4 must be enabled. # svcadm enable ntp or # svcadm enable ntp4
Determine the zone that you are currently securing. # zonename If the command output is not "global", this is not applicable. Check the NTP daemon configuration for at least two external servers. # grep '^server' /etc/inet/ntp.conf | egrep -v '(127.127.1.1|127.127.1.0)' If less than two servers or external reference clocks (127.127.x.x other than 127.127.1.0 or 127.127.1.1) are listed, this is a finding.
Add an additional server line to /etc/inet/ntp.conf for each additional NTP server.
Determine the zone that you are currently securing. # zonename If the command output is not "global", this is not applicable. Check the NTP daemon configuration. # grep '^server' /etc/inet/ntp.conf If an NTP server is listed outside of the enclave, this is a finding.
Remove the server line from /etc/inet/ntp.conf for each NTP server that is external to the enclave.
Run ls -l /etc/inet/ntp.conf to display the owner of the NTP configuration file. If the owner is not root, this is a finding.
Change the owner of the NTP configuration file to root. # chown root /etc/inet/ntp.conf
Check the group ownership of the NTP configuration file. Procedure: # ls -l /etc/inet/ntp.conf If the group owner is not root, bin, or sys, this is a finding.
Change the group owner of the NTP configuration file. Procedure: # chgrp root /etc/inet/ntp.conf
Verify the mode for the NTP configuration file is not more permissive than 0640. # ls -l /etc/inet/ntp.conf If the mode is more permissive than 0640, this is a finding.
Change the mode of the NTP configuration file to 0640 or less permissive. # chmod 0640 /etc/inet/ntp.conf
Check for an extended ACL on the NTP configuration file. # ls -l /etc/inet/ntp.conf If the permissions contain a "+", the file has an extended ACL and this is a finding.
Remove the extended ACL from the file. # chmod A- /etc/inet/ntp.conf
Check the system for unnecessary user accounts. Procedure: # more /etc/passwd Some examples of unnecessary accounts include games, news, gopher, ftp, and lp. If an unnecessary account is found and its use is not justified and documented with the ISSO, this is a finding.
Remove all unnecessary accounts, such as games, from the /etc/passwd file before connecting a system to the network. Other accounts, such as news and gopher, associated with a service not in use should also be removed.
Check the system for duplicate account names. Example: # passwd -sa | sort | uniq -c | awk '$1 > 1 {print $2}' If any duplicate account names are found, this is a finding.
Change user account names, or delete accounts, so each account has a unique name.
Perform the following to ensure there are no duplicate UIDs. # logins -d If any duplicate UIDs are found, this is a finding.
Edit user accounts to provide unique UIDs for each account.
Check the UID assignments of all accounts. # more /etc/passwd Confirm all accounts with a UID of 99 and below are used by a system account. If a UID reserved for system accounts (0 - 99) is used by a non-system account, this is a finding.
Change the UID numbers for non-system accounts with reserved UIDs (those less or equal to 99).
# more /etc/passwd Confirm all accounts with a GID of 99 and below are used by a system account. If a GID reserved for system accounts (0 - 99) is used by a non-system account, this is a finding.
Change the primary group GID numbers for non-system accounts with reserved primary group GIDs (those less or equal to 99). # usermod -g <new_group> <user>
Perform the following to ensure there are no GIDs referenced in /etc/passwd not defined in /etc/group. # logins -o | awk -F: '$3 == ""' If any lines are returned, there are GIDs referenced in /etc/passwd that are not defined in /etc/group, this is a finding.
Add a group to the system for each GID referenced that does not have a corresponding group. #/usr/sbin/groupadd < group >
Access the system console and make a logon attempt. Check for either of the following login banners based on the character limitations imposed by the system. An exact match is required. If one of these banners is not displayed, this is a finding. "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. " OR "I've read & consent to terms in IS user agreem't."
Edit /etc/issue and add one of the DoD login banners (based on the character limitations imposed by the system). DoD Login Banners: "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." OR "I've read & consent to terms in IS user agreem't."
If the system does not use XWindows, this is not applicable. Check the "Dtlogin*greeting.labelString" parameter in /etc/dt/config/C/Xresources for either of the following login banners based on the character limitations imposed by the system. An exact match is required. If one of these banners is not displayed, this is a finding. If the file does not exist, this is a finding. "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. " OR "I've read & consent to terms in IS user agreem't."
Create/update /etc/dt/config/C/Xresources with Dtlogin*greeting.labelString: [DoD login banner text]. DoD Login Banners: "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." OR "I've read & consent to terms in IS user agreem't."
FTP to the system. # ftp localhost Check for either of the following login banners based on the character limitations imposed by the system. An exact match is required. If one of these banners is not displayed, this is a finding. If the system does not run the FTP service, this is not applicable. DoD Login Banners: "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." OR "I've read & consent to terms in IS user agreem't."
Edit /etc/ftpd/ftpaccess and add or edit the BANNER parameter ("banner /etc/ftpd/banner.msg"). # vi /etc/ftpd/ftpaccess Add one of the DoD Login Banners (based on the character limitations imposed by the system) to the /etc/ftpd/banner.msg file. # vi /et
Determine if successful logons are being logged. # last | more Determine if unsuccessful logons are being logged. # more /var/adm/loginlog If the commands do not return successful and unsuccessful logins, this is a finding. Check the syslog daemon configuration for authentication logging. # egrep "auth\.(info|debug)" /etc/syslog.conf If there are no entries in syslog for the auth service, this is a finding.
Verify that login logs are handled correctly in the /etc/syslog.conf file. Edit the /etc/syslog.conf file and add one of the entries below. auth.debug /var/log/authlog OR auth.* /var/log/authlog Verify that service startup scripts for syslog and utmp (if present) are enabled.
Determine if the system displays the date and time of the last successful login upon logging in. This can be accomplished by logging into the system and verifying whether or not the necessary information is displayed. If the system does not provide this information upon login, this is a finding. Last login information is provided automatically by the login(1) program for telnet and console login sessions. Verify the SSH daemon is configured to display last login information. # grep -i PrintLastLog /etc/ssh/sshd_config If PrintLastLog is present in the configuration and not disabled, this is not a finding. Otherwise, this is a finding.
Configure the system to display the date and time of the last successful login upon logging in. Enable PrintLastLog in the SSH daemon. To enable PrintLastLog in the SSH daemon, remove any lines disabling this option from /etc/ssh/sshd_config.
Determine if a publicly-viewable pattern is displayed during a session lock. If the session lock pattern is not publicly-viewable, this is a finding. Acceptable checks for settings. # grep -i dtsession /etc/dt/config/C/sys.resources | egrep -i "saverList|saverTimeout" The saverTimeout value should be 15 (see GEN000500). The saverList value of StartDtscreenBlank is an acceptable screensaver.
Edit the /etc/dt/config/C/sys.resources file and add/edit the following lines, using 15 for the saverTimeout, and using StartDtscreenBlank for the saverList. dtsession*saverTimeout: 15 dtsession*saverList: StartDtscreenBlank
If there is an application running on the system continuously in use (such as a network monitoring application), ask the SA what the name of the application is. Execute the following to determine which user owns the process(es) associated with the application. If the owner is root, this is a finding. # ps -ef | more
Configure the system so the owner of a session requiring a continuous screen display, such as a network management display, is not root. Ensure the display is also located in a secure, controlled access area. Document and justify this requirement. Ensure the terminal and keyboard for the display (or workstation) are secure from all but authorized personnel by maintaining them in a secure area, in a locked cabinet where a swipe card, or other positive forms of identification, must be used to gain entry.
Check the minimum time period between password changes for each user account is 1 day or greater. # awk -F: '$4 < 1 {print $1}' /etc/shadow If any results are returned that are not associated with a system account, this is a finding.
Edit the /etc/default/passwd file and set the variable "MINWEEKS" to 1 or greater. Set the per-user minimum password change times by using the following command on each user account. # passwd -n <number of days> <accountname>
Verify no accounts have blank passwords. # logins -p If any account with a blank password is found, this is a finding.
Remove, lock, or configure a password for any account with a blank password.
Check the system password length setting. # grep PASSLENGTH /etc/default/passwd If PASSLENGTH is not set to 15 or more, this is a finding.
Edit /etc/default/passwd and set the PASSLENGTH variable to 15 or greater.
Verify no password hash in /etc/passwd or /etc/shadow begins with a character other than an underscore (_) or dollar sign ($). # cut -d ':' -f2 /etc/passwd | egrep -v '^[*!$_]' # cut -d ':' -f2 /etc/shadow | egrep -v '^[*!$_]' If any unlocked password hash is present without an initial underscore (_) or dollar sign ($) character, this is a finding.
Edit /etc/security/policy.conf and add or change the CRYPT_DEFAULT setting to something other than __unix__, such as 6. Allowable values for CRYPT_DEFAULT may be found in the /etc/security/crypt.conf file. Change any passwords using non-compliant hashes.
Verify the traditional UNIX crypt algorithm is deprecated. # egrep CRYPT_ALGORITHMS_ALLOW /etc/security/policy.conf If CRYPT_ALGORITHMS_ALLOW is not set, is not set to "6", or is not set to "5,6", this is a finding. Verify new password hashes are generated using either the SHA-256 or SHA-512 cryptographic hashing algorithm. # egrep CRYPT_DEFAULT /etc/security/policy.conf If CRYPT_DEFAULT is not set or is not equal to 5 or 6, this is a finding.
Edit the /etc/security/policy.conf file. # vi /etc/security/policy.conf Uncomment or add the CRYPT_ALGORITHMS_ALLOW line and set it to "5,6". Update the CRYPT_DEFAULT default line to be equal to 5 or 6. The following lines are acceptable. CRYPT_ALGORITHMS_ALLOW=5,6 CRYPT_DEFAULT=6
Determine if any password hashes stored on the system were not generated using a FIPS 140-2 approved cryptographic hashing algorithm. Procedure: # cut -d ':' -f2 /etc/passwd # cut -d ':' -f2 /etc/shadow If any password hashes are present not beginning with $5$ or $6$, this is a finding. Verify that FIPS 140-2 approved cryptographic hashing algorithms are available. # egrep '^[56]' /etc/security/crypt.conf If no lines are returned, this is a finding.
If the /etc/security/crypt.conf file does not support FIPS 140-2 approved cryptographic hashing algorithms, upgrade to at least the Solaris 10 8/07 release. Edit the /etc/security/policy.conf file. # vi /etc/security/policy.conf Uncomment or add the CRYPT_ALGORITHMS_ALLOW line and set it to "5,6". Update the CRYPT_DEFAULT default line to be equal to 5 or 6. The following lines are acceptable. CRYPT_ALGORITHMS_ALLOW=5,6 CRYPT_DEFAULT=6 Update passwords for all accounts with non-compliant password hashes.
Check the MINUPPER setting. # egrep MINUPPER /etc/default/passwd If MINUPPER is not set to 1 or more, this is a finding.
Edit /etc/default/passwd and set the MINUPPER setting to at least 1.
Check the MINDIGIT setting. # grep MINDIGIT /etc/default/passwd If the MINDIGIT setting is less than 1, this is a finding.
Edit /etc/default/passwd and set the MINDIGIT setting to 1.
Check the MINSPECIAL setting. # grep MINSPECIAL /etc/default/passwd If the MINSPECIAL setting is less than 1, this is a finding.
Edit /etc/default/passwd and set MINSPECIAL to 1.
Check the MAXREPEATS setting. # grep MAXREPEATS /etc/default/passwd If the MAXREPEATS setting is greater than 3, this is a finding.
Edit /etc/default/passwd and set MAXREPEATS to 3.
Check the max days field (the 5th field) of /etc/shadow. # awk -F: '{print $1 ":" $5;}' /etc/shadow If the max days field is equal to 0 or greater than 60 for any account that is not password-locked, this is a finding.
Set the max days field to 60 for all user accounts. # passwd -x 60 <user> Set the MAXWEEKS parameter in /etc/default/passwd to a positive, non-zero value of 8 or less.
Ask the SA if there are any automated processing accounts on the system. If there are automated processing accounts on the system, ask the SA if the passwords for those automated accounts are changed at least once a year. If SA indicates passwords for automated processing accounts are not changed once per year, this is a finding.
Implement or establish procedures to change the passwords of automated processing accounts at least once per year.
Check /etc/default/passwd to verify the MINDIFF setting. # grep MINDIFF /etc/default/passwd If the setting is not present, or is less than 8, this is a finding.
Edit /etc/default/passwd and set or add a MINDIFF setting equal to or greater than 8.
Check /etc/default/passwd for dictionary check configuration. # grep DICTION /etc/default/passwd If the DICTIONLIST or DICTIONDBDIR settings are not present, or are set to non-existent files or directories, this is a finding.
Edit /etc/default/passwd; add or set DICTIONLIST to the dictionary file and DICTIONDBDIR to a database directory such as /var/passwd. Generate the password dictionary by running the mkpwdict command.
Check the HISTORY setting. # grep HISTORY /etc/default/passwd If HISTORY is not set to 5 or more, this is a finding.
Edit /etc/default/passwd and set HISTORY to 5.
Verify the root user is configured as a role, rather than a normal user. # egrep '^root:' /etc/user_attr If the returned line does not include "type=role", this is a finding. Verify at least one local user has been assigned the root role. # egrep '[:;]roles=[^;]*,?root([,;]|$)' /etc/user_attr If no lines are returned, no users are permitted to assume the root role, this is a finding.
Convert the root user into a role. # usermod -K type=role root Add the root role to authorized users' logins. # usermod -R root <userid>
Determine if root is assigned a home directory other than / by listing its home directory. Procedure: # grep "^root" /etc/passwd | awk -F":" '{print $6}' If the root user home directory is /, this is a finding.
The root home directory should be something other than / (such as /rootdir). Procedure: # mkdir /rootdir # chown root /rootdir # chgrp root /rootdir # chmod 700 /rootdir # cp -r /.??* /rootdir Edit the passwd file and change the root home directory to /rootdir. The cp -r /.??* command copies all files and subdirectories of file names beginning with "." into the new root directory, which preserves the previous root environment. The cp command must be executed from the / directory.
Check the mode of the root home directory. Procedure: # grep "^root" /etc/passwd | awk -F":" '{print $6}' # ls -ld <root home directory> If the mode of the directory is not equal to 0700, this is a finding. If the home directory is /, this is not applicable.
The root home directory will have permissions of 0700. Do not change the protections of the / directory. Use the following command to change protections for the root home directory. # chmod 0700 /rootdir.
Verify the root account's home directory has no extended ACL. # ls -ld ~root If the permissions include a "+", the directory has an extended ACL and this is a finding.
Remove the extended ACL from the directory. # chmod A- ~root
To view the root user's PATH, log in as the root user, and execute the following. # env | grep PATH This variable is formatted as a colon-separated list of directories. If there is an empty entry, such as a leading or trailing colon or two consecutive colons, this is a finding. If an entry begins with a character other than a slash (/), or has not been documented with the ISSO, this is a finding.
Edit the root user's local initialization files. Remove any empty path entries. Remove any relative path entries that have not been documented with the ISSO. Edit the root user's local initialization files and remove any empty entry that is defined.
Verify the LD_LIBRARY_PATH environment variable is empty or not defined for the root user. # echo $LD_LIBRARY_PATH If a path list is returned, this is a finding.
Edit the root user initialization files and remove any definition of LD_LIBRARY_PATH.
Verify the LD_PRELOAD environment variable is empty or not defined for the root user. # echo $LD_PRELOAD If a path list is returned, this is a finding.
Edit the root user initialization files and remove any definition of LD_PRELOAD.
Check the CONSOLE setting in /etc/default/login # grep CONSOLE /etc/default/login If CONSOLE is set to a value other than /dev/console, this is a finding.
Edit the /etc/default/login file and uncomment the line containing /dev/console if it is commented out.
Verify no auxiliary consoles are defined. # consadm -p If any output is generated, this is a finding.
Remove each auxiliary console. # consadm -d <console device>
Check if the root is used for direct logins. Procedure: # last root | grep -v reboot If any direct login records for root exist, this is a finding. Verify the root user is configured as a role, rather than a normal user. Procedure: # egrep '^root:' /etc/user_attr If the returned line does not include "type=role", this is a finding.
Convert the root user into a role. # usermod -K type=role root Add the root role to authorized users' logins. # usermod -R root <userid>
Check the following log files to determine if access to the root account is being logged. Try to su - and enter an incorrect password. # more /var/adm/sulog If root login accounts are not being logged, this is a finding.
Update /etc/default/su and set SYSLOG=YES. Ensure /etc/syslog.conf is configured to log auth.crit messages to capture all failed su attempts.
Perform the following to determine if /usr is partitioned. # grep /usr /etc/vfstab If /usr is partitioned, check the location of root's default shell. # awk -F: '$1 == "root" {print $7}' /etc/passwd If the root shell is found to be on a partitioned /usr filesystem or is in a directory symlinked to a partitioned /usr filesystem, even if the actual root shell is a symlink back to the root filesystem, this is a finding.
Change the root account's shell to one present on the / filesystem. Example: # usermod -s /sbin/sh root
Determine if root has logged in over an unencrypted network connection. First, determine if root has logged in over a network. Procedure: # last | grep "^root " | egrep -v "reboot|console" | more Next, determine if the SSH daemon is running. Procedure: # ps -ef |grep sshd If root has logged in over the network and SSHD is not running, this is a finding.
Enable SSH on the system and use it for all remote connections used to attain root access.
Determine if the SSH daemon is configured to permit root logins. Procedure: # grep -v "^#" /etc/ssh/sshd_config | grep -i permitrootlogin If the PermitRootLogin entry is not found or is not set to "no", this is a finding.
Edit the configuration file and set the PermitRootLogin option to no.
Check system directories for uneven file permissions. Procedure: # ls -lL /etc /bin /usr/bin /usr/ucb /sbin /usr/sbin Uneven file permissions exist if the file owner has less permissions than the group or other user classes. If any of the files in the above listed directories contain uneven file permissions, this is a finding.
Change the mode of files with uneven permissions so owners do not have less permission than group or world users.
Check the system for files with no assigned owner. Procedure: # find / -nouser -print If any files have no assigned owner, this is a finding.
All directories and files (executable and data) will have an identifiable owner and group name. Either trace files to an authorized user, change the file's owner to root, or delete them. Determine the legitimate owner of the files and use the chown command to set the owner and group to the correct value. If the legitimate owner cannot be determined, change the owner to root (but make sure none of the changed files remain executable because they could be Trojan horses or other malicious code). Examine the files to determine their origin and the reason for their lack of an owner/group.
Search the system for files without a valid group-owner. # find / -nogroup -print If any files are found, this is a finding.
Change the group owner for each file without a valid group owner. # chgrp <a-valid-group> /tmp/a-file-without-a-valid-group-owner
Check the mode of network services daemons. # ls -la /usr/bin /usr/sbin If the mode of a network services daemon is more permissive than 0755, this is a finding. NOTE: Network daemons not residing in these directories (such as httpd or sshd) must also be checked for the correct permissions. A way to locate network daemons, such as httpd and sshd, is with the ps command. # ps -ef | egrep '(sshd|httpd)'
Change the mode of the network services daemon. # chmod 0755 <path>
Verify network services daemon files have no extended ACLs. # ls -la /usr/sbin # ls -la /usr/bin If the permissions include a "+", the file has an extended ACL and this is a finding. NOTE: Network daemons not residing in these directories (such as httpd or sshd) must also be checked for the correct permissions. A way to locate network daemons, such as httpd and sshd, is with the ps command. # ps -ef | egrep '(sshd|httpd)'
Remove the extended ACL from the file. # chmod A- [file with extended ACL]
Check the permissions for files in /etc, /bin, /usr/bin, /usr/lbin, /usr/ucb, /sbin, and /usr/sbin. Procedure: # ls -lL /etc /bin /usr/bin /usr/lbin /usr/ucb /sbin /usr/sbin If any command file is listed and has a mode more permissive than 755, this is a finding. Note: Elevate to Severity Code I if any command file listed is world-writable.
Change the mode for system command files to 755 or less permissive. Procedure: # chmod 755 <filename>
Verify all system command files have no extended ACLs. # ls -lL /etc /bin /usr/bin /usr/lbin /usr/ucb /sbin /usr/sbin If the permissions include a "+", the file has an extended ACL, this is a finding.
Remove the extended ACL from the file. # chmod A- [file with extended ACL]
Check the ownership of system files, programs, and directories. Procedure: # ls -lLa /etc /bin /usr/bin /usr/lbin /usr/ucb /sbin /usr/sbin If any of the system files, programs, or directories are not owned by a system account, this is a finding.
Change the owner of system files, programs, and directories to a system account. Procedure: # chown root /some/system/file (A different system user may be used in place of root.)
Check the group ownership of system files, programs, and directories. Procedure: # ls -lLa /etc /bin /usr/bin /usr/lbin /usr/ucb /sbin /usr/sbin If any system file, program, or directory is not group-owned by a system group, this is a finding.
Change the group owner of system files to a system group. Procedure: # chgrp root /path/to/system/file (System groups other than root may be used.)
Check the mode of log file hierarchies. Procedure: # ls -lLRa /var/log /var/adm If any of the log files or their directories have modes more permissive than "0640", and these are not documented, this is a finding.
Change the mode of the system log file(s) to 0640 or less permissive. Procedure: # chmod "0640" /path/to/system-log-file NOTE: Do not confuse system log files with audit logs. Any subsystems that require less stringent permissions must be documented.
Verify all system log files have no extended ACLs. Procedure: # ls -lL /var/adm If the permissions include a "+", the file has an extended ACL. If an extended ACL exists, verify with the SA if the ACL is required to support authorized software and provides the minimum necessary permissions. If an extended ACL exists that provides access beyond the needs of authorized software, this is a finding.
Remove the extended ACL from the file. # chmod A- [file with extended ACL]
Check the mode of the manual page files. Procedure: # ls -lLR /usr/share/man /usr/sfw/share/man /usr/sfw/man If any of the manual page files have a mode more permissive than 0655, this is a finding.
Change the mode of manual page files to 0655 or less permissive. Procedure (example): # chmod 0655 <path>/<manpage>
Verify all manual page files have no extended ACLs. Check environment variable $MANPATH for full list of manpage locations. # echo $MANPATH Check for ACLs, note only a partial list is presented below. # ls -lLR /usr/share/man /usr/sfw/man /usr/sfw/share/man If the permissions include a "+", the file has an extended ACL and this is a finding.
Remove the extended ACL from the file. # chmod A- [file with extended ACL]
Verify system libraries have no extended ACLs. # ls -lL /usr/lib/* /lib/* /usr/sfw/lib If the permissions include a "+", the file has an extended ACL and this is a finding.
Remove the extended ACL from the file. # chmod A- [file with extended ACL]
Perform the following to check NIS file ownership. # ls -lRa /usr/lib/netsvc/yp /var/yp If the file ownership is not root, sys, or bin, this is a finding.
Change the ownership of NIS/NIS+/yp files to root, bin, or sys. Procedure: # chown -R root /usr/lib/netsvc/yp /var/yp
Perform the following to check NIS file ownership. # ls -lRa /usr/lib/netsvc/yp /var/yp If the file group owner is not root, sys, or bin, this is a finding.
Change the group owner of the NIS files to root, bin, or sys. Procedure: # chgrp -R root /usr/lib/netsvc/yp /var/yp
Perform the following to check NIS file mode. # ls -lRa /usr/lib/netsvc/yp /var/yp If the file's mode is more permissive than 0755, this is a finding.
Change the mode of NIS/NIS+/yp command files to 0755 or less permissive. Procedure: # chmod -R 0755 /usr/lib/netsvc/yp /var/yp
Verify NIS/NIS+/yp files have no extended ACLs. # ls -lLRa /usr/lib/netsvc/yp /var/yp If the permissions include a "+", the file has an extended ACL and this is a finding.
Remove the extended ACL from the directory and files. # chmod -R A- /usr/lib/netsvc/yp /var/yp
Verify the /etc/resolv.conf file is owned by root. Procedure: # ls -l /etc/resolv.conf If the file is not owned by root, this is a finding.
Change the owner of the /etc/resolv.conf file to root. # chown root /etc/resolv.conf
Check the group ownership of the resolv.conf file. Procedure: # ls -lL /etc/resolv.conf If the file is not group owned by root, bin, or sys, this is a finding.
Change the group owner of the /etc/resolv.conf file to root, bin, or sys. Procedure: # chgrp root /etc/resolv.conf
Check the mode of the /etc/resolv.conf file. Procedure: # ls -l /etc/resolv.conf If the file mode is more permissive than 0644, this is a finding.
Change the mode of the /etc/resolv.conf file to 0644 or less permissive. # chmod 0644 /etc/resolv.conf
Verify /etc/resolv.conf has no extended ACL. # ls -l /etc/resolv.conf If the permissions include a "+", the file has an extended ACL, this is a finding.
Remove the extended ACL from the file. # chmod A- /etc/resolv.conf
Verify the /etc/hosts file is owned by root. Procedure: # ls -lL /etc/hosts If the file is not owned by root, this is a finding.
Change the owner of the /etc/hosts file to root. # chown root /etc/hosts
Check the /etc/hosts file's group ownership. Procedure: # ls -lL /etc/hosts If the file is not group-owned by root, bin, or sys, this is a finding.
Change the group owner of the /etc/hosts file to root, sys, or bin. Procedure: # chgrp root /etc/hosts
Check the mode of the /etc/hosts file. Procedure: # ls -l /etc/hosts If the file mode is more permissive than 0644, this is a finding.
Change the mode of the /etc/hosts file to 0644 or less permissive. # chmod 0644 /etc/hosts
Verify /etc/hosts has no extended ACL. # ls -lL /etc/hosts If the permissions include a "+", the file has an extended ACL and this is a finding.
Remove the extended ACL from the file. # chmod A- /etc/hosts
Verify the /etc/nsswitch.conf file is owned by root. Procedure: # ls -l /etc/nsswitch.conf If the file is not owned by root, this is a finding.
Change the owner of the /etc/nsswitch.conf file to root. # chown root /etc/nsswitch.conf
Check the group ownership of the nsswitch.conf file. Procedure: # ls -lL /etc/nsswitch.conf If the file is not group-owned by root, bin, or sys, this is a finding.
Change the group owner of the /etc/nsswitch.conf file to root, bin, or sys. Procedure: # chgrp root /etc/nsswitch.conf
Check the mode of the /etc/nsswitch.conf file. Procedure: # ls -l /etc/nsswitch.conf If the file mode is more permissive than 0644, this is a finding.
Change the mode of the /etc/nsswitch.conf file to 0644 or less permissive. Procedure: # chmod 0644 /etc/nsswitch.conf
Verify /etc/nsswitch.conf has no extended ACL. Procedure: # ls -l /etc/nsswitch.conf If the permissions include a "+", the file has an extended ACL and this is a finding.
Remove the extended ACL from the file. # chmod A- /etc/nsswitch.conf
Verify the /etc/passwd file is owned by root. Procedure: # ls -l /etc/passwd If the file is not owned by root, this is a finding.
Change the owner of the /etc/passwd file to root. # chown root /etc/passwd
Check the group ownership of the passwd file. Procedure: # ls -lL /etc/passwd If the file is not group-owned by root, bin, or sys, this is a finding.
Change the group owner of the /etc/passwd file to root, bin, or sys. Procedure: # chgrp root /etc/passwd
Check the mode of the /etc/passwd file. Procedure: # ls -lL /etc/passwd If /etc/passwd has a mode more permissive than 0644, this is a finding.
Change the mode of the passwd file to 0644. Procedure: # chmod 0644 /etc/passwd Document all changes.
Verify /etc/passwd has no extended ACL. # ls -l /etc/passwd If the permissions include a "+", the file has an extended ACL, this is a finding.
Remove the extended ACL from the file. # chmod A- /etc/passwd
Verify the /etc/group file is owned by root. Procedure: # ls -l /etc/group If the file is not owned by root, this is a finding.
Change the owner of the /etc/group file to root. # chown root /etc/group
Check the group ownership of the /etc/group file. Procedure: # ls -lL /etc/group If the file is not group-owned by root, bin, or sys, this is a finding.
Change the group owner of the /etc/group file. Procedure: # chgrp root /etc/group
Check the mode of the /etc/group file. Procedure: # ls -l /etc/group If the file mode is more permissive than 0644, this is a finding.
Change the mode of the /etc/group file to 0644 or less permissive. # chmod 0644 /etc/group
Verify /etc/group has no extended ACL. # ls -l /etc/group If the permissions include a "+", the file has an extended ACL and this is a finding.
Remove the extended ACL from the file. # chmod A- /etc/group
Check the ownership of the /etc/shadow file. # ls -lL /etc/shadow If the /etc/shadow file is not owned by root, this is a finding.
Change the ownership of the /etc/shadow file. # chown root /etc/shadow
Check the ownership of the /etc/shadow file. Procedure: # ls -lL /etc/shadow If the file is not group-owned by root, bin, or sys, this is a finding.
Change the group owner of the /etc/shadow file. Procedure: # chgrp root /etc/shadow
Check the mode of the /etc/shadow file. # ls -lL /etc/shadow If the /etc/shadow file has a mode more permissive than 0400, this is a finding.
Change the mode of the /etc/shadow (or equivalent) file. # chmod <mode> <file>
Verify /etc/shadow has no extended ACL. # ls -lL /etc/shadow If the permissions include a '+', the file has an extended ACL and this is a finding.
Remove the extended ACL from the file. # chmod A- /etc/shadow
Use pwck to verify home directory assignments are present. # pwck If any user is not assigned a home directory, this is a finding.
Assign a home directory to any user without one.
Use pwck to verify assigned home directories exist. # pwck If any user's assigned home directory does not exist, this is a finding.
If a user has no home directory, determine why. If possible, delete accounts that have no home directory. If the account is valid, then create the home directory using the appropriate system administration utility or manually. For instance: mkdir directoryname; copy the skeleton files into the directory; chown accountname for the new directory and the skeleton files. Document all changes. Update the sixth field in the /etc/passwd file to reflect the user's home directory. # usermod -d OR # vi /etc/passwd
Verify no password hashes are present in /etc/passwd. # cut -d : -f 2 /etc/passwd | grep -v '^x$' If any password hashes are returned, this is a finding.
Migrate /etc/passwd password hashes to /etc/shadow. # pwconv
Check the /etc/group file for password hashes. Procedure: # cut -d : -f 2 /etc/group | egrep -v '^(x|!)$' If any password hashes are returned, this is a finding. If no password hashes are returned, there is no finding.
Edit /etc/group and change the password field to an exclamation point (!) to lock the group password.
Check the home directory mode of each user in /etc/passwd. Procedure: # cut -d : -f 6 /etc/passwd | xargs -n1 ls -ld | more If a user's home directory's mode is more permissive than 0750, this is a finding. NOTE: Application directories are allowed and may need 0755 permissions (or greater) for correct operation.
Change the mode of users' home directories to 0750 or less permissive. Procedure (example): # chmod 0750 <home directory>
Verify user's home directories have no extended ACLs. # cut -d : -f 6 /etc/passwd | xargs -n1 ls -ld If the permissions include a "+", the file has an extended ACL, this is a finding.
Remove the extended ACL from the file. # chmod A- [user home directory with extended ACL]
For each user in the /etc/passwd file, check for the presence of files and directories within the user's home directory not owned by the home directory owner or root. Procedure: # cut -d : -f 6 /etc/passwd | xargs -n1 -IDIR ls -alLR DIR | more OR # find /<usershomedirectory> ! -fstype nfs ! -user <username> -exec ls -ld {} \; | more If user's home directories contain files or directories not owned by the home directory owner or root, this is a finding.
Change the ownership of files and directories in user's home directories to the owner of the home directory. Procedure: # chown accountowner filename OR # find /<usershomedirectory> ! -fstype nfs ! -user <username> ! /( -name .login -o -name .cshrc -o -name .logout -o -name .profile -o -name .bash_profile -o -name .bashrc -o -name .env -o -name .dtprofile -o -name .dispatch -o -name .emacs -o -name .exrc \) -exec chown <username> {} \;
Check the contents of user home directories for files group-owned by a group of which the home directory's owner is not a member. 1. List the user accounts. # cut -d : -f 1/etc/passwd 2. For each user account, get a list of GIDs for files in the user's home directory. # find < users home directory > -exec ls -lLd \; 3. Obtain the list of GIDs associated with the user's account. # id < user name > 4. Check the GID lists. If there are GIDs in the file list not present in the user list, this is a finding.
Change the group of a file not group-owned by a group where the home directory's owner is a member. # chgrp < user's primary group > <file with bad group ownership >
For each user in the /etc/passwd file, check for files and directories with a mode more permissive than 0750. Procedure: # find /<usershomedirectory> ! -fstype nfs \( -perm -0001 -o -perm -0002 -o -perm -0004 -o -perm -0020 -o -perm -2000 -o -perm -4000 \) -exec ls -ld {} \; If user's home directories contain files or directories more permissive than 0750, this is a finding.
Change the mode of files and directories within user's home directories to 0750. Procedure: # chmod 0750 filename Document all changes.
Check the contents of interactive user's home directories (99 < UID < 60000) for files with extended ACLs. # ls -alLR < users home dir > If the permissions include a "+", the file has an extended ACL and this is a finding.
Remove the extended ACL from the file. # chmod A- [user file with extended ACL]
Check run control script modes. # ls -lL /etc/rc* /etc/init.d /lib/svc/method If any run control script has a mode more permissive than 0755, this is a finding.
Ensure all system startup files have mode 0755 or less permissive. Examine the rc files, and all files in the rc1.d (rc2.d, and so on) directories, and in the /etc/init.d and /lib/svc/method directories to ensure they are not world-writable. If they are world-writable, use the chmod command to correct the vulnerability and to research why. Procedure: # chmod go-w <startupfile>
Verify run control scripts have no extended ACLs. # ls -lL /etc/rc* /etc/init.d If the permissions include a "+", the file has an extended ACL and this is a finding.
Remove the extended ACL from the file. # chmod A- [run control script with extended ACL]
Verify run control scripts' executable search paths. Procedure: # find /etc/rc* /etc/init.d /lib/svc/method -type f -print | xargs grep -w PATH This variable is formatted as a colon-separated list of directories. Relative path entries must be document with the ISSO. If there is an empty entry, such as a leading or trailing colon or two consecutive colons, this is a finding. If an entry begins with a character other than a slash (/), or has not been documented with the ISSO, this is a finding.
Edit the run control script and remove the relative path entries from the executable search path variable that are not documented with the ISSO. Edit the run control script and remove any empty entry that is defined.
Verify run control scripts' library preload list. Procedure: # find /etc/rc* /etc/init.d -type f -print | xargs grep LD_PRELOAD This variable is formatted as a colon-separated list of paths. If there is an empty entry, such as a leading or trailing colon, or two consecutive colons, this is a finding. If an entry begins with a character other than a slash (/), or has not been documented with the ISSO, this is a finding.
Edit the run control script and remove the relative path entry from the library preload variables that are not documented with the ISSO. Edit the run control script and remove any empty entry that is defined.
Verify run control scripts' library preload list. Procedure: # find /etc/rc* /etc/init.d -type f -print | xargs grep LD_PRELOAD This variable is formatted as a colon-separated list of paths. If there is an empty entry, such as a leading or trailing colon, or two consecutive colons, this is a finding. If an entry begins with a character other than a slash (/), or has not been documented with the ISSO, this is a finding.
Edit the run control script and remove the relative path entry from the library preload variables that are not documented with the ISSO. Edit the run control script and remove any empty entry that is defined.
Check the permissions on the files or scripts executed from system startup scripts to see if they are world-writable. Create a list of all potential run command level scripts. # ls -l /etc/init.d/* | tr '\011' ' ' | tr -s ' ' | cut -f 9,9 -d " " OR # ls -l /sbin/init.d/* | tr '\011' ' ' | tr -s ' ' | cut -f 9,9 -d " " Create a list of world writeable files. # find / -perm -002 -type f >> worldWriteableFileList Determine if any of the world writeable files in worldWriteableFileList are called from the run command level scripts. Note: Depending upon the number of scripts vs world writeable files, it may be easier to inspect the scripts manually. # more `ls -l /etc/init.d/* | tr '\011' ' ' | tr -s ' ' | cut -f 9,9 -d " "` OR # more `ls -l /sbin/init.d/* | tr '\011' ' ' | tr -s ' ' | cut -f 9,9 -d " "` If any system startup script executes any file or script that is world-writable, this is a finding.
Remove the world-writable permission from programs or scripts executed by run control scripts. Procedure: # chmod o-w <program or script executed from run control script>
Check run control scripts' ownership. # ls -lL /etc/rc* /etc/init.d If any run control script is not owned by root, this is a finding.
Change the ownership of the run control script(s) with incorrect ownership. # chown root <run control script>
Check run control scripts' group ownership. Procedure: # ls -lL /etc/rc* /etc/init.d If any run control script is not group-owned by root, sys, or bin, this is a finding.
Change the group ownership of the run control script(s) with incorrect group ownership. Procedure: # chgrp root <run control script>
Determine the programs executed by system start-up files. Determine the ownership of the executed programs. # cat /etc/rc* /etc/init.d/* | more Check the ownership of every program executed by the system start-up files. # ls -l <executed program> If any executed program is not owned by root, sys, bin, or in rare cases, an application account, this is a finding.
Change the ownership of the file executed from system startup scripts to root, bin, or sys. # chown root <executed file>
Check global initialization files for extended ACLs. # ls -lL /etc/profile /etc/bashrc /etc/csh.login /etc/csh.cshrc /etc/environment /etc/.login /etc/security/environ If the permissions on an existing file include a "+", the file has an extended ACL, this is a finding.
Remove the extended ACL from the file. # chmod A- [global initialization file with extended ACL]
Check skeleton files permissions. # ls -alL /etc/skel If a skeleton file has a mode more permissive than 0644, this is a finding.
Change the mode of skeleton files with incorrect mode. # chmod 0644 <skeleton file>
Check skeleton files for extended ACLs. # ls -alL /etc/skel If the permissions include a "+", the file has an extended ACL and this is a finding.
Remove the extended ACL from the file. # chmod A- [skeleton file with extended ACL]
Check skeleton files ownership. # ls -alL /etc/skel If a skeleton file is not owned by root, this is a finding.
Change the ownership of skeleton files with incorrect mode. # chown root <skeleton file>
Verify the skeleton files are group-owned by root, bin, or sys. Procedure: # ls -alL /etc/skel If a skeleton file is not group-owned by root, bin, or sys, this is a finding.
Change the group owner of the skeleton file to root. Procedure: # chgrp <group> /etc/skel/[skeleton file]
Check the global initialization files' executable search paths. Procedure: # grep -i PATH /etc/profile /etc/bashrc /etc/csh.login /etc/csh.cshrc /etc/environment /etc/.login /etc/security/environ This variable is formatted as a colon-separated list of directories. If there is an empty entry, such as a leading or trailing colon, or two consecutive colons, this is a finding. If an entry begins with a character other than a slash (/), or has not been documented with the ISSO, this is a finding.
Edit the global initialization file(s) with PATH variables containing relative paths and remove any relative path form the PATH variables that have not been documented with the ISSO. Edit the global initialization file(s) and remove any empty entry that is defined.
Check the global initialization files' library search paths. # grep LD_LIBRARY_PATH /etc/profile /etc/bashrc /etc/csh.login /etc/csh.cshrc /etc/environment /etc/.login /etc/security/environ This variable is formatted as a colon-separated list of directories. If there is an empty entry, such as a leading or trailing colon, or two consecutive colons, this is a finding. If an entry begins with a character other than a slash (/), or has not been documented with the ISSO, this is a finding.
Edit the global initialization file and remove the relative path entries from the library search path variables that have not been documented with the ISSO. Edit the global initialization file(s) and remove any empty entry that is defined.
Check the global initialization files' library preload list. Procedure: # grep LD_PRELOAD /etc/profile /etc/bashrc /etc/csh.login /etc/csh.cshrc /etc/environment /etc/.login /etc/security/environ This variable is formatted as a colon-separated list of paths. If there is an empty entry, such as a leading or trailing colon, or two consecutive colons, this is a finding. If an entry begins with a character other than a slash (/), or has not been documented with the ISSO, this is a finding.
Edit the global initialization file(s) and remove the relative path entry from the library preload list variables that have not been documented with the ISSO. Edit the global initialization file(s) and remove any empty entry that is defined.
NOTE: The following commands must be run in the BASH shell. Check the ownership of local initialization files. Procedure (using a shell that supports ~USER as USER's home directory): # cut -d : -f 1 /etc/passwd | xargs -n1 -IUSER sh -c "ls -l ~USER/.[a-z]*" # cut -d : -f 1 /etc/passwd | xargs -n1 -IUSER find ~USER/.dt ! -fstype nfs ! -user USER -exec ls -ld {} \; If local initialization files are not owned by the home directory's user, this is a finding.
Change the ownership of the startup and login files in the user's directory to the user or root, as appropriate. Examine each user's home directory and verify all file names beginning with "." are owned by the owner of the directory or root. If they are not, use the chown command to change the owner to the user and research the reasons why the owners were not assigned as required. Procedure: # chown username .filename Document all changes.
Check the modes of local initialization files. Procedure: # ls -al /<usershomedirectory>/.login # ls -al /<usershomedirectory>/.cshrc # ls -al /<usershomedirectory>/.logout # ls -al /<usershomedirectory>/.profile # ls -al /<usershomedirectory>/.bash_profile # ls -al /<usershomedirectory>/.bashrc # ls -al /<usershomedirectory>/.bash_logout # ls -al /<usershomedirectory>/.env # ls -al /<usershomedirectory>/.dtprofile (permissions should be 0755) # ls -al /<usershomedirectory>/.dispatch # ls -al /<usershomedirectory>/.emacs # ls -al /<usershomedirectory>/.exrc # find /<usershomedirectory>/.dt ! -fstype nfs \( -perm -0002 -o -perm -0020 \) -exec ls -ld {} \; (permissions not to be more permissive than 0755) If local initialization files are more permissive than 0740, the .dt directory or the .dtprofile file is more permissive than 0755, this is a finding.
Ensure user startup files have permissions of 0740 or more restrictive. Examine each user's home directory and verify all file names beginning with "." have access permissions of 0740 or more restrictive. If they do not, use the chmod command to correct the vulnerability. Procedure: # chmod 0740 .filename NOTE: The period is part of the file name and is required.
Check user home directories for local initialization files with extended ACLs. # cut -d : -f 6 /etc/passwd | xargs -n1 -IDIR ls -alL DIR/.login DIR/.cshrc DIR/.logout DIR/.profile DIR/.bash_profile DIR/.bashrc DIR/.bash_logout DIR/.env DIR/.dtprofile DIR/.dispatch DIR/.emacs DIR/.exrc If the permissions include a "+", the file has an extended ACL, this is a finding.
Remove the extended ACL from the file. # chmod A- [local initialization file with extended ACL]
NOTE: The following must be done in the BASH shell. Examine the PATH variable contained in any user's local initialization files using a command shell that supports the use of ~USER as USER's home directory. # cat /etc/passwd | cut -f 1,1 -d ":" | xargs -n1 -IUSER sh -c 'grep -i PATH ~USER/.*' The PATH variable is a colon-delimited directory list. If there is an empty entry, such as a leading or trailing colon, or two consecutive colons, this is a finding. If an entry begins with a character other than a slash (/), or has not been documented with the ISSO, this is a finding.
Edit the local initialization file(s) and remove the relative path entries from the PATH variable that have not been documented with the ISSO. Edit the local initialization file(s) and remove any empty entry that is defined.
NOTE: This command should be used in the BASH shell. Verify local initialization files have library search path containing only authorized paths. # cut -d : -f 1 /etc/passwd | xargs -n1 -IUSER sh -c 'grep -l LD_LIBRARY_PATH ~USER/.*' This variable is formatted as a colon-separated list of directories. If there is an empty entry, such as a leading or trailing colon, or two consecutive colons, this is a finding. If an entry begins with a character other than a slash (/), or has not been documented with the ISSO, this is a finding.
Edit the local initialization file and remove the relative path entries from the library search path variables that have not been documented with the ISSO. Edit the local initialization file and remove any empty entry that is defined.
NOTE: The following must be done in the BASH shell Verify local initialization files have library preload list containing only authorized paths. # cut -d : -f 1 /etc/passwd | xargs -n1 -IUSER sh -c 'grep -l LD_PRELOAD ~USER/.*' This variable is formatted as a colon-separated list of paths. If there is an empty entry, such as a leading or trailing colon, or two consecutive colons, this is a finding. If an entry begins with a character other than a slash (/), or has not been documented with the ISSO, this is a finding.
Edit the local initialization file and remove the relative path entries from the library preload variables that have not been documented with the ISSO. Edit the local initialization file(s) and remove any empty entry that is defined.
Check local initialization files for any executed world-writable programs or scripts. Procedure: # find / -perm -002 -type f | egrep -v '^(/proc|/system/contract)' > wwlist # fgrep -f wwlist /<usershomedirectory>/.* If any local initialization file executes a world-writable program or script, this is a finding.
Remove the world-writable permission of files referenced by local initialization scripts, or remove the references to these files in the local initialization scripts.
Check system configuration files for plus (+) entries. Procedure: # find / -name .rhosts -exec grep + {} \; # find / -name .shosts -exec grep + {} \; # find / -name hosts.equiv -exec grep + {} \; # find / -name shosts.equiv -exec grep + {} \; # grep + /etc/passwd # grep + /etc/shadow # grep + /etc/group If the .rhosts, .shosts, hosts.equiv, shosts.equiv, /etc/passwd, /etc/shadow, and/or /etc/group files contain a plus (+) and do not define entries for NIS+ netgroups, this is a finding.
Edit the .rhosts, .shosts, hosts.equiv, shosts.equiv, /etc/passwd, /etc/shadow, and/or /etc/group files and remove entries containing a plus (+).
Check the system for the existence of any .netrc files. Procedure: # find / -name .netrc If any .netrc file exists, this is a finding.
Remove the .netrc file(s). Procedure: # rm .netrc
Locate and examine all .rhosts, .shosts, hosts.equiv, and shosts.equiv files. The .rhosts and .shosts files are stored in home directories. (If a user does not have a home directory assigned in /etc/passwd, the root directory (/) is assigned as a default home directory.) Procedure: # for i in `cut -d: -f6 /etc/passwd | awk '$1 == "" {$1 = "/"} {print $1}'`; do more $i/.rhosts; more $i/.shosts; done # more /etc/hosts.equiv # more /etc/ssh/shosts.equiv If any .rhosts, .shosts, hosts.equiv, or shosts.equiv file contains other than host-user pairs, this is a finding.
If possible, remove the .rhosts, .shosts, hosts.equiv, and shosts.equiv files. If the files are required, remove any content from the files except for necessary host-user pairs.
Check for the existence of the files. The .rhosts and .shosts files are stored in home directories. (If a user does not have a home directory assigned in /etc/passwd, the root directory (/) is assigned as a default home directory.) Procedure (the first command is five lines long): # for homedir in `cut -d: -f6 /etc/passwd | awk '$1 == "" {$1 = "/"} {print $1}'`; do ls -l $homedir/.rhosts; ls -l $homedir/.shosts; done # ls -l /etc/hosts.equiv # ls -l /etc/ssh/shosts.equiv If .rhosts, .shosts, hosts.equiv, or shosts.equiv are found, this is a finding.
Remove the .rhosts, .shosts, hosts.equiv, and/or shosts.equiv files.
# for i in `cut -d: -f6 /etc/passwd | awk '$1 == "" {$1 = "/"} {print $1}'`; do ls -l $i/.rhosts $i/.shosts $i/.netrc; done # ls -l /etc/hosts.equiv # ls -l /etc/ssh/shosts.equiv If the .netrc, .rhosts, .shosts, hosts.equiv, or shosts.equiv files have permissions greater than 600, then this is a finding. (If a password entry has no home directory assigned, the root directory (/) is used as a default.)
Ensure the permission for these files is set at 600 or less and the owner is the owner of the home directory that it is in. These files, outside of home directories (other than hosts.equiv in /etc and shosts.equiv in /etc/ssh; both are owned by root), have no meaning.
Check the PAM configuration for rhosts_auth. Procedure: # grep rhosts_auth /etc/pam.conf If a rhosts_auth entry is found that is not commented out, this is a finding.
Edit /etc/pam.conf and remove the reference(s) to the rhosts_auth module.
Verify /etc/shells exists. # ls -l /etc/shells If the file does not exist, this is a finding.
Create a /etc/shells file containing a list of valid system shells. The list below contains the default shells from the shells(4) man page. Procedure (the command is 24 lines long): cat >/etc/shells <<EOF /bin/bash /bin/csh /bin/jsh /bin/ksh /bin/pfcsh /bin/pfksh /bin/pfsh /bin/sh /bin/tcsh /bin/zsh /sbin/jsh /sbin/sh /usr/bin/bash /usr/bin/csh /usr/bin/jsh /usr/bin/ksh /usr/bin/pfcsh /usr/bin/pfksh /usr/bin/pfsh /usr/bin/sh /usr/bin/tcsh /usr/bin/zsh EOF
Confirm the login shells referenced in the /etc/passwd file are listed in the /etc/shells file. Procedure: # more /etc/passwd # more /etc/shells The /usr/bin/false, /bin/false, /dev/null, /sbin/nologin, (and equivalents), and sdshell will be considered valid shells for use in the /etc/passwd file, but will not be listed in the /etc/shells file. If a shell referenced in /etc/passwd is not listed in the shells file, excluding the above mentioned shells, this is a finding.
Use the chsh utility or edit the /etc/passwd file and correct the error by changing the default shell of the account in error to an acceptable shell name contained in the /etc/shells file.
Check the ownership of the system shells. # cat /etc/shells | xargs -n1 ls -lL If any shell is not owned by root or bin, this is a finding.
Change the ownership of the shell with incorrect ownership. # chown root <shell>
If /etc/shells exists, check the group ownership of each shell referenced. Procedure: # cat /etc/shells | xargs -n1 ls -lL Otherwise, check any shells found on the system. Procedure: # find / -name "*sh" | xargs -n1 ls -lL If a shell is not group-owned by root, bin, or sys, this is a finding.
Change the group-owner of the shell to root, bin, or sys. Procedure: # chgrp root <shell>
If /etc/shells exists, check the group ownership of each shell referenced. # cat /etc/shells | xargs -n1 ls -lL Otherwise, check any shells found on the system. # find / -name "*sh" | xargs -n1 ls -lL If a shell has a mode more permissive than 0755, this is a finding.
Change the mode of the shell. # chmod 0755 <shell>
If /etc/shells exists, check the permissions of each shell referenced. # cat /etc/shells | xargs -n1 ls -lL Otherwise, check any shells found on the system. # find / -name "*sh" | xargs -n1 ls -lL If the permissions include a "+", the file has an extended ACL, this is a finding.
Remove the extended ACL from the file. # chmod A- [shell]
Check the system for an automated job, or check with the SA, to determine if the system is checked for extraneous device files on a weekly basis. If no automated or manual process is in place, this is a finding.
Establish a weekly automated or manual process to create a list of device files on the system and determine if any files have been added, moved, or deleted since the last list was generated. Generate a list of device files. # find / -type b -o -type c > device-file-list
Find all device files existing anywhere on the system. Procedure: # find / -type b -print > devicelist # find / -type c -print >> devicelist Check the permissions on the directories above subdirectories containing device files. The following list of device files are intended to be world-writable and if present are not a finding. /dev/arp /dev/conslog /dev/crypto /dev/dtrace/dtrace /dev/dtrace/helper /dev/dtrace/provider/fasttrap /dev/fd/* /dev/kstat /dev/null /dev/poll /dev/pool /dev/ptmx /dev/sad/user /dev/tcp /dev/tcp6 /dev/ticlts /dev/ticots /dev/ticotsord /dev/tty /dev/udp /dev/udp6 /dev/zero /dev/zfs If any device file or their parent directory is world-writable and it is not intended to be world-writable, this is a finding.
Remove the world-writable permission from the device file(s). Procedure: # chmod o-w <device file> Document all changes.
Check the system for world-writable device files. Procedure: # find / -perm -2 -a \( -type b -o -type c \) -exec ls -ld {} \; If any device file(s) used for backup are writable by users other than root, this is a finding.
Use the chmod command to remove the world-writable bit from the backup device files. Procedure: # chmod o-w backdevicefilename Document all changes.
Check the mode of audio devices. # ls -lL /dev/audio If the mode of audio devices are more permissive than 0660, this is a finding.
Change the mode of the audio device. # chmod -R 0660 /dev/audio
Check the permissions of audio devices. # ls -lL /dev/audio If the permissions include a "+", the file has an extended ACL and this is a finding.
Remove the extended ACL from the file. # chmod A- /dev/audio
Check the owner of audio devices. # ls -lL /dev/audio If the owner of any audio device file is not root, this is a finding.
Change the owner of the audio device. # chown root <audio device>
Check the group-owner of audio devices. Procedure: # ls -lL /dev/audio If the group-owner of an audio device is not root, sys, or bin, this is a finding.
Change the group owner of the audio device. Procedure: # chgrp system <audio device>
Files with the setuid bit set will allow anyone running these files to be temporarily assigned the user or group ID of the file. If an executable with setuid allows shell escapes, the user can operate on the system with the effective permission rights of the user or group owner. List all setuid files on the system. Procedure: # find / -perm -4000 -exec ls -l {} \; | more NOTE: Executing these commands may result in large listings of files; the output may be redirected to a file for easier analysis. Ask the SA or IAO if files with the setuid bit set have been documented. If any undocumented file has its setuid bit set, this is a finding.
Document the files with the setuid bit set or unset the setuid bit on the executable.
Determine if a weekly automated or manual process is used to generate a list of setuid files on the system and compare it with the prior list. If no such process is in place, this is a finding.
Establish a weekly automated or manual process to generate a list of setuid files on the system and compare it with the prior list. To create a list of setuid files use the following command. # find / -perm -4000 > setuid-file-list
Locate all setgid files on the system. Procedure: # find / -perm -2000 If the ownership, permissions, location, and ACLs of all files with the setgid bit set are not documented, this is a finding.
All files with the setgid bit set will be documented in the system baseline and authorized by the Information Systems Security Officer. Locate all setgid files with the following command. find / -perm -2000 -exec ls -lLd {} \; Ensure setgid files are part of the operating system software, documented application software, documented utility software, or documented locally developed software. Ensure none are text files or shell programs.
Determine if a weekly automated or manual process is used to generate a list of setgid files on the system and compare it with the prior list. If no such process is in place, this is a finding.
Establish a weekly automated or manual process to generate a list of setgid files on the system and compare it with the prior list. To create a list of setgid files use the following command. # find / -perm -2000 > setgid-file-list
Check the system for world-writable files and directories. Procedure: # find / -perm -2 -a \( -type d -o -type f \) -exec ls -ld {} \; If any world-writable files or directories are located, except those required for proper system or application operation, such as /tmp and /dev/null, this is a finding.
Remove or change the mode for any world-writable file or directory on the system that is not required to be world-writable. Procedure: # chmod o-w <file/directory> Document all changes.
Verify all world-writable directories have the sticky bit set. Procedure: # find / -type d -perm -002 ! -perm -1000 > wwlist If the sticky bit is not set on a world-writable directory, this is a finding.
Set the sticky bit on all public directories. Procedure: # chmod 1777 /tmp (Replace /tmp with the public directory missing the sticky bit, if necessary.)
Check the ownership of all public directories. Procedure: # find / -type d -perm -1002 -exec ls -ld {} \; If any public directory is not owned by root or an application user, this is a finding.
Change the owner of public directories to root or an application account. Procedure: # chown root /tmp (Replace root with an application user and/or /tmp with another public directory as necessary.)
Check the group ownership of public directories. Procedure: # find / -type d -perm -1002 -exec ls -ld {} \; If any public directory is not group-owned by root, sys, bin, or an application group (such as mail), this is a finding.
Change the group ownership of the public directory. Procedure: # chgrp root /tmp (Replace root with a different system group and/or /tmp with a different public directory as necessary.)
NOTE: The following commands must be run in the BASH shell. Check global configuration: # find /etc -type f | xargs grep -i umask Check local initialization files: # cut -d: -f6 /etc/passwd | xargs -n1 -iHOMEDIR sh -c "grep umask HOMEDIR/.*" If the system and user default umask is not 077, this a finding. Note: If the default umask is 000 or allows for the creation of world writable files this becomes a CAT I finding..
Edit the /etc/default/login file for Solaris. Set the variable UMASK=077. Edit local and global initialization files containing "umask" and change them to use "077".
Determine if default system accounts (such as, those for sys, bin, uucp, nuucp, daemon, smtp, gdm, lp, nobody) have been disabled. # cat /etc/shadow If an account's password field is "*", "*LK*", "NP", or is prefixed with a "!", the account is locked or disabled. If any default system account is not locked and its use is not justified and documented with the ISSO, this is a finding.
Lock the default system account(s). # passwd -l <user>
Determine the type of zone that you are currently securing. # zonename If the output of "zonename" is "global", then auditing must be enabled. Determine if auditing is enabled. # ps -ef |grep auditd If the auditd process is not found, this is a finding. If the output of "zonename" is not "global", then the "perzone" policy must be determined. # auditconfig --getpolicy audit policies = cnt,perzone If "perzone" is not listed then this requirement is not applicable. If "perzone" is listed then determine if auditing is enabled. # ps -ef |grep auditd If the auditd process is not found, this is a finding.
Use /etc/security/bsmconv to enable auditing on the system.
Perform the following to determine the location of audit logs and then check the ownership. # more /etc/security/audit_control # ls -lLa <audit log dir> If any audit log file is not owned by root, this is a finding.
Change the ownership of the audit log file(s). Procedure: # chown root <audit log file>
Determine the location of audit logs and then check the group-ownership. Procedure: # more /etc/security/audit_control # ls -lLd <audit log dir> If any audit log file is not group-owned by root, bin, or sys, this is a finding.
Change the group ownership of the audit log file(s). Procedure: # chgrp root <audit log file>
Perform the following to determine the location of audit logs and then check the mode of the files. # more /etc/security/audit_control # ls -lLa <audit log dir> If the audit log directory has a mode more permissive than 0750 or any audit log file has a mode more permissive than 0640, this is a finding.
Change the mode of the audit log directories/files. # chmod 0750 <audit directory> # chmod 0640 <audit file>
Check the audit configuration to determine the location of the system audit log files. # more /etc/security/audit_control Check the system audit log files for extended ACLs. # ls -la [audit log dir] If the permissions include a "+", the file has an extended ACL and this is a finding.
Remove the extended ACL from the file. # chmod A- [audit file]
Verify the audit tool executables are owned by root. # ls -l /usr/sbin/auditd /usr/sbin/audit /usr/sbin/bsmrecord /usr/sbin/auditreduce /usr/sbin/praudit /usr/sbin/auditconfig If any listed file is not owned by root, this is a finding.
Change the owner of the audit tool executable to root. # chown root [audit tool executable]
Verify the audit tool executables are group-owned by root, bin, or sys. Procedure: # ls -lL /usr/sbin/auditd /usr/sbin/audit /usr/sbin/bsmrecord /usr/sbin/auditreduce /usr/sbin/praudit /usr/sbin/auditconfig If any listed file is not group-owned by root, bin, or sys, this is a finding.
Change the group-owner of the audit tool executable to root, bin, or sys. Procedure: # chgrp root <audit tool executable>
Check the mode of audit tool executables. # ls -l /usr/sbin/auditd /usr/sbin/audit /usr/sbin/bsmrecord /usr/sbin/auditreduce /usr/sbin/praudit /usr/sbin/auditconfig If any listed file has a mode more permissive than 0750, this is a finding.
Change the mode of the audit tool executable to 0750, or less permissive. # chmod 0750 [audit tool executable]
Check the permissions of audit tool executables. # ls -l /usr/sbin/auditd /usr/sbin/audit /usr/sbin/bsmrecord /usr/sbin/auditreduce /usr/sbin/praudit /usr/sbin/auditconfig If the permissions include a "+", the file has an extended ACL and this is a finding.
Remove the extended ACL from the file. # chmod A- [audit file]
Verify the presence of an audit_warn entry in /etc/mail/aliases. # grep audit_warn /etc/mail/aliases If there is no audit_warn entry in /etc/mail/aliases, this is a finding.
Add an audit_warn alias to /etc/mail/aliases that will forward to designated system administrator(s). # vi /etc/mail/aliases Put the updated aliases file into service. # newaliases
Check the system audit configuration to determine if failed attempts to access files and programs are audited. # more /etc/security/audit_control If flags -fr or fr are not configured, this is a finding.
Edit /etc/security/audit_control and add the fr or -fr flags to the flags list. Load the new audit configuration. # auditconfig -conf
Verify the presence of an audit_warn entry in /etc/mail/aliases. # grep audit_warn /etc/mail/aliases If there is no audit_warn entry in /etc/mail/aliases, this is a finding. Verify the minfree parameter in /etc/security/audit_control. # egrep '^minfree:' /etc/security/audit_control If the minfree parameter is set to zero or not set at all, this is a finding.
If necessary, add an audit_warn alias to /etc/mail/aliases that will forward to designated system administrator(s). # vi /etc/mail/aliases Put the updated aliases file into service. # newaliases If necessary, add or update the minfree: parameter in /etc/security/audit_control. # vi /etc/security/audit_control Ensure the minfree value is greater than zero and less than 100.
# grep flags /etc/security/audit_control Confirm flags fd or +fd and -fd are configured.
Edit /etc/security/audit_control and add the fd to the flags list. Load the new audit configuration. # auditconfig -conf
Check the system's audit configuration. # grep ua /etc/security/audit_control If the ua flag is not set, and both the +ua and -ua flags are not set, this is a finding. If the ua naflag is not set, and both the +ua and -ua naflags are not set, this is a finding.
Edit /etc/security/audit_control and add ua to the flags list and naflags list. Refresh auditd. # svcadm refresh auditd
Check the system's audit configuration. # grep ua /etc/security/audit_control If the ua flag is not set, and both the +ua and -ua flags are not set, this is a finding. If the ua naflag is not set, and both the +ua and -ua naflags are not set, this is a finding.
Edit /etc/security/audit_control and add ua to the flags list and naflags list. Refresh auditd. # svcadm refresh auditd
Check the system's audit configuration. # grep ua /etc/security/audit_control If the ua flag is not set, and both the +ua and -ua flags are not set, this is a finding. If the ua naflag is not set, and both the +ua and -ua naflags are not set, this is a finding.
Edit /etc/security/audit_control and add ua to the flags list and naflags list. Refresh auditd. # svcadm refresh auditd
Check the system's audit configuration. # grep ua /etc/security/audit_control If the ua flag is not set, and both the +ua and -ua flags are not set, this is a finding. If the ua naflag is not set, and both the +ua and -ua naflags are not set, this is a finding.
Edit /etc/security/audit_control and add ua to the flags list and naflags list. Refresh auditd. # svcadm refresh auditd
Check the auditing configuration of the system. # grep flags /etc/security/audit_control If the am flag is not present, and either of the -am or +am flags is not present, this is a finding.
Edit /etc/security/audit_control and add am to the flags list. Load the new audit configuration. # auditconfig -conf
Check the system's audit configuration. # grep lo /etc/security/audit_control If the lo flag is not set, and both the +lo and -lo flags are not set, this is a finding. If the lo naflag is not set, and both the +lo and -lo naflags are not set, this is a finding.
Edit /etc/security/audit_control and add lo to the flags list and naflags list. Load the new audit configuration. # auditconfig -conf
Check the system's audit configuration. # grep flags /etc/security/audit_control Confirm flags fm or +fm and -fm are configured.
Edit /etc/security/audit_control and add fm to the flags list. Load the new audit configuration. # auditconfig -conf
Check /etc/security/audit_control file. # grep flags /etc/security/audit_control If the as element is missing from the flags line, this is a finding.
Edit /etc/security/audit_control and add the as flag to the flag parameter.
Check for any crontab entries that rotate audit logs. Procedure: # crontab -l If such a cron job is found, this is not a finding. Otherwise, query the SA. If there is a process automatically rotating audit logs, this is not a finding. If the SA manually rotates audit logs, this is still a finding, because if the SA is not there, it will not be accomplished. If the audit output is not archived daily, to tape or disk, this is a finding. This can be ascertained by looking at the audit log directory and, if more than one file is there, or if the file does not have today's date, this is a finding.
Configure a cron job or other automated process to rotate the audit logs on a daily basis.
Audit records may be sent to a remote server in two ways, via an NFS mount of the audit directory, or via the audit_syslog plugin (if available). NFS: Check the "dir" parameter in /etc/security/audit_control. If the directory is on an NFS mount to a remote server, there is no finding. SYSLOG: Check the "plugin" parameter in /etc/security/audit_control. Confirm that the audit_syslog.so* plugin is listed with "p_flags=all". # grep audit_syslog.so /etc/security/audit_control Check that syslogd is sending messages to a remote server (GEN005450): # grep '@' /etc/syslog.conf | grep -v '^#' If both auditd is configured to send audit records to syslog, and syslogd is configured to send messages to a remote server, there is no finding. If auditd is saving audit records on a local directory, and audit records are not being sent to a remote server via syslog, this is a finding.
Update the /etc/security/audit_control file to save audit records to a remote NFS mount. dir:<remote NFS directory> OR If the /usr/lib/security/audit_syslog.so* exists, update the /etc/security/audit_control file to send all audit records to syslog and update /etc/syslog.conf to send all audit messages to a remote server. /etc/security/audit_control: plugin:name=audit_syslog.so.1; p_flags=all /etc/syslog.conf: audit.* @<remote syslog server>
Check for the existence of the cron.allow and cron.deny files. # ls -lL /etc/cron.d/cron.allow # ls -lL /etc/cron.d/cron.deny If neither file exists, this is a finding.
Create /etc/cron.d/cron.allow and/or /etc/cron.d/cron.deny with appropriate content.
Check mode of the cron.allow file. Procedure: # ls -lL /etc/cron.d/cron.allow If either file has a mode more permissive than 0600, this is a finding.
Change the mode of the cron.allow file to 0600. Procedure: # chmod 0600 /etc/cron.d/cron.allow
Check the permissions of the cron.allow file. # ls -l /etc/cron.allow If the permissions include a "+", the file has an extended ACL and this is a finding.
Remove the extended ACL from the file. # chmod A- /etc/cron.allow
List all cronjobs on the system. Procedure: # ls /var/spool/cron/crontabs/ If cron jobs exist under any of the above directories search for programs executed by cron. Procedure: # more <cron job file> Determine if the file is group-writable or world-writable. Procedure: # ls -la <cron program file> If cron executes group-writable or world-writable files, this is a finding.
Remove the world-writable and group-writable permissions from the cron program file(s) identified. # chmod go-w <cron program file>
List all cronjobs on the system. Procedure: # ls /var/spool/cron/crontabs/ If cron jobs exist under any of the above directories search for programs executed by cron. Procedure: # more <cron job file> Determine if the directory containing programs executed from cron is world-writable. Procedure: # ls -ld <cron program directory> If cron executes programs in world-writable directories, this is a finding.
Remove the world-writable permission from the cron program directories identified. Procedure: # chmod o-w <cron program directory>
List all crontabs on the system. # ls -lL /var/spool/cron/crontabs/ If any crontab is not owned by root or the creating user, this is a finding.
Change the crontab owner to root or the crontab creator. # chown root <crontab file>
Check the group ownership of the crontab files. # ls -lL /var/spool/cron/crontabs/ If the group owner is not root, sys, or the crontab owner's primary group, this is a finding.
Change the group owner of the crontab file to root, sys, or the crontab's primary group. Procedure: # chgrp root [crontab file]
Check the cron.allow and cron.deny files for the system. # more /etc/cron.d/cron.allow # more /etc/cron.d/cron.deny If a default system account (such as bin, sys, adm, or others) is listed in the cron.allow file, or not listed in the cron.deny file if no cron.allow file exists, this is a finding.
Remove default system accounts (such as bin, sys, adm, or others) from the cron.allow file if it exists, or add those accounts to the cron.deny file.
Check the mode of the crontab files. # ls -lL /var/spool/cron/crontabs/ If any crontab file has a mode more permissive than 0600, this is a finding.
Change the mode of the crontab files. # chmod 0600 /var/spool/cron/crontabs/*
Check the permissions of the crontab files. # ls -lL /var/spool/cron/crontabs/ If the permissions include a "+", the file has an extended ACL and this is a finding.
Remove the extended ACL from the file. # chmod A- [crontab file]
Check the mode of the crontab directory. # ls -ld /var/spool/cron/crontabs If the mode of the crontab directory is more permissive than 0755, this is a finding.
Change the mode of the crontab directory. # chmod 0755 /var/spool/cron/crontabs
Check the permissions of the crontab directories. # ls -ld /var/spool/cron/crontabs/ If the permissions include a "+", the directory has an extended ACL and this is a finding.
Remove the extended ACL from the directory. # chmod A- /var/spool/cron/crontabs/
Check the owner of the crontab directory. # ls -ld /var/spool/cron/crontabs If the owner of the crontab directory is not root or bin, this is a finding.
Change the owner of the crontab directory. # chown root /var/spool/cron/crontabs
Check the group owner of the crontab directories. Procedure: # ls -ld /var/spool/cron/crontabs If the directory is not group-owned by root, sys, or bin, this is a finding.
Change the group owner of the crontab directories to root, sys, or bin. Procedure: # chgrp root /var/spool/cron/crontabs
# ls -lL /var/cron/log If this file does not exist, or is older than the last cron job, this is a finding. # more /etc/default/cron If a CRONLOG=YES line does not exist, this is a finding.
Edit /etc/default/cron and set CRONLOG=YES.
Check the mode of the cron log file. # ls -lL /var/cron/log If the mode is more permissive than 0600, this is a finding.
Change the mode of the cron log file. # chmod 0600 /var/cron/log
Check the permissions of the file. # ls -lL /var/cron/log If the permissions include a "+", the file has an extended ACL and this is a finding.
Remove the extended ACL from the file. # chmod A- /var/cron/log
Check the mode of the cron.deny file. # ls -lL /etc/cron.d/cron.deny If the cron.deny file is more permissive than 0600, this is a finding.
Change the mode of the cron.deny file. # chmod 0600 /etc/cron.d/cron.deny
Check the permissions of the file. # ls -lL /etc/cron.d/cron.deny If the permissions include a "+", the file has an extended ACL and this is a finding.
Remove the extended ACL from the file. # chmod A- /etc/cron.d/cron.deny
Determine if there are any crontabs by viewing a long listing of the directory. If there are crontabs, examine them to determine what cron jobs exist. Check for any programs specifying an umask. # ls -lL /var/spool/cron/crontabs # cat <crontab file> # grep umask <cron program> If there are no cron jobs present, this vulnerability is not applicable. If any cron job contains an umask value more permissive than 077, this is a finding. Severity Override Guidance: If a cron program sets the umask to 000 or does not restrict the world-writable permission, this becomes a CAT I finding.
Edit cron script files and modify the umask to 077.
# ls -lL /etc/cron.d/cron.allow If the cron.allow file is not owned by root, sys, or bin, this is a finding.
# chown root /etc/cron.d/cron.allow
Check the permissions of the file. # ls -lL /etc/cron.d/at.allow If the permissions include a "+", the file has an extended ACL and this is a finding.
Remove the extended ACL from the file. # chmod A- /etc/cron.d/at.allow
Check the group ownership of the file. Procedure: # ls -lL /etc/cron.d/cron.allow If the file is not group-owned by root, bin, or sys, this is a finding.
Change the group ownership of the file. Procedure: # chgrp root /etc/cron.d/cron.allow
Check the permissions of the file. # ls -lL /etc/cron.d/at.deny If the file has a mode more permissive than 0600, this is a finding.
Change the mode of the file. # chmod 0600 /etc/cron.d/at.deny
Check the permissions of the file. # ls -lL /etc/cron.d/at.deny If the permissions include a "+", the file has an extended ACL and this is a finding.
Remove the extended ACL from the file. # chmod A- /etc/cron.d/at.deny
Check the ownership of the cron.deny file. # ls -lL /etc/cron.d/cron.deny If the cron.deny file is not owned by root, sys, or bin, this is a finding.
Change the ownership of the cron.deny file to root, sys, or bin. # chown root /etc/cron.d/cron.deny
Check the group ownership of the file. Procedure: # ls -lL /etc/cron.d/cron.deny If the file is not group-owned by root, bin, or sys, this is a finding.
Change the group ownership of the file to root, sys, or bin. Procedure: # chgrp root /etc/cron.d/cron.deny
Check for the existence of at.allow and at.deny files. # ls -lL /etc/cron.d/at.allow # ls -lL /etc/cron.d/at.deny If neither file exists, this is a finding.
Create at.allow and/or at.deny files containing appropriate lists of users to be allowed or denied access to the "at" daemon.
# more /etc/cron.d/at.deny If the at.deny file exists and is empty, this is a finding.
Add appropriate users to the at.deny file, or remove the empty at.deny file if an at.allow file exists.
# more /etc/cron.d/at.allow If default accounts (such as bin, sys, adm, and others) are listed in the at.allow file, this is a finding.
Remove the default accounts (such as bin, sys, adm, and others) from the at.allow file.
Check the mode of the at.allow file. # ls -lL /etc/cron.d/at.allow If the at.allow file has a mode more permissive than 0600, this is a finding.
Change the mode of the at.allow file. # chmod 0600 /etc/cron.d/at.allow
List the "at" jobs on the system. Procedure: # ls -la /var/spool/cron/atjobs For each "at" job file, determine which programs are executed. Procedure: # more <at job file> Check each program executed by "at" for group- or world-writable permissions. Procedure: # ls -la <at program file> If "at" executes group- or world-writable programs, this is a finding.
Remove group-write and world-write permissions from files executed by "at" jobs. Procedure: # chmod go-w <file>
List any "at" jobs on the system. Procedure: # ls /var/spool/cron/atjobs For each "at" job, determine which programs are executed. Procedure: # more <at job file> Check the directory containing each program executed by "at" for world-writable permissions. Procedure: # ls -la <at program file directory> If "at" executes programs in world-writable directories, this is a finding.
Remove the world-writable permission from directories containing programs executed by "at". Procedure: # chmod o-w <at program directory>
Check the mode of the "at" directory. Procedure: # ls -ld /var/spool/cron/atjobs If the directory mode is more permissive than 0755, this is a finding.
Change the mode of the "at" directory to 0755. Procedure: # chmod 0755 < at directory >
Check the permissions of the directory. # ls -lLd /var/spool/cron/atjobs If the permissions include a "+", the directory has an extended ACL and this is a finding.
Remove the extended ACL from the file. # chmod A- /var/spool/cron/atjobs
Check the ownership of the "at" directory. Procedure: # ls -ld /var/spool/cron/atjobs If the directory is not owned by root, sys, or bin, this is a finding.
Change the owner of the "at" directory to root, bin, or sys. Procedure: # chown root /var/spool/cron/atjobs
Check the group ownership of the "at" directory. Procedure: # ls -lLd /var/spool/cron/atjobs If the "at" directory is not group-owned by root, bin, or sys, this is a finding.
Change the group ownership of the "at" directory to root, bin, or sys. Procedure: # chgrp sys /var/spool/cron/atjobs
Determine what "at" jobs exist on the system. Procedure: # ls /var/spool/cron/atjobs If there are no "at" jobs present, this is not applicable. Determine if any of the "at" jobs or any scripts referenced execute the umask command. Check for any umask setting more permissive than 077. # grep umask <at job or referenced script> If any "at" job or referenced script sets umask to a value more permissive than 077, this is a finding.
Edit "at" jobs or referenced scripts to remove umask commands setting umask to a value less restrictive than 077.
# ls -lL /etc/cron.d/at.allow If the at.allow file is not owned by root, sys, or bin, this is a finding.
Change the owner of the at.allow file. # chown root /etc/cron.d/at.allow
Check the group ownership of the file. Procedure: # ls -lL /etc/cron.d/at.allow If the file is not group-owned by root, bin, or sys, this is a finding.
Change the group ownership of the file. Procedure: # chgrp root /etc/cron.d/at.allow
# ls -lL /etc/cron.d/at.deny If the at.deny file is not owned by root, sys, or bin, this is a finding.
Change the owner of the at.deny file. # chown root /etc/cron.d/at.deny
Check the group ownership of the file. Procedure: # ls -lL /etc/cron.d/at.deny If the file is not group-owned by root, bin, or sys, this is a finding.
Change the group ownership of the at.deny file to root, bin, or sys. Procedure: # chgrp root /etc/cron.d/at.deny
Check the process core dump configuration. # coreadm |grep enabled OR # egrep "COREADM_.*_ENABLED" /etc/coreadm.conf. If any lines are returned by coreadm or if any lines are not set to no in /etc/coreadm.conf, this is a finding. # grep coredumpsize /etc/system If the value is 1, this is a finding.
Change the process core dump configuration. # coreadm -d global # coreadm -d process # coreadm -d global-setid # coreadm -d proc-setid # coreadm -d log Edit /etc/system and remove the coredumpsize parameter.
Verify a directory is defined for process core dumps. # grep COREADM_GLOB_PATTERN /etc/coreadm.conf If the parameter is not an absolute path (does not start with a slash [/]), this is a finding.
Change the core file pattern. # coreadm -g /var/core/core.%f.%p Then: # coreadm -u In order to force a reload of the configuration.
Check the defined directory for process core dumps. # coreadm | grep "global core file pattern" OR # grep COREADM_GLOB_PATTERN /etc/coreadm.conf Check the ownership of the directory. # ls -lLd [core file directory] If the directory is not owned by root, this is a finding.
Change the owner of the core file directory. # chown root [core file directory]
Check the defined directory for process core dumps. # coreadm | grep "global core file pattern" OR # grep COREADM_GLOB_PATTERN /etc/coreadm.conf Check the group ownership of the directory. # ls -lLd [core file directory] If the directory is not group-owned by root, bin, or sys, this is a finding.
Change the group-owner of the core file directory to root, bin, or sys. Example: # chgrp root [core file directory]
Check the defined directory for process core dumps. # coreadm | grep "global core file pattern" OR # grep COREADM_GLOB_PATTERN /etc/coreadm.conf Check the permissions of the directory. # ls -lLd [core file directory] If the directory has a mode more permissive than 0700, this is a finding.
Change the mode of the core file directory. # chmod 0700 [core file directory]
Check the defined directory for process core dumps. # coreadm | grep "global core file pattern" OR # grep COREADM_GLOB_PATTERN /etc/coreadm.conf Check the permissions of the directory. # ls -lLd [core file directory] If the permissions include a "+", the file has an extended ACL and this is a finding.
Remove the extended ACL from the directory. # chmod A- [core file directory]
Verify savecore is not used. # dumpadm | grep 'Savecore enabled' If the value is true, this is a finding. OR # grep DUMPADM_ENABLE /etc/dumpadm.conf If the value is yes, this is a finding.
Disable savecore. # dumpadm -n
Check the ownership of the kernel core dump data directory. # ls -ld /var/crash OR # ls -ld `grep DUMPADM_SAVDIR /etc/dumpadm.conf | cut -d= -f2` If the kernel core dump data directory is not owned by root, this is a finding.
Change the owner of the kernel core dump data directory to root. # chown root /var/crash
Determine the kernel core dump data directory. # dumpadm | grep "Savecore directory" OR # grep DUMPADM_SAVDIR /etc/dumpadm.conf Check ownership of the core dump data directory. # ls -l [savecore directory] If the directory is not group-owned by root, this is a finding.
Change the group-owner of the kernel core dump data directory. # chgrp root [kernel core dump data directory]
Determine the kernel core dump data directory. # dumpadm | grep "Savecore directory" OR # grep DUMPADM_SAVDIR /etc/dumpadm.conf Check the permissions of the kernel core dump data directory. # ls -l [savecore directory] If the directory has a mode more permissive than 0700, this is a finding.
Change the group-owner of the kernel core dump data directory. # chmod 0700 [kernel core dump data directory]
Determine the kernel core dump data directory. # dumpadm | grep "Savecore directory" OR # grep DUMPADM_SAVDIR /etc/dumpadm.conf Check the kernel core dump data directory permissions. # ls -ld [savecore directory] If the permissions include a "+", the file has an extended ACL and this is a finding.
Remove the extended ACL from the file. # chmod A- [kernel core dump directory]
This check applies to the global zone only. Determine the type of zone that you are currently securing. # zonename If the command output is "global", this check applies. Determine if the system implements non-executable program stacks. # grep noexec_user_stack /etc/system If the noexec_user_stack is not set to 1, this is a finding.
This action applies to the global zone only. Determine the type of zone that you are currently securing. # zonename If the command output is "global", this action applies. Edit /etc/system and set the noexec_user_stack parameter to 1. Restart the system for the setting to take effect.
# grep "TCP_STRONG_ISS=2" /etc/default/inetinit If this variable is not set, this is a finding.
Edit /etc/default/inetinit and set the TCP_STRONG_ISS parameter to 2.
Determine the type of zone that you are currently securing. # zonename If the zone is not the global zone, determine if any interfaces are exclusive to the zone: # dladm show-link If the output indicates "insufficient privileges" then this requirement is not applicable. If the zone is the global zone or the non-global zone has exclusive interfaces verify the network settings: # ndd /dev/ip ip_forward_src_routed If the returned value is not 0, this is a finding.
Configure the system to not forward IPv4 source-routed packets. Procedure: # ndd /dev/ip ip_forward_src_routed 0 This command must also be added to a system startup script.
Determine the type of zone that you are currently securing. # zonename If the zone is not the global zone, determine if any interfaces are exclusive to the zone: # dladm show-link If the output indicates "insufficient privileges" then this requirement is not applicable. If the zone is the global zone or the non-global zone has exclusive interfaces determine the network settings. Procedure: # ndd /dev/tcp tcp_conn_req_max_q0 If the returned value is not 1280 or greater, this is a finding. Procedure: # ndd /dev/tcp tcp_conn_req_max_q If the returned value is not 1024, this is a finding.
Procedure: # ndd -set /dev/tcp tcp_conn_req_max_q0 1280 # ndd -set /dev/tcp tcp_conn_req_max_q 1024 Ensure these commands are also present in system startup scripts.
Determine the type of zone that you are currently securing. # zonename If the zone is not the global zone, determine if any interfaces are exclusive to the zone: # dladm show-link If the output indicates "insufficient privileges" then this requirement is not applicable. If the zone is the global zone or the non-global zone has exclusive interfaces verify the system does not respond to ICMP timestamp requests. # ndd /dev/ip ip_respond_to_timestamp If the result is not 0, this is a finding.
Disable ICMP timestamp responses on the system. # ndd -set /dev/ip ip_respond_to_timestamp 0 Also add this command to a system startup script.
Determine the type of zone that you are currently securing. # zonename If the zone is not the global zone, determine if any interfaces are exclusive to the zone: # dladm show-link If the output indicates "insufficient privileges" then this requirement is not applicable. If the zone is the global zone or the non-global zone has exclusive interfaces verify the system does not respond to ICMP ECHO_REQUESTs set to broadcast addresses. # ndd /dev/ip ip_respond_to_echo_broadcast If the result is not 0, this is a finding.
Configure the system to not respond to ICMP ECHO_REQUESTs sent to broadcast addresses. # ndd -set /dev/ip ip_respond_to_echo_broadcast 0 Also add this command to a system startup script.
Determine the type of zone that you are currently securing. # zonename If the zone is not the global zone, determine if any interfaces are exclusive to the zone: # dladm show-link If the output indicates "insufficient privileges" then this requirement is not applicable. If the zone is the global zone or the non-global zone has exclusive interfaces verify the system does not respond to ICMP timestamp requests set to broadcast addresses. # ndd /dev/ip ip_respond_to_echo_broadcast If the result is not 0, this is a finding.
Configure the system to not respond to ICMP timestamp requests sent to broadcast addresses. # ndd -set /dev/ip ip_respond_to_echo_broadcast 0 Also add this command to a system startup script.
Determine the type of zone that you are currently securing. # zonename If the zone is not the global zone, determine if any interfaces are exclusive to the zone: # dladm show-link If the output indicates "insufficient privileges" then this requirement is not applicable. If the zone is the global zone or the non-global zone has exclusive interfaces verify the system does not apply reversed source routing to TCP responses. # ndd /dev/tcp tcp_rev_src_routes If the result is not 0, this is a finding.
Configure the system to not apply reversed source routing to TCP responses. # ndd -set /dev/tcp tcp_rev_src_routes 0 Also add this command to a system startup script.
Check the system for an IPF rule blocking outgoing source-routed packets. Procedure: # ipfstat -o Examine the list for rules such as: block out log quick all with opt lsrr block out log quick all with opt ssrr If the listed rules do not block both lsrr and ssrr options, this is a finding.
Edit /etc/ipf/ipf.conf and add rules to block outgoing source-routed packets, such as: block out log quick all with opt lsrr block out log quick all with opt ssrr Reload the IPF rules. Procedure: # ipf -Fa -A -f /etc/ipf/ipf.conf
Determine the type of zone that you are currently securing. # zonename If the zone is not the global zone, determine if any interfaces are exclusive to the zone: # dladm show-link If the output indicates "insufficient privileges" then this requirement is not applicable. If the zone is the global zone or the non-global zone has exclusive interfaces check the system for an IPF rule blocking incoming source-routed packets. Procedure: # ipfstat -i Examine the list for rules such as: block in log quick all with opt lsrr block in log quick all with opt ssrr If the listed rules do not block incoming traffic with both lsrr and ssrr options, this is a finding.
Edit /etc/ipf/ipf.conf and add rules to block incoming source-routed packets, such as: block in log quick all with opt lsrr block in log quick all with opt ssrr Reload the IPF rules. Procedure: # ipf -Fa -A -f /etc/ipf/ipf.conf
Determine if the system has non-local published ARP entries. Procedure: # arp -a If any entries have the flag P and no flag L, they are non-local published entries, and this is a finding.
Remove non-local published ARP entries from the system. Procedure: # arp -d <host> Check system initialization files for any commands creating published ARP entries (such as "arp -s <host> <ether> pub" or "arp -f") and removing them.
Determine the type of zone that you are currently securing. # zonename If the zone is not the global zone, determine if any interfaces are exclusive to the zone: # dladm show-link If the output indicates "insufficient privileges" then this requirement is not applicable. If the zone is the global zone or the non-global zone has exclusive interfaces verify the system does not accept IPv4 ICMP redirect messages. Procedure: # ndd -get /dev/ip ip_ignore_redirect If the result is not 1, this is a finding.
Configure the system to not accept IPv4 ICMP redirect messages. Procedure: # ndd -set /dev/ip ip_ignore_redirect 1 This command must also be added to a system startup script.
Determine the type of zone that you are currently securing. # zonename If the zone is not the global zone, determine if any interfaces are exclusive to the zone: # dladm show-link If the output indicates "insufficient privileges" then this requirement is not applicable. If the zone is the global zone or the non-global zone has exclusive interfaces verify the system does not send IPv4 ICMP redirect messages. Procedure: # ndd /dev/ip ip_send_redirects If the result is not 0, this is a finding.
Configure the system to not send IPv4 ICMP redirect messages. Procedure: # ndd -set /dev/ip ip_send_redirects 0 Also add this command to a system startup script.
If the system is not a global zone, this vulnerability is not applicable. Determine if the system is configured to log martian packets. Examine the IPF rules on the system. Procedure: # ipfstat -i There must be rules logging inbound traffic containing invalid source addresses, which minimally include the system's own addresses and broadcast addresses for attached subnets. If such rules do not exist, this is a finding.
Configure the system to log martian packets using IPF. Add rules logging inbound traffic containing invalid source addresses, which minimally include the system's own addresses and broadcast addresses for attached subnets. For example, consider a system with a single network connection having IP address 192.168.1.10 with a local subnet broadcast address of 192.168.1.255. Packets with source addresses of 192.168.1.10 and 192.168.1.255 must be logged if received by the system from the network connection. Edit /etc/ipf/ipf.conf and add the following rules, substituting local addresses and interface names: block in log quick on ce0 from 192.168.1.10 to any block in log quick on ce0 from 192.168.1.255 to any Reload the IPF rules. Procedure: # ipf -Fa -A -f /etc/ipf/ipf.conf
Determine if the /export/home path is a separate file system. # grep /export/home /etc/vfstab If no result is returned, /export/home is not on a separate file system and this is a finding. If ZFS is used for home directories, this is not applicable.
Migrate the /export/home path onto a separate file system.
Determine the audit log data path. # grep "^dir:" /etc/security/audit_control Determine if the audit log data path is a separate filesystem. # df -h <audit data path> If the returned mount point is "/" this is a finding.
Migrate the system audit data path onto a separate file system.
Determine if the /tmp path is a separate file system. # grep /tmp /etc/vfstab If no result is returned, /tmp is not on a separate file system, this is a finding. If the returned result indicates that /tmp is mounted on a memory or swap based file system, this is not a finding
Migrate the /tmp path onto a separate file system.
Logging should be enabled for those types of files systems that do not turn on logging by default. Procedure: # mount -v UFS, JFS, VXFS, HFS, XFS, reiserfs, EXT3 and EXT4 all turn logging on by default and will not be a finding. The ZFS file system uses other mechanisms to provide for file system consistency, and will not be a finding. For other file systems types, if the root file system does not have the 'logging' option, this is a finding. If the 'nolog' option is set on the root file system, this is a finding.
Implement file system journaling for the root file system, or use a file system using other mechanisms to ensure consistency. If the root file system supports journaling, enable it. If the file system does not support journaling or another mechanism to ensure consistency, a migration to a different file system will be necessary.
Verify local file systems use journaling or another mechanism ensuring file system consistency. Procedure: # mount -v | grep '^/dev/' | egrep -v '(logging|vxfs|zfs|devfs)' | grep -v /dev/fd If a mount is listed, this is a finding.
Convert local file systems to use journaling or another mechanism ensuring file system consistency.
Check /etc/syslog.conf and verify the auth facility is logging both the notice and info level messages by using one of the procedures below. # grep "auth.notice" /etc/syslog.conf # grep "auth.info" /etc/syslog.conf OR # grep 'auth.*' /etc/syslog.conf If auth.* is not found, and either auth.notice or auth.info is not found, this is a finding.
Edit /etc/syslog.conf and add local log destinations for auth.* or both auth.notice and auth.info.
Determine if inetd is running, # svcs -a | grep inetd If inetd is not running, this check is not a finding. # inetadm | grep -v disabled If no enabled/online services are found, yet the inetd daemon is running, this is a finding.
Disable the inetd service. Procedure: # svcadm disable inetd
Check the ownership of inetd.conf file. Procedure: # ls -lL /etc/inet/inetd.conf This is a finding if any of the above files or directories are not owned by root or bin.
Change the ownership of the inetd.conf file to root or bin. Procedure: # chown root /etc/inet/inetd.conf
Check the group ownership of the inetd.conf file. Procedure: # ls -alL /etc/inet/inetd.conf If the file is not group-owned by root, bin, or sys, this is a finding.
Change the group ownership of the inetd.conf file. Procedure: # chgrp sys /etc/inet/inetd.conf
Check the mode of inetd.conf file. # ls -lL /etc/inet/inetd.conf If the mode of the file is more permissive than 0440, this is a finding.
Change the mode of the inetd.conf file. # chmod 0440 /etc/inet/inetd.conf
Check the permissions of the inetd configuration file. # ls -lL /etc/inet/inetd.conf If the permissions include a "+", the file has an extended ACL and this is a finding.
Remove the extended ACL from the file. # chmod A- /etc/inet/inetd.conf
Check the ownership of the services file. Procedure: # ls -lL /etc/services If the services file is not owned by root or bin, this is a finding.
Change the ownership of the services file to root or bin. Procedure: # chown root /etc/services
Check the group ownership of the services file. Procedure: # ls -lL /etc/services If the file is not group-owned by root, bin, or sys, this is a finding.
Change the group-owner of the services file. Procedure: # chgrp root /etc/services
Check the mode of the services file. Procedure: # ls -lL /etc/services If the services file has a mode more permissive than 0444, this is a finding.
Change the mode of the services file to 0444 or less permissive. Procedure: # chmod 0444 /etc/services
Check the permissions of the /etc/services file. # ls -lL /etc/services If the permissions include a "+", the file has an extended ACL, this is a finding.
Remove the extended ACL from the file. # chmod A- /etc/services
Verify the default value of the inet service property tcp_trace. # inetadm -p |grep tcp_trace If the tcp_trace inet service property is not set or is set to FALSE, this is a finding. Verify that all enabled inetd-managed processes have the tcp_trace inet service property set to the default value or TRUE. # inetadm | grep enabled | awk '{print $NF}' | xargs inetadm -l | more If any enabled inetd-managed processes have the tcp_trace inet service property set to FALSE, this is a finding.
Enable logging or tracing for inetd. Procedure: # inetadm -M tcp_trace=TRUE Set the tcp_trace inet service property to the default for all enabled inetd-managed services. # inetadm | grep enabled | awk '{print $NF}' | xargs -I X inetadm -m X tcp_trace= (Note: The trailing '=' instructs inetd to use the default value for tcp_trace.)
If the system needs the portmap service to operate, this is not applicable. The rpcbind program is part of a core Solaris package and cannot be removed. Verify the permissions on the rpcbind file. # ls -lL /usr/sbin/rpcbind If the rpcbind service is not required and the rpcbind file has non-zero permissions, this is a finding.
Remove all permissions from the rpcbind file. Procedure: # chmod 0000 /usr/sbin/rpcbind
Check if the SUNWrcmdr package is installed. Procedure: # pkginfo SUNWrcmdr If the package is installed, this is a finding.
Remove the SUNWrcmdr package. Procedure: # pkgrm SUNWrcmdr
Check if the SUNWrcmdr package is installed. Procedure: # pkginfo SUNWrcmdr If the package is installed, this is a finding.
Remove the SUNWrcmdr package. Procedure: # pkgrm SUNWrcmdr
# svcs rexec If the service is enabled, this is a finding.
# svcadm disable rexec # svcadm refresh inetd
Check if the SUNWrcmdr package is installed. Procedure: # pkginfo SUNWrcmdr If the package is installed, this is a finding.
Remove the SUNWrcmdr package. Procedure: # pkgrm SUNWrcmdr
Determine if the telnet daemon is running. # svcs telnet If the telnet service is enabled, this is a finding.
Disable the telnet daemon. # svcadm disable telnet # svcadm refresh inetd
If the "SUNWrcmds" package, containing the finger service executable, is not installed, this is not applicable. # svcs finger If the finger service is not disabled, this is a finding.
Disable the finger service and restart inetd. Procedure: # svcadm disable finger # svcadm refresh inetd
Solaris uses the "IPP" print service and can also use the Samba print service. Verify remote host access is limited. Procedure: # grep -i Listen /etc/apache/httpd-standalone-ipp.conf The /etc/apache/httpd-standalone-ipp.conf file must not contain a Listen *:<port> or equivalent line. If the network address of the "Listen" line is unrestricted, this is a finding. # grep -i "Allow From" /etc/apache/httpd-standalone-ipp.conf The "Allow From" line within the "<Location />" element should limit access to the printers to @LOCAL and specific hosts. If the "Allow From" line contains "All", this is a finding. Verify guest access to printers shared via Samba is restricted according to GEN006235.
Configure IPP to use only the localhost or specified remote hosts. Procedure: Modify the /etc/apache/httpd-standalone-ipp.conf file to "Listen" only to the local machine or a known set of hosts (i.e., Listen localhost:631). Modify the /etc/apache/httpd-standalone-ipp.conf file "<Location />" element to "Deny From All" and "Allow from 127.0.0.1" or allowed host addresses. Restart the IPP service: # svcadm restart ipp-listener
Check the owner of the print service configuration files. Procedure: # ls -lL /etc/apache/httpd-standalone-ipp.conf /etc/printers.conf /etc/smb.conf /etc/sfw/smb.conf /etc/samba/smb.conf /etc/sfw/samba/smb.conf If the owner of any of the print service configuration files is not root, this is a finding.
Change the owner of the print service configuration files. Procedure: # chown root /etc/apache/httpd-standalone-ipp.conf /etc/printers.conf /etc/sfw/smb.conf
Check the mode of the print service configuration files. Procedure: # ls -lL /etc/apache/httpd-standalone-ipp.conf /etc/printers.conf /etc/smb.conf /etc/sfw/smb.conf /etc/samba/smb.conf /etc/sfw/samba/smb.conf If the mode of any of the print service configuration file is more permissive than 0644, this is a finding.
Change the mode of the print service configuration files to 0644 or less permissive. Procedure: # chmod 0644 /etc/apache/httpd-standalone-ipp.conf /etc/printers.conf /etc/smb.conf /etc/sfw/smb.conf /etc/samba/smb.conf /etc/sfw/samba/smb.conf
Check the permissions of the print service configuration files. Procedure: # ls -lL /etc/apache/httpd-standalone-ipp.conf /etc/printers.conf /etc/smb.conf /etc/sfw/smb.conf /etc/samba/smb.conf /etc/sfw/samba/smb.conf If the permissions on any file include a '+', the file has an extended ACL and this is a finding.
Remove the extended ACLs from the files. # chmod A- /etc/apache/httpd-standalone-ipp.conf /etc/printers.conf /etc/smb.conf /etc/sfw/smb.conf /etc/samba/smb.conf /etc/sfw/samba/smb.conf
# ls -lL /usr/sbin/traceroute If the traceroute command is not owned by root, this is a finding.
Change the owner of the traceroute command to root. Example procedure: # chown root /usr/sbin/traceroute
Check the group ownership of the traceroute file. Procedure: # ls -lL /usr/sbin/traceroute If the traceroute command is not group-owned by root, sys, or bin, this is a finding.
Change the group-owner of the traceroute command to root. Procedure: # chgrp root /usr/sbin/traceroute
# ls -lL /usr/sbin/traceroute If the traceroute command has a mode more permissive than 0700, this is a finding.
Change the mode of the traceroute command. # chmod 0700 /usr/sbin/traceroute
Check the permissions of the /usr/sbin/traceroute file. # ls -lL /usr/contrib/bin/traceroute If the permissions include a "+", the file has an extended ACL and this is a finding.
Remove the extended ACL from the file. # chmod A- /usr/sbin/traceroute
Look in the root account home directory for a .netscape or a .mozilla directory. If none exists, this is not a finding. If there is one, verify with the root users and the IAO what the intent of the browsing is. Some evidence may be obtained by using the browser to view cached pages under the .netscape directory.
Enforce policy requiring administrative accounts use web browsers only for local service administration.
Note: If sendmail is not installed, this requirement is not applicable. Find the alias file on the system. Procedure: # egrep '^O(A| AliasFile)' /etc/mail/sendmail.cf If the "alias file" is an NIS or LDAP map, this check is not applicable. The default location is /etc/mail/aliases. Check the ownership of the alias file. Procedure: # ls -lL /etc/mail/aliases /etc/mail/aliases.db If the alias files are not owned by root, this is a finding.
Change the owner of the /etc/mail/aliases file (or equivalent, such as /usr/lib/aliases) to root. Procedure: # chown root /etc/mail/aliases
Note: If sendmail is not installed, this requirement is not applicable. Find the alias files on the system. Procedure: # egrep '^O(A| AliasFile)' /etc/mail/sendmail.cf If the alias file is an NIS or LDAP map, this check is not applicable. The default location is /etc/mail/aliases. Check the permissions of the alias file and the hashed version of it used by sendmail. Procedure: # ls -lL /etc/mail/aliases /etc/mail/aliases.db If the alias files have a mode more permissive than 0644, this is a finding.
Change the mode of the /etc/mail/aliases files (or equivalent, such as /usr/lib/aliases) to 0644. Procedure: # chmod 0644 /etc/mail/aliases /etc/mail/aliases.db
Note: If sendmail is not installed, this requirement is not applicable. Find the alias files on the system. Procedure: # egrep '^O(A| AliasFile)' /etc/mail/sendmail.cf If the "alias file" is an NIS or LDAP map, this check is not applicable. The default location is /etc/mail/aliases. Check the permissions of the alias file and the hashed version of it used by sendmail. Procedure: # ls -lL /etc/mail/aliases /etc/mail/aliases.db If the permissions include a "+", the file has an extended ACL and this is a finding.
Remove the extended ACL from the files. # chmod A- /etc/mail/aliases /etc/mail/aliases.db
Find the aliases file on the system. Procedure: # find / -name aliases -depth -print # more < aliases file location > Examine the aliases file for any directories or paths that may be utilized. Procedure: # ls -lL < path > Check if the file or parent directory is owned by root. If not, this is a finding.
Edit the /etc/mail/aliases file (alternatively, /usr/lib/sendmail.cf). Locate the entries executing a program. They will appear similar to the following line. Aliasname: : /usr/local/bin/ls (or some other program name) Ensure root owns the programs and the directory(ies) they reside in by using the chown command to change owner to root. Procedure: # chown root filename
Examine the contents of the /etc/mail/aliases file. For each file referenced, check the group ownership of the file. Procedure: # ls -lL <file referenced from aliases> If the group owner of any file is not root, bin, or sys, this is a finding.
Change the group ownership of the file referenced from /etc/mail/aliases. Procedure: # chgrp root <file referenced from aliases>
Examine the contents of the /etc/mail/aliases file. For each file referenced, check the permissions of the file. # ls -lL [file referenced from aliases] If the permissions include a "+", the file has an extended ACL and this is a finding.
Remove the extended ACL from the file. # chmod A- [file referenced from aliases]
Check if Sendmail logging is set to level 9. Procedure: # grep "O L" /etc/mail/sendmail.cf OR # grep LogLevel /etc/mail/sendmail.cf If logging is set to less than 9, this is a finding.
Edit the sendmail.conf file, locate the "O L" or LogLevel entry and change it to 9.
Check the syslog configuration file for mail.crit logging configuration. Procedure: # more /etc/syslog.conf Verify a line similar to one of the following lines is present in syslog.conf is configured so that critical mail log data is logged. (Critical log data may also be captured by a remote log host in accordance with GEN005460.) mail.crit /var/adm/messages *.crit /var/log/messages Less severe syslog levels (err, warning, info, and debug) may be substituted for crit, since they will also capture crit level syslog messages. If syslog is not configured to log critical Sendmail messages, this is a finding.
Edit the syslog.conf file and add a configuration line specifying an appropriate destination for mail.crit syslogs.
Locate any mail log files by checking the syslog configuration file. Procedure: # more /etc/syslog.conf Identify any log files configured for the mail service at any severity level, or those configured for all services. Check the ownership of these log files. Procedure: # ls -lL <file location> If any mail log file is not owned by root, this is a finding.
Change the ownership of the Sendmail log file. # chown root <sendmail log file>
Check the mode of the SMTP service log file. Procedure: # more /etc/syslog.conf Check the configuration to determine which log files contain logs for mail.crit, mail.debug, or *.crit. Procedure: # ls -lL <file location> If the log file permissions are greater than 0644, this is a finding.
Change the mode of the SMTP service log file. Procedure: # chmod 0644 <sendmail log file>
Examine /etc/syslog.conf and determine the log file(s) receiving logs for mail.crit, mail.debug, mail.*, or *.crit. Check the permissions on these log files. # ls -lL [log file] If the permissions include a "+", the file has an extended ACL and this is a finding.
Remove the extended ACL from the file. # chmod A- [log file]
Determine if EXPN is disabled. Procedure: # telnet localhost 25 expn root If the command does not return a 500 error code of command unrecognized, this is a finding. OR Locate the sendmail.cf configuration file. Procedure: # find / -name sendmail.cf -print # grep -v "^#" <sendmail.cf location> | egrep -i "(goaway|noexpn)" Verify the EXPN command is disabled with an entry in the sendmail.cf file that reads as one of the following: Opnoexpn O PrivacyOptions=noexpn Opgoaway O PrivacyOptions=goaway (Other privacy options, such as novrfy or noetrn, may be included in the same line, separated by commas. The goaway option encompasses a number of privacy options, including noexpn.) If the EXPN command is not disabled, this is a finding.
Edit the sendmail.cf file and add Opnoexpn option. Restart the Sendmail service.
Determine if VRFY is disabled. Procedure: # telnet localhost 25 vrfy root If the command does not return a 500 error code of command unrecognized, this is a finding. OR Locate the sendmail.cf configuration file. Procedure: # find / -name sendmail.cf -print # grep -v "^#" <sendmail.cf location> |grep -i "(goaway|vrfy)" Verify the VRFY command is disabled with an entry in the sendmail.cf file that reads as one of the following: Opnovrfy O PrivacyOptions=novrfy Opgoaway O PrivacyOptions=goaway (Other privacy options, such as noexpn or noetrn, may be included in the same line, separated by commas. The goaway option encompasses a number of privacy options, including novrfy.) If the VRFY command is not disabled, this is a finding.
If Sendmail is running, add the line Opnovrfy to the Sendmail configuration file, usually located in /etc/sendmail.cf. For other mail servers, contact the vendor for information on how to disable the verify command. Newer versions of Sendmail are available at http://www.sendmail.org or from ftp://ftp.cs.berkeley.edu/ucb/sendmail.
Locate the sendmail.cf configuration file and check for wiz configuration. Procedure: # find / -name sendmail.cf -print # grep -v "^#" <sendmail.cf location> |grep -i wiz If an entry is found for wiz, this is a finding.
If the WIZ command is enabled on Sendmail, it should be disabled by adding this line to the sendmail.cf configuration file (it must be typed in uppercase). OW* For the change to take effect, kill the Sendmail process, refreeze the sendmail.cf file, and restart the Sendmail process.
If the system uses Sendmail, locate the sendmail.cf file. Procedure: # find / -name sendmail.cf Determine if Sendmail only binds to loopback addresses by examining the DaemonPortOptions configuration options. Procedure: # grep -i "O DaemonPortOptions" </path/to/sendmail.cf> If there are uncommented DaemonPortOptions lines, and all such lines specify system loopback addresses, this is not a finding. Otherwise, determine if Sendmail is configured to allow open relay operation. Procedure: # find / -name sendmail.mc # grep -i promiscuous_relay </path/to/sendmail.mc> If the promiscuous relay feature is enabled, this is a finding. If the system uses Postfix, locate the main.cf file. Procedure: # find / -name main.cf Determine if Postfix only binds to loopback addresses by examining the inet_interfaces line. Procedure: # grep inet_interfaces </path/to/main.cf> If inet_interfaces is set to loopback-only or contains only loopback addresses, such as 127.0.0.1 and [::1], Postfix is not listening on external network interfaces, this is not a finding. Otherwise, determine if Postfix is configured to restrict clients permitted to relay mail by examining the smtpd_client_restrictions line. Procedure: # grep smtpd_client_restrictions </path/to/main.cf> If the smtpd_client_restrictions line is missing, or does not contain reject, this is a finding. If the line contains permit before reject, this is a finding. If the system is using other SMTP software, consult the software's documentation for procedures to verify mail relaying is restricted.
If the system uses Sendmail, edit the sendmail.mc file and remove the promiscuous_relay configuration. Rebuild the sendmail.cf file from the modified sendmail.mc and restart the service. If the system does not need to receive mail from external hosts, add one or more DaemonPortOptions lines referencing system loopback addresses (such as "O DaemonPortOptions=Addr=127.0.0.1,Port=smtp,Name=MTA") and remove lines containing non-loopback addresses. Restart the service. If the system uses Postfix, edit the main.cf file and add or edit the smtpd_client_restrictions line to have contents permit mynetworks, reject or a similarly restrictive rule. If the system does not need to receive mail from external hosts, add or edit the inet_interfaces line to have contents loopback-only or a set of loopback addresses for the system. Restart the service. If the system is using other SMTP software, consult the software's documentation for procedures to restrict mail relaying.
Perform the following to determine if unencrypted FTP is enabled. # svcs ftp If FTP is enabled, ask the SA if it is encrypted. If it is not, this is a finding.
# svcadm disable ftp
Attempt to log into this host with a user name of anonymous and a password of guest (also try the password of guest@mail.com). If the logon is successful, this is a finding. Procedure: # ftp localhost Name: anonymous 530 Guest login not allowed on this machine.
Configure the FTP service to not permit anonymous logins.
Use the command ftp to connect the system's FTP service. Attempt to log into this host with a user name of anonymous and a password of guest (also try the password of guest@mail.com). If the logon is not successful, this check is not applicable. Ask the SA if the system is located on a DMZ network. If the system is not located on a DMZ network, this is a finding.
Move the system to a DMZ network.
Check for the existence of the ftpusers file. # ls -l /etc/ftpd/ftpusers If the ftpusers file does not exist, this is a finding.
Create a /etc/ftpd/ftpusers file containing a list of accounts not authorized for FTP.
Check the contents of the ftpusers file. Procedure: # more /etc/ftpd/ftpusers If the system has accounts not allowed to use FTP that are not listed in the ftpusers file, this is a finding.
Add accounts not allowed to use FTP to the /etc/ftpd/ftpusers file.
Check the ownership of the ftpusers file. # ls -l /etc/ftpd/ftpusers If the ftpusers file is not owned by root, this is a finding.
Change the owner of the ftpusers file to root. # chown root /etc/ftpd/ftpusers
Check the group ownership of the ftpusers file. Procedure: # ls -lL /etc/ftpd/ftpusers /etc/vsftpd.ftpusers /etc/vsftpd/ftpusers If the file is not group-owned by root, bin, or sys, this is a finding.
Change the group owner of the ftpusers file. Procedure: # chgrp root /etc/ftpusers
Check the permissions of the ftpusers file. # ls -l /etc/ftpd/ftpusers If the ftpusers file has a mode more permissive than 0640, this is a finding.
Change the mode of the ftpusers file to 0640. # chmod 0640 /etc/ftpd/ftpusers
Check the permissions of the /etc/ftpd/ftpusers file. # ls -lL /etc/ftpd/ftpusers If the permissions include a "+", the file has an extended ACL and this is a finding.
Remove the extended ACL from the file. # chmod A- /etc/ftpd/ftpusers
Verify the FTP daemon is invoked with the -l option by SMF. # inetadm -l ftp | grep in.ftpd If the exec name-value pair does not include the -l option for in.ftpd, this is a finding.
Add the -l option to the exec name-value pair used by SMF to invoke the FTP daemon. # inetadm -m ftp exec="/usr/sbin/in.ftpd [other options] -l" Refresh inetd. # svcadm refresh inetd
Check the shell for the anonymous FTP account. Procedure: # grep "^ftp" /etc/passwd This is a finding if the seventh field is empty (the entry ends with a ':') or if the seventh field does not contain one of the following. /bin/false /dev/null /usr/bin/false /bin/true /sbin/nologin
Configure anonymous FTP accounts to use a non-functional shell. If necessary, edit the /etc/passwd file to remove any functioning shells associated with the FTP account and replace them with non-functioning shells, such as, /dev/null.
The default Solaris FTP daemon, in.ftpd, uses the ftp user's home directory as the chroot base for anonymous FTP. If any files and directories within the ftp user's home directory are owned by any user other than root, or if any subdirectory other than pub has permissions more permissive than 0111, this is a finding.
Run the ftpconfig(1M) command to set up a chroot-ed environment for anonymous FTP with appropriate constraints. # ftpconfig < anonymous FTP home directory>
Check the umask setting for the FTP user. Procedure: # su - ftp $ umask If the umask value does not return 077, this is a finding.
Edit the initialization files for the FTP user and set the umask to 077.
Determine if TFTPD is running in secure mode. # grep tftp /etc/inet/inetd.conf OR # svccfg -s tftp/udp6 listprop |grep in.tftpd |grep exec If any returned service line does not use the -s parameter to TFTPD, this is a finding. If TFTP is not installed this check is not applicable.
Edit /etc/inet/inetd.conf and add the -s parameter to TFTPD. # inetconv OR Update the SMF entry for the TFTP daemon. # svccfg -s tftp/udp6 setprop inetd_start/exec = "astring:\"/usr/sbin/in.tftpd -s <other TFTPD options>\""
Check the mode of the TFTP daemon. Procedure: # ls -lL /usr/sbin/in.tftpd If the mode of the file is more permissive than 0755, this is a finding.
Change the mode of the TFTP daemon. Procedure: # chmod 0755 /usr/sbin/in.tftpd
Determine if the TFTP daemon is active. # svcs svc:/network/tftp/* If TFTP is found enabled, it is a finding if it is not documented using site-defined procedures.
Disable the TFTP daemon. # svcadm disable svc:/network/tftp/* # svcadm refresh inetd If TFTP is found enabled, it is a finding if it is not documented.
Check for .Xauthority files being utilized by looking for such files in the home directory of a user that uses X. Procedure: # cd ~someuser # ls -la .Xauthority If the .Xauthority file does not exist, ask the SA if the user is using X Windows. If the user is utilizing X Windows and the .Xauthority file does not exist, this is a finding.
Ensure the X Windows host is configured to write .Xauthority files into user home directories. Edit the Xaccess file. Ensure the line that writes the .Xauthority file is uncommented.
Check the file permissions for the .Xauthority files in the home directories of users of X. Procedure: # cd ~<X user> # ls -lL .Xauthority If the file mode is more permissive than 0600, this is finding.
Change the mode of the .Xauthority files. Procedure: # chmod 0600 .Xauthority
Check the file permissions for the .Xauthority files. # ls -lL .Xauthority If the permissions include a "+", the file has an extended ACL and this is a finding.
Remove the extended ACL from the file. # chmod A- .Xauthority
If X Windows is not used on the system, this is not applicable. Check the output of the xhost command from an X terminal. Procedure: $ xhost If the output reports access control is enabled (and possibly lists the hosts that can receive X Window logins), this is not a finding. If the xhost command returns a line indicating access control is disabled, this is a finding. NOTE: It may be necessary to define the display if the command reports it cannot open the display. Procedure: $ DISPLAY=MachineName:0.0; export DISPLAY MachineName may be replaced with an Internet Protocol Address. Repeat the check procedure after setting the display.
If using an xhost-type authentication the xhost - command can be used to remove current trusted hosts and then selectively allow only trusted hosts to connect with xhost + commands. A cryptographically secure authentication, such as provided by the xauth program, is always preferred. Refer to your X11 server's documentation for further security information.
Determine if the X server is running. Procedure: # ps -ef |grep X Determine if xauth is being used. Procedure: # xauth xauth> list If the above command sequence does not show any host other than the localhost, then xauth is not being used. Search the system for an X*.hosts files, where * is a display number that may be used to limit X window connections. If no files are found, X*.hosts files are not being used. If the X*.hosts files contain any unauthorized hosts, this is a finding. If both xauth and X*.hosts files are not being used, this is a finding.
Create an X*.hosts file, where * is a display number that may be used to limit X window connections. Add the list of authorized X clients to the file.
Check the X Window system access is limited to authorized clients. Procedure: # xauth xauth> list Ask the SA if the clients listed are authorized. If any are not, this is a finding.
Remove unauthorized clients from the xauth configuration. # xauth remove <display name>
Determine if the X Window system is running. Procedure: # ps -ef |grep X Ask the SA if the X Window system is an operational requirement. If it is not, this is a finding.
Disable the X Windows server on the system.
# svcs uucp If UUCP is found enabled and its use is not justified and documented with the ISSO, this is a finding.
# svcadm disable uucp # svcadm refresh inetd
Check the SNMP configuration for default passwords. Locate and examine the SNMP configuration. Procedure: # more /etc/sma/snmp/snmpd.conf /var/sma_snmp/snmpd.conf /etc/snmp/conf/snmpd.conf /usr/sfw/lib/sma_snmp/snmpd.conf Identify any community names or user password configuration. If any community name or password is set to a default value, such as public, private, snmp-trap, or password, this is a finding.
Change the default passwords. To change them, locate the snmpd.conf file and edit it. Locate the line system-group-read-community which has a default password of public and make the password something more random (less guessable). Make the same changes for the lines that read system-group-write-community, read-community, write-community, trap, and trap-community. Read the information in the file carefully. The trap is defining who to send traps to, for instance, by default. It is not a password, but the name of a host.
Verify the SNMP daemon is not configured to use the v1 or v2c security models. # egrep '(v1|v2c|community|com2sec)' /etc/sma/snmp/snmpd.conf /var/sma_snmp/snmpd.conf /etc/snmp/conf/snmpd.conf /usr/sfw/lib/sma_snmp/snmpd.conf | grep -v '^#' If any configuration is found, this is a finding.
Edit non-compliant snmpd.conf files and remove references to the v1, v2c, community, or com2sec. Restart the SNMP service. # svcadm restart svc:/application/management/sma:default
Check the mode of the SNMP daemon configuration files. Procedure: # ls -lL /etc/sma/snmp/snmpd.conf /etc/snmp/conf/snmpd.conf /var/sma_snmp/snmpd.conf /usr/sfw/lib/sma_snmp/snmpd.conf If any of the snmpd.conf files have a mode more permissive than 0600, this is a finding.
Change the mode of the SNMP daemon configuration file to 0600. Procedure: # chmod 0600 <snmpd.conf>
Check the modes for all Management Information Base (MIB) files on the system. # find /etc/sma/snmp/ /etc/snmp/conf/ /var/sma_snmp/ /usr/sfw/lib/sma_snmp/ -type f | grep -i mib | egrep -v '\.conf$' | xargs ls -lL If any file is returned that does not have mode 0640 or less permissive, this is a finding.
Change the mode of MIB files to 0640. Procedure: # chmod 0640 <mib file>
Check the modes for all Management Information Base (MIB) files on the system. # find /etc/sma/snmp/ /etc/snmp/conf/ /var/sma_snmp/ /usr/sfw/lib/sma_snmp/ -type f | grep -i mib | egrep -v '\.conf$' | xargs ls -lL If the permissions include a "+", the file has an extended ACL, this is a finding.
Remove the extended ACL from the file. # chmod A- [mib file]
Determine the owner of the SNMP configuration files. Procedure: # ls -lL /etc/sma/snmp/snmpd.conf /etc/snmp/conf/snmpd.conf /var/sma_snmp/snmpd.conf /usr/sfw/lib/sma_snmp/snmpd.conf If the snmpd.conf files are not owned by root, this is a finding.
Change the owner of the snmpd.conf file to root. Procedure: # chown root <snmpd.conf file>
Check the group ownership of the SNMP configuration files. Procedure: # ls -lL /etc/sma/snmp/snmpd.conf /var/sma_snmp/snmpd.conf /etc/snmp/conf/snmpd.conf /usr/sfw/lib/sma_snmp/snmpd.conf If the files are not group-owned by root, sys, or bin, this is a finding.
Change the group ownership of the SNMP configuration file. Procedure: # chgrp root /etc/sma/snmp/snmpd.conf /var/sma_snmp/snmpd.conf /etc/snmp/conf/snmpd.conf /usr/sfw/lib/sma_snmp/snmpd.conf
Check the permissions of the SNMP configuration files. # ls -lL/etc/sma/snmp/snmpd.conf /var/sma_snmp/snmpd.conf /etc/snmp/conf/snmpd.conf /usr/sfw/lib/sma_snmp/snmpd.conf If the permissions include a "+", the file has an extended ACL and this is a finding.
Remove the extended ACL from the files. # chmod A- /etc/sma/snmp/snmpd.conf /var/sma_snmp/snmpd.conf /etc/snmp/conf/snmpd.conf /usr/sfw/lib/sma_snmp/snmpd.conf
Ask the SA if this is an NMS server. If it is an NMS server, then ask what other applications run on it. If there is anything other than network management software and DBMS software used only for the storage and inquiry of NMS data, this is a finding.
Ensure only authorized software is loaded on a designated NMS server. Authorized software is limited to the NMS software itself, a database management system for the NMS server if necessary, and network management software.
Check the permissions of the syslog configuration file. # ls -lL /etc/syslog.conf If the mode of the file is more permissive than 0640, this is a finding.
Change the permissions of the syslog configuration file. # chmod 0640 /etc/syslog.conf
Check the permissions of the syslog configuration file. # ls -lL /etc/syslog.conf If the permissions include a "+", the file has an extended ACL and this is a finding.
Remove the extended ACL from the file. # chmod A- /etc/syslog.conf
Check /etc/syslog.conf ownership. # ls -lL /etc/syslog.conf If /etc/syslog.conf is not owned by root, this is a finding.
Use the chown command to set the owner to root. # chown root /etc/syslog.conf
Check /etc/syslog.conf group ownership. Procedure: # ls -lL /etc/syslog.conf If /etc/syslog.conf is not group-owned by root, sys, or bin, this is a finding.
Change the group owner of the /etc/syslog.conf file to root, bin, or sys. Procedure: # chgrp root /etc/syslog.conf
Check the syslog configuration file for remote syslog servers. # grep '@' /etc/syslog.conf | grep -v '^#' If no line is returned, this is a finding.
Edit the syslog configuration file and add an appropriate remote syslog server.
Examine the syslog.conf file for any references to remote log hosts. # grep -v "^#" /etc/syslog.conf | grep '@' Destination locations beginning with an @ represent log hosts. If the log host name is a local alias, such as log host, consult the /etc/hosts or other name databases as necessary to obtain the canonical name or address for the log host. Determine if the host referenced is a log host documented using site-defined procedures. If an undocumented log host is referenced, this is a finding.
Remove, replace, or document the referenced undocumented log host.
Check the SSH client configuration for allowed protocol versions. # grep -i protocol /etc/ssh/ssh_config | grep -v '^#' If the returned protocol configuration allows versions less than 2, this is a finding.
Edit the /etc/ssh/ssh_config file and add or edit a Protocol configuration line that does not allow versions less than 2.
Check the SSH daemon configuration for listening network addresses. # grep -i Listen /etc/ssh/sshd_config | grep -v '^#' If no configuration is returned, or if a returned Listen configuration contains addresses not designated for management traffic, this is a finding.
Edit the SSH daemon configuration to specify listening network addresses designated for management traffic.
Check the SSH daemon configuration for allowed ciphers. # grep -i ciphers /etc/ssh/sshd_config | grep -v '^#' Ciphers aes256-ctr,aes192-ctr,aes128-ctr If any ciphers other than "aes256-ctr", "aes192-ctr", or "aes128-ctr" are listed, the order differs from the example above, the "Ciphers" keyword is missing, or is commented out, this is a finding.
Edit /etc/ssh/sshd_config and change or set the Ciphers line to the following. Ciphers aes256-ctr, aes192-ctr, aes128-ctr
Check the SSH daemon configuration for allowed ciphers. # grep -i ciphers /etc/ssh/sshd_config | grep -v '^#' If no lines are returned, or the returned ciphers list contains any cipher ending with cbc, this is a finding.
Edit /etc/ssh/sshd_config and add or edit the "Ciphers" line. Only include ciphers that start with "3des" or "aes" and do not contain "cbc". For the list of available ciphers for the particular version of your software, consult the sshd_config manpage. Restart the SSH daemon.
Check the SSH daemon configuration for allowed MACs. Procedure: # grep -i macs /etc/ssh/sshd_config | grep -v '^#' If no lines are returned, or the returned MACs list contains any MAC that is not hmac-sha1 or a better hmac algorithm that is on the FIPS 140-2 approved list, this is a finding.
Edit the SSH daemon configuration and remove any MACs that are not hmac-sha1 or a better hmac algorithm that is on the FIPS 140-2 approved list. If necessary, add a MACs line.
Check the SSH client configuration for allowed ciphers. # grep -i ciphers /etc/ssh/ssh_config | grep -v '^#' If no lines are returned, the returned ciphers list contains any cipher not starting with 3des or aes, this is a finding.
Edit /etc/ssh/ssh_config and add or edit the "Ciphers" line. Only include ciphers that start with "3des" or "aes" and do not contain "cbc". For the list of available ciphers for the particular version of your software, consult the ssh_config manpage.
Check the SSH client configuration for allowed ciphers. # grep -i ciphers /etc/ssh/ssh_config | grep -v '^#' If no lines are returned, or the returned ciphers list contains any cipher ending with cbc, this is a finding.
Edit /etc/ssh/ssh_config and add or edit the "Ciphers" line. Only include ciphers that start with "3des" or "aes" and do not contain "cbc". For the list of available ciphers for the particular version of your software, consult the ssh_config manpage.
Check the SSH client configuration for allowed MACs. Procedure: # grep -i macs /etc/ssh/ssh_config | grep -v '^#' If no lines are returned, or the returned MACs list contains any MAC that is not hmac-sha1 or a better hmac algorithm that is on the FIPS 140-2 approved list, this is a finding.
Edit the SSH client configuration and remove any MACs that are not hmac-sha1 or a better hmac algorithm that is on the FIPS 140-2 approved list. If necessary, add a MACs line.
Check the SSH daemon configuration for the AllowGroups setting. # grep -i AllowGroups /etc/ssh/sshd_config | grep -v '^#' If no lines are returned, this is a finding.
Edit the SSH daemon configuration and add an AllowGroups directive.
Check the permissions for SSH public host key files. # ls -lL /etc/ssh/*key.pub If any file has a mode more permissive than 0644, this is a finding.
Change the permissions for the SSH public host key files. # chmod 0644 /etc/ssh/*key.pub
Check the permissions for SSH private host key files. # ls -lL /etc/ssh/*key If any file has a mode more permissive than 0600, this is a finding.
Change the permissions for the SSH private host key files. # chmod 0600 /etc/ssh/*key
Ask the SA if GSSAPI authentication is used for SSH authentication to the system. If so, this is not applicable. Check the SSH daemon configuration for the GSSAPI authentication setting. # grep -i GSSAPIAuthentication /etc/ssh/sshd_config | grep -v '^#' If no lines are returned, or the setting is set to yes, this is a finding.
Edit the SSH daemon configuration and set (add if necessary) a GSSAPIAuthentication directive set to no.
Check the SSH clients configuration for the GSSAPI authentication setting. # grep -i GSSAPIAuthentication /etc/ssh/ssh_config | grep -v '^#' If no lines are returned, or the setting is set to yes, this is a finding.
Edit the SSH client configuration and set (add if necessary) a GSSAPIAuthentication directive set to no.
Check the SSH daemon configuration for the StrictModes setting. # grep -i StrictModes /etc/ssh/sshd_config | grep -v '^#' If the setting is present and not set to yes, this is a finding.
Edit the SSH daemon configuration and change the StrictModes setting value to yes or remove it entirely.
Check the SSH daemon configuration for the RhostsRSAAuthentication setting. # grep -i RhostsRSAAuthentication /etc/ssh/sshd_config | grep -v '^#' If the setting is set to yes, this is a finding.
Edit the SSH daemon configuration and change the RhostsRSAAuthentication setting value to no or remove it entirely.
Check the SSH daemon configuration for the Compression setting. # grep -i Compression /etc/ssh/sshd_config | grep -v '^#' If the setting is not present, or set to yes, this is a finding.
Edit the SSH daemon configuration and add or edit the Compression setting value to no or delayed.
Check the TCP wrappers configuration files to determine if SSHD is configured to use TCP wrappers. Procedure: # egrep '^[^#:]*(ALL|sshd)' /etc/hosts.deny # egrep '^[^#:]*(ALL|sshd)' /etc/hosts.allow If neither of the hosts.deny or hosts.allow files exist, this is a finding. If no entries are returned, the TCP wrappers are not configured for SSHD, this is a finding.
Add appropriate IP restrictions for SSH to the /etc/hosts.deny and/or /etc/hosts.allow files.
Verify the SSH daemon is configured for logon warning banners. # grep -i banner /etc/ssh/sshd_config | grep -v '^#' # cat [banner file] Verify the Banner configuration line is present and the file it references contains a login warning banner. If the SSH daemon is not configured to display a logon warning banner, this is a finding.
Edit the SSH daemon configuration and add (or edit) a banner setting referencing a file containing a logon warning banner. DoD Login Banners: "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." OR "I've read & consent to terms in IS user agreem't."
Check the system for an IPv4 default route. Procedure: # netstat -r |grep default If a default route is not defined, this is a finding.
Create or edit /etc/defaultrouter to contain the default gateway address. Procedure (for a default gateway of 192.168.3.1): # echo "192.168.3.1" > /etc/defaultrouter Restart the system for the setting to take effect.
Check for a default route for IPv6. # netstat -f inet6 -r | grep default If the system uses IPv6, and no results are returned, this is a finding.
Add a default route for IPv6. # route add -inet6 default <gateway> Add this command to an init script.
Ask the SA if the system is a designated router. If it is not, this is not applicable. Check the system for non-routing network services. Procedure: # netstat -a | grep -i listen # ps -ef If non-routing services, including Web servers, file servers, DNS servers, or applications servers, but excluding management services, such as SSH and SNMP, are running on the system, this is a finding.
Ensure only authorized software is loaded on a designated router. Authorized software will be limited to the most current version of routing protocols and SSH for system administration purposes.
Check for any running routing protocol daemons. # svcs -a | grep online | egrep '(ospf|route|bgp|zebra|quagga)' OR # ps -ef | egrep '(ospf|route|bgp|zebra|quagga)' If any routing protocol daemons are listed, this is a finding.
Disable any routing protocol daemons. # svcadm disable <routing protocol daemon>
Check the ownership of the dfstab file. Example: # ls -lL /etc/dfs/dfstab If the export configuration file is not owned by root, this is a finding.
Change the owner of the dfstab file to root. Example: # chown root /etc/dfs/dfstab
Check the group ownership of the NFS export configuration file. Procedure: # ls -lL /etc/dfs/dfstab If the file is not group-owned by root, bin, or sys, this is a finding.
Change the group ownership of the NFS export configuration file. Procedure: # chgrp root /etc/dfs/dfstab
# ls -lL /etc/dfs/dfstab If the file has a mode more permissive than 0644, this is a finding.
Change the permissions of the dfstab file to 664 or less permissive. # chmod 0644 /etc/dfs/dfstab
Check the group ownership of the NFS export configuration file. # ls -lL /etc/dfs/dfstab If the permissions include a "+", the file has an extended ACL and this is a finding.
Remove the extended ACL from the file. # chmod A- /etc/dfs/dfstab
Check for NFS exported file systems. Procedure: # exportfs -v OR # more /etc/dfs/sharetab This will display all of the exported file systems. For each file system displayed, check the ownership. Procedure: # ls -lLa <exported file system path> If the files and directories are not owned by root, this is a finding.
Change the ownership of exported file systems not owned by root. Procedure: # chown root <path>
List the exports. # cat /etc/dfs/dfstab OR # more /etc/dfs/sharetab For each export, check the ownership information. # ls -ldL <export> If the directory is not group-owned by root, sys, or bin this is a finding.
Change the group owner of the export directory. # chgrp root <export>
Check if the anon option is set correctly for exported file systems. List exported file systems. # exportfs -v OR # more /etc/dfs/sharetab Each of the exported file systems should include an entry for the 'anon=' option set to -1 or an equivalent (60001, 60002, 65534, or 65535). If an appropriate 'anon=' setting is not present for an exported file system, this is a finding.
Edit /etc/dfs/dfstab and add the "anon=-1" option for exports lacking it. Re-export the filesystems.
Perform the following on NFS servers: # grep "^default" /etc/nfssec.conf Check to ensure the second column does not equal 0. This would indicate the default is set to none. Perform the following to check currently exported file systems. # more /etc/dfs/dfstab If the option sec=none is set on any of the exported file systems, this is a finding.
Edit the /etc/dfs/dfstab file and add the sec=XXX option to the share line as an option. XXX must be a valid option for the system other than none.
Determine if the NFS server is exporting with the root access option. Procedure: # exportfs -v | grep "root=" OR # more /etc/dfs/sharetab If an export with the root option is found and is not properly documented with the IA staff, this is a finding.
Edit the /etc/dfs/dfstab file and remove the root= option from all exports. Re-export the file systems.
Check the system for NFS mounts not using the nosuid option. Procedure: # mount -v | grep " type nfs " | grep -v nosetuid OR # grep nfs /etc/mnttab | grep -v nosuid | grep -v :vold If the mounted file systems do not have the nosetuid/nosuid option, this is a finding. NOTE: Mount options for the volume management daemon (vold) are controlled by the /etc/rmmount.conf file.
Edit /etc/vfstab and add the nosuid option for all NFS file systems. Remount the NFS file systems to make the change take effect.
Ask the SA if any peer-to-peer file-sharing applications are installed. Some examples of these applications include: - Napster, - Kazaa, - ARES, - Limewire, - IRC Chat Relay, and - BitTorrent. If any of these applications are installed, this is a finding.
Uninstall the peer-to-peer file sharing application(s) from the system.
Check the system for a running Samba server. Procedure: # ps -ef |grep smbd If the Samba server is running, ask the SA if the Samba server is operationally required. If it is not, this is a finding.
If there is no functional need for Samba and the daemon is running, disable the daemon by killing the process ID as noted from the output of ps -ef |grep smbd. The utility should also be removed or not installed if there is no functional requirement.
Check the ownership of the smb.conf file. Default locations for this file include /etc, /etc/sfw, /etc/samba, and /etc/sfw/samba. If the system has Samba installed in non-standard locations, also check the smb.conf in those locations. Procedure: # ls -l /etc/smb.conf /etc/sfw/smb.conf /etc/samba/smb.conf /etc/sfw/samba/smb.conf If a smb.conf file is not owned by root, this is a finding.
Change the ownership of the smb.conf file. Procedure: # chown root /etc/smb.conf /etc/sfw/smb.conf /etc/samba/smb.conf /etc/sfw/samba/smb.conf
Check the group ownership of the smb.conf file. Default locations for this file include /etc, /etc/sfw, /etc/samba, and /etc/sfw/samba. If the system has Samba installed in non-standard locations, also check the smb.conf in those locations. Procedure: # ls -l /etc/smb.conf /etc/sfw/smb.conf /etc/samba/smb.conf /etc/sfw/samba/smb.conf If an smb.conf file is not group-owned by root, bin, or sys, this is a finding.
Change the group owner of the smb.conf file. Procedure: # chgrp root /etc/smb.conf /etc/sfw/smb.conf /etc/samba/smb.conf /etc/sfw/samba/smb.conf
Check the mode of the smb.conf file. Default locations for this file include /etc, /etc/sfw, /etc/samba, and /etc/sfw/samba. If the system has Samba installed in non-standard locations, also check the smb.conf in those locations. Procedure: # ls -lL /etc/smb.conf /etc/sfw/smb.conf /etc/samba/smb.conf /etc/sfw/samba/smb.conf If the smb.conf has a mode more permissive than 0644, this is a finding.
Change the mode of the smb.conf file to 0644 or less permissive. Procedure: # chmod 0644 /etc/smb.conf /etc/sfw/smb.conf /etc/samba/smb.conf /etc/sfw/samba/smb.conf
Check the group ownership of the Samba configuration file. Default locations for this file include /etc, /etc/sfw, /etc/samba, and /etc/sfw/samba. If the system has Samba installed in non-standard locations, also check the smb.conf in those locations. Procedure: # ls -lL /etc/smb.conf /etc/sfw/smb.conf /etc/samba/smb.conf /etc/sfw/samba/smb.conf If the permissions include a "+", the file has an extended ACL and this is a finding.
Remove the extended ACL from the file. # chmod A- /etc/smb.conf /etc/sfw/smb.conf /etc/samba/smb.conf /etc/sfw/samba/smb.conf
Check the ownership of the smbpasswd file. # ls -lL /etc/sfw/private/smbpasswd If the smbpasswd file is not owned by root, this is a finding.
Use the chown command to configure the smb passwd file. # chown root /etc/sfw/private/smbpasswd
Check smbpasswd ownership. # ls -lL /etc/sfw/private/smbpasswd If smbpasswd is not group-owned by root, this is a finding.
Use the chgrp command to ensure the group owner of the smbpasswd file is root. # chgrp root /etc/sfw/private/smbpasswd
Check smbpasswd mode. Procedure: # ls -lL /etc/sfw/private/smbpasswd If smbpasswd has a mode more permissive than 0600, this is a finding.
Change the mode of the smbpasswd file to 0600. Procedure: # chmod 0600 /etc/sfw/private/smbpasswd
Check the group ownership of the Samba configuration file. # ls -lL /etc/sfw/private/smbpasswd If the permissions include a "+", the file has an extended ACL and this is a finding.
Remove the extended ACL from the file. # chmod A- /etc/sfw/private/smbpasswd
Examine the smb.conf file. Default locations for this file include /etc, /etc/sfw, /etc/samba, and /etc/sfw/samba. If the system has Samba installed in non-standard locations, also check the smb.conf in those locations. Procedure: # more /etc/smb.conf /etc/sfw/smb.conf /etc/samba/smb.conf /etc/sfw/samba/smb.conf If the hosts option is not present to restrict access to a list of authorized hosts and networks, this is a finding.
Edit the smb.conf file and set the hosts option to permit only authorized hosts to access Samba.
Check the security mode of the Samba configuration. Default locations for this file include /etc, /etc/sfw, /etc/samba, and /etc/sfw/samba. If the system has Samba installed in non-standard locations, also check the smb.conf in those locations. Procedure: # grep -i security /etc/smb.conf /etc/sfw/smb.conf /etc/samba/smb.conf /etc/sfw/samba/smb.conf If the security mode is share, this is a finding.
Edit the smb.conf file and change the security setting to user or another valid setting other than share.
Check the encryption setting of the Samba configuration. Procedure: # grep -i 'encrypt passwords' /etc/smb.conf /etc/sfw/smb.conf /etc/samba/smb.conf /etc/sfw/samba/smb.conf If the setting is not present, or not set to yes, this is a finding.
Edit the smb.conf file and change the encrypt passwords setting to yes.
Check the encryption setting for the Samba configuration. Default locations for this file include /etc, /etc/sfw, /etc/samba, and /etc/sfw/samba. If the system has Samba installed in non-standard locations, also check the smb.conf in those locations. Procedure: # grep -i 'guest ok' /etc/smb.conf /etc/sfw/smb.conf /etc/samba/smb.conf /etc/sfw/samba/smb.conf If the setting exists and is set to yes, this is a finding.
Edit the smb.conf file and change the guest ok setting to no.
# ps -ef | egrep "innd|nntpd" If an INN server is running, this is a finding.
Disable the INN server.
Check /etc/news/hosts.nntp permissions. # ls -lL /etc/news/hosts.nntp If /etc/news/hosts.nntp has a mode more permissive than 0600, this is a finding.
Change the mode of the /etc/news/hosts.nntp file to 0600. # chmod 0600 /etc/news/hosts.nntp
Check the permissions of the file. # ls -lL /etc/news/hosts.nntp If the permissions include a "+", the file has an extended ACL, this is a finding.
Remove the extended ACL from the file. # chmod A- /etc/news/hosts.nntp
Check /etc/news/hosts.nntp.nolimit permissions. # ls -lL /etc/news/hosts.nntp.nolimit If /etc/news/hosts.nntp.nolimit has a mode more permissive than 0600, this is a finding.
Change the mode of /etc/news/hosts.nntp.nolimit to 0600. # chmod 0600 /etc/news/hosts.nntp.nolimit
Check the permissions of the file. # ls -lL /etc/news/hosts.nntp.nolimit If the permissions include a "+", the file has an extended ACL and this is a finding.
Remove the extended ACL from the file. # chmod A- /etc/news/hosts.nntp.nolimit
Check /etc/news/nnrp.access permissions. # ls -lL /etc/news/nnrp.access If /etc/news/nnrp.access has a mode more permissive than 0600, this is a finding.
Change the mode of the /etc/news/nnrp.access file to 0600. # chmod 0600 /etc/news/nnrp.access
Check the permissions of the file. # ls -lL /etc/news/nnrp.access If the permissions include a "+", the file has an extended ACL and this is a finding.
Remove the extended ACL from the file. # chmod A- /etc/news/nnrp.access
Check /etc/news/passwd.nntp permissions. # ls -lL /etc/news/passwd.nntp If /etc/news/passwd.nntp has a mode more permissive than 0600, this is a finding.
Change the mode of the /etc/news/passwd.nntp file. # chmod 0600 /etc/news/passwd.nntp
Check the permissions of the file. # ls -lL /etc/news/passwd.nntp If the permissions include a "+", the file has an extended ACL, this is a finding.
Remove the extended ACL from the file. # chmod A- /etc/news/passwd.nntp
Check the ownership of the files in /etc/news. Procedure: # ls -al /etc/news If the /etc/news directory or any files in it are not owned by root, this is a finding.
Change the ownership of the /etc/news directory and the files in it to root. Procedure: # chown -R root /etc/news
Check /etc/news directory and files group ownership. Procedure: # ls -al /etc/news If the /etc/news directory and the files in it are not group-owned by root, this is a finding.
Change the group owner of the /etc/news directory and the files in it to root. Procedure: # chgrp -R root /etc/news
If the system does not use NIS or NIS+, this is not applicable. Check if NIS or NIS+ is implemented using UDP. Procedure: # rpcinfo -p | grep yp | grep udp If NIS or NIS+ is implemented using UDP, this is a finding.
Configure the system to not use UDP for NIS and NIS+. Consult vendor documentation for the required procedure.
Perform the following to determine if NIS is active on the system. # ps -ef | egrep '(ypbind|ypserv)' If NIS is found active on the system, this is a finding.
Disable the use of NIS. Possible replacements are NIS+ and LDAP.
Check the domain name for NIS maps. Procedure: # domainname If the name returned is simple to guess, such as the organization name, building, or room name, etc., this is a finding.
Change the NIS domain name to a value difficult to guess. Consult vendor documentation for the required procedure.
If the system is not using NIS+, this is not applicable. Check the system to determine if NIS+ security level 2 is implemented. Procedure: # niscat cred.org_dir If the second column does not contain DES, the system is not using NIS+ security level 2, and this is a finding.
Ensure the NIS+ server is operating at security level 2 by editing /usr/lib/nis/nisserver and ensuring the line containing SEC= is set to the numeral 2, for example: SEC=2 # 2=DES or 3=RSA Security Level 0 is designed for testing and initial setup of the NIS+ namespace. When running at level 0, the daemon does not enforce access control. Any client is allowed to perform any operation, including updates and deletions. Security level 1 accepts AUTH_SYS and AUTH_DES credentials for authenticating clients and authorizing them to perform NIS+ operations. This is not a secure mode of operation since AUTH_SYS credentials are easily forged. It should not be used on networks in which any untrusted user may potentially have access. Security level 2 accepts only AUTH_DES credentials for authentication and authorization. This is the highest level of security currently provided by the NIS+ service and the default security level if the -S option is not used.
Ask the SA or IAO if a host-based intrusion detection application is loaded on the system. Determine if the application is loaded on the system. Procedure: # find / -name <daemon name> -print Determine if the application is active on the system. Procedure: # ps -ef | grep <daemon name> If no host-based intrusion detection system is installed on the system, this is a finding.
Install a host-based intrusion detection tool.
If using AIDE, verify the configuration contains the acl option for all monitored files and directories. Here is an example AIDE configuration fragment. SampleRule = p+i+l+n+u+g+s+m+c+acl+xattrs+sha256 /bin SampleRule If the acl option is not present, this is a finding. If using a different file integrity tool, check the configuration per tool documentation.
If using AIDE, edit the configuration and add the acl option for all monitored files and directories. If using a different file integrity tool, configure ACL checking per the tool's documentation.
If using AIDE, verify the configuration contains the xattrs option for all monitored files and directories. Here is an example AIDE configuration fragment. SampleRule = p+i+l+n+u+g+s+m+c+acl+xattrs+sha256 /bin SampleRule If the xattrs option is not present, this is a finding. If using a different file integrity tool, check the configuration per tool documentation.
If using AIDE, edit the configuration and add the xattrs option for all monitored files and directories. If using a different file integrity tool, configure extended attributes checking per the tool's documentation.
If using AIDE, verify the configuration contains the sha256 or sha512 options for all monitored files and directories. Here is an example AIDE configuration fragment. SampleRule = p+i+l+n+u+g+s+m+c+acl+xattrs+sha256 /bin SampleRule If either the sha256 or sha512 option is not present, this is a finding. If using a different file integrity tool, check the configuration per tool documentation.
If using AIDE, edit the configuration and add the sha256 or sha512 option for all monitored files and directories. If using a different file integrity tool, configure FIPS 140-2 approved cryptographic hashes per the tool's documentation.
Normally, TCPD logs to the mail facility in /etc/syslog.conf. Determine if syslog is configured to log events by TCPD. Procedure: # more /etc/syslog.conf Look for entries similar to the following: mail.debug /var/adm/maillog mail.none /var/adm/maillog mail.* /var/log/mail auth.info /var/log/messages The above entries would indicate mail alerts are being logged. If no entries for mail exist, then TCPD is not logging and this is a finding.
Configure the access restriction program to log every access attempt. Ensure the implementation instructions for TCP_WRAPPERS are followed, so system access attempts are logged into the system log files. If an alternate application is used, it must support this function.
The operator will ensure that anti-virus software is installed and operating. If the operator is unable to provide a documented configuration for an installed anti-virus software system or if not properly used, this is a finding.
The operator will ensure that anti-virus software is installed and operating.
Ask the SA if RDS is required by application software running on the system. If so, this is not applicable. Verify the RDS protocol handler is not installed. # pkginfo | grep SUNWrds If no results are returned, this is not a finding. Verify the RDS protocol handler is prevented from dynamic loading. # grep "exclude: rds" /etc/system If no result is returned, this is a finding.
Remove the RDS protocol handler package. # pkgrm SUNWrds OR Prevent the RDS protocol handler from dynamic loading. # echo "exclude: rds" >> /etc/system
Verify the TIPC protocol handler package is not installed. # pkginfo | grep SUNWtipc If the TIPC protocol handler package is not installed, this is not a finding Verify the TIPC protocol handler is prevented from dynamic loading. # grep "exclude: tipc" /etc/system If no result is returned, this is a finding.
Remove the TIPC protocol handler package. # pkgrm SUNWtipc OR Prevent the TIPC protocol handler from dynamic loading. # echo "exclude: tipc" >> /etc/system
# ifconfig -a If a tunnel interface is displayed with an IPv4 tunnel source address, an IPv6 interface address, and no tunnel destination address, this is a finding.
Disable the active 6to4 tunnel. # ifconfig <tunnel> down Check the /etc/hostname* files for startup configuration for the tunnel, and edit or delete as appropriate to prevent the tunnel creation on startup.
Check for any IP tunnels. # ifconfig -a | grep 'ip.*tun' If any results are returned, this is a finding.
Disable the tunnels. # ifconfig <tunnel> down Remove the startup configuration for the tunnels. # rm /etc/hostname.<tunnel>
Verify no interface is configured to use DHCP. # ls /etc/dhcp.* If any file is found, this is a finding.
Delete the DHCP client configuration. # rm /etc/dhcp.*
Determine the type of zone that you are currently securing. # zonename If the zone is not the global zone, determine if any interfaces are exclusive to the zone: # dladm show-link If the output indicates "insufficient privileges" then this requirement is not applicable. If the zone is the global zone or the non-global zone has exclusive interfaces verify the system is configured to ignore IPv6 ICMP redirect messages. # ndd /dev/ip6 ip6_ignore_redirect If the returned value is not 1, this is a finding.
Configure the system to ignore IPv6 ICMP redirect messages. # ndd -set /dev/ip6 ip6_ignore_redirect 1 Also add this command to a system startup script.
Determine the type of zone that you are currently securing. # zonename If the zone is not the global zone, determine if any interfaces are exclusive to the zone: # dladm show-link If the output indicates "insufficient privileges" then this requirement is not applicable. If the zone is the global zone or the non-global zone has exclusive interfaces verify the system is configured to not send IPv6 ICMP redirect messages. # ndd /dev/ip6 ip6_send_redirects If the returned value is not 0, this is a finding.
Configure the system to not send IPv6 ICMP redirect messages. # ndd -set /dev/ip6 ip6_send_redirects 0 Also, add this command to a system startup script.
Determine if the system uses a reverse-path filter for IPv6 network traffic. If it does not, this is a finding.
Configure the system to use a reverse-path filter for IPv6 network traffic.
Determine the type of zone that you are currently securing. # zonename If the zone is not the global zone, determine if any interfaces are exclusive to the zone: # dladm show-link If the output indicates "insufficient privileges" then this requirement is not applicable. If the zone is the global zone or the non-global zone has exclusive interfaces verify the system is configured to not forward IPv6 source-routed packets. # ndd /dev/ip6 ip6_forward_src_routed If the returned value is not 0, this is a finding.
Configure the system to not forward IPv6 source-routed packets. # ndd -set /dev/ip6 ip6_forward_src_routed 0 Also, add this command to a system startup script.
Determine the type of zone that you are currently securing. # zonename If the zone is not the global zone, determine if any interfaces are exclusive to the zone: # dladm show-link If the output indicates "insufficient privileges" then this requirement is not applicable. If the zone is the global zone or the non-global zone has exclusive interfaces determine if the system is configured to ignore IPv6 multicast ICMP echo-requests. Procedure: # ndd -get /dev/ip ip6_respond_to_echo_multicast If the result is not 0, this is a finding.
Configure the system to not respond to IPv6 multicast ICMP echo-requests. Procedure: # ndd -set /dev/ip ip6_respond_to_echo_multicast 0 This command must also be added to a system startup script.
Check if the system is using NSS LDAP. # grep -v '^#' /etc/nsswitch.conf | grep ldap If no lines are returned, this vulnerability is not applicable. Verify TLS is used for client authentications to the server # grep "NS_LDAP_AUTH=" /var/ldap/ldap_client_file If any of the authentication methods used do not begin with "tls:", this is a finding. Retrieve the list of LDAP servers. # grep "NS_LDAP_SERVERS=" /var/ldap/client_file Use the certutil to verify the cipher(s) used for every server. # certutil -L -n < host nickname > -d /var/ldap If any of the TLS connections do not use FIPS 140-2 approved cryptographic algorithms, this is a finding.
Configure all LDAP authentications and connections to be encrypted using TLS and FIPS 140-2 approved cryptographic algorithms.
Verify the permissions of the files. # ls -lL /var/ldap/ldap_client_file /var/ldap/ldap_client_cred If the mode of either file is more permissive than 0600, this is a finding.
Change the permissions of the files. # chmod 0600 /var/ldap/ldap_client_file /var/ldap/ldap_client_cred
Verify the ownership of the files. # ls -lL /var/ldap/ldap_client_file /var/ldap/ldap_client_cred If the files are not owned by root, this is a finding.
Change the owner of the files. # chown root /var/ldap/ldap_client_file /var/ldap/ldap_client_cred
Check the group ownership of the files. Procedure: # ls -lL /var/ldap/ldap_client_file /var/ldap/ldap_client_cred If the files are not group-owned by root, bin, or sys, this is a finding.
Change the group-owner of the files to root, bin, or sys. Procedure: # chgrp root /var/ldap/ldap_client_file /var/ldap/ldap_client_cred
Verify the permissions of the files. # ls -lL /var/ldap/ldap_client_file /var/ldap/ldap_client_cred If the permissions include a "+", the files have an extended ACL, this is a finding.
Remove the extended ACL from the files. # chmod A- /var/ldap/ldap_client_file /var/ldap/ldap_client_cred
Check if the system is using NSS LDAP. # grep -v '^#' /etc/nsswitch.conf | grep ldap If no lines are returned, this vulnerability is not applicable. Verify the ownership of the certificate database files. # ls -lL /var/ldap/cert8.db /var/ldap/key3.db /var/ldap/secmod.db If the owner of any of the files is not root, this is a finding.
Change the ownership of the certificate database files. # chown root /var/ldap/cert8.db /var/ldap/key3.db /var/ldap/secmod.db
Check if the system is using NSS LDAP. # grep -v '^#' /etc/nsswitch.conf | grep ldap If no lines are returned, this vulnerability is not applicable. Verify the group ownership of the certificate database files. # ls -lL /var/ldap/cert8.db /var/ldap/key3.db /var/ldap/secmod.db If the group owner of any of the files is not root, bin, or sys, this is a finding.
Change the group ownership of the certificate database files. # chgrp root /var/ldap/cert8.db /var/ldap/key3.db /var/ldap/secmod.db
Check if the system is using NSS LDAP. # grep -v '^#' /etc/nsswitch.conf | grep ldap If no lines are returned, this vulnerability is not applicable. Verify the mode of the certificate database files. # ls -lL /var/ldap/cert8.db /var/ldap/key3.db /var/ldap/secmod.db If the mode of any of the files is more permissive than 0644, this is a finding.
Change the mode of the certificate database files. # chmod 0644 /var/ldap/cert8.db /var/ldap/key3.db /var/ldap/secmod.db NOTE: Some SAs may prefer to set the permissions to 0600. This is acceptable.
If the autofs service is needed, this vulnerability is not applicable. Check if the autofs service is running. # svcs svc:/system/filesystem/autofs If the autofs service is online this is a finding.
Stop and disable the autofs service. # svcadm disable autofs
If the system needs USB, this vulnerability is not applicable. Verify the SUNWusb package is installed. # pkginfo SUNWusb If the package is installed, this is a finding.
Remove the SUNWusb package. # pkgrm SUNWusb
If the system needs a particular USB driver for storage, this vulnerability is not applicable. Check the current loaded kernel modules: # modinfo | grep usb_ac # modinfo | grep usb_as # modinfo | grep hid # modinfo | grep scsa2usb # modinfo | grep usbprn # modinfo | grep usbser_edge If any command produces output, this is a finding. Check the configuration of the /etc/system file: # grep 'exclude: usb_ac' /etc/system # grep 'exclude: usb_as' /etc/system # grep 'exclude: hid' /etc/system # grep 'exclude: scsa2usb' /etc/system # grep 'exclude: usbprn' /etc/system # grep 'exclude: usbser_edge' /etc/system If no results are returned from any particular command, this is a finding.
Prevent the USB drivers from loading: # echo "exclude: usb_ac" >> /etc/system # echo "exclude: usb_as" >> /etc/system # echo "exclude: hid" >> /etc/system # echo "exclude: scsa2usb" >> /etc/system # echo "exclude: usbprn" >> /etc/system # echo "exclude: usbser_edge" >> /etc/system The system must be restarted for these changes to take effect.
If the system needs IEEE 1394 (Firewire), this is not applicable. Check if the firewire module is not disabled. # grep 'exclude: s1394' /etc/system If no results are returned, this is a finding.
Disable the firewire module. # echo "exclude: s1394" >> /etc/system Reboot for the changes to take effect.
Determine the zone that you are currently securing. # zonename If the command output is "global", only the "phys" and "SR-IOV" interfaces assigned to the global zone require inspection. If using a non-Global zone, all "phys" and "SR-IOV" interfaces assigned to the zone require inspection. Determine if the system is using a local firewall. # svcs network/ipfilter If the service is not online, this is a finding.
Enable the system's local firewall. # svcadm enable network/ipfilter
If the system is not a global zone, this vulnerability is not applicable. Check the firewall rules for a default deny rule. # ipfstat -i An example of a default deny rule is: block in log quick on ne3 from any to any. If there is no default deny rule, this is a finding.
Edit /etc/ipf/ipf.conf and add a default deny rule. Restart the ipfilter service. # svcadm restart network/ipfilter
Determine if the system is configured to boot from devices other than the system startup media. If so, this is a finding. In most cases, this will require access to the BIOS or system controller. The exact procedure will be hardware-dependent, and the SA should be consulted to identify the specific configuration. In the event the BIOS or system controller is not accessible without adversely impacting (e.g., restarting) the system, the SA may be interviewed to determine compliance with the requirement.
Configure the system to only boot from system startup media.
On systems with a BIOS or system controller, verify a supervisor or administrator password is set. If a password is not set, this is a finding. If the BIOS or system controller supports user-level access in addition to supervisor/administrator access, determine if this access is enabled. If so, this is a finding. The exact procedure will be hardware-dependent, and the SA should be consulted to identify the specific configuration. In the event the BIOS or system controller is not accessible without adversely impacting (e.g., restarting) the system, the SA may be interviewed to determine compliance with the requirement.
Access the system's BIOS or system controller. Set a supervisor/administrator password if one has not been set. Disable a user-level password if one has been set.
Ask the SA if the system boots from removable media. If so, ask if the boot media is stored in a secure container when not in use. If it is not, this is a finding.
Store the system boot media in a secure container when not in use.
This check applies to the global zone only. Determine the type of zone that you are currently securing. # zonename If the command output is "global", this check applies. Check the permission of the menu.lst file. On systems that have a ZFS root, the menu.lst file is typically located at /pool-name/boot/grub/menu.lst where "pool-name" is the mount point for the top-level dataset. On systems that have a UFS root, the menu.lst file is typically located at /boot/grub/menu.lst . Procedure: # ls -lL /pool-name/boot/grub/menu.lst or # ls -lL /boot/grub/menu.lst If menu.lst has a mode more permissive than 0600, this is a finding.
Change the mode of the menu.lst file to 0600. # chmod 0600 /pool-name/boot/grub/menu.lst or # chmod 0600 /boot/grub/menu.lst
Verify package signature validation is not disabled. # grep "authentication=quit" /var/sadm/install/admin/default If no configuration is returned, this is a finding.
Edit /var/sadm/install/admin/default and set the authentication setting to quit.
Determine if the system package management tool is configured to automatically obtain updated packages using the cron or at utilities. # grep smpatch /var/spool/cron/crontabs/* /var/spool/cron/atjobs/* If smpatch is called with the add, update, or remove subcommands, this is a finding.
Disable any cron or at jobs running smpatch. # crontab -e < user running smpatch > # atrm < id of at job running smpatch >
Consult vendor documentation to determine if the system is capable of CAC authentication. If it is not, this is not applicable. Interview the SA to determine if all accounts not exempted by policy are using CAC authentication. If non-exempt accounts are not using CAC authentication, this is a finding.
Consult vendor documentation to determine the procedures necessary for configuring CAC authentication. Configure all accounts required by policy to use CAC authentication.
Determine if X11 Forwarding is enabled. # grep "^X11Forwarding" /etc/ssh/sshd_config If the output of this command is not “X11Forwarding no”, this is a finding.
The root role is required. Modify the sshd_config file. # vi /etc/ssh/sshd_config Locate the line containing: X11Forwarding Change it to: X11Forwarding no Restart the SSH service. # svcadm restart svc:/network/ssh
Determine if the X11 forwarding server is bound to the loopback address. # grep "^X11UseLocalhost" /etc/ssh/sshd_config If the output of this command is not “X11UseLocalhost yes”, this is a finding.
The root role is required. Modify the sshd_config file. # vi /etc/ssh/sshd_config Locate the line containing: X11UseLocalhost Change it to: X11UseLocalhost yes Restart the SSH service. # svcadm restart svc:/network/ssh