AIDE (Advanced Intrusion Detection Environment) เป็นเครื่องมือ Host-based Intrusion Detection System (HIDS) ที่ตรวจจับการเปลี่ยนแปลงของไฟล์บน Server โดยเปรียบเทียบ Checksum, Permission, Ownership และ Metadata ของไฟล์กับ Baseline Database ที่สร้างไว้ ทำให้ตรวจพบว่ามีไฟล์ที่ถูกแก้ไข, เพิ่ม หรือลบออกโดยไม่ได้รับอนุญาต
บทความนี้อธิบายการติดตั้งและตั้งค่า AIDE ตั้งแต่การสร้าง Initial Database, การกำหนด Policy ว่าจะตรวจสอบไฟล์ใด, การรัน Check แบบ Scheduled, การแปลผล Output, จนถึงการตั้งค่า Email Alert และ Integration กับ Cron
ติดตั้ง AIDE
# Ubuntu/Debian
sudo apt update
sudo apt install aide aide-common
# RHEL/Rocky/AlmaLinux
sudo dnf install aide
# ตรวจสอบ Version
aide --version
# ดู Config File
cat /etc/aide/aide.conf # Ubuntu/Debian
cat /etc/aide.conf # RHEL/Rocky
โครงสร้าง Config และการกำหนด Policy
AIDE ใช้ Config File กำหนดว่าจะตรวจสอบ Path ใด ด้วย Attribute อะไร โดย Attribute แต่ละตัวกำหนดว่าจะตรวจสอบ Checksum, Permission, Timestamp, Owner อะไรบ้าง
# Attribute Groups ที่ใช้บ่อยใน AIDE
# p = permissions
# i = inode
# n = number of links
# u = user (owner)
# g = group
# s = size
# m = mtime (modification time)
# a = atime (access time)
# c = ctime (change time)
# S = growing size (อนุญาตให้ขนาดเพิ่มได้ เช่น Log)
# md5 = MD5 checksum
# sha1 = SHA1 checksum
# sha256 = SHA256 checksum
# sha512 = SHA512 checksum
# acl = ACL
# xattrs = Extended Attributes
# ตัวแปรสำเร็จรูปใน aide.conf
# NORMAL = p+i+n+u+g+s+m+c+acl+xattrs+sha256
# DIR = p+i+n+u+g+acl+xattrs
# PERMS = p+u+g+acl+xattrs
# LOG = S+b+acl+xattrs+sha256
# LSPP = NORMAL+sha512
# ตัวอย่าง /etc/aide/aide.conf (Ubuntu)
# หรือ /etc/aide.conf (RHEL)
# กำหนด Database Paths
database_in=file:/var/lib/aide/aide.db
database_out=file:/var/lib/aide/aide.db.new
database_new=file:/var/lib/aide/aide.db.new
gzip_dbout=yes
report_url=stdout
report_url=file:/var/log/aide/aide.log
# ตรวจสอบ /etc ด้วย NORMAL (p+i+n+u+g+s+m+c+sha256)
/etc NORMAL
# ตรวจสอบ /boot
/boot NORMAL
# ตรวจสอบ Binary และ Library
/bin NORMAL
/sbin NORMAL
/lib NORMAL
/lib64 NORMAL
/usr/bin NORMAL
/usr/sbin NORMAL
/usr/lib NORMAL
# ตรวจสอบ Log เฉพาะขนาดและ Checksum (S = growing ok)
/var/log LOG
# ไม่ตรวจสอบ Directory เหล่านี้ (ขึ้นต้นด้วย !)
!/var/log/aide
!/proc
!/sys
!/dev
!/run
!/tmp
สร้าง Initial Database (Baseline)
ขั้นตอนแรกหลังติดตั้ง AIDE คือสร้าง Database จาก Filesystem ปัจจุบันที่รู้ว่ายังปลอดภัยอยู่ ควรรันทันทีหลังติดตั้ง OS และ Application ก่อนที่จะเปิดให้ใช้งาน
# สร้าง Initial Database (ใช้เวลานานประมาณ 5-15 นาที)
sudo aide --init
# หรือบน RHEL/Rocky
sudo aide -i
# ตัวอย่าง Output:
# AIDE, version x.x
# ### AIDE database at /var/lib/aide/aide.db.new initialized.
# ย้าย Database ใหม่ไปเป็น Database หลัก
sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
# บน Ubuntu มี Script สำเร็จรูป
sudo aideinit
sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
# ตรวจสอบขนาด Database
ls -lh /var/lib/aide/aide.db
รัน Check และแปลผล Output
# ตรวจสอบ Filesystem กับ Database
sudo aide --check
# หรือ
sudo aide -C
# ตัวอย่าง Output เมื่อพบการเปลี่ยนแปลง:
# AIDE found differences between database and filesystem!!
# Start timestamp: 2026-04-17 08:30:00 +0000 (AIDE 0.17.4)
#
# Summary:
# Total number of entries: 47823
# Added entries: 2
# Removed entries: 0
# Changed entries: 3
#
# ---------------------------------------------------
# Added entries:
# ---------------------------------------------------
#
# f+++++++++++++++++: /etc/nginx/sites-enabled/newsite.conf
# f+++++++++++++++++: /var/www/html/newfile.php
#
# ---------------------------------------------------
# Changed entries:
# ---------------------------------------------------
#
# f =........X..: /etc/passwd
# f <........X..: /etc/nginx/nginx.conf
# f <........X..: /etc/ssh/sshd_config
# ความหมายของ Symbol ใน Output
# f = file, d = directory, l = symlink
# ตัวอักษรหลัง = ตำแหน่งที่เปลี่ยน:
# p = permissions changed
# i = inode changed
# n = number of links changed
# u = uid/user changed
# g = gid/group changed
# s = size changed
# m = mtime changed
# c = ctime changed
# S = size grew (growing file)
# X = extended attributes changed
# . = ไม่มีการเปลี่ยนแปลง
# + = เพิ่มขึ้น
# - = ลดลง
# < = attribute เล็กกว่า Baseline
# > = attribute ใหญ่กว่า Baseline
# เช่น "f =........X.." หมายถึง:
# ไฟล์ที่ permissions ไม่เปลี่ยน แต่ extended attributes เปลี่ยน
อัพเดต Database หลังเปลี่ยนแปลงที่รู้จัก
หลังจากอัพเดต Package หรือแก้ไข Config ไฟล์ที่ถูกต้อง ต้องอัพเดต Database ให้ตรงกับสถานะปัจจุบัน มิฉะนั้น AIDE จะ Report การเปลี่ยนแปลงที่รู้จักอยู่แล้วซ้ำ ๆ
# อัพเดต Database (สร้าง Database ใหม่จาก Filesystem ปัจจุบัน)
sudo aide --update
# หรือ
sudo aide -u
# ตรวจสอบ Database ใหม่ก่อน Overwrite
# Output จะบอกว่าเปลี่ยนแปลงอะไร เหมือน --check
# ถ้า Output ดูสมเหตุสมผล ย้าย DB ใหม่ไปแทน DB เดิม
sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
# Workflow หลัง System Update:
# 1. รัน sudo apt upgrade / sudo dnf update
# 2. ตรวจสอบว่ามีอะไรเปลี่ยนแปลง: sudo aide --check
# 3. ถ้า OK: sudo aide --update && sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
ตั้งค่า Cron Job สำหรับ Daily Check
# สร้าง Script สำหรับ Daily AIDE Check พร้อม Email
# /usr/local/bin/aide-daily.sh
#!/bin/bash
AIDE_LOG="/var/log/aide/aide-$(date +%Y%m%d).log"
ALERT_EMAIL="[email protected]"
HOSTNAME=$(hostname)
mkdir -p /var/log/aide
# รัน Check และบันทึก Output
sudo aide --check 2>&1 | tee "$AIDE_LOG"
EXIT_CODE=${PIPESTATUS[0]}
# ส่ง Email ถ้าพบการเปลี่ยนแปลง (exit code 1 = found changes)
if [ $EXIT_CODE -eq 1 ]; then
cat "$AIDE_LOG" | mail \
-s "[ALERT] AIDE: File changes detected on ${HOSTNAME}" \
"$ALERT_EMAIL"
elif [ $EXIT_CODE -gt 1 ]; then
echo "AIDE check error (exit code: $EXIT_CODE)" | mail \
-s "[ERROR] AIDE check failed on ${HOSTNAME}" \
"$ALERT_EMAIL"
fi
# ลบ Log เก่ากว่า 30 วัน
find /var/log/aide/ -name "aide-*.log" -mtime +30 -delete
# เพิ่ม Cron Job
sudo crontab -e
# รัน AIDE Check ทุกวัน 03:00
0 3 * * * /usr/local/bin/aide-daily.sh
# chmod ให้ Script
sudo chmod +x /usr/local/bin/aide-daily.sh
# บน Ubuntu มี Cron สำเร็จรูปที่ /etc/cron.daily/aide
# แต่ต้องตั้งค่า Email ใน /etc/default/aide
# SILENTREPORTS=no
# [email protected]
กำหนด Custom Policy ใน aide.conf
# กำหนด Attribute Group เอง
define WEBFILES = p+i+u+g+s+m+sha256
define CONFIGS = p+i+n+u+g+s+m+c+acl+xattrs+sha256
define BINARIES = p+i+n+u+g+s+m+c+sha256+sha512
# ใช้ Custom Group
/var/www/html WEBFILES
/etc/nginx CONFIGS
/etc/apache2 CONFIGS
/etc/mysql CONFIGS
/usr/local/bin BINARIES
# ตรวจสอบเฉพาะบาง File Extension
# (ใช้ Regex)
=/var/www/html/.*\.php$ WEBFILES
=/var/www/html/.*\.js$ WEBFILES
# ข้ามไดเรกทอรีที่เปลี่ยนแปลงบ่อย
!/var/www/html/wp-content/cache
!/var/www/html/wp-content/uploads
# ตรวจสอบ SSH Config อย่างเข้มงวด
/etc/ssh CONFIGS
เก็บ Database บน Read-Only หรือ Remote Location
จุดอ่อนของ AIDE คือถ้า Attacker มี Root Access อาจแก้ไข Database เพื่อปกปิดการเปลี่ยนแปลง วิธีป้องกันคือเก็บ Database ไว้บน Read-Only Media หรือ Remote Server ที่ไม่สามารถแก้ไขได้จาก Server ที่ตรวจสอบ
# Option 1: เก็บ Database บน Read-Only Mount
# Mount USB/CD-ROM ที่มี Database ไว้แบบ Read-Only
mount -o ro /dev/sdb1 /mnt/aide-db
# ระบุ Path ใน aide.conf
database_in=file:/mnt/aide-db/aide.db
# Option 2: Copy Database ไปยัง Remote Server หลัง Init/Update
scp /var/lib/aide/aide.db admin@backup-server:/secure/aide/$(hostname)-aide.db
# Option 3: Sign Database ด้วย GPG
gpg --sign /var/lib/aide/aide.db
# ตรวจสอบ Signature ก่อนใช้
gpg --verify /var/lib/aide/aide.db.gpg
# Option 4: เก็บ Hash ของ Database ไว้ใน Secure Location
sha256sum /var/lib/aide/aide.db > /root/.aide-db-hash
# ตรวจสอบทุกครั้งก่อน Check
sha256sum -c /root/.aide-db-hash
ตรวจสอบ AIDE Report
# ดู AIDE Log ล่าสุด
sudo cat /var/log/aide/aide.log
# กรอง เฉพาะไฟล์ที่เปลี่ยนแปลง
sudo aide --check 2>/dev/null | grep -E "^(f|d|l|p) [+=<>!]"
# ดู Summary เท่านั้น
sudo aide --check 2>/dev/null | grep -A 10 "^Summary"
# บน Ubuntu ดู Check ล่าสุด
sudo cat /var/log/aide/aide.log | tail -50
#!/bin/bash
# /usr/local/bin/aide-check-summary.sh
# สรุปผล AIDE Check แบบกระชับ
echo "=== AIDE Integrity Check ==="
echo "Date: $(date)"
echo "Host: $(hostname)"
echo ""
# รัน Check
AIDE_OUTPUT=$(sudo aide --check 2>/dev/null)
EXIT_CODE=$?
case $EXIT_CODE in
0)
echo "✅ No changes detected"
;;
1)
echo "⚠️ Changes detected!"
echo ""
echo "$AIDE_OUTPUT" | grep -E "^(Summary|Added|Removed|Changed| Total| Added| Removed| Changed)" | head -20
echo ""
echo "Changed files:"
echo "$AIDE_OUTPUT" | grep -E "^[fdlp] [+=<>!]" | head -30
;;
2)
echo "❌ New database written (--update was used)"
;;
*)
echo "❌ AIDE error: exit code $EXIT_CODE"
;;
esac
สรุป
AIDE ตรวจจับการเปลี่ยนแปลงของไฟล์โดยเปรียบเทียบ Checksum และ Metadata กับ Baseline Database ขั้นตอนสำคัญคือสร้าง Database หลังติดตั้ง OS ที่ทราบว่าสะอาด, ตั้ง Cron ให้รัน Check รายวัน, และอัพเดต Database ทุกครั้งหลัง System Update ที่ถูกต้อง การเก็บ Database ไว้ใน Location ที่ Attacker ไม่สามารถแก้ไขได้เป็นสิ่งสำคัญ ควรใช้ร่วมกับเครื่องมืออื่นเช่น Fail2ban และ Auditd เพื่อให้ระบบตรวจจับ Intrusion ครบวงจร
แนะนำบริการ DE
การตั้งค่า AIDE บน Server ต้องการสิทธิ์ Root เพื่อตรวจสอบไฟล์ระดับ System Cloud VPS ของ DE ให้ Root Access เต็มรูปแบบ สามารถติดตั้ง AIDE, สร้าง Baseline Database, และตั้งค่า Automated Daily Check พร้อม Email Alert เพื่อตรวจจับการเปลี่ยนแปลงที่ไม่ได้รับอนุญาตบน Server ได้อย่างอิสระ
สำหรับผู้ที่ต้องการโฮสต์เว็บไซต์โดยมีระบบตรวจสอบความปลอดภัยพร้อมใช้ Cloud Hosting ของ DE มีระบบ Security Monitoring ในระดับ Infrastructure ที่ตั้งค่าไว้แล้ว เหมาะสำหรับผู้ที่ต้องการความปลอดภัยโดยไม่ต้องจัดการ HIDS เอง

