بخشی از مقاله

چکیده

در سالهای اخیر تقابل بین مهندسی معکوس و روشهای مقابله با آن، به علت پدید آمدن و تاثیر موضوعات جدید از جمله نفوذ هک، مفهوم تازهای یافته و هر روز شاهد پیدایش روشهای جدید و متنوعی در حوزه مهندسی معکوس و بالطبع آن روشهای مقابله با آن هستیم. مقاله پیش رو به معرفی روشی می پردازد که برنامه نویسان را قادر میسازد بدون نیاز به تشخیص حضور محیط دیباگرها در حافظه یا استفاده از آسیب پذیریهای شناخته شده یا شناخته نشده، فقط با طی یک روند منطقی که در حال حاضر فقط در خانواده سیستم عامل ویندوز قابل اجرا میباشد از اجرای برنامه مورد نظر در محیطهای تحلیل اعم از دیباگرها، سندباکس و موارد دیگر ممانعت به عمل آورد.

کلمات کلیدی

ضدتحلیل، ضددیباگ، مکانیزمهای منطقی، قرص قرمز، آسیب پذیریهای دیباگرها، ضد مهندسیمعکوس، سامانههای محافظتی

مقدمه

اولین گام برای بررسی دقیق یا به عبارت بهتر تحلیل یک نرم افزار، تحت کنترل داشتن روند اجرای آن می باشد. از این رو استفاده از دیباگر ها برای نیل به این هدف امری کاملا ضروری و بدیهی است. متخصصین امنیت اطلاعات و تحلیلگران بدافزار عمدتا با استفاده از روشهای جدید تحلیل سعی در کاهش زمان ارائه راهکار برای مقابله با بدافزارها دارند و از طرف دیگر بدفزارنویسان با ارائه متدهای پیچیده، روند تحلیل را به هر شکل ممکن روز به روز سخت تر می کنند. استفاده از روش های ضد دیباگ در این حوزه دلایل بسیار زیادی دارد. اما یکی از دلایل عمده که برنامه نویس های حرفه ای بدافزار و هکرها از این روش ها بهره می برند، افزایش طول عمر یک برنامه به منظور انجام فعالیت خود به صورت مخفیانه است. به عبارت دیگر، آنها ازاین روش ها به منظور اینکه متخصصین امنیت و اطلاعات نتوانند به سادگی از مقاصد عملیاتی بدافزارهای تولیدی آنها اطلاعات به دست آورند از این روش ها استفاده می کنند. لذا این روش ها، فرآیند تجزیه و تحلیل بدافزار را بسیار دشوار می کنند و به سختی می توان متوجه شد که بدافزار چه اهدافی داشته است و چه کسانی آن ها را طراحی کرده اند.

همانطور که ابتدا بیان شد، هدف استفاده از روش های ضد دیباگ کردن، دشوار ساختن فرآیند مهندسی معکوس است اما چگونه یک بدافزار وجود یک دیباگر را تشخیص می دهد؟ بدین منظور روش های بسیار زیادی وجود دارد که در این مقاله به رایجترین آنها پرداخته خواهد شد. با فرض اینکه بدافزار با استفاده از یک روش توانست با موفقیت دیباگر را تشخیص دهد، در ادامه چه کاری انجام خواهد داد؟ اصولا بدافزارها هنگامی که یک دیباگر را تشخیص می دهند، به شکل متفاوتی عمل می کنند تا بتوانند هویت مخرب خودشان را از چشم تحلیلگر مخفی نگه دارند یا در برخی از شرایط موجب می شوند که دیباگر متوقف شود.

در بدافزارهای عملیاتی شده در دهه های اخیر، بیشتر از مکانیزم گمراه کننده استفاده میشود. یعنی هنگامی که بدافزار وجود یک دیباگر را تشخیص می دهد، به شکل متفاوتی رفتار می کند و تحلیلگر را در شرایطی قرار می دهد که نمی تواند هویت آن را به درستی تشخیص دهد. بعلاوه، دیگر مکانیزم های ضد تحلیل با توجه به وضعیت نابسامان صنعت نرمافزار و استفاده از نسخه های غیرقانونی و قفل شکسته در سطح جهانی، بسیار مورد توجه تولیدکننده گان محصولات امنیت نرم افزاری قرار گرفته است، تا با استفاده از از این روش ها لایه های امنیتی نرم افزارها را افزایش داده و مدت زمان و به دنبال آن هزینه شکستن قفل نرم افزاری محصولات محافظت شده توسط مجرمین سایبری را افزایش دهند. لذا در این مقاله رویکرد اصلی بررسی روشهای پیشین که بعضا توسط متخصصین امنیت اطلاعات طراحی یا کشف شده و برخی از آنها توسط تولید کننده گان بدافزار ابداع شده است، می باشد.

با اتمام بررسی، نقاط ضعف و قوت هر کدام و در نهایت کارایی هر روش به چالش کشیده خواه شد. البته این روش نیز کاستیهای خود را خواهد داشت و در بدترین حالت ممکن، می-تواند به عنوان یک ایده جدید الهام بخش محققین فعال در حوزه امنیت اطلاعات جهت ارائه تکنیکهای بهتر باشد؛ در ادامه مقاله در بخش اول به تاریخچه موضوع مورد بحث نگاهی گذرا خواهیم داشت و با برخی مفاهیم آشنا خواهیم شد. سپس در بخش دوم فعالیت های صورت پذیرفته در این حوزه معرفی می شوند و تا جای ممکن سعی می شد نقاط قوت و ضعف هرکدام بیان شود. در بخش سوم روش پیشنهادی ارائه خواهد شد و در نهایت در بخش چهارم به ارزیابی و مقایسه اجمالی روش پیشنهاد شده با روشهای موجود بیان می شود.

کارهای مرتبط همانطور که پیشتر عنوان شد روش ضددیباگ یکی از معمولترین روشهای جلوگیری از تحلیل می باشد که امروزه توسط تولید کنندگان سیستم های امنیتی و برنامه نویسان بدافزار به شکل گسترده ای مورد استفاده قرار می گیرد. استفاده از تکنیک های شناسایی محیط دیباگ یکی از ساده ترین و ابتدایی ترین روشهای ضدتحلیل می باشد که به طور عمده به 7 بخش عمده تقسیم می شوند که در ادامه معرفی میشوند:[10] [4] [1] [3] تکنیک های ضددیباگ مبتنی بر استفاده از توابع سیستمی . - API-Based - استفاده از وقفه ها و خطاهای مدیریت نشده که سیستم عامل توانایی مدیریت آنها را دارد؛ ولی نرم افزار دیباگر به خاطر ضعف در طراحی یا تولید، توانایی مدیریت آنها را ندارد . - Exception-Based - استفاده از ساختار فرآیند ها و نخ؛ طی این روند بخشهایی از ساختار فرآیندها که توسط سیستم عامل مدیریت شده و شامل اطلاعات مفیدی از تحت دیباگ بودن یا نبودن فرآیند است، استفاده می شود .

- Process and Thread Block Checking - بررسی بَرِخط کدها و حافظه فرآیند جاری در مقابل تغییرات ایجاد شده توسط محیطهای دیباگر 0RGLILFDWLRQ 5XQWLPH&RGH - . - &KHFN بررسی سخت افزار سیستم میزبان به جهت شناسایی محیطهای شبیه سازی و مقایسه پرچمهای پردازشگر - Register and . - Hardware based بررسی زمان اجرای کدها، به طور منطقی اجرای یک قطعه کد تحت دیباگرکُندتر از اجرا بدون واسطه و توسط سیستم عامل میباشد . - Timing Detection - استفاده از مکانیزم Self-Debugging که طی آن فرآیند مورد نظر توسط یکدیباگرِ از پیش طراحی شده، تحت دیباگ قرار می-گیرد. از آنجایی که طبق قوانین سیستم عامل ویندوز یک فرآیند فقط توسط یک دیباگر قابل دیباگ میباشد امکان اتصال دیباگر ثانویه ممکن نمیشود. با معرفی اجمالی این تکنیک های عنوان شده در ادامه نقاط ضعف هر کدام بیان خواهد شد تا در نهایت امکان مقایسه بهتر تکنیک های مرسوم با روش پیشنهادی فراهم شود.

از مزایای روش مبتنی بر استفاده از توابع سیستمی راحتی کاربری آن میباشد، که موجب شده است برنامه نویس به راحتی بتواند مکانیزم ابتدایی ضدتحلیل خود را پیاده سازی نماید. لیکن با توجه به تغییرات ساختار توابع API طی انتشار نسخه های متعدد از سیستم عامل ویندوز، این روش با مشکلاتی مواجه است از جمله نیاز به بروز رسانی مکرر دارد و با توجه به در دسترس عموم بودن مستندات این توابع، امکان شناسایی، ردگیری و حذف فراخوانی های فوق از برنامه توسط نفوذگر یا تحلیلگر به سادگی مقدور میباشد. استفاده از مکانیزم مبتنی بر خطاهای مدیریت نشده در بسیاری موارد می تواند مفید واقع شود ولی با ایجاد دیباگرهای سفارشی و مقاوم سازی آنها در قبال وقفه ها میتوان بدون ایجاد تغییر در پرونده اجرایی تمامی روتینهای ضددیباگ آن را خنثی نمود. هر پروسه یا فرآیند در سیستم عامل ویندوز شامل ساختمان دادهای میباشد . - Process Environment Block - هر بلوک محتوای اطلاعاتی به جهت استفاده سیستم عامل و در صورت نیاز کاربر میباشد.

از این اطلاعات می توان برای دسترسی به مواردی همچون نام فرآیند در حافظه، نام فرآیند والد، مسیر اجرایی فرآیند و مواردی از این دست اشاره داشت؛ به عنوان نمونه در سیستم عامل ویندوز در صورتی که یک فرآیند تحت دیباگ قرار بگیرد فرآیند والد آن، نام فرآیند دیباگر خواهد بود در غیر این صورت فرآیند explorer.exe به عنوان فرآیند والد تشخیص داده میشود از اینرو می توان با دسترسی به ساختار داده ای فوق و استخراج اطلاعات آن دریافت که فرآیند والد یک دیباگر است یا خیر. ولی با توجه به معماری مربوط به مدیریت فرآیندهای سیستم عامل ویندوز که در شکل 1 نمایش داده شده است با قطع دسترسی برنامه کاربردی به توابع API اصلی و جایگزینی آنها با توابع جعلی و یا جعل مقادیر بازگشتی که به مکانیزم Hook شهرت دارد میتوان در تشخیص صحیح دیباگر یا به عبارت بهتر در دریافت اطلاعات صحیح، اخلال ایجاد کرد . البته لازم به ذکر است که به علت تعدد روشهای عبور از تکنیک شناسایی فوق، تنها به بررسی نمونه عنوان شده به عنوان یک مثال نقض سیستم امنیتی پرداخته و از باقی موارد صرفنظر می شود.[12]

همانطور که در شکل - 2 - مشخص است، برنامه کاربردی با فراخوانی توابع سیستمی به جای ارجاع به لایه های اصلی سیستم عامل به برنامه موسوم به User-Mode Hook Engine منتقل میشوند. در این حالت تمامی خروجی های حاصل از توابع سیستمی می تواند در بخش مذکور دستخوش تغییر شده و به برنامه اصلی برگشت داده شود. بدین ترتیب باعث جلوگیری از فعالیت صحیح برنامه در شناسایی محیط دیباگر می گردد.. [11].[7] از سایر مکانیزمهای ضددیباگ که امروزه به ندرت استفاده میشود بررسی مرتب مقدار Integrityکُدها در حافظه و پس از اجرا می-باشد؛ تا در صورت ایجاد نقاط توقف توسط دیباگر یا هر برنامه ناظر امکان شناسایی فراهم گردد. این مکانیزم به علت ایجاد سربار بسیار بالا در سیستم میزبان، کاربرد بسیار کمی دارد و صرفا در موارد خیلی محدود و ابتدایی از بدافزارها به چشم میخورد.

روش بعدی مورد بحث، مکانیزم موسوم به استفاده از قرصهای قرمز میباشد که طی آن بدافزار یا نرمافزاری که تمایل به حضور در محیطهای شبیه ساز را نداشته باشد با استفاده از آسیب پذیریهای این محیطها که گاه به علت نوع معماری شبیه ساز و گاه به خاطر اشتباهات برنامه نویسی ایجاد شده اند سوء استفاده کرده و نهایتا حضور خود در محیط واقعی یا شبیه سازی شده را تشخیص میدهد. برای کسب درک بهتری از روش مذکور،مثالی ارائه میشود. اکثر تحلیلگران بدافزار معمولا از سیستم های مجازی همچون VMWare و Virtual Box و ابزار مشابه استفاده می کنند تا در صورت اجرای سهوی کدهای بدافزار به زیر ساخت اصلی مجموعه آسیب وارد نگردد. لذا بدافزارنویسان نیز برای گریز از تحلیل در محیطهای ایزوله مجازی، سعی در شناسایی آنها و در نهایت

در متن اصلی مقاله به هم ریختگی وجود ندارد. برای مطالعه بیشتر مقاله آن را خریداری کنید