در این بخش از دوره SEC504 از موسسه SANS به آشنایی با Rootkit ها و انواع آن ها خواهیم پرداخت. البته در این بخش به ادامه مباحث Kernel Mode Rootkits می پردازیم.
Method I) Loadable Kernel Modules and Device Drivers
یک روشه اولیه حمله به کرنل لینوکس برای اجرای یک Kernel Mode Rootkits ، شامل ایجاد یک ماژول کرنل قابل بارگذاری مخرب است که کرنل موجود را دستکاری مینماید. این تکنیک ابتدا در سال 1997 به طور عمومی منتشر شد و در طول سالهای بعد محبوبیت بیشتری یافت و انواع مختلفی از ماژول های مخرب امروزه وجود دارند. امروزه این روش محبوبترین روش برای پیادهسازی و اجرای Kernel Mode Rootkits در سیستم های لینوکسی میباشد.
به یاد داشته باشید، ماژولهای قابل بارگذاری در کرنل (loadable kernel modules)، یک روش قانونی و مشروع مربوط به کرنل لینوکس است که گاهی اوقات برای پشتیبانی از یک سخت افزار جدید و یا وارد نمودن (Insert) کد داخل کرنل برای پشتیبانی از قابلیت های جدید است.
ماژولهای قابل بارگذاری در کرنل، در مد کرنل اجرا میشوند و میتوانند ویژگیهای هسته موجود را تقویت نموده و یا حتی عمل جایگزینی را انجام دهند، بدون اینکه سیستم Reboot شود. به دلیل راحت بودن این ویژگی برای تزریق کد جدید به کرنل، این روش یکی از سادهترین روشها برای اجرا و پیاده سازی Kernel Mode Rootkits بر روی سیستمهایی است که از ماژولهای کرنل پشتیبانی میکنند. (مانند لینوکس و سولاریس) برای سوء استفاده از این قابلیت جهت اجرای روتکیتها، برخی از ماژولهای کرنل قابل بارگذاری مخرب، راههایی که System Call های مختلف توسط کرنل رسیدگی میشوند را تغییر میدهد.
در حالتی مشابه، نفوذگر میتواند با ایجاد یک درایور مخرب مربوط به یک سخت افزار، کرنل ویندوز را تحت تاثیر قرار دهد. درایورهای دستگاهها در مد کرنل اجرا شده و برای اجرایKernel Mode Rootkits استفاده میشوند و برای رسیدن به این منظور System Call Table را تغییر میدهند.
با شروع ارائه ویندوز ویستا، مایکروسافت درایور دستگاههای اجباری مورد نیاز را برای اجزای کرنل، Sign کرد. پیش از این، ویندوز به کاربر با دسترسی admin اجازه میداد تا کدهای امضاء نشده یا اصطلاحا Unsigned را بر روی کرنل بارگذاری کند. بنابراین هنگامیکه نفوذگر دسترسی admin را به دست میآورد، میتواند کد Unsignرا تایید نموده و یک Kernel Mode Rootkits را بارگذاری نماید.
اما از ویندوز ویستا به بعد، ویندوز دارای sign یا امضای درایور دستگاههای اجباری شده است. البته راههایی برای فرار از این روند وجود دارد. یکی از این راهها سرقت Private Key های قانونی صادر شده توسط مایکروسافت برای شرکتهای نرم افزاری قانونی و استفاده از آن برای Sign نمودن بدافزار است. این تکنیک در کرم Stuxnet استفاده شد که در آن کلید صادر شده مربوط به دو شرکت مورد سرقت قرار گرفت.
به تصویر زیر که مربوط به سایت Securelist میباشد توجه کنید:
همچنین امضای اجباری دستگاهها یا mandatory device driver signing میتواند با استفاده از روش دوم نیز موجب تغییر در کرنل شود که آن دستکاری مموری میباشد.
Method 2) Altering Kernel in Memory
اگرچه تغییر در کرنل در حال اجرا با استفاده از ماژولهای کرنل قابل بارگذاری و درایورهای دستگاهها یک روش گسترده و تاثیر گذار میباشد ولی اینها تنها روشهای اجرای روت کیتها نمیباشند. فرض کنید سیستم هدف بدون پشتیبانی از ماژول کرنل ساخته شده است.
هنگامیکه کرنل سفارشی برای ماشینهای لینوکسی کامپایل میشود، یک مدیر میتواند انتخاب کند که آیا اضافه کردن ماژولهای کرنل پشتیبانی شود و یا این مورد از کرنل حذف شود. بدون پشتیبانی از ماژولها در کرنل، مدیر باید تمام قابلیتهای صحیح مد کرنل را داخل هسته کرنل خود ایجاد نماید. چنین کرنلی نمیتواند با ماژولهای قابل بارگذاری مخرب مورد سوء استفاده قرار گیرد. زیرا Hook های لازم برای بارگذاری چنین ماژولهایی از داخل هسته (چیزهایی مانند فایل /proc/ksyms) خارج میشوند. برای تغییر در ماژولهای کرنل شما میتوانید از پکیج ساخت کرنل Bill Stearns استفاده کنید که از آدرس زیر قابل دسترس میباشد.
حالا سوالی که پیش میآید این است که اگر شما یک هسته را ایجاد کنید که از ماژولها پشتیبانی نمیکند، آیا شما از شرKernel Mode Rootkits در امان هستید؟ متاسفانه باید بگوییم که خیر. توسعه دهندگان روتکیتهای سطح کرنل، حتی بدون استفاده از ماژولهای قابل بارگذاری در کرنل، به آن حمله کنند.
برای انجام این کار آنها از امکانات /dev/kmem استفاده میکنند. این فایل دارای یک Image از فضای مموری خود کرنل میباشد، جایی که کد کرنل در حال اجرا است. با Patch نمودن با دقت، کرنل در مموری از طریق /dev/kmem، یک نفوذگر میتواند تمام ویژگیهای Kernel Mode Rootkits را پیاده سازی نماید. توجه داشته باشید که این کار بدون استفاده از یک ماژول انجام میشود.
The Super User Control Kit یا SUCKit این قابلیت را در لینوکس ارائه میدهد.
ایده مشابه در ویندوز با استفاده از System Memory map object پیاده سازی شده است. ابزار FU این قابلیت را در ویندوز اجرا میکند.
Method 3) Changing Kernel File on Hard Drive
هنگامیکه نفوذگر دارای دسترسی root در سیستم میباشد، میتواند فایل Image کرنل را بر روی هارد دیسک جایگزین نماید. به این ترتیب بعد از راه اندازی مجدد سیستم، کرنل مخرب مربوط به نفوذگر به جای کرنل اصلی بارگذاری خواهد شد.
از آنجا که Image مربوط به کرنل که بر روی هارد دیسک قرار دارد یک فایل قابل خواندن و نوشتن برای حسابهای کاربری سطح root میباشد، نیازی به تغییر و پرش از حالت سطح کاربر (User-Mode) به حالت سطح کرنل (Kernel-Mode) نخواهد بود و با استفاده از سطح دسترسی Root، نفوذگر میتواند فایل Image کرنل موجود بر روی هارددیسک را باز نویسی نماید. در این حالت کرنل مخرب ایجاد شده، پس از راه اندازی مجدد سیستم در حافظه بارگذاری خواهد شد.
در سیستم فایل مربوط به لینوکس، Image کرنل در یک فایلی که vmlinuz نامیده میشود ذخیره میشود که در دایرکتوری /root قرار دارد.
آشنایی با روت کیت های سطح کرنل
در ویندوز، یک نفوذگر باید فایلهای Ntoskrnl.exe و win32k.sys را تغییر دهد و حضور خود را در سیستم هدف پنهان نماید. در حال حاضر نفوذگر نمیتواند فایل Ntoskrnl.exe را خودش تغییر دهد، زیرا یکپارچگی (Integrity) این فایل هر زمان که سیستم Boot میشود، کنترل میگردد.
در طول فرآیند Boot، یک برنامه با نام NTLDR یکپارچگی مربوط به Ntoskrnl.exe را قبل از بارگذاری کرنل در حافظه بررسی مینماید. اگر فایل Ntoskrnl.exe تغییر کرده باشد، برنامه NTLDR یک صفحه نمایش آبی یا همان Blue Screen را نمایش میدهد که بیانگر تخریب کرنل میباشد. برای برطرف نمودن این مشکل، نفوذگران هر دو فایل NTLDR و Ntoskrnl.exe را تغییر میدهند. این کار با استفاده از یک وصله کوچک انجام میشود که یک دستورالعمل با زبان ماشین است که داخل NTLDRT قرار میگیرد و موجب میشود تا کنترل یکپارچگی انجام نشده و یا اصطلاحا Skip شود. با این کار نفودگر میتواند آزادانه فایل Ntoskrnl.exe را تغییر دهد.
Method 4) Virtualizing the System
روش دیگر برای Kernel Mode Rootkits شامل این است که نفوذگر با دسترسی Root وارد سیستم شده و سیستمعامل موجود را تبدیل یه یک سیستمعامل Guest یا مهمان در یک محیط مجازی نماید.
در ساختار مجازی سازی به سیستمعامل اصلی که ابزارهایی مانند Vmware، Vitual PC و غیر روی آن نصب میشوند سیستمعامل اصلی یا Host و به سیستمعاملی که توسط این ابزارها به عنوان یک ماشین مجازی بر روی سیستم اصلی نصب میشوند، Guest یا میزبان گفته میشود.
پس از استارت ماشین مجازی حاوی سیستم اصلی، نفوذگر Hypervisor خود را اجرا نموده و سیستم زیر کرنل سیستمعامل Guest را کنترل میکند.
تمامیکاربران و مدیران به صورت ناخواسته به Guest لاگین میکنند و نه به سیستم واقعی که تحت کنترل نفوذگر میباشد. مهاجم در عین حال میتواند انواع کدهای مخرب خود را در Hypervisor اجرا کند که کاربران داخل سیستم مجازی قادر به دیدن آن نخواهند بود. در اصل این حمله مانند یک Honeypot معکوس عمل میکند. به جای اینکه مهاجمان درون یک زندان گرفتار شوند بدون اینکه متوجه شوند این یک Honeypot است، در این حمله، مدیران سیستم و کاربران درون یک زندان قرار میگیرند.
با استفاده از اجرای یک ماشین مجازی بر روی سیستم قربانی، نفوذگر کل سیستم را به زمین بازی خود تبدیل میکند و کاربران عادی و مدیران را به یک زندان مجازی که در گوشهای از سیستم قرار دارد، محدود میکند. البته نگرانی اصلی اینجاست که کاربران و مدیران هیچ اطلاعی از اینکه در یک زندان هستند، ندارند. در این مورد همه چیز عادی به نظر میرسد. کرنل آنها به صورت طبیعی به کار خود ادامه میدهد و تمام فایلها هنوز بر روی هارددیسک وجود دارند و برنامهها همانند پیش از حمله به کار خود ادامه میدهند.
تصویر زیر بیانگر طریقه تغییر ساختار سیستم در این نوع از روتکیتها میباشد.
در بهار سال 2006 محققان دانشگاه میشیگان و شرکت مایکروسافت یک مقاله پژوهشی در مورد این تکنیک منتشر کردند و برای اثبات آن یک ابزار با نام SubVert را نیز به عنوان یک روتکیت مبتنی بر ماشین مجازی ارائه نمودند. این ابزار دو روتکیت را ایجاد مینمود. یکی از آنها در ویندوز xp ابزار Virtual PC را اجرا میکرد و دیگری در لینوکس Gentoo ابزار Vmware را اجرا مینمود.
همچنین میتوانید به وب سایت زیر مراجعه نموده و مطالب انتشار یافته شده توسط Dai Zoviدر مورد روتکیتهای مبتنی بر مجازی سازی را مشاهده نمایید.
theta44.org/presentations.html
Kernel-Mode Rootkit Defenses – Configuration Lockdown
یکی از گامهای مهم در مقابله با روتکیتها، Hardening سیستمها میباشد. مایکروسافت الگوهای آماده امنیت مختلفی را برای کلاینتها، سرورها و دامین کنترلرها ارائه میدهد اما با این حال این الگوهای امنیتی ساخته شده، آن چنان قدرتمند نیستند که سیستم را در برابر حملات مختلف محافظت نمایند.
آنچه که دنیا به آن نیاز دارد، یک الگوی مناسب امنیتی است که برای اکثر محیطها مناسب میباشد. مرکز امنیت اینترنت یا Center for Internet Security، آژانس امنیت ملی و موسسه SANS همراه با سازمانهای دیگر، اقدام به ایجاد یک الگوی مناسب امنیتی کردند. آنها چندین ماه را برای ایجاد استانداردهای مختلف که نیاز سازمانها را مرتفع نمایند صرف نمودند.
در نهایت، آنها به توافقی دست یافتند و چندین قالب مربوط به Hardening سیستمها را منتشر نمودند که در سایت cisecurity.org قابل دسترس میباشد. این الگوها برای ویندوز، لینوکس، سولاریس، روترهای سیسکو، پایگاههای داده اوراکل و غیره ارائه شده اند. آنها به عنوان نقطه شروع و مرجعی مناسب برای تنظیمات امنیت شما میباشند.
مرکز امنیت اینترنت نیز ابزارهای نمره دهی رایگانی را منشتر کرده است، بنابر این شما میتوانید بررسی کنید که تنظیمات امنیتی شما با یک قالب استاندارد مطابقت دارد یا خیر، نمونهای از این الگوها، Win2k Pro Gold Template میباشد. شما میتوانید ابزارهای امتیاز دهی را در یک سیستم محلی اجرا کنید تا موقعیت امنیت خود را نسبت به قالبهای پایه مقایسه کنید و امتیاز شما که بین 0 تا 10 میباشد را کسب نمایید.
Defenses – LinwdUNIX Rootkit Detection Tools
یکی از ابزارهایی که قادر به شناسایی روتکیتهایی مانند SucKIT، Adore و چندین روتکیت سطح کرنل دیگر میباشد، ابزار رایگان Chkrootkit میباشد.
Rootkit Hunter ابزاری دیگری است که در فرآیند تحقیقات و شناسایی روتکیتها مفید میباشد.
همچنین ابزار OSSEC هم یک ابزار نظارت و تجزیه و تحلیل سیستم است که شامل یک ویژگی به نام Rootcheck به منظور تشخیص روتکیت میباشد.
توجه داشته باشید که امکان بروز False Positive در هنگام استفاده از این ابزارها متصور خواهد بود. پس باید مراقب باشید.
البته شرکت های ارائه دهنده آنتی ویروس هم برخی از ابزارهای مختلف را برای شناسایی روتکیتهاارائه میدهند که برخی از آنها از آدرس های زیر قابل دسترس هستند:
www.sophos.com/en-us/products/free-tools/sophos-anti-rootkit.aspx
www.mcafee.com/enterprise/en-gb/downloads/free-tools/stinger.html
docs.microsoft.com/en-us/sysinternals/downloads/
Defenses: File Integrity CheckingTools
یکی از روشهای دیگر برای مقابله با روتکیتهای سطح کرنل، استفاده از ابزارهای بررسی یکپارچگی یا Integrity Checking مانند Tripwire، AIDE و ابزارهای مرتبط است. اگرچه مهاجمان با تجربه و باهوش میتوانند کنترل کننده یکپارچگی فایل را هم تحت تاثیر قرار دهند ولی با این حال امکان دارد که برخی از نفوذگران این کار را انجام ندهند و یا فراموش کنند که باید ساختار کنترل یکپارچگی را تحت تاثیر قرار دهند، ابزارهای مذکور میتوانند روتکیت را شناسایی نمایند.
Network Intelligence/Forensic
بدافزارها با استفاده ازKernel Mode Rootkits و موارد دیگر که در مورد آن بحث شد، بهتر و بهتر خود را در سیستم قربانی مخفی مینمایند. بنابراین ما با وجود چنین موردی چگونه میتوانیم آنها را تشخیص دهیم؟
یکی از راههای شناسایی روتکیتها و بدافزارها در چنین مواردی استفاده از ابزارهای دفاعی و ابزارهای شناسایی مبتنی بر شبکه است که به شکل برنامههای کاربردی فارنزیک، اطلاعات بسیار مفیدی را از سیستم استخراج میکنند که برای تعیین رویداد رخ داده شده و مرتبط کردن آنها به فعالیت مربوط به بدافزار بسیار مفید میباشد.
با جستجو برای رفتارهای غیرمعمول و نامتعارف در شبکه که ناشی از وجود بدافزارهای مخرب میباشد، پرسنل امنیت میتوانند کدهای مخرب را شناسایی نمایند.
به عنوان مثال در شرایط عادی معمولا کلاینتها با سرورها ارتباط برقرار میکنند، اما کلاینتها کمتر با یکدیگر ارتباط برقرار میکنند. اگر آنها با یکدیگر ارتباط برقرار کنند، معمولا تعداد کمی از بستهها ارسال و دریافت میگردند. به طور مشابه، ارتباطات سرور با سرور معمولا نسبت به ارتباطات کلاینت به سرور کمتر میباشد.
با توجه به این موارد با جستجوی انحرافات قابل توجه و ناگهانی از الگوهای طبیعی و عادی، یک ابزار میتواند کدهای مخرب را از این طریق شناسایی نماید. یکی از ابزارهای Network Forensic که به صورت منبع باز در دسترس میباشد ابزار Security Onion است. این ابزار از طریق لینک زیر قابل دسترس میباشد:
code.google.com/p/security-onion/
همچنین ابزارهای شناسایی رفتار در سیستمهای تشخیص نفوذ مبتنی بر شبکه هم در این زمنیه بسیار مفید میباشد. برخی از این ابزارها عبارتند از : NetWitness، FireEye، Sourcefire، TippingPoint، ForeScout و …
باید توجه داشته باشید که در صورت شناسایی روتکیت شما باید درایو را به صورت کامل پاک نموده و آن را مجدد فرمت نمایید. سپس سیستمعامل را از یک منبع معتبر دانلود و نصب نمایید. در ادامه میبایست دادههای خود را در آن بازگردانی نمایید.