چگونگی امن سازی اپلیکیشن های iOS توسط iXGuard

  • نویسنده: پروانه شجاعی
  • تاریخ انتشار: دوشنبه ، ۱۰ مهر ماه ۹۶
  • تعداد بازدید: 1938
  • تعداد نظرها: 0
  • دسته بندی: امنیت برنامه های موبایل

آیا فعال سازی بیت کد امن است؟

یکی از الزامات مهم در استفاده از محصول iXGuard، نرم افزار شرکت GuardSquare جهت  ایمن سازی و حفاظت از برنامه های تحت iOS، ارائه‌ی نسخه‌ی فعال شده ی بیت کد (bitcode-enabled) برنامه ی شما، به عنوان ورودی به این محصول است. برای رفع ابهام در خصوص مفهوم بیت کد و امنیت فعال سازی آن در ساخت نسخ اپلیکیشن ها، اطلاعاتی مفید در این زمینه را در مقاله حاضر، جمع آوری کرده ایم که به سوالات ذیل پاسخ می دهد: بیت کد (bitcode) چیست؟ نسخه ی فعال شده ی بیت کد چیست؟ اپل با بیت کد تعبیه شده در اپلیکیشن چه می کند؟ آیا مفاهیم و الزامات امنیتی در بیت کد های تعبیه شده درنظر گرفته می شوند؟ چرا iXGuard به ساختار فعال شده ی بیت کد جهت حفاظت از برنامه نیاز دارد؟

بیت کد چیست؟

برای درک بهتر مفهوم بیت کد، لازم است یک گام به عقب برداریم و به فرآیند کامپایل یک برنامه نگاهی اجمالی بیندازیم. یک کامپایلر برنامه ای است که سورس کد قابل خواندن برای انسان را پردازش کرده و آن را به زبان ماشین تبدیل می کند (زبان ماشین، زبان قابل فهم توسط یک رایانه یا دستگاه تلفن همراه می باشد، به زبان ساده تر یعنی زبانی که برای سیستم عامل قابل فهم باشد.)

فرآیند کامپایل کردن از سه مرحله ی مجزا تشکیل شده است:

  • کامپایلر، سورس کد را به نوعی کد واسط با نام (IR-Intermediate Representation) تبدیل می کند.
  • ابزار بهینه ساز مجموعه ای از تغییرات بهینه سازی را بر روی IR انجام می دهد تا آن را کوچکتر و به صورت کارآمد تری ارائه دهد، این تغییرات می توانند شامل موارد ذیل گردند:
    • حذف کدهای تکراری
    • پیش محاسبه ی نتایج
    • درون خطی سازی کد ها و غیره

 در این مرحله همان طور که اشاره شد ابزار بهینه ساز به جای سورس کد و یا کد ماشین، از IR استفاده می کند، زیرا این نوع کد واسط به آسانی قابل تفسیر توسط ابزارهای بهینه ساز و یا حتی امنیتی می باشد. 

  • کامپایلر زبان ماشین را بر مبنای IR بهینه شده تولید می کند.

زمانی که در مورد بیت کد صحبت می کنیم، در واقع درباره IR استفاده شده توسط کامپایلر Clang صحبت می کنیم. Clang یک کامپایلر از خانواده زبان C/ C++/ Objective-C می باشد که به طور گسترده ای از فریم ورک LLVM  استفاده می نماید. از سوی دیگر اپل نیز در Xcode برای کامپایل برنامه های iOS و macOS خود از این کامپایلر استفاده می کند.در واقع می توان گفت که بیت کد، مفهومی جدید نیست، زیرا پیش از این نیز در فریم ورک کامپایلر LLVM موجود بوده است. 

ساختار فعال شده ی بیت کد در اپلیکیشن

در سال 2015، اپل گزینه ای را برای تعبیه کردن (Embed) بیت کد در برنامه هایی که با Xcode کامپایل شده بودند، افزود. مطابق با شکل زیرهنگامی که این گزینه غیرفعال است، کامپایلر یک فایل قابل اجرا را که فقط حاوی کد ماشین (کد قابل فهم از سوی سیستم عامل) است، تولید کرده و خروجی می دهد.

 

 

اما وقتی که این گزینه فعال شود، بیت کد در فایل اجرایی همراه با کد ماشین تولید شده، گنجانده شده است. (مطابق با شکل زیر)

 

 

هنگام اجرای برنامه ای که حاوی بیت کد تعبیه شده باشد، این بیت کد نادیده گرفته می شود و برنامه دقیقا به همان شیوه ی معمولی اجرا می شود. بنابراین این گزینه از منظر کاربری هیچ تاثیری بر روی عملکرد برنامه شما نمی گذارد. 

اپل با بیت کدِ تعبیه شده چه میکند؟

اما حل ممکن است برای شما این سوال پیش بیاید که چرا اپل گزینه تعبیه ی بیت کد را داخل برنامه پیشنهاد می کند؟ پاسخ ساده است. در واقع با استفاده از بیت کدی که در فایل قابل اجرا تعبیه شده است، اپل قادر به کامپایل دوباره ی برنامه های کاربردی، بدون نیاز به ارتباط با توسعه دهنده خواهد بود که این امر مزایای زیادی را برای برنامه‌ها به ارمغان می‌آورد:

  • اپل به طور مداوم کد های بهینه شده توسط کامپایلر Clang را بهبود می بخشد تا باعث ارتقاء عملکرد برنامه های تلفن همراه و همچنین کاهش حجم آنها شود. با استفاده از بیت کد تعبیه شده، اپل، خود می تواند برنامه های موجود را با استفاده از آخرین نسخه بهبود یافته کامپایلرمجددا کامپایل کند. این امر، در واقع توسعه دهندگان برنامه را از بار اضافی برای به روز رسانی محیط توسعه خود و کامپایل و آپلود مجدد برنامه های خود آسوده خاطر می سازد.
  • با تعبیه بیت کد، توسعه دهندگان این امکان را به اپل می دهند تا برنامه های خود را برای اجرا و کار بر روی انواع مختلف و جدید دستگاه ها، آماده سازد. در واقع، بیت کدِ تعبیه شده، اپل را قادر می سازد تا برنامه های موجود را مجددا کامپایل کند و با چیپ های دستگاه های جدید، سازگار سازد.

آیا مفاهیم و الزامات امنیتی در بیت کد های تعبیه شده درنظر گرفته می‌شوند؟

در مورد پیامدهای امنیتی تعبیه ی بیت کد، بحث های مفصلی وجود دارد. موضوع اساسی و مهم در اینجا این است که بیت کد هرگز به یک دستگاه تلفن همراه انتقال نمی یابد و در اختیار کاربران قرار نمی گیرد. اپل بیت کد برنامه های شما را در سرورهای خود ذخیره می کند و هر زمان که به آنها نیاز پیدا کرد، از آنها استفاده می کند، اما قبل از ارسال برنامه ها به دستگاه کاربر نهایی، آنها را از بین می برد. به عبارت دیگر، فقط اپل به بیت کد برنامه ی شما دسترسی خواهد داشت، به طوری که کاربر نهایی حتی متوجه اختلاف بین برنامه ای که در آن بیت کد تعبیه شده و برنامه ی فاقد بیت کد، نخواهد گردید. از آنجاییکه بیت کدها روی سرورهای اپل باقی خواهند ماند، فعال سازی بیت کد هیچ خطر امنیتی را در پی نخواهد داشت (مگر اینکه شما خود اپل را به عنوان یک تهدید در نظر بگیرید!) 

چرا iXGuard نیازمند به ساختار برنامه با بیت کد فعال شده است؟

دلیل اینکه چرا iXGuard به منظور امن سازی اپلیکیشن به ساختار برنامه با بیت کدِ فعال شده، نیاز دارد این است که پردازش و تفسیر این بیت کد به مراتب آسان تر از سورس کد یا کد ماشین می باشد. در واقع iXGuard از بیت کدِ تعبیه شده برای کامپایل دوباره ی برنامه ها و ایمن سازی آن ها طی یک فرآیند استفاده می کند.

 

 

 

توجه به این نکته بسیار حائز اهمیت است که این ابزاردر واقع به بیت کد برنامه (در باینری) جهت پردازش آن نیازمند است و به حضور بیت کد در برنامه ی امن شده (خروجی iXGuard) نیازی ندارد. بنابراین این تصمیم مبنی بر تعبیه بیت کد در خروجی نهایی و یا حذف آن بر عهده شما خواهد بود و مشکلی در عملکرد iXGuard نخواهد گذاشت.