یک روش ترکیبی برای محافظت از نرمافزار از طریق مبهم سازی کد
/علیرضا محمدبکلو
: مهندسی برق و کامپیوتر
، ۱۳۹۴
، راشدی
چاپی
کارشناسی ارشد
مهندسی کامپیوتر گرایش نرمافزار
۱۳۹۴/۱۱/۱۷
تبریز
امنیت نرمافزار یکی از شاخههای مهم در صنعت فناوری اطلاعات است .توجه زیادی که به امنیت نرمافزار در دو حوزه، امنیت اطلاعات) حفظ محرمانگی، جامعیت و دسترس پذیری (و تجارت نرمافزار میشود، اهمیت و ضرورت آن را نشان میدهد .به طور کلی حملات بر روی نرمافزار به سه دسته تقسیم میشود :مهندسی معکوس مخرب، دزدی نرمافزار و دستکاری نرمافزار .در حمله مهندسی معکوس مخرب، برنامه اجرایی به یک نمایش انتزاعی سطح بالاتر برگردانده میشود .این عمل، باعث آشکار شدن عملکرد، منطق و نقاط ضعف نرمافزار برای حمله کننده میشود .این نوع حملات به دو صورت ایستا و پویا انجام میگیرند .در نوع ایستا حمله کننده به صورت دستی نرمافزار را تحلیل کرده و در نوع پویا، حمله کننده با استفاده از ابزارهای تحلیل خودکار و روالهایی که از قبل ایجاد کرده، برنامه را تحلیل و عملکرد آن را کشف میکند .توسعه دهندگان برای مقابله با حمله مهندسی معکوس، تکنیک مبهم سازی کد را بکار میگیرند .درمبهم سازی کد، تمام کد یا قطعه کدی که نقش مهمی در نرمافزار دارد، در سطوح مختلف کد) کدمنبع، کدمیانی، کد ماشین(، مبهم شده تا خوانایی و عملکرد آن مخفی شود .کد مبهم شده همان عملکرد کد اصلی را خواهد داشت .این تکنیک از فلسفه امنیت از طریق ابهام نشأت میگیرد .برای مقابله با حمله دزدی نرمافزار، تکنیک نشانهگذاری کد، همچنین برای مقابله با حمله دستکاری نرمافزار، از تکنیک اثبات دستکاری، استفاده میشود .در این پایان نامه روش مبهم سازی کد را بررسی خواهیم کرد و یک روش ترکیبی برای مبهم سازی کد ارائه میشود .روش ترکیبی ارائه شده در ۲ مرحله صورت میپذیرد .در مرحله اول مبهم سازی قبل از کامپایل شدن کد انجام میشود .در این مرحله، نرمافزار به بخشهای منطقی تقسیم میشود که هر بخش با چندین الگوریتم متفاوت) با عملکرد یکسان (پیاده سازی شده است .در هر بار اجرای کامپایل شده اعمال نرمافزار یکی از این الگوریتمها به طور تصادفی انتخاب میشود .بنابراین نرمافزار دارای چندین مسیر اجرایی خواهد بود .به این تکنیک انفجار فضای حالت گفته میشود .در مرحله دوم مبهم سازی، در سطح پایین و بعد از کامپایل شدن کد صورت میگیرد .بدین ترتیب که کد کامپایل شده را به عنوان ورودی به ابزار Zelixklassmaster میدهیم .این ابزار ورودی را گرفته و تبدیلهایی مانند، تغییر نام توابع و متغیرها، مبهم سازی جریان کنترلی، رمز کردن رشتهها و مبهم سازی قسمتهای کنترل استثنا را به کد کامپایل شده اعمال میکند .مبهم سازی در مرحله اول باعث افزایش مقاومت نرمافزار در برابر تحلیل پویا و مرحله دوم باعث افزایش مقاومت نرمافزار در برابر تحلیل ایستا میشود .برای ارزیابی، روش ترکیبی ارائه شده را روی یک نمونه برنامه اعمال شده و تاثیر آن را از لحاظ افزایش پیچیدگی نرمافزار و مقدار کد، بررسی شده است .نتایج حاصل نشان میدهد که با اعمال روش ترکیبی مقدار کد نزدیک به ۴ برابر افزایش یافته و همچنین مقدار پیچیدگی در حالت میانگین ۲.۵ برابر و در حالت بیشینه ۵ برابر بیشتر شده است .افزایش پیچیدگی و مقدار کد باعث مقاومتر شدن نرمافزار در برابر حمله مهندسی معکوس میشود ولی در طرف مقابل باعث کاهش کارایی نرمافزار میشود .لذا جهت بهرهوری بیشتر و ایجاد امنیت باید بین این دو یک تعادلی صورت گیرد
Software protection is increasingly becoming an important requirement for industrial software development. Historically, software protection first appeared as attempts at adding license-checking code to computer games, followed by algorithms for white-box cryptography used for digital media piracy protection. Every software vendor should be aware of the potential for man-at-the-end (MATE) attacks against their products and the techniques available to mitigate these attacks. MATE attacks take many forms; they can be achieved through tampering, reverse engineering and cloning. In a tampering attack, the user breaks the integrity of a piece of software, by modifying it in ways not intended by the software vendor. In a malicious reverse engineering attack, the attacker violates the confidentiality rights of the vendor by extracting intellectual property contained in the software, such as algorithms. Finally, in a cloning attack, copyright laws are violated by cracking and distributing illegal copies of the software. Methods for protecting against MATE attacks are variously known as software protection. The software protection problem is fundamentally harder than other security problems. The reason is the wide attack model that software protection researchers and practitioners must compete with; one has to assume an almighty adversary who has full access to the chosen software and hardware and can examine, probe, and modify it at will. For this reason, no piece of software, however well protected, is expected to survive intact in the wild for a long period of time. An example of a very common form of protection against reverse engineering attacks is code obfuscation which modifies a program to make it harder for the adversary to analyze or comprehend. This dissertation aims at evaluating and quantifying the effect of combining different obfuscation techniques. In this study we compare the effects of several obfuscation transformations on Java code. We have selected and combined two of the most newly obfuscation techniques: obfuscating code in high level by Exploding State Space which increases state space of program and obfuscating bytecodes in low level by using Zelixklassmaster Obfuscator which obfuscate control flow of program and encrypt strings inside of code and rename all methods and variables. To evaluate effectiveness of our code obfuscation technique, we measure Potency of obfuscated code by using McCabes cyclocmatic complexity metric. In addition we calculates Cost of obfuscating code based on two metric: Execution Time and Line Of Code. results of this experimentation show that although this hybrid method increase Potency of code,but it also increase cost of code execution and in fact there is a tradeoff between software protection and performance of code