auditd می‌پرسد چه رخدادی ثبت شده؛ AIDE می‌پرسد فایل نسبت به مبنا چه تغییری کرده است. امشب یک مبنای کوچک می‌سازیم و دست‌کاری معلوم را پیدا می‌کنیم، بدون آنکه هر تغییر را خودکار «حمله» بنامیم.

این جلسه بخشی از دورهٔ لینوکس ۳۰۳ در ۴۰ شب است.

محیط تمرین: Ubuntu 24.04؛ aide؛ فایل‌های کاربر عادی؛ برای مقایسهٔ RPM، VM Rocky اختیاری.

جایگاه در دوره: هدف‌های 332.2 آزمون 303-300.

مبنا باید از زمان قابل اعتماد آمده باشد#

AIDE یا Advanced Intrusion Detection Environment، metadata و digest فایل‌ها را با یک database مبنا مقایسه می‌کند. اگر مبنا بعد از نفوذ ساخته شود، وضعیت آلوده می‌تواند عادی به نظر برسد. اگر مهاجم database را هم تغییر دهد، مقایسهٔ محلی به‌تنهایی شاهد مستقل نیست.

به‌جای اسکن کل سیستم، یک محدودهٔ کوچک بساز:

umask 077
mkdir -p ~/lpic303/aide/data
cd ~/lpic303/aide
printf 'known catalog\n' > data/catalog.txt
cat > aide.conf <<EOF
database_in=file:$PWD/baseline.db.gz
database_out=file:$PWD/new.db.gz
gzip_dbout=yes
Checks = p+i+n+u+g+s+m+c+sha256
$PWD/data Checks
EOF
aide --config "$PWD/aide.conf" --init
mv new.db.gz baseline.db.gz
aide --config "$PWD/aide.conf" --check

rule آزمایش مجوز، inode، مالک، اندازه، زمان‌ها و SHA-256 را بررسی می‌کند. دستور --init database جدید می‌سازد؛ تا آن را به مبنا منتقل نکرده‌ای، --check چیزی برای مقایسه ندارد. خروج بررسی بدون تغییر باید موفق باشد.

printf 'unexpected row\n' >> data/catalog.txt
aide --config "$PWD/aide.conf" --check

انتظار داریم تغییر فایل و exit status غیرصفر دیده شود. عدد وضعیت AIDE می‌تواند مجموعه‌ای از تغییرهای افزوده، حذف و تغییرکرده را بیان کند؛ همهٔ عددهای غیرصفر را «خرابی ابزار» ننام. زمان آخرین مطالعهٔ فایل یا فایل‌های موقت می‌توانند نویز بسازند؛ rule را مطابق دارایی طراحی کن.

database را بی‌فکر تازه نکن#

بعد از تغییر مجاز، ابتدا منشأ و مجوز تغییر را بررسی کن، سپس --update و پذیرش database جدید را انجام بده. update پیش از بررسی، اثر دست‌کاری را به وضعیت عادی تبدیل می‌کند. کپی مبنا و policy باید در محل حفاظت‌شده و در صورت نیاز با امضا نگه‌داری شود.

برای مقایسه با فهرست بستهٔ نصب‌شده:

dpkg --verify openssh-server

روی Rocky، معادل بررسی بسته rpm -V openssh-server است. خروج خالی معمولاً یعنی اختلافِ تحت پوشش ابزار گزارش نشده است؛ این اثبات پاک بودن تمام سیستم نیست. فایل پیکربندی عمداً تغییرکرده هم می‌تواند اختلاف درست بسازد. signature بسته و مقایسهٔ فایل نصب‌شده، بررسی‌های متفاوت‌اند.

مأموریت امشب#

یک فایل را حذف و یکی را اضافه کن؛ گزارش را از تغییر محتوا تفکیک کن. چرا ساعت دست‌کاری‌شده یا ابزار محلی آلوده اعتماد به گزارش را کم می‌کند؟ شاهد مستقل و بازیابی از منبع شناخته‌شده را در پاسخ بیاور.

منابع: پروژهٔ AIDE ، dpkg و RPM Verification .