چکیده
با وجود تلاش های قبلی در زمینه بررسی نرم افزار به صورت دستی و خودکار، سرریزهای بافر هنوز هم در برنامه های در حال استفاده دیده می شود. یک کنترل کننده مرزهای پویا، سرریزی بافر را در نرم افزارهای اشتباه قبل از وقوع تشخیص می دهد و از این طریق مانع حملات مخرب به یکپارچگی سیستم می گردد. آشکارسازهای(دیکدر) سرریز بافر پویا به طور گسترده به دلیل : (1) عدم حفاظت در برابر تمام حملات سرریز بافر، (2) شکستن کد موجود، و یا (3) سربار بالای بیش از حد پذیرفته نشده اند. این مقاله یک دیکدر کاربردی به نام( دیکدر خطای حوزه ی C) ارائه می دهد که مانع بروز هر یک از این معایب می گردد. CRED تمام حملات سرریز بافر را می یابد به طوریکه به طور مستقیم برای مرزهای دسترسی به حافظه آنها را بررسی می کند. بر خلاف اصل referent-object مبتنی بر تکنیک bounds-checking، CRED کد موجود را نقض نمی کند زیرا از یک راه حل جدید برای حمایت از کاربرد برنامه در خارج از مرز آدرس ها استفاده می کند. در نهایت، با محدود کردن حدود بررسی برای رشته ها در یک برنامه، سربار CRED بدون محافظت در آزمایش هایی که ما انجام داده ایم بسیار کاهش یافته است. CRED به عنوان تعمیمی از نسخه کامپایلر GNU C 3.3.1 اجرا شده است. سادگی طرح ما پیاده سازی دقیقی را فراهم کرده است که بر روی بیش از 20 برنامه متن باز، شامل بیش از 1.2 میلیون خط کد C تست شده است. اثربخشی CRED در تشخیص حملات بافر به برنامه ها با آسیب های شناخته شده اثبات گردیده و آن تنها ابزار موجود برای محافظت در برابر 20حمله ی سرریز بافر متفاوت تست شده است[34]. با یافتن سرریزها تنها بر روی رشته ها، یک سربار کمتر از 26٪ برای 14 برنامه و یک سربار تا 130٪ برای شش برنامه باقی مانده تحمیل می گردد، در حالی که کنترل کننده ی مرزهای state-of-the-art توسط Jones و Kelly 60٪ از برنامه ها را متوقف می کنند و آن 12 بار کندتر است. با در اختیار داشتن تکنیک های شناخته شده برای بهینه سازی bounds-checking نسبت به CRED می توان منجر به بهبود بیشتر عملکرد شد.
1-مقدمه
امروزه سرریزی های بافر شایع ترین نوع تهدید امنیتی در سیستم های نرم افزاری هستند و آسیب های تحمیل شده به سرریزیهای بافر، همواره تحت تسلط توصیه هایCERT بوده اند[7]. در سال 2002، 57 درصد از توصیه های امنیتی در همان سال مربوط به آسیب پذیری های امنیتی بوده است. همچنین در اوت 2003، 50 درصد از توصیه های امنیتی صادر شده در همان سال تحت این رده افت کرده اند. علاوه بر این، 50درصد از 60 مورد به شدت آسیب پذیر ارسال شده به CERT / CC توسط خطاهای سرریز بافر در برنامه ها رخ داده است [8]. یک الگوی مشابه نیز در لیست آسیب پذیری های ارسال شده به وب سایت های امنیتی کامپیوتر مانند SecurityFocus [27] و Securiteam [26] قابل مشاهده است. کرم های کامپیوتری مانند Slammer، CodeRed و اخیراBlaster و Welchia دارای آسیب پذیری های سرریز بافر استنتاج شده ای در برنامه ها با میلیاردها دلار هزینه در برابر خسارتهای وارده به انجمن محاسباتی هستند. یک راه حل موثر برای سرریزهای بافر تاثیر قابل توجهی بر بهبود سیستم های محاسباتی ما خواهد داشت.
Abstract
Despite previous efforts in auditing software manually and automatically, buffer overruns are still being discovered in programs in use. A dynamic bounds checker detects buffer overruns in erroneous software before it occurs and thereby prevents attacks from corrupting the integrity of the system. Dynamic buffer overrun detectors have not been adopted widely because they either (1) cannot guard against all buffer overrun attacks, (2) break existing code, or (3) incur too high an overhead. This paper presents a practical detector called CRED (C Range Error Detector) that avoids each of these deficiencies. CRED finds all buffer overrun attacks as it directly checks for the bounds of memory accesses. Unlike the original referent-object based bounds-checking technique, CRED does not break existing code because it uses a novel solution to support program manipulation of out-of-bounds addresses. Finally, by restricting the bounds checks to strings in a program, CRED’s overhead is greatly reduced without sacrificing protection in the experiments we performed. CRED is implemented as an extension of the GNU C compiler version 3.3.1. The simplicity of our design makes possible a robust implementation that has been tested on over 20 open-source programs, comprising over 1.2 million lines of C code. CRED proved effective in detecting buffer overrun attacks on programs with known vulnerabilities, and is the only tool found to guard against a testbed of 20 different buffer overflow attacks[34]. Finding overruns only on strings impose an overhead of less than 26% for 14 of the programs, and an overhead of up to 130% for the remaining six, while the previous state-ofthe-art bounds checker by Jones and Kelly breaks 60% of the programs and is 12 times slower. Incorporating wellknown techniques for optimizing bounds checking into CRED could lead to further performance improvements.
1. Introduction
Buffer overflows are the most common form of security threat in software systems today, and vulnerabilities attributed to buffer overflows have consistently dominated CERT advisories[7]. In the year 2002, 57% of security advisories for the year were related to buffer overflow vulnerabilities. As of August 2003, 50% of the security advisories issued for the year fell under this category. In addition, 50% of the 60 most severe vulnerabilities as posted on CERT/CC were caused by buffer overflow errors in programs[8]. A similar pattern is also observable in vulnerabilities listings posted on computer security websites, such as SecurityFocus[27] and Securiteam[26]. Computer worms such as Slammer, CodeRed, and more recently, Blaster and Welchia have exploited buffer overflow vulnerabilities in programs to inflict billions of dollars worth of damages on the computing community. An effective solution to buffer overruns will have a significant impact in improving the security of our computing systems.
چکیده
1-مقدمه
1-1 پیشینه
1-2مشارکتها
1-3سازمان مقاله
2-محدود کردن استفاده از اشیاء ارجاعی
2-1 طراحی جونز و کلی برای دستیابی به اشاره گرهای خارج از مرزها
2-2 بررسی آدرسهای برون مرزی پیشنهادی
3-سربار زمان اجرا
4-آزمایشات
4-1 برنامه های کاربردی
4-2 سازگاری
4-3 حفاظت
4-4 عملکرد
5- کار مرتبط
5-1 روش های تجزیه و تحلیل استاتیک
5-2 روش های تحلیل پویا
5-3 ترکیب تجزیه و تحلیل ایستا و پویا
6- نتیجه گیری
Abstract
1. Introduction
1.1. Background
1.2. Contributions
1.3. Paper Organization
2. Bounds Checking Using Referent Objects
2.1. Jones and Kelly’s Design for Handling Outof-bounds Pointers
2.2. Proposed Out-of-Bound Addresses Handling
3. Run-time Overhead
4. Experiments
4.1. Application Programs
4.2. Compatibility
4.3. Protection
4.4. Performance
5. Related Work
5.1. Static Analysis Approaches
5.2. Dynamic Analysis Approaches
5.3. Combination of Static and Dynamic Analysis
6. Conclusions