نبرد بی پایان
سالهاست که نبرد بین ویروس نویسان و شرکت های ضدویروس سبب شده که از یک سو شاهد ابداع روش های جدید توسط گروه اول باشیم و از سویی دیگر، با تاخیر زمانی کم یا زیـاد، شـاهد پـاسخی از طرف دیگر این نبرد بی پایان باشیم.
البته برخی حملات سهمگین ویروس نویسان می تواند زمان پاسخ دهی شرکت های ضدویروس را بالا ببرد و متقابلاً نوآوری های شرکتهای تولیدکننده نرم افزارهای امنیتی نیز می تواند در بازه زمانی محدودی ویروس نویسان را به فکر فرو برده و اندکی از شدت فعالیت های آنان بکاهد. البته گاهی اقدامات پلیسی کشورها در مقابله با خلافکاران امنیتی نیز می تواند منجر به دستگیری یک یا چند نفر از آنها شود و توازن قوا را به سمت گروه درستکاران برهم زند.
در میانه این کارزار هم برخی شایعات و گفته های خلاف واقع بر پیچیدگی موضوع افزوده و برخی از کاربران و علاقمندان به مباحث امنیتی را گیج می کند. به عنوان نمونه برخی می گویند که شرکتهای ضدویروس به عده ای پول می دهند تا ویروس بنویسند تا درآمد آنها افزایش یابد. گرچه شایعه همکاری ویروس نویسان با شرکتهای امنیتی از سالها پیش بر سر زبان ها بوده، اما تابحال هیج شاهد و مدرکی برای آن ارائه نشده است. در مطلبی که پیش رو دارید، به گوشه کوچکی از نبرد خیر و شر بین متخصصان امنیتی و ویروس نویسها پرداخته ایم.
در اوایل دهه 1990 میلادی، کاربران با ویروس هایی مواجه شدند که چندشکلی (Polymorphic) بودند، به این معنی که گرچه برنامه ویروس یک برنامه واحد بود، اما در هنگام اجرا و فعال شدن، هربار شکل جدیدی به خود می گرفت. در آغاز، این شیوه با تغییرات کوچکی در فایلهای اجرایی (Engine) ضدویروس خنثی شد، اما ویروس نویسان بیکار ننشستند و الگوریتم هایی برای رمزنگاری فایلهای آلوده بکاربردند تا آنها را از دید ضدویروس ها مخفی نگه دارند. این الگوریتمها معمولاً براساس روشهای رایج رمزنگاری بود و کلید رمزنگاری هم در جایی از حـافظه یا دیسک سخت ذخیـره می شد. با تکامل این روش، استفاده از کلیدهای تصادفی یا کلیدهایی که براساس مشخصات دستگاه آلـوده سـاخته می شدند، رایج شد و در نتیجه کار ضدویروس ها را دشوارتر نمود. در طی این سالها، نکته جالب توجه این بود که گاهی ضدویروسی در شناسایی اینگونه ویروس ها به خوبی عمل می کرد اما در هنگام پاکسازی، این کلید را به اشتباه و یا زودتر از موعد از بین می برد و عملاً دستگاه را با مشکلات جبران ناپذیری روبرو می کرد. مثلاً برنامه های کاربردی پس از آن به درستی اجرا نمی شدند یا کاربر مرتباً پیغام خطا سیستم عامل دریافت می کرد. گاهی هم که یک ویروس موذی برخی از داده های دستگاه آلوده را با این کلید حذف شده رمزنگاری کرده بود، داده های موجود برروی دستگاه غیر قابل بازیابی می شدند.
گونه های دیگری از ویروسها به روش های فشرده سازی (Pack) برنامه های اجرایی خود روی آوردند. در آن سالها فشرده سازی برنامه ها دو سود برای برنامه نویسان داشت. یکی اینکه با فشرده کردن فایلهای اجرایی (فایلهایی که با پسوند EXE یا COM تولید می شدند) آنها را از گزند دزدان نـرم افـزار و بـرنـامه نویسان تنبل در امـان نـگه می داشتند. زیرا در آن سالها مثل این روزها وفور نعمت نبود و گاهی برنامه نویسان برای یافتن چند خط برنامه که بتواند بخشی از کارشان را پیش ببرد، خود را به آب و آتش می زدند. به همین خاطر با استفاده از ابـزارهـایـی تلاش می کردند به کد اصلی فایل اجرایی دست یابند. برنامه هایی که فایل های اجرایی آنها فشرده شده بود فقط در هنگام اجرا در حافظه باز می شدند و توسط برنامه های Debugger قـابـل خـوانـدن نبودند. مورد استفاده دیگر روشهای فشرده سازی، کم کردن حجم فایل های اجرایی بود.
با روی آوردن ویروس نویسان به روشهای فشرده سازی، ضدویروس ها نیز باید خود را مجهز به ابزار شناسایی این روش ها می کردند. کاری که به مرور انجام گرفت و با عرضه سیستم های عامل مانند Windows نیز ادامه یافت. امروزه بیشتر ضدویروس های مشهور، اغلب روشهای فشرده سازی را شناسائی و پشتیبانی می کنند و قادر به استخراج کدهای آلوده از میان داده های تغییر شکل یافته، هستند. البته یک جبهه دیگر هم در این میان ایجاد شده و بر پیچیدگی کارها افزوده است و آن هم روش های جدید فشرده سازی است که جنبه تجاری نداشته و در قالب برنامه های باز (Open Source) ارائه می شوند. در دنیای “برنامه بازها” به ازای هر نفر، یک راه برای رسیدن به موفقیت وجود دارد. نتیجه آنکه شرکت های تولید کننده ضدویروس باید مراقب روشهای جدیدی نیز که بدین صورت ابداع و عرضه می شود، باشند.
با ظهور سیستم عامل Windows و در جریان تغییر و تحولات پی در پی آن، پیشـرفت های زیـادی در زمینه برنامه نویسی بوجود آمد. از جمله “توابع برنامه نویسی” (Application Programming Interface – API) فراوانی ارائه شد که توسط برنامه نویسان مورد استفاده قرار گیرد. برخی از این توابع نانوشته یا مستند نشده بودند. به این معنی که با وجود قابل استفاده بودن در سیستم عامل، در مستندات و جزوه های فنی درج نمی شدند. برخی از کارمندان شرکت مایکروسافت و یا شرکای تجاری آنها از وجود این توابع خبر داشتند و به مرور زمان این اطلاعات به گوش افراد دیگری می رسید که آنها را در برخی از محافل زیرزمینی مطـرح می کـردند و نهایتاً به سمع و نظر ویروس نویسان می رسید و بدین ترتیب از آنها در نوشتن ویروس های جدید استفاده می شد. ولی در بسیاری از موارد، شرکت های امنیتی از این توابع خبر نداشتند و تازه پس از عدم موفقیت ضدویروس در پاکسازی برخی از ویـروس های جدید بـود کـه بـه دنبـال چاره ای برای آن می شدند و نهایتاً با صرف زمان قابل توجهی می توانستند مشکل را حل کنند.
مشابه این حالت حتی در برای سخت افزارها هم پیش آمد. مثلاً در زمـان پـردازنـده های مـدل پنتیوم 2 بـرخی از گونه های آن به دستورالعمل های جدیدی مجهز شد که بیشتر به کار نمایش بهتر گرافیک و فیلم و بازی می آمد و قاعدتاً برنامه نویسان گرافیکی از آن بیشتر سود می بردند. هرکدام از این دستورالعملهای جدید که توسط شرکت اینتل در اواسط دهه 1990 میـلادی تحت نام “مکمل های چندرسانه ای” (MultiMedia eXtention – MMX) ارائه شد، می توانست جایگزین تعداد قابل ملاحظه ای از دستورات معمولی شده و در نتیجه عملکرد گرافیکی دستگاه را بالا ببرد. اما ویروس نویسان از این دستورات جدید برای رسیدن به مقاصد خود استفاده کردند.
شرکتهای امنیتی متوجه می شدند که ویروسی پیدا شده که کاملاً مشابه ویروس دیگری است که قبلاً براحتی شناسایی و پاکسازی می شده، اما اکنون ضدویروس قادر به شناسایی آن نیست. بررسی بیشتر نشان می داد که ویروس نویس، برخی از دستورالعمل های جدید پردازشگر را جایگزین دستورات قبلی خود کرده و در نتیجه ضدویروس قادر به شناسائی و واکنش نسبت به این برنامه جدی ویروس نیست.
فناوری MMX در سال 1996 معرفی شد و بیشتر برای سیستم عامل Windows از آن استفاده شد، اما برای سیستم عامل DOS هم پردازنده هایی ارائه شدند که بیش از 80 دستـورالعمـل محـاسباتی جـدیـد برای استفـاده در نـرم افزارهای محاسباتی در خود داشتند. ویروس نویسان آن زمان هم از برخی از این دستورالعملها برای دور زدن ضدویروس ها استفاده کردند.
در تمام مواردی که تاکنون به آن اشاره کردیم نقطه پایانی وجود ندارد و نبرد کماکان ادامه دارد. اما در دهه اول هزاره سوم میلادی، شرکت های امنیتی از فناوری شبیه سازی برای بررسی برنامه های آلوده استفاده کردند که می توان آنرا برگ برنده ای از سوی ویروس نویسان دانست. فناوری شبیه سازی برنامه آلوده از یکی از وسایل بازی کـودکان به نام “جعبه شنی” اقتباس شـده است. ایـن اسباب بازی شامل جعبه ای با کوچکی است که مقداری شن و ماسه و ابزاری مانند بیلچه در آن است تا کودک درون آن بازی کند و لازم نباشد برای بازی در فضاهای باز در معرض تهدیدات محیطی مانند بیماری، غرق شدن و … قرار گیرد. در این روش، هیچگونه آلودگی هم به محیط زندگی کودک و خانواده وی منتقل نمی شود.
جعبه های شنی رایانه ای هم برای کاربران مبتدی وجود دارنـد که محیط کار کـاربـر را شبیـه سـازی کـرده و او می تواند کارهایش را انجام دهد. اما اگر در حین کار، مورد حمله نفوذگر یا ویروسی قرار گرفت صدمه ای به سیستم عامل دستگاه اصلی وارد نخواهد شد. هرگونه آلودگی احتمالی هم با بستن نرم افزار “جعبه شنی” از بین رفته و اثری از آن بجا نخواهد ماند.
فناوری شبیه سازی در ضدویروس ها هم به شکلی مشابه جعبه شنی، در هنگام مواجهه با برنامه های مشکوک، آنها را در یک محیط مجازی در داخل خود اجرا کرده و عملکرد آن را بررسی می کنند. نتیجه بررسی مشخص می کند که آیا این برنامه مشکوک، ویروس است یا خیر و اگر است راه مقابله با آن چیست. این محیط شبیه سازی شده مانند یک رایانه واقعی دارای پردازشگر و حافظه و دیسک سخت بوده و با اجرای فایل مشکوک در آن، تمام فعالیت های ویروس رصد می شود بدون آنکه آلودگی دستگاه شبیه سازی شده، صدمه ای به دستگاه واقعی بزند. ضدویروس های مطرح دنیا اکنون از ایـن فنـاوری برای شناسایی سریع تر ویروس ها استفاده فراوانی می کنند.
البته ویروس نویسان هم برای دور زدن روش شبیه سازی، فکرهایی کرده اند. برخی از ویروس ها از کنترل زمان در هنگام اجرای خود بهره می گیرند. به این شکل که در ابتدای اجرا، زمان اجرای چند دستورالعمل پیاپی را محاسبه کرده و از طریق آن به شبیه سازی بودن محیط اجرا پی می برند. این روش بدان خاطر موثر است که در حالت اجرای برنامه آلوده در محیط شبیه سازی شده، تمام منابع پردازشگر اصلی دستگاه در اختیار برنامه قرار نمی گیرد. در صورتیکه ویروسی بتواند بفهمد که در محیط شبیه سازی شده چه چیزی درحال اجرا است، مسیر برنامه را به سمت و سوی دیگری هدایت کرده و چند دستورالعمل عادی را اجرا می کند. اجرا نشدن برنامه مخرب ویروس نیز هیچ شکی را برنمی انگیزد و ضدویروس برنامه را سالم فرض می کند. راه حل هایی که نرم افزارهای ضدویروس برای مقابله با این اقدام ویروس نویسان بکار می برند شامل روش هایی است که برنامه درحال اجرا، احساس آزادی کرده و هیج محدودیتی پیش روی خود نبیند.
برخی از توابع مستند نشده سیستم عامل هم گاهی به کمک ویروس نویسان می آیند تا ضدویروس از اجرای کد مشکوک در محیط شبیه سازی شده چیزی عایدش نشود. این توابع برای اختصاص بلوک های حافظه کامپیوتر و نیز منابع پردازشگر به عملیات و سرویس های مختلف است. البته بسیاری از ضدویروس موفق، با این روش ها نیز آشنا بوده و واکنش مناسب نشان می دهند..