Information
Successful/unsuccessful uses of the unix_update must generate an audit record.
Reconstruction of harmful events or forensic analysis is not possible if audit records do not contain enough information.
At a minimum, the organization must audit the full-text recording of privileged commands. The organization must maintain audit trails in sufficient detail to reconstruct events to determine the cause and impact of compromise. "Unix_update" is a helper program for the "pam_unix" module that updates the password for a given user. It is not intended to be run directly from the command line and logs a security violation if done so.
When a user logs on, the AUID is set to the UID of the account that is being authenticated. Daemons are not user sessions and have the loginuid set to "-1". The AUID representation is an unsigned 32-bit integer, which equals "4294967295". The audit system interprets "-1", "4294967295", and "unset" in the same way.
Satisfies: SRG-OS-000062-GPOS-00031, SRG-OS-000037-GPOS-00015, SRG-OS-000042-GPOS-00020, SRG-OS-000062-GPOS-00031, SRG-OS-000392-GPOS-00172, SRG-OS-000462-GPOS-00206, SRG-OS-000471-GPOS-00215
Solution
Configure the audit system to generate an audit event for any successful/unsuccessful use of the unix_update command by adding or updating the following rule in a .rules file in the /etc/audit/rules.d/ directory:
-a always,exit -F path=/usr/sbin/unix_update -F perm=x -F auid>=1000 -F auid!=unset -k privileged-unix-update
Example:
#!/usr/bin/env bash
{
UID_MIN=$(awk '/^\s*UID_MIN/{print $2}' /etc/login.defs)
[ -n "${UID_MIN}" ] && printf '\n%s\n' \
"-a always,exit -F path=/usr/sbin/unix_update -F perm=x -F auid>=${UID_MIN} -F auid!=unset -k privileged-unix-update" \
>> /etc/audit/rules.d/50-privileged-unix-update.rules || printf "ERROR: Variable 'UID_MIN' is unset.\n"
}
Run the following command to merge and load the rules into active configuration:
# augenrules --load
Run the following command to check if reboot is required.
# if [[ $(auditctl -s | grep "enabled") =~ "2" ]]; then printf "Reboot required to load rules\n"; fi