در سیستمعاملها (بهویژه ویندوز و لینوکس) بسته به معماری سیستمعامل و نوع درایور روش لود میتوانند متفاوت باشند. در ادامه، روشهای اصلی بارگذاری درایورها در کرنل را بررسی میکنم: 🔵 در ویندوز (Windows): 1. لود شدن از طریق Service Control Manager (SCM)
ویندوز از SCM برای مدیریت سرویسها و درایورها استفاده میکند.
در اینجا، کلید Start مشخص میکند درایور در چه زمانی بارگذاری شود (Boot، System، Manual، ...).
مقدار توضیح 0 لود درایور در زمان بوت شدن بوتلودر (BOOT_START) 1 لود درایور در زمان لود شدن کرنل (SYSTEM_START) 2 لود دستی توسط سیستم یا کاربر 3 لود دستی فقط با دستور صریح 4 غیر فعال (Disabled)
2. لود از طریق NtLoadDriver
این API سیستمی که برای لود دستی درایور از فضای User-mode استفاده میشود.
ابزارهایی مانند sc.exe, OSRLoader یا برنامههای سفارشی از این API استفاده میکنند.
3. لود از طریق فریمورکهای درایور (مانند KMDF/UMDF)
این Windows Driver Frameworks اجازه میدهند درایورها به صورت مدرنتر و کنترلشدهتر لود شوند.
4. لود توسط بدافزار یا rootkit
گاهی از تکنیکهایی مانند بارگذاری درایور unsigned از طریق آسیبپذیری، استفاده از CVEها، یا Patch کردن Kernel Memory برای بایپس کردن امضا استفاده میشود.
🟢 در لینوکس (Linux): 1. لود در زمان بوت توسط initramfs/initrd
برخی ماژولهای کرنل (درایورها) در مرحله بوت اولیه لود میشوند.
پیکربندیها معمولاً در /etc/initramfs-tools/ یا /boot/ وجود دارند.
2. لود خودکار توسط udev
زمانی که یک سختافزار شناسایی میشود، udev به صورت داینامیک ماژول مناسب را بارگذاری میکند.
با دستور modprobe یا insmod میتوان به صورت دستی نیز ماژول را بارگذاری کرد.
3. لود دستی:
با ابزارهای:
modprobe <module>
insmod <module.ko>
و حذف با:
rmmod <module>
modprobe -r <module>
4. لود از طریق فایل /etc/modules
برای لود شدن خودکار ماژولها در زمان بوت.
🛡 نکته امنیتی:
لود شدن درایور کرنل (بهویژه در ویندوز) نیاز به دسترسی سطح کرنل یا Administrative privileges دارد. سوءاستفاده از این مکانیزم میتواند باعث اجرای کد با دسترسی بالا و ساخت rootkit شود.