SSL Pinning: راهکار امنیت ارتباطات اپلیکیشن موبایل

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

 

SSL Pinning چیست؟

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

 

 

 

با این حال، با استفاده از Pinning SSL، تنظیمات اپلیکیشن به صورتی خواهد بود که به غیر از تعداد محدودی از گواهینامه های از پیش تعریف شده، باقی آن ها را رد کند. هر زمان که اپلیکیشن به یک سرور متصل شود، گواهی سرور را با گواهی های پین شده مقایسه می کند. فقط تنها زمانی که آنها مطابقت داشته باشند، سرور مورد اعتماد است و اتصال SSL برقرار می گردد.

 

 

چرا اپلیکیشن به SSL Pinning نیاز دارد؟

تنظیم و نگهداری جلسات (Session های) SSL، معمولا به یک library یا کتابخانه‌ی سیستم محول می گردد. این بدان معنا است که اپلیکیشنی که تلاش می کند یک ارتباط را با سرور برقرار نماید، قادر به تعیین قابل اعتماد بودن یا نبودن یک گواهینامه نمی باشد و به طور کامل بر روی گواهینامه هایی که در Trust Store سیستم عامل موجود است، تکیه می کند.

هنگامی که یک گواهینامه SSL تولید و در این Trust Store قرار میگیرد، می تواند یک حمله مرد میانی (Man-in-the-Middle) علیه هر برنامه ای که از SSL استفاده می کند را ایجاد کند، به طوری که هر جلسه (Session) از SSL قابل خواندن و دستکاری شود. در این حالت مهاجم می تواند از این فرصت برای معکوس کردن پروتکل استفاده شده در برنامه یا استخراج کلیدهای API از درخواست ها، استفاده نماید.

مهاجمان همچنین می توانند جلسات SSL را با فریب دادن کاربر و ترغیب وی به نصب CA از طریق یک صفحه وب مخرب و جعلی مورد حمله قرار دهند. همچنین ممکن است CA های اصلی و مورد اعتماد دستگاه، مورد حمله و دسترسی قرار گرفته و برای تولید گواهی جعلی استفاده شوند.

 

محدود کردن مجموعه ای از گواهی های قابل اعتماد از طریق پیاده سازی SSL Pinning، به طور موثری سبب محافظت از برنامه های کاربردی موبایل در برابر حملات از راه دور شرح داده شده می گردد. این امر همچنین از مهندسی معکوس و افزوده شدن CA سفارشی به Trust Store دستگاه و تحلیل عملکرد برنامه و نحوه ارتباط آن با سرور، جلوگیری می کند.

پیاده سازی SSL Pinning در اپلیکیشن های تحت iOS

به صورت ساده پیاده سازی SSL Pinning از طریق ذخیره‌ی اطلاعات اضافی در داخل اپلیکیشن جهت شناسایی سرور و حصول اطمینان از عدم وجود حمله مرد میانی (Man-in-the-Middle)، صورت می گیرد.

 

چه چبزی را پین کنیم؟

در واقع در این مرحله، کار به دو صورت می تواند انجام گیرد: اختصاص گواهینامه به سرور توسط خود سرور یا پین شدن کلید عموی سرور. از طرفی شما خود انتخاب می کنید که داده های واقعی ذخیره گردند یا هش شده ی داده ها بکار گرفته شود. در واقع در این حالت می توان یک فایل هش شده از کواهی یا یک هش از رشته ی کلید عمومی را در اپلیکیشن ذخیره نمود.

انتخاب میان دو گزینه پین کردن گواهی یا کلید عمومی می تواند از جنبه های مختلف امنیت و نگهداری برنامه مورد بررسی قرار گیرد که این بحث در خارج از موضوع بحث این مطلب است. برای کسب اطلاعات بیشتر در این خصوص می توانید از راهنماهای OWASP در این لینک استفاده نمایید.

 

نحوه جاسازی اطلاعات پین شده در برنامه

داده های مورد نیاز برای پیکربندی SSL می توانند در برنامه به دو روش کلی جاسازی شوند:

  • جاسازی به صورت یک فایل دارایی (Asset File)
  • جاسازی به عنوان یک رشته در کد برنامه

 

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

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

 

کتابخانه ها و روش های متداول برای SSL Pinning

کتابخانه های زیر گزینه های محبوب و متداولی برای پیاده سازی SSL در برنامه های Swift و زبانC  شی گرا تحت iOS محسوب می شوند.

 

نام

روش و نحوه پین

زبان

نوع

لینک

NSURLSession

Certificate file, public key

C  شی گرا

Apple networking library

لینک

AlamoFire

Certificate file, public key

Swift

Networking library

لینک

AFNetworking

Certificate file, public key

C  شی گرا

Networking library

لینک

TrustKit

public key

C  شی گرا

SSL Pinning

لینک

 

 

NSURLSession  یک API ارائه شده از سوی اپل برای تسهیل ارتباطات شبکه است که یک فریم ورک سطح پایین می باشد، بنابراین پیاده سازی SSL با استفاده از آن سخت است و نیازمند بسیاری از تنظیمات به صورت دستی می باشد.

TrustKit، AlamoFire و AFNetworking کتابخانه هایی هستند که به طور گسترده ای در بالای NSURLSession مورد استفاده قرار گرفته اند. هر دو AFNetworking و AlamoFire كتابخانه هاي كامل شبكه هستند كه از چگونگي پيكربندي SSL به عنوان بخشی از API خود پشتیبانی می كنند. TrustKit یک فریم ورک کوچک است که فقط بررسی پیاده سازی SSL Pinning را انجام می دهد.

AFNetworking برای برنامه هایی با زبان شی گرای C و یا AlamoFire برای برنامه های Swift انتخاب خوبی هستند. زمانی که شما به دنبال یک کتابخانه شبکه کامل هستید و فقط نیاز به SSL دارید، TrustKit می تواند گزینه مناسبی باشد.

 

با توجه به اینکه یکی از اولین اقداماتی که مهاجم در هنگام معکوس کردن کد و ساختار یک برنامه کاربردی موبایل انجام می دهد، دور زدن و عبور از SSl/TLS برای به دست آوردن اطلاعات و شناخت بهتر در عملکرد نرم افزار و نحوه ارتباط با سرور آن می باشد. در مقاله بعد، به بررسی تکنیک های دور زدن و عبور از SSL Pinning در iOS و اقدامات متقابل هنگام وقوع آن، پرداخته می شود.

در مقاله بعدی سعی می کنیم به معرفی و تشریح روش های دور زدن مکانیزم امنیتی SLL Pinning با استفاده از یک اپلیکیشن نمونه و همچنین معرفی ابزارهای مربوطه بپردازیم و برخی پیشنهادات در خصوص چگونگی امن سازی اپلیکیشن های موبایل در برابر این روش ها ارائه خواهد شد.