ارتباطات Cleartext

دسته بندی OWASP: MASVS-NETWORK: ارتباطات شبکه

نمای کلی

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

صرف نظر از اینکه اطلاعات حساسی ارسال می‌کنید یا خیر، استفاده از cleartext همچنان می‌تواند یک آسیب‌پذیری باشد، زیرا ترافیک cleartext می‌تواند از طریق حملات شبکه مانند ARP یا DNS poisoning نیز دستکاری شود و در نتیجه به طور بالقوه مهاجمان را قادر می‌سازد تا بر رفتار یک برنامه تأثیر بگذارند.

تأثیر

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

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

خطر: کانال‌های ارتباطی رمزگذاری نشده

انتقال داده‌ها از طریق کانال‌های ارتباطی رمزگذاری نشده، داده‌های مشترک بین دستگاه و نقاط پایانی برنامه را افشا می‌کند. این داده‌ها می‌توانند توسط یک مهاجم رهگیری و به‌طور بالقوه تغییر داده شوند.

کاهش‌ها

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

خطرات خاص

این بخش، ریسک‌هایی را جمع‌آوری می‌کند که نیاز به استراتژی‌های کاهش غیراستاندارد دارند یا در سطح خاصی از SDK کاهش یافته‌اند و برای تکمیل مطلب در اینجا آورده شده‌اند.

ریسک: HTTP

راهنمایی‌های این بخش فقط برای برنامه‌هایی اعمال می‌شود که اندروید ۸.۱ (سطح API ۲۷) یا قدیمی‌تر را هدف قرار می‌دهند. از اندروید ۹ (سطح API ۲۸)، کلاینت‌های HTTP مانند URLConnection، Cronet و OkHttp استفاده از HTTPS را اجباری می‌کنند، بنابراین پشتیبانی از cleartext به طور پیش‌فرض غیرفعال است. با این حال، توجه داشته باشید که بعید است سایر کتابخانه‌های HTTP Client مانند Ktor این محدودیت‌ها را روی cleartext اعمال کنند و باید با احتیاط استفاده شوند.

کاهش‌ها

از ویژگی NetworkSecurityConfig.xml برای لغو ترافیک متن ساده و اعمال HTTPS برای برنامه خود استفاده کنید، البته به استثنای دامنه‌های خاص مورد نیاز (معمولاً برای اهداف اشکال‌زدایی):

ایکس ام ال

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="false">
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">debug.domain.com</domain>
    </domain-config>
</network-security-config>

این گزینه به جلوگیری از رگرسیون‌های تصادفی در برنامه‌ها به دلیل تغییرات در URL های ارائه شده توسط منابع خارجی مانند سرورهای backend کمک می‌کند.


ریسک: FTP

استفاده از پروتکل FTP برای تبادل فایل بین دستگاه‌ها خطرات متعددی را به همراه دارد که مهم‌ترین آنها عدم رمزگذاری در کانال ارتباطی است. به جای آن باید از جایگزین‌های امن‌تری مانند SFTP یا HTTPS استفاده شود.

کاهش‌ها

هنگام پیاده‌سازی مکانیزم‌های تبادل داده از طریق اینترنت در برنامه خود، باید از یک پروتکل امن مانند HTTPS استفاده کنید. اندروید مجموعه‌ای از APIها را در دسترس قرار می‌دهد که به توسعه‌دهندگان امکان ایجاد منطق کلاینت-سرور را می‌دهد. این امر می‌تواند با استفاده از امنیت لایه انتقال (TLS) ایمن شود و تضمین کند که تبادل داده بین دو نقطه انتهایی رمزگذاری شده است، بنابراین از استراق سمع ارتباطات و بازیابی داده‌های حساس توسط کاربران مخرب جلوگیری می‌شود.

معمولاً معماری‌های کلاینت-سرور به APIهای متعلق به توسعه‌دهنده متکی هستند. اگر برنامه شما به مجموعه‌ای از نقاط پایانی API وابسته است، با پیروی از این بهترین شیوه‌های امنیتی برای محافظت از ارتباطات HTTPS، امنیت عمیق را تضمین کنید:

  • احراز هویت - کاربران باید با استفاده از مکانیسم‌های امنی مانند OAuth 2.0 خود را احراز هویت کنند. احراز هویت پایه عموماً توصیه نمی‌شود، زیرا مکانیسم‌های مدیریت جلسه را ارائه نمی‌دهد و اگر اعتبارنامه‌ها به طور نامناسب ذخیره شوند، می‌توانند از Base64 رمزگشایی شوند.
  • مجوزدهی - کاربران باید با رعایت اصل حداقل امتیاز، محدود به دسترسی به منابع مورد نظر باشند. این امر می‌تواند با اتخاذ راهکارهای دقیق کنترل دسترسی برای دارایی‌های برنامه، پیاده‌سازی شود.
  • اطمینان حاصل کنید که از مجموعه‌های رمزنگاری متفکرانه و جدیدترین، با پیروی از بهترین شیوه‌های امنیتی، استفاده می‌شود. به عنوان مثال، در صورت نیاز، برای ارتباطات HTTPS، پشتیبانی از پروتکل TLSv1.3 با سازگاری معکوس را در نظر بگیرید.

ریسک: پروتکل‌های ارتباطی سفارشی

پیاده‌سازی پروتکل‌های ارتباطی سفارشی یا تلاش برای پیاده‌سازی دستی پروتکل‌های شناخته‌شده، می‌تواند خطرناک باشد.

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

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

کاهش‌ها

استفاده از کتابخانه‌های نگهداری‌شده برای پیاده‌سازی پروتکل‌های ارتباطی شناخته‌شده

برای پیاده‌سازی پروتکل‌های شناخته‌شده‌ای مانند HTTPS در برنامه‌ی خود، باید از کتابخانه‌های سیستم عامل یا کتابخانه‌های شخص ثالثِ نگهداری‌شده استفاده کنید.

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

علاوه بر این، با انتخاب پروتکل‌های شناخته‌شده، توسعه‌دهندگان از سازگاری گسترده در سیستم‌ها، پلتفرم‌ها و IDEهای مختلف بهره‌مند می‌شوند و احتمال خطاهای انسانی را در طول فرآیند توسعه کاهش می‌دهند.

از SFTP استفاده کنید

این پروتکل داده‌های در حال انتقال را رمزگذاری می‌کند. هنگام استفاده از این نوع پروتکل تبادل فایل، باید اقدامات اضافی در نظر گرفته شود:

  • SFTP از انواع مختلف احراز هویت پشتیبانی می‌کند. به جای احراز هویت مبتنی بر رمز عبور، باید از روش احراز هویت کلید عمومی استفاده شود. چنین کلیدهایی باید به طور ایمن ایجاد و ذخیره شوند، برای این منظور استفاده از Android Keystore توصیه می‌شود.
  • اطمینان حاصل کنید که رمزهای پشتیبانی‌شده از بهترین شیوه‌های امنیتی پیروی می‌کنند.

منابع