در قسمت قبل
سرویس Auditd و نگهداری لاگها
انجام شد.
۱. الزامات CIS Benchmark (بخش 6.3.3)
این مقاله به پوشش و پیادهسازی بندهای زیر از استاندارد CIS میپردازد (شمارهگذاریهای تکراری اصلاح شدند):
- 6.3.3.1 Ensure changes to system administration scope (sudoers) is collected (Automated)
- 6.3.3.2 Ensure actions as another user are always logged (Automated)
- 6.3.3.3 Ensure events that modify the sudo log file are collected (Automated)
- 6.3.3.4 Ensure events that modify date and time information are collected (Automated)
- 6.3.3.5 Ensure events that modify the system’s network environment are collected (Automated)
- 6.3.3.6 Ensure use of privileged commands are collected (Automated)
- 6.3.3.7 Ensure unsuccessful file access attempts are collected (Automated)
- 6.3.3.8 Ensure events that modify user/group information are collected (Automated)
- 6.3.3.9 Ensure discretionary access control permission modification events are collected (Automated)
- 6.3.3.10 Ensure successful file system mounts are collected (Automated)
- 6.3.3.11 Ensure session initiation information is collected (Automated)
- 6.3.3.12 Ensure login and logout events are collected (Automated)
- 6.3.3.13 Ensure file deletion events by users are collected (Automated)
- 6.3.3.14 Ensure events that modify the system’s Mandatory Access Controls are collected (Automated)
- 6.3.3.15 Ensure successful and unsuccessful attempts to use the chcon command are collected (Automated)
- 6.3.3.16 Ensure successful and unsuccessful attempts to use the setfacl command are collected (Automated)
- 6.3.3.17 Ensure successful and unsuccessful attempts to use the chacl command are collected (Automated)
- 6.3.3.18 Ensure successful and unsuccessful attempts to use the usermod command are collected (Automated)
- 6.3.3.19 Ensure kernel module loading unloading and modification is collected (Automated)
- 6.3.3.20 Ensure the audit configuration is immutable (Automated)
- 6.3.3.21 Ensure the running and on disk configuration is the same (Manual)
۲. مفهوم و دلیل امنیتی (Concept & Rationale)
قوانین auditd مشخص میکنند که هسته سیستمعامل چه رخدادهایی (System Calls) را برای حسابرسی ثبت کند. ثبت تغییرات در زمان سیستم (که میتواند لاگها را نامعتبر کند)، تغییرات شبکه، تلاشهای ناموفق برای دسترسی به فایلها، استفاده از دسترسیهای ادمین و تغییر ماژولهای کرنل برای کشف نفوذ و بررسیهای پس از حادثه (Forensics) حیاتی است. در نهایت، قفل کردن تنظیمات (Immutable) باعث میشود مهاجم حتی با دسترسی root نتواند قوانین لاگبرداری را در زمان اجرا متوقف کند.
۳. بررسی سازگاری با پایگاه داده Oracle (RAC & Grid)
تداخلات بالقوه و راهکارها:
- تداخل در عملکرد (Performance & I/O): رصد کردن تمامی حذفِ فایلها (unlink) یا تغییر مجوزها میتواند در محیطهای دیتابیس اوراکل که مرتباً فایلهای موقت یا لاگ میسازند و پاک میکنند، حجم بسیار بالایی لاگ تولید کرده و باعث گلوگاه I/O شود. پیشنهاد میشود در صورت نیاز، پردازشهای خاص اوراکل از برخی قوانین پرمخاطب مستثنی (Exclude) شوند.
- تداخل بحرانی (Immutability): بند 6.3.3.20 الزام میکند که انتهای فایل قوانین، مقدار -e 2 درج شود. این کار باعث قفل شدن سرویس auditd میشود و هرگونه تغییر در قوانین نیازمند ریبوت کامل سرور خواهد بود. در محیطهای Production اوراکل با حساسیت در دسترسپذیری بالا (High Availability)، توصیه میشود این مقدار در حالت -e 1 بماند یا تنها پس از اتمام تمامی تستهای پرفورمنس به -e 2 تغییر یابد.
۴. نحوه بررسی وضعیت فعلی (Audit Script)
این اسکریپت وضعیت وجود قوانین و حالت Immutability را بررسی میکند:
لینک این اسکریپت در github:
modules/audit_26_Auditd_Rules.sh
در صورتی که با bash script آشنا نیستید، می توانید به آموزشی که برای دیتابیس ادمین ها در سایت گذاشته ام مراجعه کنید.
Bash for Oracle DBAs
#!/bin/bash
# Script: audit26.sh
# Purpose: Audit Auditd Rules (CIS 6.3.3) for Oracle Linux
echo "=========================================================================="
echo " CIS Requirement: Auditd Rules Configuration (CIS 6.3.3)"
echo " - Ensure various audit rules are populated (sudo, time, network, etc.)."
echo " - Ensure audit configuration is immutable using '-e 2' (CIS 6.3.3.20)."
echo " Oracle Context & Exceptions:"
echo " - EXCEPTION: Setting rules to immutable (-e 2) locks them until reboot."
echo " In Oracle DB/RAC production environments, this hinders troubleshooting."
echo " ACTION: We accept '-e 1' (locked but mutable) to maintain stability"
echo " and prevent unwanted node evictions or required downtime."
echo "=========================================================================="
AUDIT_STATUS="PASS"
check_rule() {
local rule_desc="$1"
local search_key="$2"
# Added '--' so grep doesn't treat '-k' as a command-line option
if grep -REq -- "$search_key" /etc/audit/rules.d/ 2>/dev/null; then
echo "[PASS] Rule populated: $rule_desc"
else
echo "[FAIL] Rule missing: $rule_desc"
AUDIT_STATUS="FAIL"
fi
}
echo "Checking Audit Rules..."
check_rule "Sudoers changes (scope)" "-k scope"
check_rule "Sudo log file" "-k sudo_log_file"
check_rule "Time changes" "-k time-change"
check_rule "Network environment (system-locale)" "-k system-locale"
check_rule "User/Group info (identity)" "-k identity"
check_rule "Logins and logouts" "-k logins"
check_rule "File deletions" "-k delete"
check_rule "Kernel modules" "-k modules"
# Check Immutability Status
echo "Checking Immutability Flag..."
if grep -Eq -- "^\s*-e\s+2" /etc/audit/rules.d/*.rules 2>/dev/null; then
echo "[PASS] Configuration is strictly immutable (-e 2) [CIS Standard]"
elif grep -Eq -- "^\s*-e\s+1" /etc/audit/rules.d/*.rules 2>/dev/null; then
echo "[PASS] Configuration is locked (-e 1) [Oracle Best Practice Exception]"
else
echo "[FAIL] Immutability flag (-e 1 or -e 2) is missing or set to 0"
AUDIT_STATUS="FAIL"
fi
echo "--------------------------------------------------------------------------"
if [ "$AUDIT_STATUS" = "PASS" ]; then
echo " Final Audit Status: PASS"
else
echo " Final Audit Status: FAIL"
fi
echo "=========================================================================="
۵. نحوه اعمال تنظیمات (Remediation Bash Script)
این اسکریپت قوانین استاندارد CIS را در مسیر /etc/audit/rules.d/ ایجاد کرده و سرویس را بهروزرسانی میکند.
لینک این اسکریپت در github:
modules/remediate_26_Auditd_Rules.sh
#!/bin/bash
# Script: audit26.sh
# Purpose: Audit Auditd Rules (CIS 6.3.3) for Oracle Linux
echo "=========================================================================="
echo " CIS Requirement: Auditd Rules Configuration (CIS 6.3.3)"
echo " - Ensure various audit rules are populated (sudo, time, network, etc.)."
echo " - Ensure audit configuration is immutable using '-e 2' (CIS 6.3.3.20)."
echo " Oracle Context & Exceptions:"
echo " - EXCEPTION: Setting rules to immutable (-e 2) locks them until reboot."
echo " In Oracle DB/RAC production environments, this hinders troubleshooting."
echo " ACTION: We accept '-e 1' (locked but mutable) to maintain stability"
echo " and prevent unwanted node evictions or required downtime."
echo "=========================================================================="
AUDIT_STATUS="PASS"
check_rule() {
local rule_desc="$1"
local search_key="$2"
# Added '--' so grep doesn't treat '-k' as a command-line option
if grep -REq -- "$search_key" /etc/audit/rules.d/ 2>/dev/null; then
echo "[PASS] Rule populated: $rule_desc"
else
echo "[FAIL] Rule missing: $rule_desc"
AUDIT_STATUS="FAIL"
fi
}
echo "Checking Audit Rules..."
check_rule "Sudoers changes (scope)" "-k scope"
check_rule "Sudo log file" "-k sudo_log_file"
check_rule "Time changes" "-k time-change"
check_rule "Network environment (system-locale)" "-k system-locale"
check_rule "User/Group info (identity)" "-k identity"
check_rule "Logins and logouts" "-k logins"
check_rule "File deletions" "-k delete"
check_rule "Kernel modules" "-k modules"
# Check Immutability Status
echo "Checking Immutability Flag..."
if grep -Eq -- "^\s*-e\s+2" /etc/audit/rules.d/*.rules 2>/dev/null; then
echo "[PASS] Configuration is strictly immutable (-e 2) [CIS Standard]"
elif grep -Eq -- "^\s*-e\s+1" /etc/audit/rules.d/*.rules 2>/dev/null; then
echo "[PASS] Configuration is locked (-e 1) [Oracle Best Practice Exception]"
else
echo "[FAIL] Immutability flag (-e 1 or -e 2) is missing or set to 0"
AUDIT_STATUS="FAIL"
fi
echo "--------------------------------------------------------------------------"
if [ "$AUDIT_STATUS" = "PASS" ]; then
echo " Final Audit Status: PASS"
else
echo " Final Audit Status: FAIL"
fi
echo "=========================================================================="
در قسمت بعد به سراغ:
مدیریت دسترسی فایلهای حسابرسی
می رویم.