| name | analyzing-linux-audit-logs-for-intrusion |
| description | Uses the Linux Audit framework (auditd) with ausearch and aureport utilities to detect intrusion attempts, unauthorized access, privilege escalation, and suspicious system activity. Covers audit rule configuration, log querying, timeline reconstruction, and integration with SIEM platforms. Activates for requests involving auditd analysis, Linux audit log investigation, ausearch queries, aureport summaries, or host-based intrusion detection on Linux.
|
| domain | cybersecurity |
| subdomain | incident-response |
| tags | ["auditd","ausearch","aureport","linux-security","intrusion-detection","HIDS","forensics"] |
| version | 1.0.0 |
| author | mahipal |
| license | Apache-2.0 |
| nist_csf | ["RS.MA-01","RS.MA-02","RS.AN-03","RC.RP-01"] |
| mitre_attack | ["T1059.004","T1070","T1548.003","T1543.002"] |
Analyzing Linux Audit Logs for Intrusion
When to Use
- Investigating suspected unauthorized access or privilege escalation on Linux hosts
- Hunting for evidence of exploitation, backdoor installation, or persistence mechanisms
- Auditing compliance with security baselines (CIS, STIG, PCI-DSS) that require system call monitoring
- Reconstructing a timeline of attacker actions during incident response
- Detecting file tampering on critical system files such as
/etc/passwd, /etc/shadow, or SSH keys
Do not use for network-level intrusion detection; use Suricata or Zeek for network traffic analysis. Auditd operates at the kernel level on individual hosts.
Prerequisites
- Linux system with
auditd package installed and the audit daemon running (systemctl status auditd)
- Root or sudo access to configure audit rules and query logs
- Audit rules deployed via
/etc/audit/rules.d/*.rules or loaded with auditctl
- Recommended: Neo23x0/auditd ruleset from GitHub for comprehensive baseline coverage
- Familiarity with Linux syscalls (
execve, open, connect, ptrace, etc.)
- Log storage with sufficient retention (default location:
/var/log/audit/audit.log)
Workflow
Step 1: Verify Audit Daemon Status and Configuration
Confirm the audit system is running and check the current rule set:
systemctl status auditd
auditctl -l
cat /etc/audit/auditd.conf | grep -E "log_file|max_log_file|num_logs|space_left_action"
auditctl -s
If the backlog limit is being reached, increase it:
auditctl -b 8192
Step 2: Deploy Intrusion-Focused Audit Rules
Add rules that target common intrusion indicators. Place these in /etc/audit/rules.d/intrusion.rules:
-w /etc/passwd -p wa -k credential_access
-w /etc/shadow -p rwa -k credential_access
-w /etc/gshadow -p rwa -k credential_access
-w /etc/sudoers -p wa -k privilege_escalation
-w /etc/sudoers.d/ -p wa -k privilege_escalation
-w /etc/ssh/sshd_config -p wa -k sshd_config_change
-w /root/.ssh/authorized_keys -p wa -k ssh_key_tampering
-w /usr/sbin/useradd -p x -k user_management
-w /usr/sbin/usermod -p x -k user_management
-w /usr/sbin/groupadd -p x -k user_management
-a always, -F =b64 -S ptrace -F a0=0x4 -k process_injection
-a always, -F =b64 -S ptrace -F a0=0x5 -k process_injection
-a always, -F =b64 -S ptrace -F a0=0x6 -k process_injection
-a always, -F =b64 -S execve -F exe=/tmp -k exec_from_tmp
-a always, -F =b64 -S execve -F exe=/dev/shm -k exec_from_shm
-a always, -F =b64 -S init_module -S finit_module -k kernel_module_load
-a always, -F =b64 -S delete_module -k kernel_module_remove
-w /sbin/insmod -p x -k kernel_module_tool
-w /sbin/modprobe -p x -k kernel_module_tool
-a always, -F =b64 -S socket -F a0=2 -k network_socket_created
-a always, -F =b64 -S connect -F a0=2 -k network_connection
-w /etc/crontab -p wa -k cron_persistence
-w /etc/cron.d/ -p wa -k cron_persistence
-w /var/spool/cron/ -p wa -k cron_persistence
-w /var/log/ -p wa -k log_tampering