اکسپلویت (Exploit) چیست و تفاوت آن با پیلود چیست؟

0 584
۵/۵ - (۱۶ امتیاز)

فهرست

در این مقاله قصد داریم در مورد یکی از مفاهیم پرتکرار در حوزه امنیت و مخصوصا نفوذ یعنی مفهوم بهره برداری یا اکسپلویت (Exploit) صحبت کنیم و به بررسی انواع آن بپردازیم.

باگ (‌Bug) چیست؟

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

آسیب پذیری (Vulnerability) چیست؟

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

اکسپلویت (Exploit) چیست؟

حال که درک قابل قبولی نسبت به باگ و آسیب پذیری پیدا کردیم می توانیم به سراغ تعریف اکسپلویت برویم.
اکسپلویت را می توان یک برنامه، قطعه داده یا دنباله ای از فرمان ها در نظر گرفت که به قصد بهره برداری و استفاده از یک آسیب پذیری برای مجبور کردن مولفه آسیب پذیر به رفتاری غیر از آنچه برای آن تعریف شده در نظر گرفت. عموما از یک اکسپلویت برای دسترسی اولیه، ارتقا سطح دسترسی یا Privilege Escalation یا حملات منع سرویس یا داس (DoS) استفاده می شود. برای مثال اگر سرریز بافر یا Buffer Overflow را در نظر بگیرید، هنگامی که بتوانید شل را دریافت کنید می گوییم شما آسیب پذیری را اکسپلویت کرده اید. برای مشاده اکسپلویت هایی که به صورت عمومی در دسترس هستند می توانید به exploit-db مراجعه کنید یا در متاسپلویت (Metasploit) وارد کنید: search exploit.
اکسپلویت ها به دو صورت می توانند توسعه داده شوند: محلی (Local) یا راه دور (Remote).

اکسپلویت محلی (لوکال / Local)

فرض کنید یک متخصص تست نفوذ هستید و نرم افزاری را برای تست نفوذپذیری در اختیار شما قرار داده اند. شما نرم افزار را روی سیستم کاری خود (می تواند یک ماشین مجازی باشد) نصب می کنید و متوجه می شود نرم افزار دارای سرریز بافر است. سعی می کنید آن را اکسپلویت کنید و شل را دریافت کنید. به اکسپلویتی که اینجا مورد استفاده قرار گرفته است یک اکسپلویت محلی یا Local می گوییم چرا که اکسپلویت هیچ قابلیت شبکه ای در خود ندارد و کلیه کارها روی سیستم محلی و بدون استفاده از شبکه انجام شده است. برای مثال اکسپلویت سرریز بافر در این آموزش یک اکسپلویتینگ محلی است. عموما از اکسپلویت محلی برای ارتقا سطح دسترسی یا Privilege Escalation استفاده می شود.

اکسپلویت راه دور (ریموت / Remote)

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

اکسپلویت همان پیلود است؟

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

exploit vs payload

طبیعتا هر اکسپلویت نیاز به یک پیلود و یک پیلود نیز نیاز به یک اکسپلویت دارد. رابطه بین اکسپلویت و پیلود یک رابطه یک به چند است. یعنی برای یک اکسپلویت می توان پیلودهای مختلفی در نظر گرفت.

سخن پایانی

در این مقاله در مورد مفاهیم مختلفی چون باگ، آسیب پذیری و در راس آن ها اکسپلویت صحبت کردیم. همچنین تفاوت بین اکسپلویت و پیلود را نیز تبیین کردیم. پیشنهاد می شود اگر علاقمند به توسعه اکپسلویت هستید حتما کتاب هنر اکسپلویت نویسی (The Art of Exploitation) آقای اریکسون را مطالعه کنید.

درباره ما

ترجنس | thregence.ir
آکادمی ترجنس | edu.thregence.ir
اینستاگرام | instagram.com/thregence
تلگرام | t.me/thregence
یوتوب | https://bit.ly/30mGowo
آپارات | aparat.com/thregence 

ارسال یک پاسخ