امن‌سازی Oracle Linux 9 (مقاله بیست و دوم): پیکربندی بررسی یکپارچگی سیستم (AIDE)

در قسمت قبل

حساب‌های کاربری سیستمی، کاربر root و محیط پیش‌فرض

انجام شد.

۱. الزامات CIS Benchmark (بخش 6.1)

(شماره‌گذاری‌های تکراری و بهم‌ریخته اصلاح و مطابق استاندارد تنظیم شدند):

  • 6.1 Configure Integrity Checking
    • 6.1.1 Ensure AIDE is installed (Automated)
    • 6.1.2 Ensure filesystem integrity is regularly checked (Automated)
    • 6.1.3 Ensure cryptographic mechanisms are used to protect the integrity of audit tools (Automated)

۲. مفهوم و دلیل امنیتی (Concept & Rationale)

  • نصب و راه‌اندازی AIDE: نرم‌افزار AIDE یک سیستم تشخیص نفوذ مبتنی بر میزبان (HIDS) است. این ابزار در زمان راه‌اندازی اولیه، یک دیتابیس از وضعیت فایل‌های حیاتی سیستم (شامل Hash رمزنگاری‌شده، مجوزها، مالکیت و تاریخ تغییرات) ایجاد می‌کند. در بررسی‌های بعدی، وضعیت فعلی سیستم با این دیتابیس مقایسه می‌شود تا هرگونه تغییر غیرمجاز (مانند نصب Rootkit یا تغییر باینری‌ها) شناسایی شود.
  • بررسی منظم یکپارچگی: دیتابیس AIDE به‌تنهایی کاربردی ندارد مگر اینکه سیستم به‌صورت دوره‌ای (مثلاً روزانه) بررسی شود. این کار معمولاً از طریق cron یا systemd timer انجام می‌شود.
  • حفاظت از ابزارهای Audit: ابزارهای ممیزی (مانند /sbin/auditctl و فایل‌های لاگ) اولین هدف مهاجمان برای پاک کردن ردپای خود هستند. AIDE باید این فایل‌ها را با الگوریتم‌های هش قدرتمند (مانند SHA512) بررسی کند.

۳. بررسی سازگاری با پایگاه داده Oracle (RAC, ASM, Grid)

  • وضعیت تداخل: بحرانی (Critical)
  • توضیحات و الزامات اوراکل:
    • سربار منابع (CPU/IO) و هشدارهای کاذب: نرم‌افزارهای Oracle Database و Grid Infrastructure به‌طور مداوم فایل‌های لاگ، Trace، وضعیت کلاستر و فایل‌های دیتابیس را تغییر می‌دهند (مثلاً در مسیر $ORACLE_BASE/diag). اگر AIDE این مسیرها (معمولاً /u01 یا دایرکتوری‌های مشابه) را اسکن کند، علاوه بر ایجاد سربار پردازشی و دیسک بسیار شدید که منجر به افت عملکرد دیتابیس می‌شود، هزاران هشدار بی‌مورد (False Positive) نیز تولید خواهد کرد.
    • راه‌حل: مسیرهای نصب اوراکل، دایرکتوری‌های دیتابیس و لاگ‌ها باید به‌صورت صریح در فایل /etc/aide.conf مستثنی (Exclude) شوند تا از اسکن آن‌ها جلوگیری گردد.

 

۳. نحوه بررسی (Audit Script)

لینک این اسکریپت در github:

modules/audit_22_System_Integrity_AIDE.sh

در صورتی که با bash script  آشنا نیستید، می توانید به آموزشی که برای دیتابیس ادمین ها در سایت گذاشته ام مراجعه کنید.

Bash for Oracle DBAs

#!/bin/bash
# Script: audit22.sh
# Purpose: Audit File Integrity Monitoring (AIDE) (CIS 6.1)

echo "=========================================================================="
echo " CIS Requirement: File Integrity Monitoring (AIDE)"
echo " - Ensure AIDE is installed (CIS 6.1.1)."
echo " - Ensure filesystem integrity is regularly checked (CIS 6.1.2)."
echo " - Ensure cryptographic mechanisms protect audit tools (CIS 6.1.3)."
echo " Oracle Context & Exceptions:"
echo " - EXCEPTION: Oracle/Grid directories (/u01, /u02, etc.) MUST be excluded"
echo "   from AIDE checks to prevent severe I/O performance degradation."
echo "=========================================================================="

if [ "$EUID" -ne 0 ]; then
  echo -e "\e[31m[-] Please run as root\e[0m"
  exit 1
fi

FAIL_COUNT=0

echo -e "\n[*] 1. Checking if AIDE is installed (CIS 6.1.1)..."
if rpm -q aide &>/dev/null; then
    echo -e "  \e[32m[PASS]\e[0m AIDE is installed: $(rpm -q aide)"
else
    echo -e "  \e[31m[FAIL]\e[0m AIDE is not installed."
    FAIL_COUNT=$((FAIL_COUNT + 1))
fi

echo -e "\n[*] 2. Checking Regular AIDE Checks (CIS 6.1.2)..."
if systemctl is-enabled aidecheck.timer &>/dev/null || grep -rq "/usr/sbin/aide" /etc/cron.* /etc/crontab /var/spool/cron/ 2>/dev/null; then
    echo -e "  \e[32m[PASS]\e[0m Regular AIDE checks are scheduled (Cron/Timer)."
else
    echo -e "  \e[31m[FAIL]\e[0m Regular AIDE checks are NOT scheduled."
    FAIL_COUNT=$((FAIL_COUNT + 1))
fi

echo -e "\n[*] 3. Checking Audit Tools Integrity Configuration (CIS 6.1.3)..."
if grep -Eq '^/sbin/auditctl' /etc/aide.conf 2>/dev/null && grep -Eq '^/sbin/auditd' /etc/aide.conf 2>/dev/null; then
    echo -e "  \e[32m[PASS]\e[0m Audit tools are configured in /etc/aide.conf."
else
    echo -e "  \e[31m[FAIL]\e[0m Audit tools integrity tracking missing in /etc/aide.conf."
    FAIL_COUNT=$((FAIL_COUNT + 1))
fi

echo -e "\n[*] 4. Checking Oracle/Grid Exclusions..."
if grep -Eq '^!/u01|^!/u02|^!/opt/oracle' /etc/aide.conf 2>/dev/null; then
    echo -e "  \e[32m[PASS]\e[0m Oracle/Grid exclusions found in /etc/aide.conf."
else
    echo -e "  \e[31m[FAIL]\e[0m Oracle/Grid exclusions MISSING. This will cause I/O spikes!"
    FAIL_COUNT=$((FAIL_COUNT + 1))
fi

if [ "$FAIL_COUNT" -eq 0 ]; then
    echo -e "\n\e[32m[+] AUDIT RESULT: PASS\e[0m"
else
    echo -e "\n\e[31m[-] AUDIT RESULT: FAIL ($FAIL_COUNT issues found)\e[0m"
fi

۴. نحوه اعمال با Bash (Remediation Script)

لینک این اسکریپت در github:

modules/remediate_22_System_Integrity_AIDE.sh

#!/bin/bash

# CIS 6.1.1: Install AIDE
if ! rpm -q aide &>/dev/null; then
    dnf install -y aide
fi

# CIS 6.1.3: Protect Audit Tools
AIDE_CONF="/etc/aide.conf"
if ! grep -q "/sbin/auditctl" "$AIDE_CONF"; then
    echo "" >> "$AIDE_CONF"
    echo "# CIS 6.1.3: Protect Audit Tools" >> "$AIDE_CONF"
    echo "/sbin/auditctl p+i+n+u+g+s+b+acl+xattrs+sha512" >> "$AIDE_CONF"
    echo "/sbin/auditd p+i+n+u+g+s+b+acl+xattrs+sha512" >> "$AIDE_CONF"
    echo "/sbin/ausearch p+i+n+u+g+s+b+acl+xattrs+sha512" >> "$AIDE_CONF"
    echo "/sbin/aureport p+i+n+u+g+s+b+acl+xattrs+sha512" >> "$AIDE_CONF"
    echo "/sbin/autrace p+i+n+u+g+s+b+acl+xattrs+sha512" >> "$AIDE_CONF"
    echo "/sbin/augenrules p+i+n+u+g+s+b+acl+xattrs+sha512" >> "$AIDE_CONF"
fi

# Oracle/Grid Exclusion
if ! grep -q "!/u01" "$AIDE_CONF"; then
    echo "" >> "$AIDE_CONF"
    echo "# Exclude Oracle Database and Grid Paths to prevent I/O overhead and false positives" >> "$AIDE_CONF"
    echo "!/u01" >> "$AIDE_CONF"
    echo "!/u02" >> "$AIDE_CONF"
    echo "!/opt/oracle" >> "$AIDE_CONF"
fi

# Initialize AIDE Database if not exists
if [ ! -f /var/lib/aide/aide.db.gz ]; then
    echo "Initializing AIDE database (This may take a while)..."
    aide --init
    mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
fi

# CIS 6.1.2: Configure Regular Checks (Cron)
CRON_FILE="/etc/cron.d/aide"
if [ ! -f "$CRON_FILE" ]; then
    echo "0 5 * * * root /usr/sbin/aide --check" > "$CRON_FILE"
    chmod 0644 "$CRON_FILE"
fi

echo "AIDE configured successfully."

در قسمت بعد به سراغ:

پیکربندی لاگ‌برداری

می رویم.