در ابتدا ارائه یک تعریف ساده از واژه Rootkit لازم می باشد. Rootkit به یک گروه از بدافزارهایی گفته می شود که قادر هستند سرویس ها و برنامه های مخرب خود را به نحوی در عمق سیستم مخفی نمایند که با روش ها و ابزارهای معمول و عادی قابل شناسایی نباشند. در این مقاله، از عنوان عمومی تر “بدافزار” برای Rootkit استفاده خواهد شد.
بدافزار ZeroAccess برای نخستین بار در سال 2009 میلادی زمانی که بدافزار TDSS روزهای اوج و شکوه خود را میگذراند، کشف شد. بدافزاری با ساختار و عملکردی پیچیده که بسیاری از مدیران شبکه با آن دست به گریبان هستند.
ZeroAccess نامی است که در درایور این بدافزار بدان اشاره شده است. اما براساس نامگذاری یکی از بخش های این بدافزار، برخی آنرا با نام ++ max هم میشناسند. به نظر میرسد که منشاء اصلی این بدافزار کشور چین باشد؛ هر چند که این تنها یک احتمال است که به دلیل وجود سرورهای فرماندهی و کنترل (C&C) آن بر روی دامنههایی با پسوند cn مطرح شده است. نام این دامنهها بصورت نیمهتصادفی براساس تاریخ سیستم ایجاد میشوند. روشی که ویروس Conficker نخستین بار از آن استفاده کرد.
یکی از اهداف این بدافزار ایجاد شبکههای مخرب Botnet است که قابلیت دریافت بدافزارهای بیشتر، توزیع ضدویروس های جعلی و ارسال هرزنامهها را نیز دارند.
نگارش های جدید ZeroAccess فایلهای رمزشده را در پوشهای قرار میدهند که نام آن مشابه نام پوشههایی است که Windows Update از آنها استفاده میکند. این پوشه که در مسیر Windows قرار دارد، دارای نامی شبیه $NtUninstallKBnnnnn$ است که در آن n عدد تصادفی می باشد.
همچنین نگارشهای جدیدتر که بر روی بسترهای 64 بیتی هم میتوانند فعال شوند با استفاده از الگوریتم Twisted RC4 کلید رمز هر سیستم را بصورت منحصر بفرد برای همان سیستم ایجاد میکنند.
ZeroAccess یکی از فایلهای درایور سیستم قربانی را با فایل آلوده خود جایگزین و فایل اصلی را به برنامههای امنیتی و ضدویروس ها نمایش میدهد. بدافزار، این کار را با کنترل کردن سطح پایین دیسک که یک روش غیرمتداول است، انجام میدهد. پس از آن میتواند پیامهای IOCTL را که به درایور SCSI ارسال میگردند، فیلتر کند. قابلیتی مهم که ZeroAccess را قادر به جلوگیری از دسترسی مستقیم NTFS به کد آلوده خود بر روی دیسک میکند و در نتیجه پاکسازی را دشوار میسازد.
نمونههای جدید ZeroAccess برای مقابله با ویروسیابی حافظه، روش نوین دیگری را نیز پیداسازی کردهاند. این روش به بدافزار امکان میدهد که بسیاری از برنامههای امنیتی را که وجود بدافزار را میتوانند تشخیص دهند، شناسایی کند. ZeroAccess این کار را با ایجاد پروسهای بعنوان طعمه، معمولاً در پوشه Windows که نامی شامل چند عدد تصادفی دارد، انجام میدهد. همچنین ZeroAccess با کمک APCها سبب میشود که کد آلوده به عنوان بخشی از خود برنامه امنیتی دیده شود و با فراخوانی ExitProcess/API به نوعی سبب خودکشی پروسه برنامه امنیتی میشود.
از سوی دیگر ZeroAccess با دستاندازی به فهرست کنترل دسترسیها (ACL)ی پروسه برنامههای امنیتی، سبب میگردد که اجرای این برنامهها بخاطر نداشتن حق دسترسی کافی با مشکل روبرو شوند و این موضوع تا زمان برگرداندن فهرست کنترل دسترسیها ادامه خواهد داشت. جای امیدواری است که این موضوع سبب جلب توجه کاربر به از کارافتادن ضدویروس شود.
روش نصب و اجرا
نصب ZeroAccess با رونویسی یکی از درایورهای مجاز، که بصورت تصادفی انتخاب میشود (برای مثال CDROM.sys) و قرار دادن فایل آلوده بجای آن آغاز میشود. معمولاً مرحله اول در گونههای مختلف این ویروس متفاوت است. بعضی مستقیماً درایور مجاز را رونویسی میکنند و برخی ابتدا کد آلوده را به پروسهای مورد اعتماد (Trusted) مانند explorer.exe تزریق و از طریق آن رونویسی را بر روی درایور انجام میدهند. بدیهی است که روش دوم برای عبور از سد نرمافزارهای امنیتی صورت میپذیرد. با این حال در طی مرحله اول درایور اصلی در حافظه باقی میماند.
در تصویر فوق، مراحل 2 تا 8 تقریباً در میان تمامی گونههای این بدافزار یکسان میباشد. در مرحله سوم پوشه محافظت شده $NtUninstallKBnnnnn$ که پیشتر به آن اشاره شده، ایجاد میگردد.
در مرحله چهارم، کد آلوده بدافزار در فضای هسته اجرا میشود. در مرحله پنجم ZeroAccess با در دست گرفتن کنترل فیلد DeviceExtension->LowerDeviceObject در \driver\disk DEVICE_OBJECT ورودیها و خروجیهای دیسک را شنود میکند. بنابراین هر خواندن و نوشتنی بر روی دیسک باید ابتدا از کد آلوده عبور کند. در مرحله ششم، کدی که در هسته قرار دارد به فایل درایور اصلی که در حافظه ذخیره شده است، دسترسی خواهد داشت. برای اجرا شدن پس از راهاندازی مجدد دستگاه بدافزار این فایل را با کمک تابع ZwFlushVirtualMemory بر روی دیسک کپی میکند. دلیل این کار آن است که زمانی که درخواست ذخیره فایل مجاز را دریافت کرد آنرا رمز کرده و به پوشه حفاظت شده بجای فایل واقعی CDROM.sys هدایت کند. بدافزار، دسترسی به این پوشه را کنترل و رمزگذاری کرده و در زمان دسترسی، رمزگشایی می کند.
به محض ذخیره شدن نسخه رمز شده فایل درایور در پوشه محافظت شده، آلودگی مقیم و به راحتی پس از راهاندازی مجدد اجرا میشود. هر گونه تلاش برای خواندن فایل آلوده به سبب کنترل ورودیها و خروجیها باعث میشود که بدافزار فایل درایور مجاز را باز گرداند و در عمل نرمافزارهای امنیتی را فریب دهد.
همچنین در طول راهاندازی مجدد دستگاه، فایل آلوده ابتدا در حالت هسته باز میشود که در پوشه محافظت شده قرار دارد و فایل اصلی را در هسته، فراخوانی میکند تا مطمئن شود که درایور اصلی را دچار مشکل نکرده باشد و دستگاه به درستی کار کند.
پیشگیری و پاکسازی
بهروز نگه داشتن ضدويروس در کنار آگاه کردن کاربران در خصوص خطر کليک بر روی لينک های ناآشنا، همگی میتوانند خطر آلوده شدن به اين بدافزار و يـا گونههای مشابه را به حداقل برسانند. با توجه به وجود فایلهای آلوده به این ویروس در شبکههای اشتراک فایل، بهتر است از دریافت فایلهای ناشناس و مشکوک از این شبکهها خودداری گردد.
برای پاکسازی این بدافزار، نرم افزارهای امنیتی باید در چندین مرحله یا حافظه را پاکسازی کنند و یا فایلی را که در پوشه حفاظت شده قرار دارد، رمزگشایی کنند تا بتوانند فایل درایور اصلی را جایگزین برنامه آلوده کنند. اما همانطور که گفته شد ZeroAccess با استفاده از روش های مختلف اجرای برنامههای امنیتی را که سعی در از کاراندازی آن دارند، دچار مشکل میکند. جالب آنکه فناوری نوظهور (McAfee DeepSAFE (http://newsroom.shabakeh.net/2800 بطور بسیار مؤثری میتواند با اینگونه بدافزارها مقابله کند.
همچنین برای پاکسازی بدافزارهای از نوع Rootkit میتوان از نرمافزار مستقل McAfee که در نشانی زیر موجود است، استفاده نمود.
http://update.shabakeh.net/download/tools/rootkitremover.zip
بعلاوه اگر از ضدویروس McAfee VirusScan Enterprise استفاده میکنید، اجرای دستور زیر در حالت Safe Mode می تواند فایل های آلوده را پاکسازی نماید.
McAfee VirusScan 8.7
C:\Program Files\McAfee\VirusScan Enterprise\csscan.exe” -All -Unzip -Program -Analyze -Sub -Clean -Log c:\scan-rpt.txt C:\ o
McAfee VirusScan 8.8
C:\Program Files\Common Files\McAfee\SystemCore\csscan.exe” -All -Unzip -Program -Analyze -Sub -Clean -Log c:\scan-rpt.txt C:\