The vmlinuz
file is the compressed Linux kernel image that gets loaded during system boot. Unlike its uncompressed counterpart vmlinux
, this file is specifically designed to be space-efficient while containing all essential kernel components. In Ubuntu systems, it's typically located in /boot
or at the root directory.
# Typical location of vmlinuz in Ubuntu
ls -lh /boot/vmlinuz-$(uname -r)
-rw------- 1 root root 7.8M Sep 15 14:23 /boot/vmlinuz-5.4.0-84-generic
A changing checksum for vmlinuz
is significant because:
- Kernel files shouldn't change unless through official updates
- Unauthorized modifications could indicate rootkit installation
- The kernel runs with highest privileges (ring 0)
To verify if the change was legitimate:
# Compare with package manager's records
dpkg --verify linux-image-$(uname -r)
The combination of a modified kernel and empty Apache logs strongly suggests malicious activity. Common attack patterns include:
# Check for hidden kernel modules (potential rootkits)
lsmod | grep -Ev '^(Module|ip_tables|nf_conntrack)'
# Verify kernel module signatures
for module in /lib/modules/$(uname -r)/kernel/*; do
modinfo "$module" | grep -E 'signer|sig_key'
done
- Isolate the affected system from the network
- Capture forensic artifacts before reboot:
# Memory capture sudo dd if=/proc/kcore of=/tmp/memdump.img bs=1M count=1024 # Kernel symbol table sudo cat /proc/kallsyms > /tmp/kallsyms.txt
- Restore from known-good backup
- Analyze the backup's vmlinuz checksum:
sha256sum /path/to/backup/vmlinuz
For WordPress deployments, consider these hardening steps:
# Kernel hardening via sysctl
echo "kernel.kptr_restrict = 2" >> /etc/sysctl.conf
echo "kernel.dmesg_restrict = 1" >> /etc/sysctl.conf
sysctl -p
# Filesystem monitoring configuration (example for auditd)
sudo auditctl -w /vmlinuz -p wa -k kernel_binary
sudo auditctl -w /boot -p wa -k boot_files
Implement real-time monitoring with checks like:
# Zabbix item prototype for kernel file monitoring
UserParameter=kernel.checksum[*],sha256sum $1 | cut -d' ' -f1
# Cron job for periodic verification
0 3 * * * root /usr/bin/rkhunter --check --sk --quiet
The vmlinuz
file is the compressed Linux kernel image that gets loaded during system boot. It's typically located in the root directory (/vmlinuz
) or in /boot
. Unlike its uncompressed counterpart vmlinux
, vmlinuz
is smaller and contains the essential components for system startup.
Under normal circumstances, the vmlinuz
checksum only changes when:
- The kernel is updated via package manager (apt/yum)
- Manual kernel compilation and installation occurs
If neither of these operations were performed, a checksum change is a red flag. Here's how to verify the current kernel package:
# For Debian/Ubuntu
dpkg -l | grep linux-image
# For RHEL/CentOS
rpm -qa kernel
When you encounter a changed vmlinuz
checksum coupled with suspicious signs (like empty logs), follow these steps:
# 1. Check file metadata
ls -lh /vmlinuz
stat /vmlinuz
# 2. Verify package integrity
debsums -s linux-image-$(uname -r)
# 3. Compare against known good version
md5sum /vmlinuz
# Compare with output from:
cat /var/lib/dpkg/info/linux-image-$(uname -r).md5sums | grep vmlinuz
For WordPress servers, kernel-level compromises often follow these patterns:
- Modified kernel modules for rootkit functionality
- Kernel-based process hiding
- Network traffic interception hooks
Check for suspicious kernel modules with:
lsmod | grep -Ev '^Module|autofs4|bnep|bluetooth|bridge|cpufreq|drm|ecb|ip6|ipv6|joydev|llc|mac80211|nf_conntrack|nls|parport|ppdev|rfcomm|sco|uvcvideo|video|x_tables|xt_|8021q|acpi_cpufreq|aes|ahci|atkbd|ehci|i8042|intel|libahci|memstick|pata|processor|psmouse|rng|serio|sg|soundcore|sparse_keymap|snd|thermal|thinkpad|tpm|usb|virtio|wmi|xhci'
When compromise is suspected:
- Isolate the server from the network
- Preserve forensic evidence (create disk snapshots)
- Restore from known-good backups
- Perform post-mortem analysis
Implement these security practices:
# Monitor critical files with auditd
apt install auditd
auditctl -w /vmlinuz -p wa -k kernel_binary
auditctl -w /boot -p wa -k boot_dir
Configure regular integrity checking with AIDE or similar tools:
apt install aide
aideinit
mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
aide.wrapper --check