محفظه امن برنامه (App Sandbox) — مکانیزم ایزولهسازی است که دسترسی برنامه به سیستم فایل، دادههای سایر برنامهها و منابع سیستم عامل را محدود میکند. هر برنامه در محیط ایزولهشده خود با حداقل اختیارات کار میکند و دسترسی به قابلیتهای اضافی را از طریق مجوزها درخواست میکند. طبق Apple Security Documentation (2025)، Sandbox یک عنصر اساسی حفاظت از دادهها در پلتفرمهای موبایل است. App Sandbox از دسترسی غیرمجاز به دادههای کاربر حتی در صورت به خطر افتادن یک برنامه جداگانه جلوگیری میکند.
نکات مهم
محفظه امن برنامه (App Sandbox) — یک مکانیزم امنیتی معماری است که هر برنامه را در محیط اجرایی خود با دسترسی محدود به منابع سیستم ایزوله میکند. این اصطلاح از مفهوم «جعبه شن» برای کودکان گرفته شده است — فضای امنی که کودک میتواند در آن بازی کند بدون دسترسی به اشیاء خطرناک. به طور مشابه، برنامه در محیطی محدود کار میکند و به دادههای سایر برنامهها یا اجزای حیاتی سیستم دسترسی ندارد.
هدف اصلی Sandbox اجرای اصل حداقل اختیارات است: هر برنامه فقط حقوقی را دریافت میکند که برای انجام وظایف اعلامشده ضروری است. حتی اگر مهاجم آسیبپذیری در برنامه پیدا کند، محفظه امن به او اجازه دسترسی به دادههای سایر برنامهها، عکسها، مخاطبین یا فایلهای سیستم را نمیدهد. خسارت به محدوده یک برنامه محدود میشود.
سیستمعاملهای موبایل زودتر از سیستمهای دسکتاپ از محفظههای امن استفاده کردند. iOS از Sandbox از زمان انتشار اولین نسخه SDK (2008) استفاده میکند، Android — از نسخه 1.0 (2008)، اما با تقویت در Android 4.3 (2013) از طریق SELinux. سیستمهای دسکتاپ در حال رسیدن هستند: macOS Sandbox را در سال 2012 پیادهسازی کرد، Windows — برنامههای ایزوله UWP را در Windows 8.
ایزولهسازی در محفظه امن با ترکیبی از چندین مکانیزم در سطوح مختلف سیستم عامل به دست میآید. در سطح سیستم فایل به هر برنامه یک دایرکتوری محافظتشده اختصاص داده میشود که فقط خودش دسترسی کامل دارد. در سطح فرآیندها از یک شناسه کاربر منحصربهفرد (UID) برای هر برنامه استفاده میشود. در سطح هسته کنترل دسترسی اجباری (MAC) از طریق SELinux یا مکانیزمهای مشابه اعمال میشود.
هر برنامه یک دایرکتوری ریشه در سیستم فایل دستگاه دریافت میکند. در iOS این دایرکتوری /var/mobile/Containers/Data/Application/{UUID} و در Android /data/data/{package_name} است. برنامه فقط میتواند فایلها را در داخل این دایرکتوری بخواند و بنویسد. دسترسی به هر فایلی خارج از این دایرکتوری در سطح هسته سیستم عامل مسدود میشود.
سیستم همچنین دایرکتوریهای مشترک ویژهای با دسترسی محدود فراهم میکند. در iOS این دایرکتوری Documents برای دادههای کاربر، Library برای تنظیمات و Caches برای فایلهای موقت است. در Android — حافظه داخلی (getFilesDir) و حافظه خارجی (getExternalFilesDir) که دسترسی به آن نیاز به مجوز اضافی ندارد.
در Android هر برنامه به عنوان یک فرآیند جداگانه لینوکس با UID منحصربهفرد (User ID) اجرا میشود. UID هنگام نصب برنامه تعیین میشود و در طول کل چرخه عمر بدون تغییر باقی میماند. فرآیندهای با UIDهای مختلف در سطح هسته از یکدیگر ایزوله هستند — نمیتوانند به حافظه یا فایلهای یکدیگر دسترسی پیدا کنند. مکانیزم مشابه در iOS از طریق هسته XNU و سیستم حفاظتی آن کار میکند.
سطح اضافی حفاظت در Android توسط SELinux (Security-Enhanced Linux) در حالت enforcing از نسخه Android 4.3 فراهم میشود. SELinux کنترل دسترسی اجباری (MAC) را پیادهسازی میکند: هر اقدام فرآیند صرفنظر از حقوق مالک فایل از نظر مطابقت با سیاست امنیتی بررسی میشود. حتی اگر برنامه با UID root کار کند، SELinux میتواند دسترسی به منابع خاصی را مسدود کند.
محفظه امن iOS یکی از سختگیرانهترین محفظهها در میان سیستمعاملهای موبایل محسوب میشود. هر برنامه در سطح کانتینر ایزوله میشود — ناحیه محافظتشده سیستم فایل که دسترسی به آن از سایر برنامهها غیرممکن است. iOS از ترکیبی از کنترل دسترسی اجباری از طریق Sandbox Kernel Extension (Sandbox.kext) و مکانیزم entitlement برای اعطای حقوق گسترده استفاده میکند.
کانتینر برنامه iOS از چند دایرکتوری با سطوح مختلف دسترسی تشکیل شده است. Documents — برای دادههای کاربر که در پشتیبانگیری iCloud و iTunes ذخیره میشوند. Library — برای فایلهای پیکربندی و کش. tmp — برای دادههای موقتی که سیستم میتواند در هر لحظه حذف کند. AppName.app — خود باندل برنامه که فقط خواندنی است.
دسترسی به دادههای سایر برنامهها به طور قطعی ممنوع است. iOS API برای خواندن فایلها از کانتینر برنامه دیگر فراهم نمیکند. تنها راه تبادل داده از طریق مکانیزمهای سیستمی است: UIActivityViewController برای اشتراکگذاری، UIPasteboard برای کلیپبورد، App Groups برای برنامههای یک توسعهدهنده. هر یک از این مکانیزمها تحت کنترل سیستم عامل کار میکند.
قابلیتهای گسترده فراتر از محفظه امن استاندارد از طریق Entitlements ارائه میشوند — امضاهای دیجیتالی که به امضای کد برنامه اضافه میشوند. به عنوان مثال، entitlement com.apple.security.application-groups به برنامههای یک گروه اجازه میدهد یک کانتینر مشترک داشته باشند. اعلانهای Push، iCloud، Apple Pay — همه این ویژگیها به entitlements مربوطه نیاز دارند.
توجه به این نکته مهم است که entitlements در iOS همان مجوزها (permissions) نیستند. مجوزها در زمان اجرا از کاربر درخواست میشوند (مثلاً دسترسی به دوربین)، در حالی که entitlements در مرحله نصب توسط سیستم بررسی میشوند و توسط کاربر قابل تغییر نیستند. Entitlement توسط توسعهدهنده تعیین میشود و در فرآیند بررسی برنامه توسط Apple امضا میشود.
Android از مدل محفظه امن چندلایه مبتنی بر هسته لینوکس استفاده میکند. هر برنامه به عنوان یک کاربر لینوکس جداگانه با UID منحصربهفرد کار میکند که ایزولهسازی پایه را در سطح فرآیندها و فایلها فراهم میکند. لایههای اضافی — SELinux برای کنترل دسترسی اجباری و Permissions برای کنترل دسترسی به APIهای سیستم.
SELinux در Android در حالت enforcing کار میکند، به این معنی که سیاستهای امنیتی به صورت اجباری اعمال میشوند. به هر برنامه یک زمینه امنیتی (security context) اختصاص داده میشود و تمام فراخوانیهای سیستم از نظر مطابقت با سیاست بررسی میشوند. SELinux در Android شامل بیش از 1500 قانون است که سیستم فایل، ارتباطات بینفرآیندی، سوکتها و فراخوانیهای سیستم را پوشش میدهد.
ایزولهسازی UID از دسترسی مستقیم برنامه به فایلهای برنامه دیگر جلوگیری میکند. به عنوان مثال، برنامه A با UID 10001 نمیتواند فایلهای برنامه B با UID 10002 را بخواند، حتی اگر هر دو از طرف یک کاربر تلفن اجرا شوند. این اصل پایه امنیت چندکاربره لینوکس است که برای دستگاههای موبایل تطبیق داده شده است.
// دسترسی به دایرکتوری اختصاصی برنامه در Android
File appDir = context.getFilesDir();
File cacheDir = context.getCacheDir();
File externalDir = context.getExternalFilesDir(null);
// تلاش برای دسترسی به دایرکتوری دیگران باعث SecurityException میشود
// File otherApp = new File("/data/data/com.other.app/shared_prefs/");
// استفاده از FileProvider برای اشتراکگذاری امن فایلها
Uri contentUri = FileProvider.getUriForFile(
context, "com.example.fileprovider", file
);
Android مکانیزمهای اضافی برای تبادل امن داده بین برنامهها فراهم میکند. ContentProvider — یک کامپوننت Android که به برنامه اجازه میدهد از طریق یک URI دقیقاً تعریفشده به دادههای خود دسترسی دهد. FileProvider — روشی امن برای اشتراکگذاری فایلها بدون افشای مسیرهای سیستم فایل.
اگرچه App Sandbox یک مکانیزم حفاظتی قدرتمند است، محدودیتهای اساسی دارد. محفظه امن از دسترسی افقی (برنامه-به-برنامه) محافظت میکند، اما نه از دسترسی عمودی (بدافزار در سطح هسته یا دسترسی فیزیکی به دستگاه). در صورت jailbreak یا دسترسی root، محفظه امن میتواند دور زده شود زیرا مهاجم حقوق سوپروزیر را به دست میآورد.
محدودیت دوم — مجوزهای مخرب. اگر کاربر به برنامه دسترسی به مخاطبین و میکروفون بدهد، محفظه امن نمیتواند از جمعآوری این دادهها جلوگیری کند زیرا برنامه از APIهای قانونی سیستم استفاده میکند. حفاظت در این حالت به سطح آگاهی کاربر و بررسی App Store و Google Play منتقل میشود.
محدودیت سوم — تعامل بین محفظههای امن. برخی خدمات سیستمی (NotificationListenerService, AccessibilityService) دسترسی گستردهای به دادههای سایر برنامهها دارند. مهاجم میتواند از این خدمات برای دور زدن محفظه امن استفاده کند اگر مجوزهای مربوطه را به دست آورد. Google و Apple دائماً سیاستهای خود را برای چنین خدماتی بهروز میکنند.
با وجود محدودیتها، محفظه امن یک جزء حیاتی امنیت سیستمعاملهای موبایل است. طبق Android Security Report (2024)، ایزولهسازی sandbox از بیش از 99% تلاشهای دسترسی بینبرنامهای به دادهها جلوگیری میکند. Sandbox در ترکیب با Code Signing، App Review و runtime permissions حفاظت چندلایه یک دستگاه موبایل مدرن را تشکیل میدهد.
سوالات متداول
محفظه امن برنامه — یک سیستم ایزولهسازی است که در آن هر برنامه در فضای ایزولهشده خود کار میکند و بدون اجازه صریح کاربر به دادههای سایر برنامهها دسترسی ندارد.
iOS از ایزولهسازی کانتینری سختگیرانه از طریق Sandbox.kext و entitlements استفاده میکند. Android از تفکیک UID در سطح هسته لینوکس و SELinux استفاده میکند. اصل یکسان است، اما پیادهسازی و انعطافپذیری متفاوت است.
دور زدن محفظه امن فقط با jailbreak (iOS) یا دسترسی root (Android) امکانپذیر است. در دستگاههای استاندارد بدون تغییر سیستم عامل، دور زدن محفظه امن از طریق APIهای قانونی غیرممکن است.
iOS از UIActivityViewController و App Groups استفاده میکند. Android — از ContentProvider، FileProvider و Intents. همه مکانیزمها از طریق APIهای سیستم با کنترل امنیتی کار میکنند.
این اصل به این معناست که برنامه فقط حقوقی را دریافت میکند که برای کار خود نیاز دارد. دسترسی به منابع اضافی از طریق مجوزها درخواست و توسط کاربر تأمین میشود.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید