دسته OWASP: MASVS-NETWORK: Network Communication
نمای کلی
اجازه دادن به ارتباطات شبکه متن ساده در برنامه Android به این معنی است که هرکسی که ترافیک شبکه را نظارت میکند میتواند دادههای درحال انتقال را ببیند و دستکاری کند. اگر دادههای منتقلشده حاوی اطلاعات حساس مانند گذرواژه، شماره کارت اعتباری، یا دیگر اطلاعات شخصی باشد، این یک آسیبپذیری است.
صرفنظر از اینکه اطلاعات حساس ارسال میکنید یا نه، استفاده از متن ساده میتواند همچنان آسیبپذیری محسوب شود زیرا ترافیک متن ساده را میتوان ازطریق حملات شبکهای مثل مسمومسازی ARP یا DNS دستکاری کرد و درنتیجه بهطور بالقوه به مهاجمان امکان داد بر رفتار برنامه تأثیر بگذارند.
تأثیر
وقتی برنامه Android دادهها را بهصورت متن ساده ازطریق شبکه ارسال یا دریافت میکند، هرکسی که شبکه را نظارت میکند میتواند آن دادهها را رهگیری کند و بخواند. اگر این دادهها شامل اطلاعات حساس مانند گذرواژهها، شمارههای کارت اعتباری، یا پیامهای شخصی باشد، میتواند منجر به سرقت هویت، کلاهبرداری مالی، و مشکلات جدی دیگر شود.
برای مثال، برنامهای که گذرواژهها را بهصورت متن ساده منتقل میکند میتواند این اطلاعات کاربری را درمعرض عامل مخربی قرار دهد که ترافیک را رهگیری میکند. سپس میتوان از این دادهها برای دسترسی غیرمجاز به حسابهای کاربر استفاده کرد.
خطر: کانالهای ارتباطی رمزگذارینشده
انتقال داده ازطریق کانالهای ارتباطی رمزگذارینشده باعث میشود دادههای همرسانیشده بین دستگاه و نقاط پایانی برنامه درمعرض دید قرار بگیرد. مهاجم میتواند این دادهها را رهگیری کند و احتمالاً تغییر دهد.
کاهش
دادهها باید ازطریق کانالهای ارتباطی رمزگذاریشده ارسال شود. پروتکلهای امن باید بهعنوان جایگزینی برای پروتکلهایی استفاده شوند که قابلیتهای رمزگذاری ارائه نمیدهند.
خطرات خاص
این بخش خطراتی را جمعآوری میکند که به استراتژیهای کاهش غیراستاندارد نیاز دارند یا در سطح خاصی از کیت توسعه نرمافزار کاهش یافتهاند و برای کامل بودن در اینجا آورده شدهاند.
ریسک: HTTP
راهنماییهای این بخش فقط برای برنامههایی اعمال میشود که Android 8.1 (سطح میانای برنامهسازی کاربردی ۲۷) یا نسخههای قدیمیتر را هدف قرار میدهند. از Android 9 (سطح میانای برنامهسازی کاربردی ۲۸)، کارخواههای HTTP مانند URLConnection، Cronet، و OkHttp استفاده از HTTPS را اجباری میکنند، بنابراین پشتیبانی از متن ساده بهطور پیشفرض غیرفعال است. بااینحال، توجه داشته باشید که کتابخانههای دیگر «کارخواه HTTP» مثل Ktor احتمالاً این محدودیتها را بر متن آشکار اعمال نمیکنند و باید بااحتیاط استفاده شوند.
کاهش
از ویژگی NetworkSecurityConfig.xml برای انصراف از ترافیک متن ساده و اجباری کردن HTTPS برای برنامهتان استفاده کنید، با استثناهایی فقط برای دامنههای خاص موردنیاز (معمولاً برای اهداف اشکالزدایی):
Xml
<?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>
این گزینه به جلوگیری از پسرفت تصادفی در برنامهها بهدلیل تغییر در نشانیهای وب ارائهشده توسط منابع خارجی مانند سرورهای زیرینه کمک میکند.
ریسک: FTP
استفاده از پروتکل FTP برای تبادل فایل بین دستگاهها خطرات متعددی دارد، مهمترین آنها عدم رمزگذاری در کانال ارتباطی است. درعوض باید از جایگزینهای ایمنتر مانند SFTP یا HTTPS استفاده شود.
کاهش
هنگام پیادهسازی سازوکارهای تبادل داده ازطریق اینترنت در برنامهتان، باید از پروتکل امنی مانند HTTPS استفاده کنید. Android مجموعهای از میاناهای برنامهسازی کاربردی را دردسترس قرار میدهد که به توسعهدهندگان امکان میدهد منطق کارخواه-سرور ایجاد کنند. این کار را میتوان بااستفاده از امنیت لایه انتقال (TLS) ایمن کرد تا اطمینان حاصل شود که تبادل داده بین دو نقطه پایانی رمزگذاری شده است و درنتیجه از استراق سمع کاربران مخرب در ارتباطات و بازیابی دادههای حساس جلوگیری شود.
معمولاً معماریهای مشتری-سرور به میاناهای برنامهسازی کاربردی تحت مالکیت توسعهدهنده متکی هستند. اگر برنامهتان به مجموعهای از نقاط پایانی میانای برنامهسازی کاربردی (API) وابسته است، با دنبال کردن این روالهای مطلوب امنیتی برای محافظت از ارتباطات HTTPS، از امنیت عمیق اطمینان حاصل کنید:
- اصالتسنجی – کاربران باید بااستفاده از سازوکارهای امنی مثل OAuth 2.0 اصالتسنجی شوند. اصالتسنجی پایه معمولاً توصیه نمیشود، زیرا سازوکارهای مدیریت جلسه را ارائه نمیدهد و اگر اطلاعات کاربری بهطور نادرست ذخیره شده باشد، میتواند از Base64 رمزگشایی شود.
- مجوز – کاربران باید طبق اصل حداقل امتیاز، فقط به منابع موردنظر دسترسی داشته باشند. این کار را میتوان با اتخاذ راهحلهای دقیق کنترل دسترسی برای داراییهای برنامه اجرا کرد.
- مطمئن شوید که از جدیدترین و مناسبترین مجموعههای رمز استفاده میشود و روالهای مطلوب امنیتی رعایت میشود. برای مثال، درصورت نیاز، پشتیبانی از پروتکل TLSv1.3 را با سازگاری با نسخه قدیمی برای ارتباطات HTTPS درنظر بگیرید.
خطر: پروتکلهای ارتباطی سفارشی
پیادهسازی پروتکلهای ارتباطی سفارشی یا تلاش برای پیادهسازی پروتکلهای شناختهشده بهصورت دستی میتواند خطرناک باشد.
درحالیکه پروتکلهای سفارشی به توسعهدهندگان اجازه میدهند راهحل منحصربهفردی را متناسب با نیازهای موردنظر طراحی کنند، هرگونه خطا درطول فرایند توسعه میتواند بهطور بالقوه منجر به آسیبپذیریهای امنیتی شود. برای مثال، خطا در توسعه سازوکارهای مدیریت جلسه میتواند بهطور بالقوه منجر به این شود که مهاجمان بتوانند ارتباطات را شنود کنند و اطلاعات حساس را درحین انتقال بازیابی کنند.
ازسویدیگر، پیادهسازی پروتکلهای شناختهشدهای مثل HTTPS بدون استفاده از سیستمعامل یا کتابخانههای طرف سوم با نگهداری مناسب، احتمال ایجاد خطاهای کدنویسی را افزایش میدهد که ممکن است بهروزرسانی پروتکل پیادهسازیشده را درصورت نیاز دشوار یا حتی غیرممکن کند. علاوهبراین، این کار میتواند همان نوع آسیبپذیریهای امنیتی را که در استفاده از پروتکلهای سفارشی وجود دارد ایجاد کند.
کاهش
استفاده از کتابخانههای نگهداریشده برای پیادهسازی پروتکلهای ارتباطی شناختهشده
برای پیادهسازی پروتکلهای شناختهشدهای مثل HTTPS در برنامهتان، باید از کتابخانههای سیستمعامل یا کتابخانههای طرف سوم نگهداریشده استفاده شود.
این امر به توسعهدهندگان این اطمینان را میدهد که راهکارهایی را انتخاب کنند که بهطور کامل آزمایش شدهاند، درطول زمان بهبود یافتهاند، و بهطور مداوم بهروزرسانیهای امنیتی را برای رفع آسیبپذیریهای رایج دریافت میکنند.
علاوهبراین، با انتخاب پروتکلهای شناختهشده، توسعهدهندگان از سازگاری گسترده در سیستمها، پلاتفرمها، و IDEهای مختلف بهرهمند میشوند که احتمال خطاهای انسانی را درطول فرایند توسعه کاهش میدهد.
استفاده از SFTP
این پروتکل دادهها را درحین انتقال رمزگذاری میکند. هنگام استفاده از این نوع پروتکل تبادل فایل، باید اقدامات بیشتری درنظر گرفته شود:
- SFTP از انواع مختلف اصالتسنجی پشتیبانی میکند. بهجای اصالتسنجی مبتنی بر گذرواژه، باید از روش اصالتسنجی کلید عمومی استفاده شود. چنین کلیدهایی باید بهطور ایمن ایجاد و ذخیره شوند، Android Keystore برای این منظور توصیه میشود.
- مطمئن شوید که رمزهای پشتیبانیشده از روالهای مطلوب امنیتی پیروی میکنند.
منابع
- Ktor
- انجام عملیات شبکه بااستفاده از Cronet
- OkHttp
- انصراف از ترافیک متن ساده برای پیکربندی امنیت شبکه
- اتصال به شبکه
- امنیت با پروتکلهای شبکه
- OAuth 2.0 برای برنامههای تلفن همراه و رایانه
- HTTP Over TLS RFC
- طرحهای اصالتسنجی HTTP
- توصیههای امنیتی وب Mozilla
- مولد پیکربندی توصیهشده Mozilla SSL
- توصیههای Mozilla درباره «امنیت لایه انتقال» سمت سرور
- صفحه راهنمای اصلی OpenSSH
- SSH RFC، که پیکربندیها و طرحهایی را که میتوان برای این پروتکل استفاده کرد بهتفصیل شرح میدهد
- توصیههای امنیتی Mozilla OpenSSH
- سیستم Android Keystore