دیواره آتش اندروید

پنج‌شنبه ۲۳ اردیبهشت ۱۳۹۵
sharif-cert, apa, دیواره آتش اندروید، DroidWall، iptables، NoRoot، DroidGuardian، AppFence، Aurasium
مرکز آپا شریف
SUT-APA-LOGO
چکیده:
در اندروید در برخی از دیواره‌‌های آتش همچون DroidWall از این ویژگی لینوکس استفاده‌شده است. این ابزار‌ها نیاز به مجوز ریشه دارند اما ابزار‌هایی نیز همچون دیواره آتش NoRoot ارائه‌شده‌اند که بدون نیاز به مجوز ریشه عمل می‌کنند. در این مقاله ابزار‌ها و روش‌های ارائه‌شده برای کنترل ترافیک دستگاه اندروید را معرفی خواهیم کرد.

مقدمه

امروزه دسترسی به اینترنت بدون شک یکی از مهم‌ترین ویژگی‌های سیستم‌‌های کامپیوتری به شمار می‌آید. در اندروید دسترسی به اینترنت با استفاده از مجوز اینترنت فراهم‌شده است. برنامه‌‌ها با استفاده از این مجوز, می‌توانند سوکت شبکه را ایجاد و استفاده کنند. درصورتی‌که این مجوز به برنامه‌ای اعطاء شود, برنامه می‌تواند با هر کارگزار دلخواهی ارتباط اینترنتی برقرار کند. در اندروید هیچ فیلتری برای کنترل ترافیک ورودی و خروجی دستگاه فراهم نشده است. درصورتی‌که کاربران اندروید نیاز دارند تا از ارتباطات اینترنتی برقرارشده توسط دستگاه خودآگاه و راجع به برقراری یا عدم برقراری آن‌ها تصمیم‌گیرنده باشند؛ به دلیل اینکه برخی از برنامه‌ها (درواقع همان بدافزارها) از مجوز اینترنت سوءاستفاده می‌کنند و سعی به انجام اعمال بدخواهانه دارند (به‌عنوان مثال اطلاعات شخصی کاربر را به کارگزار دلخواهی ارسال می‌کنند). کاربر باید قبل از نصب برنامه متوجه تطبیق مجوز با هدف برنامه شود و درصورتی‌که هدف برنامه با مجوز درخواستی مطابقت داشته باشد, مجوز را به آن اعطا کند. از طرفی درصورتی‌که مجوز با هدف برنامه مطابقت داشته باشد, کاربر نمی‌تواند متوجه استفاده مجاز یا غیرمجاز برنامه از آن مجوز شود. برای اینکه کاربر کنترل بیشتری بر ارتباطات شبکه‌ای داشته باشد, نیاز به مکانیزمی است که قادر به تشخیص تمامی ترافیک‌های خروجی باشد که معمولاً تحت عنوان دیواره آتش شناخته‌شده است. به‌طورکلی دیواره‌های آتش موجود برای اندروید دارای ویژگی‌های زیر هستند:
  • دریافت تمامی درخواست‌های ارتباط با خارج, که توسط هر فرآیند در حال اجرا بر روی سیستم راه‌اندازی شده‌اند.
  • جداسازی اطلاعات زیر از درخواست:
  • آدرس آی‌پی کارگزار راه دور
  • درگاه کارگزار راه دور
  • نام و شناسه فرآیند درخواست دهنده
  • فراهم کردن واسط گرافیکی برای نمایش اطلاعات به کاربر
  • امکان پذیرفتن یا رد درخواست برنامه‌ها برای ارتباط با اینترنت در زمان واقعی
  • پیاده‌سازی مدلی مبتنی بر قانون برای فیلتر کردن درخواست‌ها
ازآنجایی‌که اندروید بر اساس هسته لینوکس است, در کنترل ترافیک دستگاه می‌توان از ویژگی‌های موجود در لینوکس استفاده کرد. در سیستم لینوکس, دیواره آتشی تحت عنوان netfilter در هسته پیاده‌سازی شده است. netfilter با استفاده از قلاب‌های امنیتی (بسته‌‌ها با توجه به قوانین مشخص‌شده فیلتر می‌شوند) در هسته ترافیک را فیلتر می‌کند. قوانین لازم برای فیلتر کردن بسته‌‌ها با استفاده از ابزار iptables, پیکربندی می‌شوند. در اندروید نیز در برخی از دیواره‌‌های آتش همچون DroidWall از این ویژگی لینوکس استفاده‌شده است. این ابزار‌ها نیاز به مجوز ریشه دارند اما ابزار‌هایی نیز همچون دیواره آتش NoRoot ارائه‌شده‌اند که بدون نیاز به مجوز ریشه عمل می‌کنند. در ادامه ابزار‌ها و روش‌های ارائه‌شده برای کنترل ترافیک دستگاه اندروید را معرفی خواهیم کرد.

دیواره آتش DroidWall

DroidWall یک برنامه کاربردی اندروید است که از دیواره آتش iptables موجود در لینوکس استفاده می‌کند. این برنامه دارای واسطی گرافیکی است که با استفاده از آن می‌توان مشخص کرد که چه برنامه‌‌هایی اجازه دسترسی به اینترنت را دارند و چه برنامه‌‌هایی این اجازه را ندارند. زمانی که کاربر به برنامه‌ای اجازه دسترسی به اینترنت را می‌دهد یا مانع از دسترسی آن می‌شود, قانون جدیدی به iptables اضافه می‌گردد. قانون افزوده‌شده بیانگر این است که فرآیند مربوط به برنامه, اجازه ارتباط با اینترنت را دارد یا خیر. به دلیل اینکه دسترسی به iptables نیاز به مجوز ریشه دارد, این ابزار تنها بر روی دستگاه‌های روت شده قابل‌استفاده است. با استفاده از این ابزار, علاوه بر اینکه می‌توان مشخص کرد که چه برنامه‌ای به اینترنت دسترسی داشته باشد, می‌توان مشخص نمود که دسترسی به اینترنت از طریق Wi-Fi یا شبکه سلولی 3G باشد. در شکل زیر تصویری از واسط گرافیکی این ابزار نشان داده‌شده است.
DroidWall در دو حالت عمل می‌کند:
  • لیست سفید: در این حالت دسترسی تمامی برنامه‌‌ها به اینترنت مسدود شده است و کاربر باید مشخص کند که چه برنامه‌ای اجازه دسترسی دارد.
  • لیست سیاه: در این حالت تمامی برنامه‌ها اجازه دسترسی به اینترنت را دارند و کاربر باید مشخص کند که چه برنامه‌ای دسترسی نداشته باشد.
در این برنامه امکان ثبت دسترسی‌های مسدود شده نیز وجود دارد. به این منظور باید گزینه ثبت اطلاعات را در تنظیمات این ابزار فعال کرد. از طرفی می‌توان قوانینی که توسط DroidWall ایجاد و استفاده می‌شوند را نیز مشاهده نمود. یکی دیگر از ویژگی‌های این ابزار امکان تعیین کلمه عبور برای آن است. با این کار تنها کاربرانی که به کلمه عبور دسترسی دارند می‌تواند تنظیمات دیواره آتش را تغییر دهند. AFWall+ نسخه ارتقاءیافته DroidWall, که ویژگی‌های جدیدی همچون واردکردن یا خارج کردن قوانین به آن افزوده است. Firewall Gold نیز برنامه‌ای است که در دستگاه‌های روت شده قابل‌استفاده است و مشابه DroidWall واسطی را برای استفاده از iptables فراهم کرده است.

دیواره آتش NoRoot

دیواره آتش NoRoot برنامه‌ای کاربردی برای کنترل دسترسی برنامه‌‌ها به اینترنت است. این برنامه همان‌طور که از نام آن مشخص است, نیازی به دسترسی ریشه ندارد و تغییری در معماری اندروید ایجاد نکرده است. NoRoot با استفاده از ویژگی VPN دستگاه اندروید, کار می‌کند. با استفاده از این ویژگی, تمامی ترافیک اینترنت دستگاه از طریق این برنامه عبور خواهد کرد؛ لذا می‌توان آن‌ها را مسدود یا فیلتر کرد. این برنامه ترافیک دستگاه را به کارگزار خارجی جهت بررسی ارسال نمی‌کند, بلکه تنها با استفاده از VPN که بر روی دستگاه کاربر راه‌اندازی می‌کند, به بررسی ترافیک می‌پردازد. یکی از کاربردهای این برنامه, مسدود کردن برنامه‌هایی است که کاربر تمایلی به ارتباط آن‌ها با اینترنت ندارد. این برنامه لیستی از برنامه‌‌هایی که اجازه دسترسی به اینترنت دارند را به کاربر نمایش می‌دهد و کاربر می‌تواند مشخص کند که کدام برنامه به اینترنت دسترسی و کدامیک دسترسی نداشته باشد. درصورتی‌که با مسدود کردن دسترسی برنامه به اینترنت عملکرد برنامه مختل شود, امکان اجازه مجدد دسترسی به اینترنت توسط برنامه وجود دارد. همچنین کاربر می‌تواند مشخص کند که برنامه‌‌ها از طریق Wifi, شبکه سلولی, هردو یا هیچ‌یک به اینترنت دسترسی داشته باشد. این برنامه را می‌توان به‌گونه‌ای تنظیم کرد که در زمان آغاز به کار (بوت) دستگاه اندروید, شروع به کار کند. همچنین امکان مشاهده اطلاعات ثبت‌شده‌ی1 دسترسی‌های درخواست شده به همراه نام سایت, آدرس آی‌پی و درگاه آن وجود دارد. ویژگی دیگر این برنامه این است که کاربر با استفاده از آن می‌تواند قوانینی را برای فیلتر کردن ترافیک ایجاد کند. لازم به ذکر است که تنها راه ممکن برای ایجاد دیواره آتش بر روی دستگاه‌های روت نشده, استفاده از واسط VPN است. این واسط به‌عنوان یک پراکسی بین برنامه‌‌های کاربردی و کارگزار‌ها عمل می‌کند. بنابراین داده‌‌های کاربر به کارگزار خارجی ارسال و دزدیده نمی‌شوند. برنامه‌‌های بسیاری همچون LostNet Firewall Pro, NoRoot Data Firewall و Mobiwol No Root Firewall از این روش استفاده کرده‌اند.

دیواره آتش DroidGuardian

یکی از روش‌های پیاده‌سازی شده برای کنترل ترافیک اندروید, DroidGuardian نام دارد. DroidGuardian به‌عنوان یک دیواره آتش, ترافیک خروجی از دستگاه را به‌صورت ریزدانه‌تر کنترل می‌کند. در معماری این دیواره آتش برای دریافت ترافیک خروجی از چارچوب LSM1 برای قرار دادن قلاب‌هایی بر روی فراخوانی‌های سیستمی هسته (برای دریافت فراخوانی‌ به سوکت در میان راه و در سطح هسته) استفاده‌شده است. هر زمان که فرآیندی (یا یک برنامه کاربردی) فراخوانی سیستمی connect را اجرا کند, تابع قلاب (تابع droidg_socket_connect() ) ایجادشده برای ارتباط با سوکت فراخوانی می‌شود. درصورتی‌که خروجی این تابع صفر شود, سوکت اجازه اتصال به اینترنت را خواهد داشت, در غیر این صورت سوکت نمی‌تواند به اینترنت متصل شود. این برنامه نیز مشابه ابزارهای دیگر, درخواست‌های خروجی ارتباط با اینترنت را به کاربر نمایش می‌دهد و کاربر می‌تواند درخواست‌های مذکور را پذیرفته یا رد کند. تصمیم کاربر به‌عنوان قانونی ذخیره می‌شود که برای درخواست‌های آتی مورداستفاده قرار می‌گیرد.

روش AppFence

در معماری امنیتی اندروید, امنیت در سطح برنامه کاربردی با استفاده از مجوز‌هایی که در زمان نصب برنامه به کاربر نمایش داده می‌شوند تأمین می‌شود. در بسیاری از موارد, کاربر مجوز‌های درخواست شده را بررسی نمی‌کند یا آن‌ها را به‌سادگی می‌پذیرد. ‌گاهی اوقات مجوز‌های درخواستی یک برنامه با هدف برنامه تناسبی ندارد و گاهی برنامه از مجوز‌های درخواست شده, استفاده غیرمجازی می‌کند. بنابراین نیاز است کنترل بیشتری بین مجوز‌های موجود در فایل Manifest و مجوز‌هایی که برنامه واقعاً به آن احتیاج دارد, انجام شود. پیتر هورنیاک و همکارانش در سال ۲۰۱۱ روشی را برای دستیابی به این هدف ارائه کردند. آن‌ها سیستم پیاده‌سازی شده خود را AppFence نامیدند و برای پیاده‌سازی آن تغییراتی را در چارچوب اندروید و برخی از کتابخانه‌‌های آن ایجاد نمودند. این سیستم مجوز‌های درخواست شده در فایل Manifest را بررسی می‌کند و به کاربر اجازه می‌دهد تا مشخص کند که کدام مجوزی به برنامه اعطاء و کدامیک اعطاء نشوند. در حقیقت تمامی مجوز‌ها پذیرفته می‌شوند اما به‌جای اعطای دسترسی به منابع خاصی, AppFence آن منابع را با داده‌‌های shadow (نمونه تقلیدشده از منابع اصلی که مشکلی را برای سیستم ایجاد نمی‌کنند) جایگزین می‌کند. همان‌طور که در شکل زیر نشان داده‌شده است, در این سیستم در زمان نصب برنامه, مجوز‌ها به شکل متفاوتی به کاربر نمایش داده می‌شوند. به‌عنوان نمونه درصورتی‌که برنامه‌ای نیاز به دسترسی به لیست شماره‌‌های تماس داشته باشد, سیستم برای برنامه یک لیست خالی را فراهم می‌کند. AppFence همچنین از نشت اطلاعات از طریق ارتباطات اینترنت جلوگیری می‌کند. به این شکل که در سطح سوکت بافر‌های داده را در میان راه دریافت می‌کند. زمانی که بدافزار در بافر می‌نویسد, AppFence به دو روش عمل می‌کند, برنامه را با نمایش دادن اینکه بافر ارسال‌شده است فریب می‌دهد یا اینکه حالتی را شبیه‌سازی می‌کند که برنامه به اینترنت دسترسی ندارد.

روش Aurasium

در کنار فیلتر کردن ترافیک, مکانیزم‌‌های دیگری برای اعمال خط‌مشی‌های ریزدانه‌تر, برای ارتباطات شبکه‌ای در دستگاه‌های اندروید پیاده‌سازی شده‌اند. به‌عنوان نمونه برنامه Aurasium , به‌عنوان سرویسی برای مقاوم‌سازی برنامه‌های کاربردی به شمار می‌آید. برنامه Aurasium, هر برنامه دلخواه را در یک جعبه ایمنی برای کنترل کردن دسترسی آن به منابع و داده‌های دستگاه ایزوله می‌کند. در این برنامه مجموعه‌ای از قوانین و خط‌مشی‌های امنیتی برای تضمین محافظت از دستگاه تعریف‌شده‌اند. Aurasium فنّاوری جدیدی را ارائه کرده است که در این فنّاوری فایل apk برنامه کاربردی دلخواه, بسته‌بندی مجدد می‌گردد و برنامه به‌گونه‌ای تغییر داده می‌شود (بدون اینکه عملکرد اصلی آن تغییر کند) که برخی از فراخوانی‌ها که از منابع ارزشمند (همچون اینترنت, اطلاعات تماس, پیام‌‌های کوتاه) استفاده می‌کنند, در میان راه دریافت و بررسی می‌گردند. Aurasium از معماری برنامه کاربردی در اندروید که ترکیبی از کد‌های جاوا و کد‌های محلی است استفاده می‌کند تا جعبه ایمنی قابل‌اعتمادی را فراهم کند. این برنامه قادر به مداخله کردن در تمامی تعاملاتی است که بین برنامه و سیستم‌عامل اتفاق می‌افتد و می‌تواند خط‌مشی را به‌صورت ریزدانه‌تر از سیستم مجوز اندروید اعمال کند. برای مثال زمانی که برنامه‌ای سعی به دسترسی به آدرسی در اینترنت داشته باشد, IP کارگزار در لیست سیاه بررسی می‌شود و به کاربر پیامی نمایش داده می‌شود. یا زمانی که برنامه‌ای سعی به ارسال پیام کوتاه دارد این برنامه بررسی می‌کند که برنامه به شماره‌‌های کوتاهی که منجر به کسر هزینه می‌شوند, پیامی را ارسال نکند. زمانی که برنامه سعی به دسترسی به اطلاعات شخصی مانند پیام‌های کوتاه ذخیره‌شده, اطلاعات تماس یا سرویس‌هایی مشابه دسترسی به دوربین, ضبط کننده صدا یا مکان دارد, خط‌مشی برای اجازه یا عدم اجازه دسترسی بررسی می‌گردد. Aurasium همچنین اعمال I/O همچون خواندن و نوشتن را نیز بررسی می‌کند. زمانی که کاربر می‌خواهد برنامه‌ای را نصب کند, برنامه به Aurasium ارسال می‌شود و نسخه مقاوم‌سازی شده آن ایجاد می‌گردد. سپس کاربر نسخه مقاوم‌سازی شده برنامه را نصب می‌کند. این برنامه تضمین می‌کند که تمامی اعمال برنامه مقاوم‌سازی شده, برای مشاهده رفتار مخرب نظارت می‌شوند و سیاست‌هایی که از حریم خصوصی و امنیت مراقبت می‌کنند نیز اعمال می‌گردند. درواقع هر دسترسی با استفاده از مجموعه‌ای از سیاست‌ها بررسی می‌شود. یکی از ویژگی‌های جالب این ابزار توانایی اعمال سیاست‌ها بدون تغییر سیستم‌عامل اندروید است.