لینوکس ۳۰۳؛ شب ۱۳: درِ سرور فقط پورت شبکه نیست
فهرست نوشته
اگر مهاجم کنار دستگاه بنشیند، فایروال از تغییر مسیر بوت جلوگیری میکند؟ امشب سطح حملهٔ میزبان را از firmware تا سرویسها بررسی میکنیم و برای هر لایه یک کنترل و یک شاهد انتخاب میکنیم.
این جلسه بخشی از دورهٔ لینوکس ۳۰۳ در ۴۰ شب است.
محیط تمرین: Ubuntu 24.04 یا Rocky Linux 9؛ VM دارای کنسول؛ آزمایشهای firmware و USB نیازمند محیط سازگارند.
جایگاه در دوره: هدفهای 332.1 آزمون 303-300.
از بیرون به داخل نگاه کن#
دسترسی فیزیکی، firmware، bootloader، کرنل و سرویسها مرزهای متفاوتاند. رمز GRUB میتواند ویرایش تعاملی ورودی بوت را محدود کند؛ دیسک جداشده را رمز نمیکند. Secure Boot به بررسی زنجیرهٔ بوت کمک میکند؛ محدودیتهایش به firmware، کلیدها و وضعیت سیستم وابستهاند.
روی VM فقط وضعیت را ثبت کن:
systemctl list-unit-files --state=enabled
systemctl --type=service --state=running
ss -lntup
sysctl kernel.randomize_va_space
cat /proc/cmdline
cat /sys/devices/system/cpu/vulnerabilities/spectre_v2
cat /sys/devices/system/cpu/vulnerabilities/meltdown
ASLR چیدمان حافظه را تصادفی میکند؛ DEP یا منع اجرای داده، اجرای کد از برخی صفحات داده را محدود میکند. وجود کنترل، تمام خطاهای حافظه را درمان نمیکند. Exec-Shield در منابع تاریخی دیده میشود؛ وجود sysctl یا قابلیت مشخص آن را روی هر کرنل جدید فرض نکن. گزارش Spectre و Meltdown را در کنار نسخهٔ kernel و microcode بخوان؛ mitigations=off بهعنوان راهحل افزایش سرعت این دوره پیشنهاد نمیشود.
تمرین حذف یک سطح حمله#
فقط روی Clone، یک سرویس غیرضروری واقعاً نصبشده را پیدا کن. نام unit، وابستگی و علت نصب را ثبت کن؛ با systemctl stop موقتاً متوقفش کن و بررسی کن پورت بسته شده و کاربرد اصلی کتابخانه سالم مانده است. اگر سرویس لازم بود، دوباره start کن. یک نام واحد برای همهٔ نصبها قابل حذف نیست.
برای تمرین GRUB، ابزار grub-mkpasswd-pbkdf2 روی Ubuntu فقط هش گذرواژه تولید میکند. پیش از نوشتن تنظیم bootloader، روی Clone از دستور توزیع برای تنظیم کاربر GRUB و regenerate پیکربندی استفاده کن؛ grub.cfg تولیدشده را دستی تغییر نده. آزمون پذیرش، رفتار پس از reboot و امکان boot عادی و کنسول بازیابی است، نه فقط ساخته شدن یک فایل هش.
USB و تصمیمهای محلی#
USBGuard اجازه و منع اتصال دستگاهها را بر اساس policy مدیریت میکند. policy آغازین باید دستگاههای ورودی ضروری را بشناسد؛ فعالکردن منع پیشفرض بدون کنسول مستقل ممکن است صفحهکلید را قطع کند. در محیط دارای daemon، usbguard list-devices شاهد وضعیت است. اجازهٔ یک دستگاه را از deny کردن تمام دستگاهها جدا بررسی کن.
polkit دربارهٔ مجوز عملیات برخی سرویسهای سیستم تصمیم میگیرد؛ sudo تنها سازوکار مجوز نیست. chroot دید مسیر فایلسیستم را عوض میکند، اما sandbox کامل برای root نیست. ماشین مجازی و container نیز مرزهای متفاوت دارند؛ namespace و mount اشتراکی باید در تحلیل حضور داشته باشند.
مأموریت امشب#
برای هر لایهٔ بوت یک «پیش از تغییر، پس از تغییر، راه برگشت» بنویس. اگر سرویس بهصورت socket activation دوباره فعال شد، چرا stop کردن service کافی نبود؟ پاسخ: فعالکنندهٔ آن هنوز وجود دارد.
منابع: راهنمای امنیت GRUB ، راهنمای USBGuard و آسیبپذیریهای CPU در کرنل .