Table of Contents
نقش حیاتی مهندسی معکوس و Obfuscation در حفاظت از نرم افزار
در چشم انداز دیجیتال امروز، مالکیت معنوی نرم افزار نشان دهنده میلیاردها دلار در R&D، مزیت رقابتی و دانش اختصاصی است که محافظت از این دارایی ها از تجزیه و تحلیل غیر مجاز، جمع آوری و دستکاری یک اولویت اصلی برای توسعه دهندگان و تیم های امنیتی است - مهندسی معکوس و غفلت - حساسیت در قلب این مبارزه درک چگونه مهندسی معکوس کار می کند، و چگونه تکنیک های اساسی برای ساخت و ساز آن ها - می تواند تلاش های عملی را مختل کند.
درک مهندسی معکوس: لنز ضد افسردگی
مهندسی معکوس فرایند رمزگشایی یک محصول نرم افزار برای کشف طراحی، معماری و منطق آن است، در حالی که استفاده های قانونی در تحقیقات امنیتی، همکاری و بازیابی سیستم میراث است، همچنین مهاجمان روش اولیه استفاده برای سرقت الگوریتم ها، دور زدن مجوز، کشف آسیب پذیری و یا تزریق بدافزار است.
انواع مهندسی معکوس
مهندسی معکوس به چندین دسته تقسیم می شود، هر کدام لایه های مختلف یک برنامه را نشان می دهند. سه مورد رایج ترین آنها تجزیه و تحلیل استاتیک، تجزیه و تحلیل پویا و بازرسی باینری هستند.
تحلیل استاتیک
تجزیه و تحلیل استاتیک کد یا باینری را بدون اجرای آن بررسی می کند.ابزارهایی مانند حذف (FLT:0IDA Pro، ]Ghidra [ و کدگذاری جاوا2 کد را به مونتاژ یا کد نویسی سطح بالاتر متصل می کند. مهاجمین از این برای نقشه برداری توابع، رشته ها، و کنترل جریان با استفاده از تجزیه و تحلیل های حساس جاوا استفاده می کنند.com
تحلیل دینامیک Dynamic Analysis
تجزیه و تحلیل پویا نرم افزار را به عنوان اجرا می کند. Debuggers مانند x64dbg، GDB و WinDbg اجازه می دهد مهاجمان از طریق دستورالعمل ها، بررسی حافظه و تغییر ارزش های ثبت نام در زمان واقعی سقوط می کنند. Sandboxing و ابزار فازی نیز تحت این چتر قرار می گیرند، زیرا آنها ورودی های غیر منتظره برای کشف آسیب پذیری های مبتنی بر تصادف را برای دفاع از تجزیه و تحلیل پویا، توسعه دهندگان می توانند اصلاحات ضد تقلب و یا زمان شکستن را اجرا کنند.
بازرسی دودویی و نظارت بر رفتار
فراتر از تجزیه و تحلیل کد، دشمنان ممکن است منابع باینری، فایل های پیکربندی جاسازی شده یا انتشار جانبی کانال (به عنوان مثال، مصرف برق یا الگوهای زمان بندی) را بررسی کنند، ابزارهایی مانند Frida قادر به اجرای اسکریپت زمان برای توابع قلاب و داده های رهگیری هستند. این سطح بازرسی در DRM دور زدن و تقلب برای بازی ها رایج است.
هنر Obfuscation: چگونه مهندسی معکوس را متوقف کنیم
حذف کد را به یک فرم عملکردی تبدیل می کند اما انسان دوستانه است.هدف این است که هزینه تجزیه و تحلیل را بالا ببرد تا مهاجم بتواند به یک هدف ساده تر برسد.
نام: Obfuscation و Symbol barping
ساده ترین شکل از obfuscation تغییر نام کلاس، حذف روش ها، زمینه ها و متغیرهای محلی از نام های معنی دار مانند به کوتاه، استفاده مجدد، و یا حروف گیج کننده مانند ، ، ، ابزار مدرن برای .NET (Confuser، React.NET) و جاوا (FMaster) برنامه یکپارچه سازی کامل از این نام معنایی را به طور خودکار بازسازی می کند.
کنترل جریان تخلیه
کنترل جریان اشباع جریان جریان منطقی یک برنامه را در حالی که حفظ خروجی آن شامل:
- پیش بینی: قرار دادن شاخه های مشروط که همیشه به ارزش شناخته شده ارزیابی می شوند، اما دشوار است به طور ثابت (به عنوان مثال، که در آن همیشه 2)، این ترفندهای به نشان دادن مسیرهای کد غیر قابل دسترس است.
- جریان جریان تخت: تبدیل حلقه ها و شرایط به یک الگوی ماشین دولتی با یک متغیر فرستنده، و ایجاد منطق اصلی شاخه تقریبا غیر ممکن است دنبال کنید.
- کد Spaghettification: ترکیب چندین مسیر کد با استفاده از بیانیه ها یا پرش های غیرمستقیم، ایجاد یک نمودار درهم تنیده که ابزار تجزیه و تحلیل مبتنی بر گراف را شکست می دهد.
رشته و رمزگذاری داده ها
رشته ها اغلب اطلاعات حساس مانند نقاط انتهایی API، کلیدهای رمزگذاری، پیام های خطا و منطق مجوز را افشا می کنند. obfuscator تمام رشته های سخت کد شده را در زمان ساخت و رمزگشایی آنها را در زمان اجرا درست قبل از استفاده از آن رمزگشایی می کند. برخی از ابزارها همچنین رمزگشایی را در چندین تابع تقسیم می کنند و از کلیدهای پلیمورفیک استفاده می کنند که هر بار کد بازسازی شده است این مانع از جستجو های ساده و پیچیده برای اجرای یک کد مهاجم می شود.
کد مجازی سازی و بسته بندی
برای دارایی های با ارزش بالا، مجازی سازی کد یک گام جلوتر می رود: کد اصلی یا کد ماشین با دستورالعمل های سفارشی کد رمز گذاری شده توسط یک مترجم جاسازی شده جایگزین شده است. مترجم خود را گمراه می کند، بنابراین مهاجم باید به عنوان فرمت بایت کد و ماشین مجازی، به طور مشابه استفاده از آن را معکوس کند.
تعادل امنیت، عملکرد و حفظ قابلیت
حذف کردن رایگان نیست.هر تحول اضافه می کند سربار زمان - دستورالعمل های اضافی برای پیش بینی های مبهم، تماس های رمزگشایی، یا حلقه های ارسال ماشین مجازی است: اگر بیش از حد، برنامه تبدیل به سست، اشکال زدایی درون گرا می شود دردناک می شود، و گزارش های تصادف غیر قابل تشخیص است.
- تنظیم مسیر گرم خود را: obfuscate تنها بخش هایی از کد که شامل مالکیت فکری هسته ای یا منطق چک مجوز، در حالی که ترک I / O، UI، و کد پردازش داده ها به آرامی مبهم.
- یک نقشه نماد را نگه دارید: یک نقشه از نام های مبهم را به نام های اصلی در یک مکان امن و آفلاین ذخیره کنید، این به تیم های پشتیبانی می کند تا رد پای از سقوط مشتری را بدون افشای نقشه برداری رمزگشایی کنند.
- به طور کامل تست: Obfuscation می تواند اشکالات ظریف، به ویژه در کد بازتاب-heavy (به عنوان مثال، سریال سازی، تزریق) را معرفی کند.
مفاهیم قانونی و اخلاقی مهندسی معکوس
مهندسی معکوس در یک منطقه خاکستری وجود دارد.در ایالات متحده، قانون کپی رایت هزاره دیجیتال [DMCA] مانع از دور زدن اقدامات تکنولوژیکی است که دسترسی به کارهای کپی رایت را کنترل می کند، با استثنائات محدود برای تحقیقات امنیتی و قابلیت همکاری، بسیاری از موافقت نامه های مجوز نرم افزار به صراحت مهندسی معکوس را ممنوع می کند، اما محققان امنیتی قانونی اغلب به کشف آسیب پذیری های طولانی مدت اعتماد دارند، در حالی که این موارد را به عنوان یک استراتژی های جلوگیری از آنها استفاده نمی کنند، به عنوان یک مانع از نقض قوانین جلوگیری از افشای امنیت می شود.
بهترین روش ها برای محافظت از دارایی های نرم افزار
هیچ تکنیک واحدی حفاظت کامل را ارائه نمی دهد.یک رویکرد لایه ای شامل روش های متعدد مبهم با امنیت عملیاتی است:
- Adopt یک چرخه توسعه امن (SDL): مدل سازی تهدید و بررسی کد برای شناسایی که کدام بخش از پایه کد با ارزش ترین است.
- از ابزار تجاری یا باز منبع استفاده کنید: ابزارهایی مانند ProGuard (Android/Java)، ConfuserEx (C#)، و Obfuscator-VM (کد داخلی) برای نیازهای شرکت، در نظر گرفتن VM یا Arxan تست شده اند.
- Combine با منطق سرور: هرگز تنها به کد سمت مشتری برای مجوز یا الگوریتم های انتقادی تکیه نمی کند.
- چک های زمان اجرا: به طور منظم تأیید یکپارچگی کد با بررسی محاسبات از توابع حیاتی در حافظه. Detect , انحلال طلبان و محیط های ریشه با کتابخانه های ضدamper قابل اعتماد.
- پیش از پاسخ: اگر نرم افزار شما شکسته یا ساختگی باشد، یک برنامه برای بازسازی کلید، فشار به روز رسانی های اجباری، و یا اصلاح طرح obfuscation.
نتیجه گیری
مهندسی معکوس و سانسور دو طرف از همان سکه هستند. ابزارهای تجزیه و تحلیل منبع باز و مهاجمان ماهر همیشه وجود دارند، محافظت کامل را غیرممکن می کند، با استفاده از یک دفاع لایه که نام obfuscation، کنترل تحولات جریان، رمزگذاری داده ها و کد مجازی سازی را ترکیب می کند، شما می توانید به طور چشمگیری تلاش لازم برای حمله به نرم افزار خود را افزایش دهید تا از تکنیک های امنیتی ضروری آگاه باشید، و مطمئن شوید.