این مقاله انگلیسی در نشریه آی تریپل ای در 16 صفحه در سال 2014 منتشر شده و ترجمه آن 51 صفحه بوده و آماده دانلود رایگان می باشد.
دانلود رایگان مقاله انگلیسی (pdf) و ترجمه فارسی (pdf + word) |
عنوان فارسی مقاله: |
هک کورکورانه
|
عنوان انگلیسی مقاله: |
Hacking Blind
|
دانلود رایگان مقاله انگلیسی |
|
دانلود رایگان ترجمه با فرمت pdf |
|
دانلود رایگان ترجمه با فرمت ورد |
|
مشخصات مقاله انگلیسی و ترجمه فارسی |
فرمت مقاله انگلیسی |
pdf |
سال انتشار |
2014 |
تعداد صفحات مقاله انگلیسی |
16 صفحه با فرمت pdf |
نوع نگارش |
مقاله پژوهشی (Research article) |
نوع ارائه مقاله |
کنفرانس |
رشته های مرتبط با این مقاله |
مهندسی کامپیوتر |
گرایش های مرتبط با این مقاله |
مهندسی نرم افزار – امنیت اطلاعات – برنامه نویسی کامپیوتر |
چاپ شده در مجله (ژورنال)/کنفرانس |
سمپوزیوم امنیت و حریم خصوصی |
کلمات کلیدی |
خرابی کامپیوتر – سرورها – کتابخانه ها – رجیسترها – لینوکس – چیدمان – سوکت ها |
کلمات کلیدی انگلیسی |
Computer crashes – Servers – Libraries – Registers – Linux – Layout – Sockets |
ارائه شده از دانشگاه |
دانشگاه استنفورد |
شناسه دیجیتال – doi |
https://doi.org/10.1109/SP.2014.22 |
لینک سایت مرجع |
https://ieeexplore.ieee.org/document/6956567 |
رفرنس |
دارای رفرنس در داخل متن و انتهای مقاله ✓ |
نشریه |
آی تریپل ای – IEEE |
تعداد صفحات ترجمه تایپ شده با فرمت ورد با قابلیت ویرایش |
51 صفحه با فونت 14 B Nazanin |
فرمت ترجمه مقاله |
pdf و ورد تایپ شده با قابلیت ویرایش |
وضعیت ترجمه |
انجام شده و آماده دانلود رایگان |
کیفیت ترجمه |
مبتدی (مناسب برای درک مفهوم کلی مطلب)
|
کد محصول |
F2304 |
بخشی از ترجمه |
2. تاریخچه مختصری از سرریزهای بافر
سرریزهای بافر یک آسیبپذیری کلاسیک با تاریخچه طولانی در سوء استفادهها هستند [4]. از لحاظ مفهومی، حمله به آنها نسبتا آسان است. بهعنوانمثال، یک برنامه آسیبپذیر ممکن است دادهها را از شبکه خوانده و در یک بافر جای دهد. سپس، با فرض اینکه برنامه فاقد مرزهای بررسی کافی برای محدود کردن اندازه ورودی داده است، مهاجم میتواند در پایان بافر حافظه را مجددا بازنویسی کند. در نتیجه، حالت بحرانی جریان کنترل، مانند بازگشت آدرس یا اشارهگر تابع، میتواند دستکاری کرد. سرریزهای پشته بافر تمایل ویژهای به بازگشت آدرسها به طور ضمنی در نزدیکی حافظه بهدلیل عملکرد فراخوانی دارند. با اینحال، حملاتی که بافر را مورد هدف قرار میدهند عملی میباشند [5].
در روزهای اولیه سرریز بافر پشته، برای یک مهاجم بسیاررایج بود که شامل کدهای مخرب بهعنوان بخشی مورد استفاده در سرریز بافر باشد. در نتیجه، مهاجم میتواند به سادگی آدرس برگشت را به مکانی شناخته شده در مجموعه پشته نگاشت کند و دستورالعملهایی را که در بافر ارائه شدهاند اجرا کند. چنین حملاتی نظیر “تزریق کد” دیگر در ماشینهای معاصر امکانپذیر نیست چرا که پردازندههای مدرن و سیستم عاملها در حال حاضر توانایی علامت زدن صفحات حافظه دادهها بهعنوان غیر قابل اجرا (بهعنوان مثال، NX در x86) را دارند. در نتیجه، اگر یک مهاجم سعی در اجرای کد بر روی پشته داشته باشد، تنها یک استثنا اتفاق خواهد افتاد.
روش های نوآورانه، که با نام برنامهنویسی بازگشتگرا (ROP) شناخته شدهاند [1]، برای دفاع در برابر شکستها بر روی حافظههای غیر قابل اجرا توسعه داده شدهاند. که از طریق ایجاد ارتباط کوتاه با هم کار میکنند که در حال حاضر در فضای آدرس برنامه وجود دارند. چنین قطعه کدهایی، با نام gadgets شناخته میشوند و میتوانند به شکل محاسبات دلخواه ترکیب شوند. در نتیجه، مهاجمان میتوانند از ROP برای بهدست آوردن کنترل برنامه بدون هیچ وابستگی به کد تزریق شده استفاده کنند. گاهی اوقات تغییرات ساده در ROP امکانپذیر است. بهعنوان مثال، با حملات بازگشت به libc، عملکرد یک کتابخانه سطح بالا را میتوان بهعنوان آدرس برگشت استفاده کرد. بهطورخاص، تابع ()system برای مهاجمان مفید است زیرا میتوانند کد دلخواه خود را تنها با یک آرگومان اجرا کنند [6]. این حملات در سیستمهای 32 بیتی که در آن آرگومانها بر روی پشته عمل میکند بسیار مؤثر بودند و در حال حاضر تحت کنترل مهاجم هستند. بر روی سیستمهای 64 بیتی، که در آن آرگومانها بر روی رجیسترها عمل میکند، gadget های اضافی برای ثبت جمعیت مورد نیاز است.
چیدمان تصادفی فضای آدرسدهی(ASLR)، [7] و [8] بهعنوان یک دفاع در برابر حملات سرریز بافر معرفی میشود و با تصادفیسازی محل کد و بخشهای داده در فضای آدرس فرآیند کار میکند. در بسیاری از پیادهسازیهای تصادفی قطعه کد که تنها به کتابخانه اعمال میشوند، تصادفیسازی پر فضای آدرس نیز ممکن است. ASLR یک چالش عمده برای مهاجمان ایجاد میکند چراکه مکانهای آدرس کد (و یا حتی پشته) برای پیشبینی غیرممکن هستند. متاسفانه، بر روی سیستم عامل 32 بیتی، ASLR توسط تعدادی از بیتهای موجود (معمولا 16) برای محدود تصادفی ایجاد میشود. در نتیجه، حملات brute-force کاملا موثر است [9]. با اینحال، بر روی سیستم عامل 64 بیتی بهطور معمول بیت تصادفی بسیاری وجود دارد که باید امکانپذیر باشد. در چنین مواردی، ASLR میتواند استفاده نشود، اما تنها زمانی که همراه با یک آسیبپذیری ناشی از نشت اطلاعات در مورد فضا آدرسدهی باشد، مانند فرمت رشته [10].
علاوه بر فضای آدرس بزرگتر برای ASLR و نیاز به ابزارهای اضافی برای پر کردن آرگومانها، سیستمهای 64بیتی یک عارضه سوم برای حملات هستند. زیرا معماری موجب محدودیت آدرسهای مجازی به 48 بیت میشود، اشارهگر حافظه در سطح کاربر برای بایتهای با ارزش صفر مورد نیاز است. این صفرها موجب ختم اولیه سرریزها با تکیه بر عملیات رشته مانند strcpy میشوند.
Canaries [11] دفاع مشترک در برابر حملات سرریز بافر است. Canaries نمیتوانند از سرریزهای بافر جلوگیری کنند، اما میتوانند سابقه و پایان برنامه را قبل از این که یک مهاجم بر جریان کنترل تاثیر بگذارد شناسایی کنند. مثلا، با پشته canaries، یک مقدار پنهان و نامعلوم، پیش از هر اشارهگر ذخیره شده و آدرس بازگشت تعیین میشود. سپس، هنگامی که یک تابع مجددا فراخوانی میشود، ارزش آن بررسی میشود تا از عدم تغییر آن اطمینان حاصل کند.
این امر میتواند از سرریز بافر پشته به دلیل سوء استفاده جلوگیری کند، زیرا یک مهاجم باید بهدرستی مقادیر پنهان را به منظور استفاده دقیق برنامه از آدرس برگشت بازنویسی کند. بااینحال، فقط بهعنوان ASLR، canaries میتواند از شکست در برابر آسیبپذیریهای اضافی که از نشت اطلاعات در مورد مقادیر پنهان نشات میگیرد مقابله کند. طرح پشته حافظه میتواند یک ایده مهم برای پیادهسازی canaries باشد. یکی از رویکردهای شایع، قرار دادن تمام بافرها در بالای فریم است، بنابراین اگر سرریز اتفاق بیافتد بازنویسی مجدد متغیرها امکانپذیر نخواهد بود [12]. انگیزهی این عمل محافظت از اشارهگر است زیرا گاهی اوقات میتوان آنها را مجددا و به دلخواه بازنویسی استفاده کرد [13]. متاسفانه، canaries یک راه حل مناسب نیست، حتی با اقدامات احتیاطی، گاهی اوقات ساختار یک سرریز بافر میتواند به مهاجم این اجازه را بدهد که به حالت بحرانی به طور مستقیم دسترسی یابد، بهعنوان مثال، اشارهگر ناامنی که در yaSSL اتفاق افتاد [3].
3. آموزش ROP
قبل از بحث در مورد روش کورکورانه ROP، ابتدا با ROP آشنا میشویم. سوء استفاده مدرن به شدت به ROP متکی است. هدف از ROP ساخت یک توالی است که معمولا براساس کد موجود عمل میکند. هنگامی که یک پوسته اجرا میشود، مهاجم میتواند دستورات بیشتری را برای ادامه حمله اجرا کند. شکل 1 shellcode معمولی را نشان میدهد که سوکت مهاجم را به ورودی استاندارد، خروجی، خطا و اجرای یک shell خط لوله میکند.
البته تزریق shellcode دیگر امکانپذیر نیست چرا که این روزها حافظه قابل نوشتن (بهعنوان مثال، پشته) غیرقابل اجرا است، به همین ترتیب ROP بجای آن استفاده میشود. شکل 2 نشان میدهد که چگونه ROP میتواند برای ایجاد shellcode که قبلا در شکل 1 نشان داده شده است استفاده شود. پشته سرریز میکند بهطوریکه آدرس تمام ابزارهای موجود در دنباله هستند. هر ابزار با بازگشت بهطوریکه ابزار بعدی بتواند اجرا شود به پایان میرسد.
در عمل، هر ابزار ROP یک دنباله کوتاه از دستورالعملهای خاتمه دستگاه با بازگشت خواهد بود.
اجرای یک پاسخ سیستم ساده مانند dup2 به چندین ابزار نیاز دارد چرا که آرگومانها از ریجسترها عبود خواهند کرد. شکل 3 ابزارهای مورد نیاز برای dup2 را نشان میدهد. رجیستر RDI و RSI دو آرگومان سیستم فراخوانی، و RAX تعداد تماس سیستم را کنترل میکند. ریجسترها را میتوان با استفاده از ابزارهای pop و قرار دادن مقادیر برای بارگذاری در پشته کنترل کرد. با وصل زنجیروار این ابزارها، shellcode کامل در نهایت ساخته میشود.
|