ویرگول
ورودثبت نام
سید عمید قائم مقامی
سید عمید قائم مقامیبرنامه نویسی سیستم ویندوز و مهندسی معکوس و علاقه مند به آموزش.
سید عمید قائم مقامی
سید عمید قائم مقامی
خواندن ۲۳ دقیقه·۲ روز پیش

آنتی ویروس hackers Handbk قسمت اول:

نرمافزار آنتیویروس برای جلوگیری از آلوده شدن رایانهها طراحی شده است؛ به این صورت که نرمافزارهای مخرب، که معمولاً «بدافزار» (Malware) نامیده میشوند، را روی رایانه شناسایی میکند و در صورت لزوم با حذف بدافزار و پاکسازی سیستم، رایانه را ضدعفونی میکند. بدافزار که در این کتاب از آن با عنوان «نمونهها» نیز یاد میشود، میتواند به انواع مختلفی مانند تروجانها، ویروسها (آلودهکنندهها)، روتکیتها، دراپرها، کرمها و موارد دیگر طبقهبندی شود.

این فصل به معرفی نرمافزار آنتیویروس (AV) و نحوهٔ عملکرد آن میپردازد و همچنین تاریخچهای کوتاه از نرمافزارهای آنتیویروس و تحلیلی مختصر از چگونگی تکامل آنها در گذر زمان ارائه میدهد.

نرمافزار آنتیویروس چیست؟

نرمافزار آنتیویروس نوعی نرمافزار امنیتی ویژه است که هدف آن فراهم کردن سطح حفاظتی بالاتری نسبت به آنچه سیستمعامل پایه (مانند ویندوز یا Mac OS X) ارائه میدهد، میباشد. در بیشتر موارد، از آن بهعنوان یک راهکار پیشگیرانه استفاده میشود. با این حال، اگر این پیشگیری مؤثر واقع نشود، نرمافزار آنتیویروس برای ضدعفونی کردن برنامههای آلوده یا پاکسازی کامل بدافزار از سیستمعامل به کار میرود.نرمافزار آنتیویروس از تکنیکهای مختلفی برای شناسایی نرمافزارهای مخرب استفاده میکند؛ نرمافزارهایی که اغلب از خود محافظت کرده و در لایههای عمیق سیستمعامل پنهان میشوند. بدافزارهای پیشرفته ممکن است از قابلیتهای مستندسازینشدهٔ سیستمعامل و روشهای مبهم استفاده کنند تا ماندگار بمانند و از شناسایی شدن جلوگیری کنند. به دلیل گستردگی سطح حمله در دنیای امروز، نرمافزار آنتیویروس بهگونهای طراحی شده است که بتواند با انواع مختلف محمولههای مخرب، چه از منابع مورد اعتماد و چه از منابع غیرقابل اعتماد، مقابله کند. از جمله ورودیهای مخربی که نرمافزار آنتیویروس با درجات مختلفی از موفقیت سعی در محافظت از سیستمعامل در برابر آنها دارد میتوان به بستههای شبکه، پیوستهای ایمیل، و اکسپلویتهای مربوط به مرورگرها و برنامههای نمایش اسناد، و همچنین برنامههای اجرایی در حال اجرا روی سیستمعامل اشاره کرد.

نرمافزار آنتیویروس:

گذشته و حالاولین محصولات آنتیویروس صرفاً «اسکنر» نامیده میشدند، زیرا اسکنرهای خط فرمانی بودند که تلاش میکردند الگوهای مخرب را در برنامههای اجرایی شناسایی کنند. از آن زمان تاکنون، نرمافزارهای آنتیویروس تغییرات زیادی کردهاند. برای مثال، بسیاری از محصولات آنتیویروس دیگر شامل اسکنرهای خط فرمان نیستند. امروزه بیشتر آنتیویروسها از اسکنرهایی با رابط کاربری گرافیکی (GUI) استفاده میکنند که هر فایلی را که توسط سیستمعامل یا برنامههای کاربر ایجاد، تغییر یا مورد دسترسی قرار میگیرد، بررسی میکنند. همچنین فایروالهایی نصب میکنند تا بدافزارهایی را که از شبکه برای آلوده کردن رایانهها استفاده میکنند شناسایی کنند، افزونههای مرورگر برای تشخیص اکسپلویتهای مبتنی بر وب نصب میکنند، مرورگرها را برای پرداخت امن ایزوله میکنند، درایورهای هسته (Kernel) برای محافظت از خود آنتیویروس یا ایجاد محیطهای سندباکس میسازند و قابلیتهای دیگری نیز ارائه میدهند.
از زمان سیستمعاملهای قدیمی مانند Microsoft DOS و سایر سیستمعاملهای منسوخ، نرمافزارها بهطور طبیعی همگام با سیستمعاملها تکامل یافتهاند. با این حال، نرمافزارهای آنتیویروس به دلیل حجم بسیار زیاد بدافزارهای تولیدشده، با سرعتی چشمگیر تکامل پیدا کردهاند. در دههٔ ۱۹۹۰، یک شرکت آنتیویروس در طول یک هفته تنها تعداد اندکی بدافزار دریافت میکرد که معمولاً آلودهکنندههای فایل (یا ویروسها) بودند. امروزه یک شرکت آنتیویروس روزانه هزاران فایل مخرب منحصربهفرد دریافت میکند (منحصربهفرد از نظر هش رمزنگاری مانند MD5 یا SHA-1). این موضوع صنعت آنتیویروس را مجبور کرده است تا بر تشخیص خودکار و ایجاد روشهای ابتکاری (هیوریستیک) برای شناسایی بدافزارهای ناشناخته، هم بهصورت پویا و هم ایستا، تمرکز کند. فصلهای ۳ و ۴ به بررسی عمیقتر نحوهٔ عملکرد نرمافزارهای آنتیویروس میپردازند.
تحول سریع بدافزارها و محصولات ضدبدافزار با یک انگیزهٔ بسیار ساده هدایت میشود: پول. در روزهای ابتدایی، نویسندگان ویروس (که vxer نیز نامیده میشدند) نوع خاصی از آلودهکنندههای فایل را مینوشتند که بر انجام کارهایی تمرکز داشت که پیش از آن توسط دیگران انجام نشده بود، تا به شهرت برسند یا صرفاً خود را به چالش بکشند. امروزه توسعهٔ بدافزار یک کسبوکار بسیار سودآور است که برای اخاذی از کاربران رایانه و همچنین سرقت اطلاعات کاربری آنها برای خدمات آنلاین مختلف مانند eBay، Amazon و Google Mail، و نیز بانکها و سامانههای پرداخت (برای مثال PayPal) استفاده میشود؛ هدف مشترک، کسب هرچه بیشتر پول است.
برخی از فعالان صنعت بدافزار میتوانند اطلاعات ورود به ایمیل حسابهای Yahoo یا Gmail شما را سرقت کرده و از آنها برای ارسال هرزنامه یا بدافزار به هزاران کاربر به نام شما استفاده کنند. آنها همچنین میتوانند از اطلاعات کارت اعتباری سرقتشدهٔ شما برای انجام پرداخت به حسابهای بانکی تحت کنترل خود یا پرداخت به «واسطهها» (mules) جهت جابهجایی پولهای سرقتی از حسابهای آلوده به حسابهای پاک استفاده کنند تا فعالیتهای مجرمانهٔ آنها سختتر قابل ردیابی شود.

نوع دیگری از بدافزار که بهطور فزایندهای رایج شده، توسط دولتها، سازمانهای مشکوک، یا شرکتهایی ساخته میشود که بدافزار (نرمافزارهای جاسوسی) را به دولتها میفروشند؛ دولتهایی که به نوبهٔ خود ارتباطات مردمشان را زیر نظر میگیرند. برخی از این نرمافزارها برای خرابکاری در زیرساختهای کشورهای خارجی طراحی شدهاند. برای مثال، کرم رایانهای بدنام استاکسنت (Stuxnet) موفق شد با استفاده از حداکثر پنج آسیبپذیری روز-صفر (Zero-Day)، تأسیسات هستهای نطنز ایران را خرابکارانه مختل کند. نمونهٔ دیگری از خرابکاری، حملات سایبری میان کشورها و شرکتهایی است که در رقابت مستقیم با کشور یا شرکت دیگری قرار دارند؛ مانند حملهٔ سایبری به شرکت آرامکوی عربستان سعودی که یک کارزار خرابکاری منتسب به ایران بود و بزرگترین شرکت نفتی عربستان را هدف قرار داد.
نرمافزارها همچنین میتوانند صرفاً برای جاسوسی از شبکههای دولتی، شرکتها یا شهروندان ایجاد شوند؛ سازمانهایی مانند آژانس امنیت ملی آمریکا (NSA) و ستاد ارتباطات دولت بریتانیا (GCHQ)، و همچنین هکرهایی از ارتش آزادیبخش خلق (PLA)، تقریباً بهصورت روزانه به چنین فعالیتهایی میپردازند. دو نمونه از نرمافزارهای نظارتی، FinFisher و Hacking Team هستند. دولتها، و همچنین نهادهای اجرای قانون و سازمانهای امنیتی، نسخههای تجاری FinFisher و Hacking Team را برای جاسوسی از مجرمان، مظنونان و حتی شهروندان خود خریداری کردهاند. نمونهای که به ذهن میرسد، دولت بحرین است که از نرمافزار FinFisher برای جاسوسی از مخالفانی که علیه دولت میجنگیدند استفاده کرد.
پیشرفتهای بزرگ و سرمایهگذاریهای مالی عظیم در توسعهٔ بدافزار، صنعت آنتیویروس (AV) را در ده سال گذشته مجبور کرده است که بهطور چشمگیری تغییر کرده و تکامل یابد. متأسفانه، بخش دفاعی امنیت اطلاعات ــ جایی که نرمافزارهای آنتیویروس قرار میگیرند ــ همواره از بخش تهاجمی عقبتر است. معمولاً یک شرکت آنتیویروس نمیتواند بدافزاری را که هنوز ناشناخته است شناسایی کند، بهویژه اگر در فرایند توسعهٔ آن بدافزار، کنترل کیفیت مناسبی انجام شده باشد. دلیل این موضوع بسیار ساده است: فرار از شناسایی توسط آنتیویروس بخش کلیدی توسعهٔ بدافزار است و برای مهاجمان اهمیت دارد که بدافزارشان تا حد امکان برای مدت طولانی شناسایی نشود. بسیاری از بستههای تجاری بدافزار، چه قانونی و چه غیرقانونی، همراه با یک بازهٔ زمانی پشتیبانی فروخته میشوند. در طول این دورهٔ پشتیبانی، محصول بدافزاری بهروزرسانی میشود تا از شناسایی توسط نرمافزارهای آنتیویروس یا سیستمعامل عبور کند. همچنین ممکن است بدافزار برای رفع اشکالات، افزودن قابلیتهای جدید و موارد مشابه بهروزرسانی شود. خود نرمافزارهای آنتیویروس نیز میتوانند هدف حمله قرار گیرند؛ مانند مورد The Mask که یک بدافزار تحت حمایت دولت بود و از یکی از آسیبپذیریهای روز-صفر شرکت کسپرسکی استفاده میکرد.

اسکنرهای آنتیویروس، کرنلها و محصولات
یک کاربر معمولی رایانه ممکن است نرمافزار آنتیویروس را بهعنوان یک مجموعه نرمافزاری ساده ببیند، اما یک مهاجم باید بتواند آنتیویروس را در سطحی عمیقتر بررسی کند.این فصل اجزای مختلف یک آنتیویروس را شرح میدهد؛ از جمله کرنل، اسکنر خط فرمان، اسکنر رابط گرافیکی (GUI)، دیمونها یا سرویسهای سیستمی، درایورهای فیلتر سیستم فایل، درایورهای فیلتر شبکه و هر ابزار پشتیبان دیگری که همراه آن ارائه میشود.ClamAV، تنها نرمافزار آنتیویروس متنباز، نمونهای از یک اسکنر است. این نرمافزار صرفاً اسکن فایلها را برای کشف الگوهای نرمافزارهای مخرب انجام میدهد و برای هر فایل شناساییشده پیامی چاپ میکند. ClamAV عمل ضدعفونی انجام نمیدهد و از یک سیستم اکتشافی واقعی (مبتنی بر رفتار) استفاده نمیکند.در مقابل، کرنل هستهی اصلی یک محصول آنتیویروس را تشکیل میدهد. برای مثال، هستهی ClamAV کتابخانهی libclam.so است. تمام روالهای مربوط به بازکردن بستهبندی برنامههای اجرایی، فشردهسازها، رمزکنندهها، محافظها و موارد مشابه در این کتابخانه قرار دارند. همچنین تمام کدهای مربوط به باز کردن فایلهای فشرده برای پیمایش تمام جریانهای یک فایل PDF یا برای فهرستکردن و تحلیل کلاسترها در یک فایل کانتینر OLE2 (مانند یک سند Microsoft Word) نیز در همین کتابخانه هستند. کرنل توسط اسکنر clamscan، توسط نسخهی مقیم (یا دیمون) clamd، و توسط سایر برنامهها و کتابخانهها مانند بایندینگهای پایتون آن که PyClamd نام دارند، استفاده میشود.
نکته: محصولات آنتیویروس اغلب از بیش از یک هسته یا کرنل آنتیویروس استفاده میکنند. برای مثال، F-Secure از موتور آنتیویروس اختصاصی خود و همچنین موتوری که از BitDefender مجوز گرفته است استفاده میکند.
یک محصول آنتیویروس ممکن است همیشه دسترسی مستقیم توسعهدهندگان شخص ثالث به هستهی خود را فراهم نکند؛ در عوض، ممکن است دسترسی به اسکنرهای خط فرمان را ارائه دهد. سایر محصولات آنتیویروس ممکن است اصلاً دسترسی به اسکنرهای خط فرمان ندهند و تنها اجازهی دسترسی به اسکنر GUI یا یک برنامهی GUI برای پیکربندی نحوهی عملکرد حفاظت بلادرنگ یا بخشهای دیگر محصول در زمینهی شناسایی و ضدعفونی بدافزار را بدهند. مجموعهی محصول آنتیویروس ممکن است شامل برنامههای امنیتی دیگری نیز باشد، مانند مرورگرها، نوارابزارهای مرورگر، درایورهای محافظت از خود، دیوارههای آتش و موارد دیگر.همانطور که میبینید، «محصول» کل بستهی نرمافزاری است که شرکت آنتیویروس به مشتری ارائه میدهد، در حالی که «اسکنرها» ابزارهایی هستند که برای اسکن فایلها و دایرکتوریها استفاده میشوند، و «کرنل» شامل ویژگیهای هستهای است که به اجزای نرمافزاری سطح بالاتر مانند اسکنرهای GUI یا خط فرمان ارائه میشود.

تصورات نادرست رایج درباره نرمافزارهای آنتیویروس

بیشتر کاربران آنتیویروس باور دارند که محصولات امنیتی غیرقابل نفوذ هستند و صرفاً نصب نرمافزار آنتیویروس رایانههایشان را ایمن نگه میدارد. این باور درست نیست، و دیدن نظراتی مانند این در انجمنهای آنتیویروس غیرمعمول نیست: «من به بدافزار XXX آلوده شدهام. چطور ممکن است؟ من محصول آنتیویروس YYY را نصب کردهام!»
برای نشان دادن اینکه چرا نرمافزارهای آنتیویروس غیرقابل نفوذ نیستند، بیایید نگاهی به وظایفی بیندازیم که محصولات آنتیویروس مدرن انجام میدهند:کشف الگوهای مخرب شناختهشده و رفتارهای بد در برنامههاکشف الگوهای مخرب شناختهشده در اسناد و صفحات وبکشف الگوهای مخرب شناختهشده در بستههای شبکهتلاش برای سازگاری و کشف رفتارها یا الگوهای بد جدید بر اساس تجربه با موارد شناختهشده قبلی
ممکن است متوجه شده باشید که واژه «شناختهشده» در هر یک از این وظایف استفاده شده است. محصولات آنتیویروس راهحلهای غیرقابل نفوذی برای مقابله با بدافزار نیستند، زیرا یک محصول آنتیویروس نمیتواند چیزی را که ناشناخته است شناسایی کند. مطالب بازاریابی محصولات مختلف آنتیویروس ممکن است کاربران عادی را به این باور برساند که از همه چیز محافظت میشوند، اما متأسفانه این موضوع بههیچوجه درست نیست. صنعت آنتیویروس بر اساس الگوهای بدافزار شناختهشده بنا شده است؛ یک محصول آنتیویروس نمیتواند تهدیدهای جدید و ناشناخته را شناسایی کند، مگر اینکه بر اساس الگوهای قدیمی و شناختهشده (چه رفتاری و چه ایستا) باشند، صرفنظر از آنچه صنعت آنتیویروس تبلیغ میکند.

ویژگیهای آنتیویروس

همه محصولات آنتیویروس مجموعهای از ویژگیهای مشترک دارند، بنابراین مطالعه یک سیستم به درک سیستم دیگر کمک میکند. فهرست زیر شامل برخی از ویژگیهای رایج موجود در محصولات آنتیویروس است:

■ قابلیت اسکن فایلهای فشرده و فایلهای اجرایی بستهبندیشده

■ ابزارهایی برای انجام اسکن فایل یا پوشه بهصورت درخواستی یا بلادرنگ

■ یک درایور محافظت از خود برای جلوگیری از حمله بدافزار به خود آنتیویروس

■ قابلیتهای فایروال و بازرسی شبکه

■ ابزارهای خط فرمان و رابط گرافیکی

■ یک دیمن یا سرویس

■ یک کنسول مدیریتی


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

ویژگیهای پایه

یک محصول آنتیویروس برای قابل استفاده بودن باید برخی ویژگیهای پایه را داشته باشد و الزامات خاصی را برآورده کند. برای مثال، یکی از الزامات اساسی این است که اسکنر و هسته آنتیویروس سریع باشند و حافظه کمی مصرف کنند.
استفاده از زبانهای بومیبیشتر موتورهای آنتیویروس (بهجز نرمافزار قدیمی Malwarebytes که یک محصول آنتیویروس کامل نبود) با زبانهای غیرمدیریتشده یا بومی مانند C، C++ یا ترکیبی از هر دو نوشته میشوند. موتورهای آنتیویروس باید تا حد امکان سریع اجرا شوند، بدون اینکه کارایی سیستم را کاهش دهند. زبانهای بومی این الزامات را برآورده میکنند، زیرا زمانی که کد کامپایل میشود، بهصورت بومی و با حداکثر سرعت روی پردازنده میزبان اجرا میشود. در مورد نرمافزارهای مدیریتشده، کد کامپایلشده به قالب بایتکد تبدیل میشود و برای اجرا به یک لایه اضافی نیاز دارد: یک مفسر ماشین مجازی که در هسته آنتیویروس تعبیه شده و نحوه اجرای بایتکد را میداند.
برای مثال، فایلهای DEX اندروید، جاوا و کدهای مدیریتشده .NET همگی برای اجرای بایتکد کامپایلشده به نوعی ماشین مجازی نیاز دارند. این لایه اضافی همان چیزی است که زبانهای بومی را نسبت به زبانهای مدیریتشده برتر میکند. با این حال، نوشتن کد با استفاده از زبانهای بومی معایب خود را دارد. کدنویسی با آنها دشوارتر است و احتمال نشت حافظه و منابع سیستم، ایجاد خرابی حافظه (مانند سرریز بافر، استفاده پس از آزادسازی، آزادسازی دوباره) یا وارد کردن خطاهای برنامهنویسی که میتوانند پیامدهای امنیتی جدی داشته باشند، بیشتر است. نه C و نه C++ هیچ سازوکاری برای محافظت در برابر خرابیهای حافظه مانند آنچه زبانهای مدیریتشدهای مانند .NET، Python و Lua ارائه میدهند، ندارند. فصل ۳ آسیبپذیریها در تجزیهکنندهها را توضیح میدهد و نشان میدهد چرا این موضوع رایجترین منبع خطا در نرمافزارهای آنتیویروس است.

اسکنرها

یکی دیگر از ویژگیهای رایج محصولات آنتیویروس، اسکنر است که میتواند یک اسکنر درخواستی با رابط گرافیکی یا خط فرمان باشد. از چنین ابزارهایی زمانی استفاده میشود که کاربر تصمیم میگیرد مجموعهای از فایلها، پوشهها یا حافظه سیستم را بررسی کند. همچنین اسکنرهای هنگام دسترسی وجود دارند که معمولاً «مقیم» یا «بلادرنگ» نامیده میشوند. اسکنر مقیم فایلهایی را که توسط سیستمعامل یا برنامههای دیگر (مانند مرورگرهای وب) مورد دسترسی، ایجاد، ویرایش یا اجرا قرار میگیرند تحلیل میکند؛ این کار برای جلوگیری از آلوده شدن فایلهای اسناد و برنامهها توسط ویروسها یا جلوگیری از اجرای فایلهای بدافزار شناختهشده انجام میشود.
اسکنر مقیم یکی از جالبترین مؤلفهها برای حمله است؛ برای مثال، یک نقص در تجزیهکننده اسناد Microsoft Word میتواند پس از دانلود یک سند Word مخرب، اسکنر مقیم را در معرض اجرای کد دلخواه قرار دهد (حتی اگر کاربر فایل را باز نکند). یک نقص امنیتی در کد تجزیهکننده پیامهای ایمیل آنتیویروس نیز ممکن است هنگام دریافت یک ایمیل جدید با پیوست مخرب، و زمانی که فایلهای موقت روی دیسک ایجاد و توسط اسکنر هنگام دسترسی تحلیل میشوند، باعث اجرای کد مخرب شود. هنگامی که این نقصها فعال میشوند، میتوان از آنها بهعنوان یک حمله محرومسازی از سرویس استفاده کرد که باعث کرش کردن برنامه آنتیویروس یا ورود آن به یک حلقه بیپایان میشود و در نتیجه آنتیویروس بهطور موقت یا دائمی از کار میافتد تا زمانی که کاربر آن را مجدداً راهاندازی کند.

امضاها

اسکنر هر محصول آنتیویروس با استفاده از مجموعهای از امضاها فایلها یا بستههای شبکه را جستوجو میکند تا مشخص کند آیا آنها مخرب هستند یا نه؛ همچنین به هر الگو یک نام اختصاص میدهد. امضاها الگوهای شناختهشده فایلهای مخرب هستند. برخی از امضاهای رایج و نسبتاً ساده با استفاده از تکنیکهای تطبیق الگوی ساده شناسایی میشوند (برای مثال، یافتن یک رشته خاص مانند رشته EICAR)، یا با استفاده از CRCها (چِکسامها) یا هشهای MD5. اتکا به هشهای رمزنگاریشدهای مانند MD5 فقط برای یک فایل مشخص کار میکند (زیرا هش رمزنگاریشده تلاش میکند فقط همان فایل را شناسایی کند)، در حالی که امضاهای مبتنی بر منطق فازی، مانند زمانی که الگوریتم CRC روی بخشهای خاصی از داده اعمال میشود (بهجای هش کردن کل فایل)، میتوانند فایلهای متنوعتری را شناسایی کنند.
محصولات آنتیویروس معمولاً انواع مختلفی از امضاها دارند، همانطور که در فصل ۸ توضیح داده شده است. این انواع امضا از CRCهای ساده تا الگوهای ابتکاری نسبتاً پیچیدهای متغیر هستند که بر اساس ویژگیهای متعدد سرآیند PE، پیچیدگی کد در نقطه ورود فایل اجرایی و آنتروپی کل فایل یا بخشی از بخشها یا سگمنتهای فایل اجرایی بنا شدهاند. گاهی اوقات امضاها همچنین بر اساس بلاکهای پایهای هستند که هنگام انجام تحلیل کد از نقطه ورود فایلهای اجرایی تحت بررسی کشف میشوند، و موارد دیگر از این دست.
هر نوع امضا مزایا و معایب خود را دارد. برای مثال، برخی امضاها بسیار خاص هستند و احتمال مثبت کاذب در آنها کمتر است (زمانی که یک فایل سالم بهعنوان بدافزار شناسایی میشود)، در حالی که برخی دیگر بسیار پرریسک هستند و میتوانند فهرست بزرگی از مثبتهای کاذب ایجاد کنند. تصور کنید، برای نمونه، امضایی که کلمه Microsoft را در هر فایلی که با بایتهای MZ\x90 شروع میشود پیدا کند. این کار بدون توجه به اینکه فایل واقعاً بدافزار باشد یا نه، باعث ایجاد تعداد زیادی مثبت کاذب میشود. امضاها باید با دقت بسیار زیادی ایجاد شوند تا از مثبتهای کاذب، مانند نمونهای که در شکل ۱-۱ نشان داده شده است، یا منفیهای واقعی جلوگیری شود (زمانی که کد بدافزار واقعی بهعنوان سالم شناسایی میشود).

فشردهسازها و آرشیوها

یکی دیگر از اجزای کلیدی هر هسته آنتیویروس، پشتیبانی از فرمتهای فایل فشرده یا آرشیو شده است: ZIP، TGZ، 7z، XAR و RAR، تنها بهعنوان چند نمونه. آنتیویروسها باید قادر باشند تمام فایلهای داخل هر فایل فشرده یا آرشیو شده، و همچنین جریانهای فشرده در فایلهای PDF و دیگر فرمتها را باز کرده و مرور کنند.
از آنجا که هستههای آنتیویروس باید از این تعداد زیاد فرمت فایل پشتیبانی کنند، اغلب آسیبپذیریها در کدی پیدا میشوند که با این تنوع ورودیها سر و کار دارد.
این کتاب به بررسی آسیبپذیریهای مختلفی میپردازد که محصولات آنتیویروس متفاوت را تحت تأثیر قرار میدهند.

بازکنندهها

بازکننده یک روال یا مجموعهای از روالهاست که برای باز کردن فایلهای اجرایی محافظتشده یا فشرده طراحی شدهاند. بدافزارها در قالب فایلهای اجرایی معمولاً با استفاده از فشردهسازها و محافظهای در دسترس عموم یا بستهکنندههای اختصاصی (که هم بهصورت قانونی و هم غیرقانونی بهدست میآیند) بستهبندی میشوند. تعداد بستهکنندههایی که هسته یک آنتیویروس باید پشتیبانی کند حتی از تعداد فشردهسازها و آرشیوها هم بیشتر است و تقریباً هر ماه با ظهور بستهکنندههای جدیدی که برای پنهان کردن منطق بدافزارهای جدید استفاده میشوند، افزایش مییابد.
برخی ابزارهای بستهکننده، مانند UPX (Universal Unpacker)، تنها فشردهسازی سادهای اعمال میکنند. باز کردن نمونههایی که با UPX فشرده شدهاند کاری بسیار ساده و سرراست است. در مقابل، بستهکنندهها و محافظهای نرمافزاری بسیار پیچیدهای وجود دارند که کد مورد نظر را به بایتکد تبدیل کرده و سپس یک یا چند ماشین مجازی با تولید تصادفی را به داخل فایل اجرایی تزریق میکنند تا کد اصلیای که بدافزار نوشته است اجرا شود. حذف این لایه مجازیسازی و آشکار کردن منطق بدافزار کاری بسیار دشوار و زمانبر است.
برخی بستهکنندهها را میتوان با استفاده از شبیهساز پردازنده در هسته آنتیویروس باز کرد (مولفهای که در بخشهای بعدی بررسی میشود)؛ برخی دیگر صرفاً با روشهای ایستا باز میشوند. انواع پیچیدهتر را میتوان با ترکیبی از هر دو تکنیک باز کرد: استفاده از شبیهساز تا یک لایه مشخص و سپس بهکارگیری یک روال ایستا که وقتی برخی مقادیر مشخص هستند (مانند اندازه داده رمزگذاریشده، الگوریتم مورد استفاده، کلید و غیره) سریعتر از شبیهساز عمل میکند.
همانند فشردهسازها و آرشیوها، بازکنندهها نیز یکی از حوزههای بسیار رایج برای بررسی هنگام جستوجوی آسیبپذیریها در نرمافزارهای آنتیویروس هستند. فهرست بستهکنندههایی که باید پشتیبانی شوند بسیار عظیم است؛ برخی از آنها تنها در جریان یک کارزار خاص بدافزاری استفاده میشوند، بنابراین احتمال دارد کد مربوطه یکبار نوشته شده و دیگر هرگز بررسی یا ممیزی نشود. فهرست بستهکنندههای مورد پشتیبانی هر سال بزرگتر میشود.

شبیهسازها

بیشتر هستههای آنتیویروس موجود در بازار از تعدادی شبیهساز پشتیبانی میکنند؛ تنها استثنا ClamAV است. رایجترین شبیهساز در هستههای آنتیویروس، شبیهساز Intel x86 است. برخی محصولات پیشرفته آنتیویروس امکان پشتیبانی از شبیهسازهای AMD64 یا ARM را نیز فراهم میکنند. شبیهسازها تنها به پردازندههای معمولی مانند Intel x86، AMD64 یا ARM محدود نمیشوند؛ بلکه شبیهسازهایی برای برخی ماشینهای مجازی نیز وجود دارد. برای مثال، برخی شبیهسازها برای بررسی بایتکد جاوا، بایتکد Android DEX، جاوااسکریپت و حتی VBScript یا Adobe ActionScript طراحی شدهاند.
اثر انگشتبرداری یا دور زدن شبیهسازها و ماشینهای مجازی مورد استفاده در محصولات آنتیویروس کار آسانی است؛ تنها کافی است برخی ناهماهنگیها را اینجا و آنجا پیدا کنید. برای نمونه، در مورد شبیهساز Intel x86، بعید است ـ اگر نگوییم غیرممکن ـ که توسعهدهندگان هسته آنتیویروس تمام دستورالعملهایی را که پردازندههای واقعی مورد شبیهسازی پشتیبانی میکنند، دقیقاً به همان شکلی پیادهسازی کرده باشند که سازندگان آن پردازندهها انجام دادهاند. برای مؤلفههای سطح بالاتری که از شبیهساز استفاده میکنند، مانند محیطهای اجرایی فایلهای ELF یا PE، احتمال پیادهسازی کامل محیط سیستمعامل یا تمام APIهای ارائهشده توسط سیستمعامل حتی کمتر است. بنابراین یافتن راههای متعدد برای فریب دادن شبیهسازها و اثر انگشتبرداری از آنها بسیار آسان است.
در این کتاب، تکنیکهای متعددی برای دور زدن شبیهسازهای آنتیویروس و همچنین روشهای اثر انگشتبرداری از آنها بررسی شده است. بخش سوم این کتاب به نوشتن اکسپلویت برای یک موتور آنتیویروس مشخص میپردازد.

فرمتهای فایل متفرقه

توسعه یک هسته آنتیویروس بسیار پیچیده است. در بخشهای قبلی، برخی از ویژگیهای مشترک میان هستههای آنتیویروس بررسی شد و میتوان میزان زمان و تلاشی را که برای پشتیبانی از این ویژگیها لازم است تصور کرد. با این حال، در مورد هسته آنتیویروس وضعیت حتی بدتر است؛ هسته باید از فهرست بسیار طولانیای از فرمتهای فایل پشتیبانی کند تا بتواند اکسپلویتهای جاسازیشده در فایلها را شناسایی کند. برخی از فرمتهای فایلی که به ذهن میرسند (بهجز فشردهسازها و آرشیوها) عبارتاند از: کانتینرهای OLE2 (اسناد Word یا Excel)؛ صفحات HTML، اسناد XML و فایلهای PDF؛ فایلهای راهنمای CHM و فرمتهای قدیمی Microsoft Help؛ فایلهای اجرایی PE، ELF و MachO؛ فرمتهای تصویری JPG، PNG، GIF، TGA و TIFF؛ فرمتهای آیکن ICO و CUR؛ فرمتهای صوتی و ویدیویی MP3، MP4، AVI، ASF و MOV؛ و موارد دیگر.
هر بار که یک اکسپلویت برای یک فرمت فایل جدید ظاهر میشود، یک مهندس آنتیویروس باید سطحی از پشتیبانی برای آن فرمت فایل اضافه کند. برخی فرمتها آنقدر پیچیده هستند که حتی نویسنده اصلی آنها نیز ممکن است در پردازش صحیحشان دچار مشکل شود؛ دو نمونه از این موارد، مایکروسافت و فرمتهای فایل آفیس آن، و شرکت ادوبی و فرمت PDF آن هستند. بنابراین چرا باید انتظار داشت که توسعهدهندگان آنتیویروس بهتر از نویسنده اصلی با این فرمتها برخورد کنند، در حالی که احتمالاً هیچ دانش قبلیای درباره این فرمت فایل ندارند و ممکن است مجبور به انجام مهندسی معکوس شوند؟ همانطور که میتوان حدس زد، این بخش خطاپذیرترین ناحیه در هر نرمافزار آنتیویروس است و برای مدت طولانی نیز چنین باقی خواهد ماند.

ویژگیهای پیشرفته

بخشهای بعدی برخی از رایجترین ویژگیهای پیشرفتهای را بررسی میکنند که توسط محصولات آنتیویروس پشتیبانی میشوند.
فیلترهای بسته و فایروالهااز اواخر دهه ۱۹۹۰ تا حدود سال ۲۰۱۰، مشاهده نوع جدیدی از بدافزارها به نام کرمها رایج بود که از یک یا چند آسیبپذیری راه دور در برخی محصولات نرمافزاری هدف سوءاستفاده میکردند. گاهی این کرمها تنها با استفاده از ترکیبهای پیشفرض نام کاربری و رمز عبور، شبکههای اشتراکگذاری فایل ویندوز (CIFS) را آلوده میکردند و خود را با نامهای جذاب کپی میکردند. نمونههای معروف شامل "I love you"، Conficker، Melissa، Nimda، Slammer و Code Red هستند.
از آنجا که بسیاری از کرمها از منابع شبکه برای آلوده کردن رایانهها استفاده میکردند، صنعت آنتیویروس تصمیم گرفت شبکهها را برای ترافیک ورودی و خروجی بررسی کند. برای این منظور، نرمافزارهای آنتیویروس درایورهایی برای تحلیل ترافیک شبکه و فایروالهایی برای مسدود کردن و شناسایی رایجترین حملات شناختهشده نصب کردند. همانند ویژگیهای پیشین، این بخش نیز منبع خوبی برای بروز خطاها است و امروزه کرمها تقریباً منقرض شدهاند. این ویژگی در محصولات آنتیویروس سالهاست بهروزرسانی نشده است؛ در نتیجه، احتمالاً با تعدادی آسیبپذیری مواجه است زیرا عملاً رها شده است. این یکی از سطوح حملهای است که از راه دور در فصل ۱۱ تحلیل شده است.

محافظت از خود

همانطور که نرمافزار آنتیویروس سعی میکند کاربران را از بدافزار محافظت کند، بدافزار نیز سعی میکند خود را از نرمافزار آنتیویروس محافظت کند. در برخی موارد، بدافزار تلاش میکند فرآیندهای محصول آنتیویروس نصبشده را خاتمه دهد تا آن را غیرفعال کند. بسیاری از محصولات آنتیویروس تکنیکهای محافظت از خود را در درایورهای هستهای پیادهسازی میکنند تا عملیاتهای رایج خاتمه دادن فرآیند، مانند فراخوانی ZwTerminateProcess، را مسدود کنند. سایر تکنیکهای محافظت از خود که توسط نرمافزارهای آنتیویروس استفاده میشوند میتوانند بر اساس جلوگیری از فراخوانی openProcess با پارامترهای خاص برای فرآیندهای آنتیویروس یا جلوگیری از فراخوانی WriteProcessMemory باشند، که برای تزریق کد در یک فرآیند خارجی استفاده میشوند.
این تکنیکها معمولاً با درایورهای هستهای پیادهسازی میشوند؛ اما محافظت میتواند در فضای کاربر (userland) نیز اعمال شود. با این حال، اتکا به کدی که در فضای کاربر اجرا میشود یک مدل محافظتی شکستخورده است که از سال ۲۰۰۰ معلوم شده کارایی نداشته است؛ با این وجود، بسیاری از محصولات آنتیویروس هنوز این اشتباه را مرتکب میشوند. محصولات آنتیویروس مختلفی که با این مشکل مواجه هستند، در بخش سوم این کتاب مورد بررسی قرار گرفتهاند.

مقابله با بهرهبرداری

سیستمعاملها، از جمله Windows، Mac OS X و Linux، امروزه ویژگیهای مقابله با بهرهبرداری را ارائه میدهند که با عنوان کاهشدهندههای امنیتی نیز شناخته میشوند؛ مانند تصادفیسازی چیدمان فضای آدرس (ASLR) و جلوگیری از اجرای داده (DEP)، اما این یک توسعه نسبتاً جدید است. به همین دلیل، برخی مجموعههای آنتیویروس راهکارهای مقابله با بهرهبرداری را ارائه میدهند (یا در گذشته ارائه میدادند). برخی تکنیکهای مقابله با بهرهبرداری میتوانند به سادگی اعمال اجباری ASLR و DEP برای تکتک برنامهها و کتابخانههای متصل به فایل اجرایی باشند، در حالی که تکنیکهای دیگر پیچیدهتر هستند، مانند هوکهای فضای کاربر یا فضای هسته برای تعیین اینکه آیا انجام یک عمل خاص برای یک فرآیند مشخص مجاز است یا خیر.
متأسفانه، همانطور که در نرمافزارهای آنتیویروس رایج است، بیشتر جعبهابزارهای مقابله با بهرهبرداری که توسط صنعت آنتیویروس ارائه میشوند، در فضای کاربر و از طریق هوک کردن توابع پیادهسازی شدهاند؛ جعبهابزار مقابله با بهرهبرداری Malwarebytes یکی از این نمونههاست. با ظهور Microsoft Enhanced Mitigation Experience Toolkit (EMET)، بیشتر جعبهابزارهای مقابله با بهرهبرداری پیادهسازیشده توسط صنعت آنتیویروس یا در مقایسه با آن ناقص هستند یا بهروز نیستند، که این موضوع دور زدن آنها را آسان میکند.
در برخی موارد، استفاده از جعبهابزارهای مقابله با بهرهبرداری که توسط برخی شرکتهای آنتیویروس پیادهسازی شدهاند، حتی بدتر از استفاده نکردن از هیچ جعبهابزاری است. یکی از نمونهها Sophos Buffer Overflow Protection System (BOPS) است، که یک پیادهسازی ASLR محسوب میشود. تاویس اورمندی، پژوهشگر پرکار گوگل، کشف کرد که Sophos یک کتابخانه پیوند پویا (DLL) سراسری در سیستم نصب میکرد بدون اینکه ASLR برای آن فعال شده باشد. این DLL سراسری برای اعمال و پیادهسازی یک ASLR ظاهری در سیستمعاملهای فاقد ASLR، مانند Windows XP، به داخل فرآیندها تزریق میشد. نکته طعنهآمیز این است که خود این DLL سراسری بدون پشتیبانی از ASLR کامپایل شده بود؛ در نتیجه، در سیستمعاملهایی که ASLR را ارائه میدهند، مانند Windows Vista، ASLR عملاً غیرفعال میشد، زیرا این DLL از ASLR پشتیبانی نمیکرد.
مشکلات بیشتری درباره پیادهسازی جعبهابزارها در نرمافزارهای آنتیویروس در بخش چهارم این کتاب بررسی شده است.

خلاصه

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


بهطور خلاصه:

در گذشته، زمانی که صنعت آنتیویروس در ابتدای راه خود بود، آنتیویروسها «اسکنر» نامیده میشدند، زیرا از اسکنرهای خط فرمان و یک پایگاه داده امضا تشکیل شده بودند. با تکامل بدافزارها، آنتیویروسها نیز تکامل یافتند. امروزه نرمافزارهای آنتیویروس شامل موتورهای ابتکاری هستند و هدف آنها محافظت در برابر اکسپلویتهای مرورگر، بستههای شبکه، پیوستهای ایمیل و فایلهای اسنادی است.انواع مختلفی از نرمافزارهای مخرب وجود دارد، مانند تروجانها، بدافزارها، ویروسها، روتکیتها، کرمها، دراپرها، اکسپلویتها، شلکد و غیره.نویسندگان بدافزارهای کلاهسیاه با انگیزههایی مانند کسب درآمد مالی و سرقت مالکیت فکری فعالیت میکنند.دولتها نیز در قالب بدافزارهای جاسوسی یا خرابکارانه در نوشتن بدافزار مشارکت دارند. اغلب آنها برای حفاظت از منافع خود بدافزار مینویسند؛ مانند استفاده دولت بحرین از نرمافزار FinFisher برای جاسوسی از مخالفان، یا خرابکاری در زیرساختهای کشورهای دیگر، همانند بدافزار Stuxnet که گفته میشود بهطور مشترک توسط دولتهای ایالات متحده و اسرائیل برای هدف قرار دادن برنامه هستهای ایران نوشته شده است.محصولات آنتیویروس با استفاده از انواع اصطلاحات تبلیغاتی بازاریابی میشوند. این استراتژی بازاریابی میتواند گمراهکننده باشد و به کاربران عادی احساس امنیت کاذب بدهد.نرمافزار آنتیویروس سیستمی است متشکل از هسته یا کرنل که هماهنگی عملکرد میان سایر مؤلفهها را بر عهده دارد: افزونهها، سرویسهای سیستمی، درایورهای فیلتر سیستم فایل، مؤلفههای هستهای آنتیویروس و غیره.آنتیویروس باید سریع اجرا شود. زبانهایی که به کد بومی کامپایل میشوند بهترین انتخاب هستند، زیرا بدون سربار مفسرها (مانند مفسرهای ماشین مجازی) بهصورت بومی روی پلتفرم اجرا میشوند. برخی بخشهای آنتیویروس میتوانند با استفاده از زبانهای مدیریتشده یا تفسیری نوشته شوند.نرمافزار آنتیویروس از ویژگیهای پایهای مانند هسته یا کرنل، موتور اسکن، امضاها، فشردهگشاها، شبیهسازها و پشتیبانی از تجزیه فرمتهای مختلف فایل تشکیل شده است. علاوه بر این، محصولات آنتیویروس ممکن است ویژگیهای پیشرفتهای مانند قابلیتهای بازرسی بستهها، افزونههای امنیتی مرورگر، محافظت از خود و مقابله با بهرهبرداری را نیز ارائه دهند.
فصل بعدی به بررسی مهندسی معکوس هستههای آنتیویروس با هدف انجام تستهای امنیتی خودکار و فازینگ میپردازد. فازینگ تنها یکی از روشهای شناسایی نقصهای امنیتی در آنتیویروسها است.

Telegram: @CaKeegan
Gmail : amidgm2020@gmail.com

windowsویندوزآنتی ویروس
۰
۰
سید عمید قائم مقامی
سید عمید قائم مقامی
برنامه نویسی سیستم ویندوز و مهندسی معکوس و علاقه مند به آموزش.
شاید از این پست‌ها خوشتان بیاید