توضیحات
Our societies are becoming increasingly dependent on emerging technologies and connected computer systems that are increasingly trusted to store, process, and transmit sensitive data. While generally beneficial, this shift also raises many security and privacy challenges. The growing complexity and connectivity offers adversaries a large attack surface. In particular, the connection to the Internet facilitates remote attacks without the need for physical access to the targeted computing platforms. Attackers exploit security vulnerabilities in modern software with the ultimate goal of taking control over the underlying computing platforms. There are various causes of these vulnerabilities, the foremost being that the majority of software (including operating systems) is written in unsafe programming languages (mainly C and C++) and by developers who are by-and-large not security experts.
Memory errors are a prominent vulnerability class in modern software: they persist for decades and still are used as the entry point for today’s state-of-theart attacks. The canonical example of a memory error is the stack-based buffer overflow vulnerability, where the adversary overflows a local buffer on the stack, and overwrites a function’s return address. While modern defenses protect against this attack strategy, many other avenues for exploitation exist, including those that leverage heap, format string, or integer overflow vulnerabilities.
Given a memory vulnerability in the program, the adversary typically provides a malicious input that exploits this vulnerability to trigger malicious program actions not intended by the benign program. This class of exploits aims to hijack the control flow of the program and differs from conventional malware, which encapsulates the malicious code inside a dedicated executable that needs to be executed on the target system and typically requires no exploitation of a program bug.
As mentioned above, the continued success of these attacks is mainly attributed to the fact that large portions of software programs are implemented in type-unsafe languages (C, C++, or Objective-C) that do not guard against malicious program inputs using bounds checking, automatic memory management, etc. However, even type-safe languages like Java rely on virtual machines and complex runtimes that are in turn implemented in type-unsafe languages out of performance concerns. Unfortunately, as modern applications grow more complex, memory errors and vulnerabilities will likely continue to exist, with no end in sight.
Regardless of the attacker’s method of choice, exploiting a vulnerability and gaining control over an application’s control flow is only the first step of an attack. The second step is to change the behavior of the compromised application to perform malicious actions. Traditionally, this has been realized by injecting malicious code into the application’s address space, and later executing the injected code. However, with the widespread enforcement of data execution prevention (DEP), such attacks are more difficult to launch today. Unfortunately, the long-held assumption that only code injection posed a risk was shattered with the introduction of code-reuse attacks, such as return-into-libc and return-oriented programming (ROP). As the name implies, code-reuse attacks do not require any code injection and instead repurpose benign code already resident in memory.
Code-reuse techniques are applicable to a wide range of computing platforms: x86-based platforms, embedded systems running on an Atmel AVR processor, mobile devices based on ARM, PowerPC-based Cisco routers, and voting machines deploying a z80 processor. Moreover, the powerfulROP technique is Turing-complete, i.e., it allows an attacker to execute arbitrary malicious code.
In fact, the majority of state-of-the-art run-time exploits leverage code-reuse attack techniques, e.g., against Internet Explorer, Apple QuickTime, Adobe Reader, Microsoft Word, or the GnuTLS library. Even large-scale cyberattacks such as the popular Stuxnet worm, which damaged Iranian centrifuge rotors, incorporated code-reuse attack techniques.
Indeed, even after more than three decades, memory corruption exploits remain a clear and present danger to the security of modern software and hardware platforms. This is why the research community both in academia and industry have invested major efforts in the recent past to mitigate the threat. Various defenses have been proposed and even deployed by Google, Microsoft, Intel, etc. The most prominent defenses are based on enforcement (e.g., Control-Flow Integrity [CFI]) or randomization (also known as software diversity) of certain program aspects. Both types of defenses have distinct advantages and disadvantages. Randomization makes it hard for attackers to chain together their attack gadgets, is efficient, and can be applied to complex software such as web browsers. It can have different levels of granularity, from a simple Address Space Layout Randomization (ASLR) to fine-grained randomization at function or even instruction level. However, randomization requires high entropy and all randomization schemes are inherently vulnerable to information leakage. CFI, on the other hand, provides guarantees that the application does not deviate from the intended program flow, yet it requires a security and efficiency tradeoff: i.e., coarse-grained CFI have been shown to be vulnerable, and fine-grained CFI can be inefficient without hardware support. Researchers have been working on improving these schemes with novel ideas in both software and hardware design. Many proposed defenses have been bypassed by other attacks, generating a large body of literature on this topic.
It seems that the arms race between attackers and defenders continues. Although researchers have raised the bar for adversaries, there are still a number of challenges to tackle against sophisticated attacks. Despite all the recent proposals on various defenses, we cannot claim that the problem is entirely solved. However, our community has gained much insight through recent results on how and to what extent we need to employ certain design principles to significantly reduce the effect of code-reuse attacks.
The main purpose of this book is to provide readers with some of the most influential works on run-time exploits and defenses. We hope that this material will inspire readers and generate new ideas and paradigms.
————————————————————–
ترجمه ماشینی :
جوامع ما به طور فزایندهای به فناوریهای نوظهور و سیستمهای رایانهای متصل وابسته میشوند که به طور فزایندهای برای ذخیره، پردازش و انتقال دادههای حساس مورد اعتماد هستند. اگرچه این تغییر به طور کلی سودمند است، اما چالشهای امنیتی و حریم خصوصی بسیاری را نیز ایجاد میکند. پیچیدگی و اتصال رو به رشد، سطح حمله بزرگی را به دشمنان ارائه می دهد. به طور خاص، اتصال به اینترنت حملات از راه دور را بدون نیاز به دسترسی فیزیکی به پلتفرمهای محاسباتی هدفمند تسهیل میکند. مهاجمان از آسیبپذیریهای امنیتی در نرمافزارهای مدرن با هدف نهایی کنترل پلتفرمهای محاسباتی زیربنایی سوء استفاده میکنند. دلایل مختلفی برای این آسیبپذیریها وجود دارد، مهمترین آنها این است که اکثر نرمافزارها (از جمله سیستمعاملها) به زبانهای برنامهنویسی ناامن (عمدتا C و C++) و توسط توسعهدهندگانی نوشته شدهاند که عمدتاً متخصص امنیت نیستند. خطاهای حافظه یک کلاس آسیبپذیری برجسته در نرمافزار مدرن هستند: آنها برای دههها باقی میمانند و هنوز به عنوان نقطه ورود برای حملات پیشرفته امروزی استفاده میشوند. مثال متعارف یک خطای حافظه، آسیبپذیری سرریز بافر مبتنی بر پشته است، که در آن حریف یک بافر محلی روی پشته را سرریز میکند و آدرس بازگشتی یک تابع را بازنویسی میکند. در حالی که دفاعهای مدرن در برابر این استراتژی حمله محافظت میکنند، بسیاری از راههای دیگر برای بهرهبرداری وجود دارد، از جمله راههایی که از heap، رشته قالببندی یا آسیبپذیریهای سرریز اعداد صحیح استفاده میکنند. با توجه به آسیبپذیری حافظه در برنامه، حریف معمولاً یک ورودی مخرب ارائه میکند که از این آسیبپذیری برای راهاندازی اقدامات برنامه مخربی که توسط برنامه خوشخیم در نظر گرفته نشده است سوء استفاده میکند. هدف این دسته از اکسپلویت ها ربودن جریان کنترل برنامه است و با بدافزار معمولی متفاوت است، که کد مخرب را در یک فایل اجرایی اختصاصی محصور می کند که باید روی سیستم هدف اجرا شود و معمولاً نیازی به سوء استفاده از یک باگ برنامه ندارد. همانطور که در بالا ذکر شد، موفقیت مستمر این حملات عمدتاً به این واقعیت نسبت داده می شود که بخش بزرگی از برنامه های نرم افزاری در زبان های نوع ناامن (C، C++، یا Objective-C) اجرا می شوند که در برابر ورودی های برنامه های مخرب با استفاده از آن محافظت نمی کنند. بررسی کرانهها، مدیریت خودکار حافظه، و غیره. با این حال، حتی زبانهای ایمن از نظر نوع مانند جاوا به ماشینهای مجازی و زمانهای اجرا پیچیده متکی هستند که به نوبه خود در زبانهای ناامن از نظر عملکرد پیادهسازی میشوند. متأسفانه، با پیچیدهتر شدن برنامههای کاربردی مدرن، خطاها و آسیبپذیریهای حافظه به احتمال زیاد همچنان وجود خواهند داشت، بدون اینکه پایانی در چشم باشد. صرف نظر از روش انتخاب مهاجم، بهره برداری از یک آسیب پذیری و به دست آوردن کنترل بر جریان کنترل برنامه تنها اولین مرحله حمله است. مرحله دوم تغییر رفتار برنامه در معرض خطر برای انجام اقدامات مخرب است. به طور سنتی، این امر با تزریق کد مخرب به فضای آدرس برنامه و بعداً اجرای کد تزریق شده محقق میشود. با این حال، با اجرای گسترده پیشگیری از اجرای داده ها (DEP)، انجام چنین حملاتی امروزه دشوارتر است. متأسفانه، این فرض طولانی مدت که تنها تزریق کد باعث ایجاد خطر می شود، با معرفی حملات استفاده مجدد از کد، مانند برنامه نویسی بازگشت به libc و بازگشت گرا (ROP) از بین رفت. همانطور که از نام آن پیداست، حملات استفاده مجدد از کد نیازی به تزریق کد ندارند و در عوض کدهای خوش خیم موجود در حافظه را تغییر می دهند. تکنیکهای استفاده مجدد از کد برای طیف وسیعی از پلتفرمهای محاسباتی قابل استفاده هستند: پلتفرمهای مبتنی بر x86، سیستمهای تعبیهشده که بر روی پردازنده Atmel AVR اجرا میشوند، دستگاههای تلفن همراه مبتنی بر ARM، روترهای سیسکو مبتنی بر PowerPC، و ماشینهای رایگیری که پردازنده z80 را به کار میگیرند. علاوه بر این، تکنیک ROP قدرتمند Turing-complete است، یعنی به مهاجم اجازه میدهد کد مخرب دلخواه را اجرا کند. \ در واقع، اکثر پیشرفتهترین زمانهای اجرا از تکنیکهای حمله استفاده مجدد از کد استفاده میکنند، به عنوان مثال، علیه اینترنت اکسپلورر، Apple QuickTime، Adobe Reader، Microsoft Word یا کتابخانه GnuTLS. حتی حملات سایبری در مقیاس بزرگ مانند کرم محبوب استاکس نت که به روتورهای سانتریفیوژ ایرانی آسیب رساند، تکنیک های حمله با استفاده مجدد از کد را در خود جای داده است. در واقع، حتی پس از بیش از سه دهه، سوء استفادههای تخریب حافظه همچنان یک خطر آشکار و فعلی برای امنیت پلتفرمهای نرمافزاری و سختافزاری مدرن باقی میماند. به همین دلیل است که جامعه پژوهشی چه در دانشگاه و چه در صنعت در گذشته اخیر تلاش های زیادی برای کاهش تهدید انجام داده اند. دفاع های مختلفی پیشنهاد شده و حتی توسط گوگل، مایکروسافت، اینتل و غیره به کار گرفته شده است. برجسته ترین دفاع ها مبتنی بر اجرا (به عنوان مثال، یکپارچگی کنترل جریان [CFI]) یا تصادفی سازی (همچنین به عنوان تنوع نرم افزاری شناخته می شود) برخی از جنبه های برنامه است. هر دو نوع دفاع دارای مزایا و معایب متمایز هستند. تصادفی سازی زنجیره ای کردن ابزارهای حمله خود را برای مهاجمان دشوار می کند، کارآمد است و می تواند برای نرم افزارهای پیچیده مانند مرورگرهای وب اعمال شود. این می تواند سطوح مختلفی از دانه بندی داشته باشد، از تصادفی سازی فضای آدرس ساده (ASLR) تا تصادفی سازی ریز دانه در سطح عملکرد یا حتی دستورالعمل. با این حال، تصادفیسازی به آنتروپی بالا نیاز دارد و همه طرحهای تصادفیسازی ذاتاً در برابر نشت اطلاعات آسیبپذیر هستند. از سوی دیگر، CFI تضمین میکند که برنامه از جریان برنامه مورد نظر منحرف نمیشود، با این حال به یک معاوضه امنیتی و کارایی نیاز دارد: به عنوان مثال، CFI درشت د
tag : دانلود کتاب ادامه مسابقه تسلیحاتی: حملات و دفاع با استفاده مجدد از کد , Download ادامه مسابقه تسلیحاتی: حملات و دفاع با استفاده مجدد از کد , دانلود ادامه مسابقه تسلیحاتی: حملات و دفاع با استفاده مجدد از کد , Download The Continuing Arms Race: Code-Reuse Attacks and Defenses Book , ادامه مسابقه تسلیحاتی: حملات و دفاع با استفاده مجدد از کد دانلود , buy ادامه مسابقه تسلیحاتی: حملات و دفاع با استفاده مجدد از کد , خرید کتاب ادامه مسابقه تسلیحاتی: حملات و دفاع با استفاده مجدد از کد , دانلود کتاب The Continuing Arms Race: Code-Reuse Attacks and Defenses , کتاب The Continuing Arms Race: Code-Reuse Attacks and Defenses , دانلود The Continuing Arms Race: Code-Reuse Attacks and Defenses , خرید The Continuing Arms Race: Code-Reuse Attacks and Defenses , خرید کتاب The Continuing Arms Race: Code-Reuse Attacks and Defenses ,

نقد و بررسیها
هنوز بررسیای ثبت نشده است.