در سطح سیستم عامل، پلتفرم اندروید امنیت هسته لینوکس و همچنین تسهیلات ارتباط بین فرآیندی (IPC) ایمن را برای برقراری ارتباط امن بین برنامه های در حال اجرا در فرآیندهای مختلف فراهم می کند. این ویژگی های امنیتی در سطح سیستم عامل تضمین می کند که حتی کدهای بومی توسط Application Sandbox محدود می شوند. چه آن کد نتیجه رفتار برنامه گنجانده شده باشد یا سوء استفاده از آسیبپذیری برنامه، سیستم به گونهای طراحی شده است که از آسیب رساندن برنامههای سرکش به سایر برنامهها، سیستم Android یا خود دستگاه جلوگیری کند. برای اقداماتی که می توانید برای تقویت هسته در دستگاه های خود انجام دهید، به پیکربندی هسته مراجعه کنید. برای تنظیمات مورد نیاز به سند تعریف سازگاری Android (CDD) مراجعه کنید.
امنیت لینوکس
اساس پلتفرم اندروید، هسته لینوکس است. هسته لینوکس سالهاست که در حال استفاده گسترده بوده است و در میلیون ها محیط حساس به امنیت استفاده می شود. لینوکس در طول تاریخچهای که دائماً توسط هزاران توسعهدهنده مورد تحقیق، حمله و تعمیر قرار میگیرد، تبدیل به یک هسته پایدار و امن شده است که مورد اعتماد بسیاری از شرکتها و متخصصان امنیتی است.
هسته لینوکس به عنوان پایه ای برای یک محیط محاسباتی تلفن همراه، چندین ویژگی امنیتی کلیدی را برای اندروید فراهم می کند، از جمله:
- یک مدل مجوزهای مبتنی بر کاربر
- جداسازی فرآیند
- مکانیزم توسعه پذیر برای IPC ایمن
- توانایی حذف قسمت های غیر ضروری و بالقوه ناامن هسته
به عنوان یک سیستم عامل چند کاربره، یک هدف امنیتی اساسی هسته لینوکس، جداسازی منابع کاربر از یکدیگر است. فلسفه امنیت لینوکس محافظت از منابع کاربر در برابر یکدیگر است، لینوکس:
- کاربر A را از خواندن فایل های کاربر B جلوگیری می کند
- تضمین می کند که کاربر A حافظه کاربر B را خسته نمی کند
- تضمین می کند که کاربر A منابع CPU کاربر B را تمام نمی کند
- اطمینان حاصل می کند که کاربر A دستگاه های کاربر B (به عنوان مثال، تلفن، GPS و بلوتوث) را خسته نمی کند.
سندباکس برنامه
امنیت برنامه اندروید توسط Application Sandbox اعمال می شود که برنامه ها را از یکدیگر جدا می کند و از برنامه ها و سیستم در برابر برنامه های مخرب محافظت می کند. برای جزئیات بیشتر، به Application Sandbox مراجعه کنید.
پارتیشن سیستم و حالت ایمن
پارتیشن های مختلف محافظت شده از یکپارچگی شامل هسته اندروید و همچنین کتابخانه های سیستم عامل، زمان اجرای برنامه، چارچوب برنامه و برنامه ها هستند. این پارتیشن روی فقط خواندنی تنظیم شده است. وقتی کاربر دستگاه را به حالت ایمن راهاندازی میکند، برنامههای شخص ثالث ممکن است به صورت دستی توسط مالک دستگاه راهاندازی شوند اما بهطور پیشفرض راهاندازی نشوند.
مجوزهای سیستم فایل
در یک محیط به سبک یونیکس، مجوزهای سیستم فایل تضمین می کند که یک کاربر نمی تواند فایل های کاربر دیگر را تغییر دهد یا بخواند. در مورد اندروید، هر برنامه به عنوان کاربر خاص خود اجرا می شود. مگر اینکه توسعهدهنده بهصراحت فایلها را با برنامههای دیگر به اشتراک بگذارد، فایلهای ایجاد شده توسط یک برنامه قابل خواندن یا تغییر توسط برنامه دیگر نیست.
لینوکس با امنیت بالا
اندروید برای اعمال سیاستهای کنترل دسترسی و ایجاد کنترل دسترسی اجباری (mac) روی فرآیندها از لینوکس تقویتشده با امنیت (SELinux) استفاده میکند. برای جزئیات بیشتر به Linux Enhanced Security در Android مراجعه کنید.
بوت تایید شده
اندروید 7.0 و نسخه های جدیدتر از بوت تایید شده کاملاً اجرا شده پشتیبانی می کند، به این معنی که دستگاه های در معرض خطر نمی توانند بوت شوند. Verified Boot یکپارچگی نرم افزار دستگاه را از یک ریشه سخت افزاری تا پارتیشن سیستم تضمین می کند. در طول بوت، هر مرحله قبل از اجرای آن، یکپارچگی و صحت مرحله بعدی را به صورت رمزنگاری تایید می کند.
برای جزئیات بیشتر به بوت تایید شده مراجعه کنید.
رمزنگاری
اندروید مجموعه ای از API های رمزنگاری را برای استفاده توسط برنامه ها ارائه می دهد. اینها شامل پیاده سازی رمزنگاری های اولیه استاندارد و رایج مانند AES، RSA، DSA و SHA می شود. علاوه بر این، API برای پروتکل های سطح بالاتر مانند SSL و HTTPS ارائه شده است.
Android 4.0 کلاس KeyChain را معرفی کرد تا به برنامهها اجازه دهد تا از فضای ذخیرهسازی اعتبار سیستم برای کلیدهای خصوصی و زنجیرههای گواهی استفاده کنند.
روت کردن دستگاه
به طور پیش فرض، در اندروید فقط هسته و زیرمجموعه کوچکی از خدمات اصلی با مجوزهای ریشه اجرا می شوند. SELinux هنوز فرآیندهای فضای کاربر را که به صورت روت اجرا می شوند محدود می کند. بوت تایید شده از تغییر دائمی سیستم عامل توسط کاربر یا سرویسی با مجوزهای ریشه جلوگیری می کند.
توانایی تغییر دستگاه اندرویدی که دارند برای توسعه دهندگانی که با پلتفرم اندروید کار می کنند مهم است. در بسیاری از دستگاه های اندرویدی، کاربران این امکان را دارند که قفل بوت لودر را باز کنند تا امکان نصب یک سیستم عامل جایگزین را فراهم کنند. این سیستمعاملهای جایگزین ممکن است به مالک اجازه دهند به منظور اشکالزدایی برنامهها و اجزای سیستم یا دسترسی به ویژگیهایی که توسط APIهای Android به برنامهها ارائه نشدهاند، دسترسی ریشه داشته باشد.
در برخی از دستگاهها، شخصی با کنترل فیزیکی یک دستگاه و کابل USB میتواند یک سیستم عامل جدید را نصب کند که امتیازات root را در اختیار کاربر قرار میدهد. برای محافظت از هر گونه اطلاعات کاربر موجود در برابر به خطر افتادن، مکانیسم باز کردن قفل بوت لودر نیاز دارد که بوت لودر هر گونه اطلاعات کاربر موجود را به عنوان بخشی از مرحله باز کردن قفل پاک کند. دسترسی ریشه که از طریق بهره برداری از یک باگ هسته یا حفره امنیتی به دست می آید، می تواند این حفاظت را دور بزند.
رمزگذاری داده ها با یک کلید ذخیره شده در دستگاه، از داده های برنامه در برابر کاربران ریشه در دستگاه های روت شده محافظت نمی کند. برنامهها میتوانند با استفاده از رمزگذاری با کلید ذخیرهشده خارج از دستگاه، مانند روی سرور یا رمز عبور کاربر، لایهای از حفاظت از دادهها را اضافه کنند. این رویکرد میتواند محافظت موقتی را در حالی که کلید موجود نیست ارائه کند، اما در برخی مواقع کلید باید در اختیار برنامه قرار گیرد و سپس برای کاربران روت قابل دسترسی میشود.
یک رویکرد قوی تر برای محافظت از داده ها از کاربران ریشه از طریق استفاده از راه حل های سخت افزاری است. OEMها ممکن است راهحلهای سختافزاری را پیادهسازی کنند که دسترسی به انواع خاصی از محتوا مانند DRM برای پخش ویدیو، یا ذخیرهسازی مورد اعتماد مرتبط با NFC را برای کیف پول Google محدود میکند. در مورد دستگاه گم شده یا دزدیده شده، رمزگذاری ذخیره سازی تضمین می کند که بدون اطلاع از اعتبار صفحه قفل کاربر، نمی توان به داده های کاربر دسترسی داشت.
ویژگی های امنیتی کاربر
رمزگذاری ذخیره سازی
CDD ایجاب میکند که همه دستگاههایی که با Android 10 یا بالاتر راهاندازی میشوند، و اکثر دستگاههایی که با Android 6.0 یا بالاتر راهاندازی میشوند، رمزگذاری فضای ذخیرهسازی را از جعبه فعال کنند.
اجرای فعلی رمزگذاری ذخیره سازی اندروید ، رمزگذاری مبتنی بر فایل در ترکیب با رمزگذاری ابرداده است. رمزگذاری مبتنی بر فایل، محتویات و نامهای فایل را در پارتیشن دادههای کاربر با استفاده از کلیدهای مختلف برای دایرکتوریهای مختلف به صورت شفاف رمزگذاری میکند. این دایرکتوری های ذخیره سازی رمزگذاری شده با اعتبار و دستگاه رمزگذاری شده برای هر کاربر، از جمله نمایه های کاری، فراهم می کند.
رمزگذاری فراداده مکمل رمزگذاری مبتنی بر فایل است. تمام بلوکهای موجود در پارتیشن دادههای کاربر را که قبلاً توسط رمزگذاری مبتنی بر فایل رمزگذاری نشدهاند، با استفاده از کلیدی که به اعتبار صفحه قفل هیچ کاربر محدود نشده است، اما همچنان توسط Verified Boot محافظت میشود، رمزگذاری میکند.
حفاظت از اعتبار صفحه قفل
Android را می توان به گونه ای پیکربندی کرد که قبل از دسترسی به دستگاه، اعتبار صفحه قفل ارائه شده توسط کاربر (PIN، رمز عبور یا الگو) را تأیید کند. علاوه بر جلوگیری از استفاده غیرمجاز از دستگاه، اعتبار صفحه قفل از کلید رمزنگاری برای داده های رمزگذاری شده با اعتبارنامه محافظت می کند. استفاده از اعتبارنامه صفحه قفل و/یا قوانین پیچیدگی اعتبارنامه میتواند توسط سرپرست دستگاه مورد نیاز باشد.
مدیریت دستگاه
Android 2.2 و نسخه های جدیدتر API مدیریت دستگاه Android را ارائه می دهد که ویژگی های مدیریت دستگاه را در سطح سیستم ارائه می دهد. به عنوان مثال، برنامه ایمیل داخلی اندروید از APIها برای بهبود پشتیبانی Exchange استفاده می کند. از طریق برنامه ایمیل، مدیران Exchange میتوانند خطمشیهای اعتبار صفحه قفل - از جمله گذرواژههای الفبایی یا پینهای عددی - را در همه دستگاهها اعمال کنند. مدیران همچنین می توانند از راه دور گوشی های گم شده یا دزدیده شده را پاک کنند (یعنی پیش فرض های کارخانه را بازیابی کنند).
این APIها علاوه بر استفاده در برنامههای موجود در سیستم Android، برای ارائهدهندگان شخص ثالث راهحلهای مدیریت دستگاه در دسترس هستند. جزئیات API در Device Administration ارائه شده است. ،در سطح سیستم عامل، پلتفرم اندروید امنیت هسته لینوکس و همچنین تسهیلات ارتباط بین فرآیندی (IPC) ایمن را برای برقراری ارتباط امن بین برنامه های در حال اجرا در فرآیندهای مختلف فراهم می کند. این ویژگی های امنیتی در سطح سیستم عامل تضمین می کند که حتی کدهای بومی توسط Application Sandbox محدود می شوند. چه آن کد نتیجه رفتار برنامه گنجانده شده باشد یا سوء استفاده از آسیبپذیری برنامه، سیستم به گونهای طراحی شده است که از آسیب رساندن برنامههای سرکش به سایر برنامهها، سیستم Android یا خود دستگاه جلوگیری کند. برای اقداماتی که می توانید برای تقویت هسته در دستگاه های خود انجام دهید، به پیکربندی هسته مراجعه کنید. برای تنظیمات مورد نیاز به سند تعریف سازگاری Android (CDD) مراجعه کنید.
امنیت لینوکس
اساس پلتفرم اندروید، هسته لینوکس است. هسته لینوکس سالهاست که در حال استفاده گسترده بوده است و در میلیون ها محیط حساس به امنیت استفاده می شود. لینوکس در طول تاریخچهای که دائماً توسط هزاران توسعهدهنده مورد تحقیق، حمله و تعمیر قرار میگیرد، تبدیل به یک هسته پایدار و امن شده است که مورد اعتماد بسیاری از شرکتها و متخصصان امنیتی است.
هسته لینوکس به عنوان پایه ای برای یک محیط محاسباتی تلفن همراه، چندین ویژگی امنیتی کلیدی را برای اندروید فراهم می کند، از جمله:
- یک مدل مجوزهای مبتنی بر کاربر
- جداسازی فرآیند
- مکانیزم توسعه پذیر برای IPC ایمن
- توانایی حذف قسمت های غیر ضروری و بالقوه ناامن هسته
به عنوان یک سیستم عامل چند کاربره، یک هدف امنیتی اساسی هسته لینوکس، جداسازی منابع کاربر از یکدیگر است. فلسفه امنیت لینوکس محافظت از منابع کاربر در برابر یکدیگر است، لینوکس:
- کاربر A را از خواندن فایل های کاربر B جلوگیری می کند
- تضمین می کند که کاربر A حافظه کاربر B را خسته نمی کند
- تضمین می کند که کاربر A منابع CPU کاربر B را تمام نمی کند
- اطمینان حاصل می کند که کاربر A دستگاه های کاربر B (به عنوان مثال، تلفن، GPS و بلوتوث) را خسته نمی کند.
سندباکس برنامه
امنیت برنامه اندروید توسط Application Sandbox اعمال می شود که برنامه ها را از یکدیگر جدا می کند و از برنامه ها و سیستم در برابر برنامه های مخرب محافظت می کند. برای جزئیات بیشتر، به Application Sandbox مراجعه کنید.
پارتیشن سیستم و حالت ایمن
پارتیشن های مختلف محافظت شده از یکپارچگی شامل هسته اندروید و همچنین کتابخانه های سیستم عامل، زمان اجرای برنامه، چارچوب برنامه و برنامه ها هستند. این پارتیشن روی فقط خواندنی تنظیم شده است. وقتی کاربر دستگاه را به حالت ایمن راهاندازی میکند، برنامههای شخص ثالث ممکن است به صورت دستی توسط مالک دستگاه راهاندازی شوند اما بهطور پیشفرض راهاندازی نشوند.
مجوزهای سیستم فایل
در یک محیط به سبک یونیکس، مجوزهای سیستم فایل تضمین می کند که یک کاربر نمی تواند فایل های کاربر دیگر را تغییر دهد یا بخواند. در مورد اندروید، هر برنامه به عنوان کاربر خاص خود اجرا می شود. مگر اینکه توسعهدهنده بهصراحت فایلها را با برنامههای دیگر به اشتراک بگذارد، فایلهای ایجاد شده توسط یک برنامه قابل خواندن یا تغییر توسط برنامه دیگر نیست.
لینوکس با امنیت بالا
اندروید برای اعمال سیاستهای کنترل دسترسی و ایجاد کنترل دسترسی اجباری (mac) روی فرآیندها از لینوکس تقویتشده با امنیت (SELinux) استفاده میکند. برای جزئیات بیشتر به Linux Enhanced Security در Android مراجعه کنید.
بوت تایید شده
اندروید 7.0 و نسخه های جدیدتر از بوت تایید شده کاملاً اجرا شده پشتیبانی می کند، به این معنی که دستگاه های در معرض خطر نمی توانند بوت شوند. Verified Boot یکپارچگی نرم افزار دستگاه را از یک ریشه سخت افزاری تا پارتیشن سیستم تضمین می کند. در طول بوت، هر مرحله قبل از اجرای آن، یکپارچگی و صحت مرحله بعدی را به صورت رمزنگاری تایید می کند.
برای جزئیات بیشتر به بوت تایید شده مراجعه کنید.
رمزنگاری
اندروید مجموعه ای از API های رمزنگاری را برای استفاده توسط برنامه ها ارائه می دهد. اینها شامل پیاده سازی رمزنگاری های اولیه استاندارد و رایج مانند AES، RSA، DSA و SHA می شود. علاوه بر این، API برای پروتکل های سطح بالاتر مانند SSL و HTTPS ارائه شده است.
Android 4.0 کلاس KeyChain را معرفی کرد تا به برنامهها اجازه دهد تا از فضای ذخیرهسازی اعتبار سیستم برای کلیدهای خصوصی و زنجیرههای گواهی استفاده کنند.
روت کردن دستگاه
به طور پیش فرض، در اندروید فقط هسته و زیرمجموعه کوچکی از خدمات اصلی با مجوزهای ریشه اجرا می شوند. SELinux هنوز فرآیندهای فضای کاربر را که به صورت روت اجرا می شوند محدود می کند. بوت تایید شده از تغییر دائمی سیستم عامل توسط کاربر یا سرویسی با مجوزهای ریشه جلوگیری می کند.
توانایی تغییر دستگاه اندرویدی که دارند برای توسعه دهندگانی که با پلتفرم اندروید کار می کنند مهم است. در بسیاری از دستگاه های اندرویدی، کاربران این امکان را دارند که قفل بوت لودر را باز کنند تا امکان نصب یک سیستم عامل جایگزین را فراهم کنند. این سیستمعاملهای جایگزین ممکن است به مالک اجازه دهند به منظور اشکالزدایی برنامهها و اجزای سیستم یا دسترسی به ویژگیهایی که توسط APIهای Android به برنامهها ارائه نشدهاند، دسترسی ریشه داشته باشد.
در برخی از دستگاهها، شخصی با کنترل فیزیکی یک دستگاه و کابل USB میتواند یک سیستم عامل جدید را نصب کند که امتیازات root را در اختیار کاربر قرار میدهد. برای محافظت از هر گونه اطلاعات کاربر موجود در برابر به خطر افتادن، مکانیسم باز کردن قفل بوت لودر نیاز دارد که بوت لودر هر گونه اطلاعات کاربر موجود را به عنوان بخشی از مرحله باز کردن قفل پاک کند. دسترسی ریشه که از طریق بهره برداری از یک باگ هسته یا حفره امنیتی به دست می آید، می تواند این حفاظت را دور بزند.
رمزگذاری داده ها با یک کلید ذخیره شده در دستگاه، از داده های برنامه در برابر کاربران ریشه در دستگاه های روت شده محافظت نمی کند. برنامهها میتوانند با استفاده از رمزگذاری با کلید ذخیرهشده خارج از دستگاه، مانند روی سرور یا رمز عبور کاربر، لایهای از حفاظت از دادهها را اضافه کنند. این رویکرد میتواند محافظت موقتی را در حالی که کلید موجود نیست ارائه کند، اما در برخی مواقع کلید باید در اختیار برنامه قرار گیرد و سپس برای کاربران روت قابل دسترسی میشود.
یک رویکرد قوی تر برای محافظت از داده ها از کاربران ریشه از طریق استفاده از راه حل های سخت افزاری است. OEMها ممکن است راهحلهای سختافزاری را پیادهسازی کنند که دسترسی به انواع خاصی از محتوا مانند DRM برای پخش ویدیو، یا ذخیرهسازی مورد اعتماد مرتبط با NFC را برای کیف پول Google محدود میکند. در مورد دستگاه گم شده یا دزدیده شده، رمزگذاری ذخیره سازی تضمین می کند که بدون اطلاع از اعتبار صفحه قفل کاربر، نمی توان به داده های کاربر دسترسی داشت.
ویژگی های امنیتی کاربر
رمزگذاری ذخیره سازی
CDD ایجاب میکند که همه دستگاههایی که با Android 10 یا بالاتر راهاندازی میشوند، و اکثر دستگاههایی که با Android 6.0 یا بالاتر راهاندازی میشوند، رمزگذاری فضای ذخیرهسازی را از جعبه فعال کنند.
اجرای فعلی رمزگذاری ذخیره سازی اندروید ، رمزگذاری مبتنی بر فایل در ترکیب با رمزگذاری ابرداده است. رمزگذاری مبتنی بر فایل، محتویات و نامهای فایل را در پارتیشن دادههای کاربر با استفاده از کلیدهای مختلف برای دایرکتوریهای مختلف به صورت شفاف رمزگذاری میکند. این دایرکتوری های ذخیره سازی رمزگذاری شده با اعتبار و دستگاه رمزگذاری شده برای هر کاربر، از جمله نمایه های کاری، فراهم می کند.
رمزگذاری فراداده مکمل رمزگذاری مبتنی بر فایل است. تمام بلوکهای موجود در پارتیشن دادههای کاربر را که قبلاً توسط رمزگذاری مبتنی بر فایل رمزگذاری نشدهاند، با استفاده از کلیدی که به اعتبار صفحه قفل هیچ کاربر محدود نشده است، اما همچنان توسط Verified Boot محافظت میشود، رمزگذاری میکند.
حفاظت از اعتبار صفحه قفل
Android را می توان به گونه ای پیکربندی کرد که قبل از دسترسی به دستگاه، اعتبار صفحه قفل ارائه شده توسط کاربر (PIN، رمز عبور یا الگو) را تأیید کند. علاوه بر جلوگیری از استفاده غیرمجاز از دستگاه، اعتبار صفحه قفل از کلید رمزنگاری برای داده های رمزگذاری شده با اعتبارنامه محافظت می کند. استفاده از اعتبارنامه صفحه قفل و/یا قوانین پیچیدگی اعتبارنامه میتواند توسط سرپرست دستگاه مورد نیاز باشد.
مدیریت دستگاه
Android 2.2 و نسخه های جدیدتر API مدیریت دستگاه Android را ارائه می دهد که ویژگی های مدیریت دستگاه را در سطح سیستم ارائه می دهد. به عنوان مثال، برنامه ایمیل داخلی اندروید از APIها برای بهبود پشتیبانی Exchange استفاده می کند. از طریق برنامه ایمیل، مدیران Exchange میتوانند خطمشیهای اعتبار صفحه قفل - از جمله گذرواژههای الفبایی یا پینهای عددی - را در همه دستگاهها اعمال کنند. مدیران همچنین می توانند از راه دور گوشی های گم شده یا دزدیده شده را پاک کنند (یعنی پیش فرض های کارخانه را بازیابی کنند).
این APIها علاوه بر استفاده در برنامههای موجود در سیستم Android، برای ارائهدهندگان شخص ثالث راهحلهای مدیریت دستگاه در دسترس هستند. جزئیات API در Device Administration ارائه شده است. ،در سطح سیستم عامل، پلتفرم اندروید امنیت هسته لینوکس و همچنین تسهیلات ارتباط بین فرآیندی (IPC) ایمن را برای برقراری ارتباط امن بین برنامه های در حال اجرا در فرآیندهای مختلف فراهم می کند. این ویژگی های امنیتی در سطح سیستم عامل تضمین می کند که حتی کدهای بومی توسط Application Sandbox محدود می شوند. چه آن کد نتیجه رفتار برنامه گنجانده شده باشد یا سوء استفاده از آسیبپذیری برنامه، سیستم به گونهای طراحی شده است که از آسیب رساندن برنامههای سرکش به سایر برنامهها، سیستم Android یا خود دستگاه جلوگیری کند. برای اقداماتی که می توانید برای تقویت هسته در دستگاه های خود انجام دهید، به پیکربندی هسته مراجعه کنید. برای تنظیمات مورد نیاز به سند تعریف سازگاری Android (CDD) مراجعه کنید.
امنیت لینوکس
اساس پلتفرم اندروید، هسته لینوکس است. هسته لینوکس سالهاست که در حال استفاده گسترده بوده است و در میلیون ها محیط حساس به امنیت استفاده می شود. لینوکس در طول تاریخچهای که دائماً توسط هزاران توسعهدهنده مورد تحقیق، حمله و تعمیر قرار میگیرد، تبدیل به یک هسته پایدار و امن شده است که مورد اعتماد بسیاری از شرکتها و متخصصان امنیتی است.
هسته لینوکس به عنوان پایه ای برای یک محیط محاسباتی تلفن همراه، چندین ویژگی امنیتی کلیدی را برای اندروید فراهم می کند، از جمله:
- یک مدل مجوزهای مبتنی بر کاربر
- جداسازی فرآیند
- مکانیزم توسعه پذیر برای IPC ایمن
- توانایی حذف قسمت های غیر ضروری و بالقوه ناامن هسته
به عنوان یک سیستم عامل چند کاربره، یک هدف امنیتی اساسی هسته لینوکس، جداسازی منابع کاربر از یکدیگر است. فلسفه امنیت لینوکس محافظت از منابع کاربر در برابر یکدیگر است، لینوکس:
- کاربر A را از خواندن فایل های کاربر B جلوگیری می کند
- تضمین می کند که کاربر A حافظه کاربر B را خسته نمی کند
- تضمین می کند که کاربر A منابع CPU کاربر B را تمام نمی کند
- اطمینان حاصل می کند که کاربر A دستگاه های کاربر B (به عنوان مثال، تلفن، GPS و بلوتوث) را خسته نمی کند.
سندباکس برنامه
امنیت برنامه اندروید توسط Application Sandbox اعمال می شود که برنامه ها را از یکدیگر جدا می کند و از برنامه ها و سیستم در برابر برنامه های مخرب محافظت می کند. برای جزئیات بیشتر، به Application Sandbox مراجعه کنید.
پارتیشن سیستم و حالت ایمن
پارتیشن های مختلف محافظت شده از یکپارچگی شامل هسته اندروید و همچنین کتابخانه های سیستم عامل، زمان اجرای برنامه، چارچوب برنامه و برنامه ها هستند. این پارتیشن روی فقط خواندنی تنظیم شده است. وقتی کاربر دستگاه را به حالت ایمن راهاندازی میکند، برنامههای شخص ثالث ممکن است به صورت دستی توسط مالک دستگاه راهاندازی شوند اما بهطور پیشفرض راهاندازی نشوند.
مجوزهای سیستم فایل
در یک محیط به سبک یونیکس، مجوزهای سیستم فایل تضمین می کند که یک کاربر نمی تواند فایل های کاربر دیگر را تغییر دهد یا بخواند. در مورد اندروید، هر برنامه به عنوان کاربر خاص خود اجرا می شود. مگر اینکه توسعهدهنده بهصراحت فایلها را با برنامههای دیگر به اشتراک بگذارد، فایلهای ایجاد شده توسط یک برنامه قابل خواندن یا تغییر توسط برنامه دیگر نیست.
لینوکس با امنیت بالا
اندروید برای اعمال سیاستهای کنترل دسترسی و ایجاد کنترل دسترسی اجباری (mac) روی فرآیندها از لینوکس تقویتشده با امنیت (SELinux) استفاده میکند. برای جزئیات بیشتر به Linux Enhanced Security در Android مراجعه کنید.
بوت تایید شده
اندروید 7.0 و نسخه های جدیدتر از بوت تایید شده کاملاً اجرا شده پشتیبانی می کند، به این معنی که دستگاه های در معرض خطر نمی توانند بوت شوند. Verified Boot یکپارچگی نرم افزار دستگاه را از یک ریشه سخت افزاری تا پارتیشن سیستم تضمین می کند. در طول بوت، هر مرحله قبل از اجرای آن، یکپارچگی و صحت مرحله بعدی را به صورت رمزنگاری تایید می کند.
برای جزئیات بیشتر به بوت تایید شده مراجعه کنید.
رمزنگاری
اندروید مجموعه ای از API های رمزنگاری را برای استفاده توسط برنامه ها ارائه می دهد. اینها شامل پیاده سازی رمزنگاری های اولیه استاندارد و رایج مانند AES، RSA، DSA و SHA می شود. علاوه بر این، API برای پروتکل های سطح بالاتر مانند SSL و HTTPS ارائه شده است.
Android 4.0 کلاس KeyChain را معرفی کرد تا به برنامهها اجازه دهد تا از فضای ذخیرهسازی اعتبار سیستم برای کلیدهای خصوصی و زنجیرههای گواهی استفاده کنند.
روت کردن دستگاه
به طور پیش فرض، در اندروید فقط هسته و زیرمجموعه کوچکی از خدمات اصلی با مجوزهای ریشه اجرا می شوند. SELinux هنوز فرآیندهای فضای کاربر را که به صورت روت اجرا می شوند محدود می کند. بوت تایید شده از تغییر دائمی سیستم عامل توسط کاربر یا سرویسی با مجوزهای ریشه جلوگیری می کند.
توانایی تغییر دستگاه اندرویدی که دارند برای توسعه دهندگانی که با پلتفرم اندروید کار می کنند مهم است. در بسیاری از دستگاه های اندرویدی، کاربران این امکان را دارند که قفل بوت لودر را باز کنند تا امکان نصب یک سیستم عامل جایگزین را فراهم کنند. این سیستمعاملهای جایگزین ممکن است به مالک اجازه دهند به منظور اشکالزدایی برنامهها و اجزای سیستم یا دسترسی به ویژگیهایی که توسط APIهای Android به برنامهها ارائه نشدهاند، دسترسی ریشه داشته باشد.
در برخی از دستگاهها، شخصی با کنترل فیزیکی یک دستگاه و کابل USB میتواند یک سیستم عامل جدید را نصب کند که امتیازات root را در اختیار کاربر قرار میدهد. برای محافظت از هر گونه اطلاعات کاربر موجود در برابر به خطر افتادن، مکانیسم باز کردن قفل بوت لودر نیاز دارد که بوت لودر هر گونه اطلاعات کاربر موجود را به عنوان بخشی از مرحله باز کردن قفل پاک کند. دسترسی ریشه که از طریق بهره برداری از یک باگ هسته یا حفره امنیتی به دست می آید، می تواند این حفاظت را دور بزند.
رمزگذاری داده ها با یک کلید ذخیره شده در دستگاه، از داده های برنامه در برابر کاربران ریشه در دستگاه های روت شده محافظت نمی کند. برنامهها میتوانند با استفاده از رمزگذاری با کلید ذخیرهشده خارج از دستگاه، مانند روی سرور یا رمز عبور کاربر، لایهای از حفاظت از دادهها را اضافه کنند. این رویکرد میتواند محافظت موقتی را در حالی که کلید موجود نیست ارائه کند، اما در برخی مواقع کلید باید در اختیار برنامه قرار گیرد و سپس برای کاربران روت قابل دسترسی میشود.
یک رویکرد قوی تر برای محافظت از داده ها از کاربران ریشه از طریق استفاده از راه حل های سخت افزاری است. OEMها ممکن است راهحلهای سختافزاری را پیادهسازی کنند که دسترسی به انواع خاصی از محتوا مانند DRM برای پخش ویدیو، یا ذخیرهسازی مورد اعتماد مرتبط با NFC را برای کیف پول Google محدود میکند. در مورد دستگاه گم شده یا دزدیده شده، رمزگذاری ذخیره سازی تضمین می کند که بدون اطلاع از اعتبار صفحه قفل کاربر، نمی توان به داده های کاربر دسترسی داشت.
ویژگی های امنیتی کاربر
رمزگذاری ذخیره سازی
CDD ایجاب میکند که همه دستگاههایی که با Android 10 یا بالاتر راهاندازی میشوند، و اکثر دستگاههایی که با Android 6.0 یا بالاتر راهاندازی میشوند، رمزگذاری فضای ذخیرهسازی را از جعبه فعال کنند.
اجرای فعلی رمزگذاری ذخیره سازی اندروید ، رمزگذاری مبتنی بر فایل در ترکیب با رمزگذاری ابرداده است. رمزگذاری مبتنی بر فایل، محتویات و نامهای فایل را در پارتیشن دادههای کاربر با استفاده از کلیدهای مختلف برای دایرکتوریهای مختلف به صورت شفاف رمزگذاری میکند. این دایرکتوری های ذخیره سازی رمزگذاری شده با اعتبار و دستگاه رمزگذاری شده برای هر کاربر، از جمله نمایه های کاری، فراهم می کند.
رمزگذاری فراداده مکمل رمزگذاری مبتنی بر فایل است. تمام بلوکهای موجود در پارتیشن دادههای کاربر را که قبلاً توسط رمزگذاری مبتنی بر فایل رمزگذاری نشدهاند، با استفاده از کلیدی که به اعتبار صفحه قفل هیچ کاربر محدود نشده است، اما همچنان توسط Verified Boot محافظت میشود، رمزگذاری میکند.
حفاظت از اعتبار صفحه قفل
Android را می توان به گونه ای پیکربندی کرد که قبل از دسترسی به دستگاه، اعتبار صفحه قفل ارائه شده توسط کاربر (PIN، رمز عبور یا الگو) را تأیید کند. علاوه بر جلوگیری از استفاده غیرمجاز از دستگاه، اعتبار صفحه قفل از کلید رمزنگاری برای داده های رمزگذاری شده با اعتبارنامه محافظت می کند. استفاده از اعتبارنامه صفحه قفل و/یا قوانین پیچیدگی اعتبارنامه میتواند توسط سرپرست دستگاه مورد نیاز باشد.
مدیریت دستگاه
Android 2.2 و نسخه های جدیدتر API مدیریت دستگاه Android را ارائه می دهد که ویژگی های مدیریت دستگاه را در سطح سیستم ارائه می دهد. به عنوان مثال، برنامه ایمیل داخلی اندروید از APIها برای بهبود پشتیبانی Exchange استفاده می کند. از طریق برنامه ایمیل، مدیران Exchange میتوانند خطمشیهای اعتبار صفحه قفل - از جمله گذرواژههای الفبایی یا پینهای عددی - را در همه دستگاهها اعمال کنند. مدیران همچنین می توانند از راه دور گوشی های گم شده یا دزدیده شده را پاک کنند (یعنی پیش فرض های کارخانه را بازیابی کنند).
این APIها علاوه بر استفاده در برنامههای موجود در سیستم Android، برای ارائهدهندگان شخص ثالث راهحلهای مدیریت دستگاه در دسترس هستند. جزئیات API در Device Administration ارائه شده است. ،در سطح سیستم عامل، پلتفرم اندروید امنیت هسته لینوکس و همچنین تسهیلات ارتباط بین فرآیندی (IPC) ایمن را برای برقراری ارتباط امن بین برنامه های در حال اجرا در فرآیندهای مختلف فراهم می کند. این ویژگی های امنیتی در سطح سیستم عامل تضمین می کند که حتی کدهای بومی توسط Application Sandbox محدود می شوند. چه آن کد نتیجه رفتار برنامه گنجانده شده باشد یا سوء استفاده از آسیبپذیری برنامه، سیستم به گونهای طراحی شده است که از آسیب رساندن برنامههای سرکش به سایر برنامهها، سیستم Android یا خود دستگاه جلوگیری کند. برای اقداماتی که می توانید برای تقویت هسته در دستگاه های خود انجام دهید، به پیکربندی هسته مراجعه کنید. برای تنظیمات مورد نیاز به سند تعریف سازگاری Android (CDD) مراجعه کنید.
امنیت لینوکس
اساس پلتفرم اندروید، هسته لینوکس است. هسته لینوکس سالهاست که در حال استفاده گسترده بوده است و در میلیون ها محیط حساس به امنیت استفاده می شود. لینوکس در طول تاریخچهای که دائماً توسط هزاران توسعهدهنده مورد تحقیق، حمله و تعمیر قرار میگیرد، تبدیل به یک هسته پایدار و امن شده است که مورد اعتماد بسیاری از شرکتها و متخصصان امنیتی است.
هسته لینوکس به عنوان پایه ای برای یک محیط محاسباتی تلفن همراه، چندین ویژگی امنیتی کلیدی را برای اندروید فراهم می کند، از جمله:
- یک مدل مجوزهای مبتنی بر کاربر
- جداسازی فرآیند
- مکانیزم توسعه پذیر برای IPC ایمن
- توانایی حذف قسمت های غیر ضروری و بالقوه ناامن هسته
به عنوان یک سیستم عامل چند کاربره، یک هدف امنیتی اساسی هسته لینوکس، جداسازی منابع کاربر از یکدیگر است. فلسفه امنیت لینوکس محافظت از منابع کاربر در برابر یکدیگر است، لینوکس:
- کاربر A را از خواندن فایل های کاربر B جلوگیری می کند
- تضمین می کند که کاربر A حافظه کاربر B را خسته نمی کند
- تضمین می کند که کاربر A منابع CPU کاربر B را تمام نمی کند
- اطمینان حاصل می کند که کاربر A دستگاه های کاربر B (به عنوان مثال، تلفن، GPS و بلوتوث) را خسته نمی کند.
سندباکس برنامه
امنیت برنامه اندروید توسط Application Sandbox اعمال می شود که برنامه ها را از یکدیگر جدا می کند و از برنامه ها و سیستم در برابر برنامه های مخرب محافظت می کند. برای جزئیات بیشتر، به Application Sandbox مراجعه کنید.
پارتیشن سیستم و حالت ایمن
پارتیشن های مختلف محافظت شده از یکپارچگی شامل هسته اندروید و همچنین کتابخانه های سیستم عامل، زمان اجرای برنامه، چارچوب برنامه و برنامه ها هستند. این پارتیشن روی فقط خواندنی تنظیم شده است. وقتی کاربر دستگاه را به حالت ایمن راهاندازی میکند، برنامههای شخص ثالث ممکن است به صورت دستی توسط مالک دستگاه راهاندازی شوند اما بهطور پیشفرض راهاندازی نشوند.
مجوزهای سیستم فایل
در یک محیط به سبک یونیکس، مجوزهای سیستم فایل تضمین می کند که یک کاربر نمی تواند فایل های کاربر دیگر را تغییر دهد یا بخواند. در مورد اندروید، هر برنامه به عنوان کاربر خاص خود اجرا می شود. مگر اینکه توسعهدهنده بهصراحت فایلها را با برنامههای دیگر به اشتراک بگذارد، فایلهای ایجاد شده توسط یک برنامه قابل خواندن یا تغییر توسط برنامه دیگر نیست.
لینوکس با امنیت بالا
اندروید برای اعمال سیاستهای کنترل دسترسی و ایجاد کنترل دسترسی اجباری (mac) روی فرآیندها از لینوکس تقویتشده با امنیت (SELinux) استفاده میکند. برای جزئیات بیشتر به Linux Enhanced Security در Android مراجعه کنید.
بوت تایید شده
اندروید 7.0 و نسخه های جدیدتر از بوت تایید شده کاملاً اجرا شده پشتیبانی می کند، به این معنی که دستگاه های در معرض خطر نمی توانند بوت شوند. Verified Boot یکپارچگی نرم افزار دستگاه را از یک ریشه سخت افزاری تا پارتیشن سیستم تضمین می کند. در طول بوت، هر مرحله قبل از اجرای آن، یکپارچگی و صحت مرحله بعدی را به صورت رمزنگاری تایید می کند.
برای جزئیات بیشتر به بوت تایید شده مراجعه کنید.
رمزنگاری
اندروید مجموعه ای از API های رمزنگاری را برای استفاده توسط برنامه ها ارائه می دهد. اینها شامل پیاده سازی رمزنگاری های اولیه استاندارد و رایج مانند AES، RSA، DSA و SHA می شود. علاوه بر این، API برای پروتکل های سطح بالاتر مانند SSL و HTTPS ارائه شده است.
Android 4.0 کلاس KeyChain را معرفی کرد تا به برنامهها اجازه دهد تا از فضای ذخیرهسازی اعتبار سیستم برای کلیدهای خصوصی و زنجیرههای گواهی استفاده کنند.
روت کردن دستگاه
به طور پیش فرض، در اندروید فقط هسته و زیرمجموعه کوچکی از خدمات اصلی با مجوزهای ریشه اجرا می شوند. SELinux هنوز فرآیندهای فضای کاربر را که به صورت روت اجرا می شوند محدود می کند. بوت تایید شده از تغییر دائمی سیستم عامل توسط کاربر یا سرویسی با مجوزهای ریشه جلوگیری می کند.
توانایی تغییر دستگاه اندرویدی که دارند برای توسعه دهندگانی که با پلتفرم اندروید کار می کنند مهم است. در بسیاری از دستگاه های اندرویدی، کاربران این امکان را دارند که قفل بوت لودر را باز کنند تا امکان نصب یک سیستم عامل جایگزین را فراهم کنند. این سیستمعاملهای جایگزین ممکن است به مالک اجازه دهند به منظور اشکالزدایی برنامهها و اجزای سیستم یا دسترسی به ویژگیهایی که توسط APIهای Android به برنامهها ارائه نشدهاند، دسترسی ریشه داشته باشد.
در برخی از دستگاهها، شخصی با کنترل فیزیکی یک دستگاه و کابل USB میتواند یک سیستم عامل جدید را نصب کند که امتیازات root را در اختیار کاربر قرار میدهد. برای محافظت از هر گونه اطلاعات کاربر موجود در برابر به خطر افتادن، مکانیسم باز کردن قفل بوت لودر نیاز دارد که بوت لودر هر گونه اطلاعات کاربر موجود را به عنوان بخشی از مرحله باز کردن قفل پاک کند. دسترسی ریشه که از طریق بهره برداری از یک باگ هسته یا حفره امنیتی به دست می آید، می تواند این حفاظت را دور بزند.
رمزگذاری داده ها با یک کلید ذخیره شده در دستگاه، از داده های برنامه در برابر کاربران ریشه در دستگاه های روت شده محافظت نمی کند. برنامهها میتوانند با استفاده از رمزگذاری با کلید ذخیرهشده خارج از دستگاه، مانند روی سرور یا رمز عبور کاربر، لایهای از حفاظت از دادهها را اضافه کنند. این رویکرد میتواند محافظت موقتی را در حالی که کلید موجود نیست ارائه کند، اما در برخی مواقع کلید باید در اختیار برنامه قرار گیرد و سپس برای کاربران روت قابل دسترسی میشود.
یک رویکرد قوی تر برای محافظت از داده ها از کاربران ریشه از طریق استفاده از راه حل های سخت افزاری است. OEMها ممکن است راهحلهای سختافزاری را پیادهسازی کنند که دسترسی به انواع خاصی از محتوا مانند DRM برای پخش ویدیو، یا ذخیرهسازی مورد اعتماد مرتبط با NFC را برای کیف پول Google محدود میکند. در مورد دستگاه گم شده یا دزدیده شده، رمزگذاری ذخیره سازی تضمین می کند که بدون اطلاع از اعتبار صفحه قفل کاربر، نمی توان به داده های کاربر دسترسی داشت.
ویژگی های امنیتی کاربر
رمزگذاری ذخیره سازی
CDD ایجاب میکند که همه دستگاههایی که با Android 10 یا بالاتر راهاندازی میشوند، و اکثر دستگاههایی که با Android 6.0 یا بالاتر راهاندازی میشوند، رمزگذاری فضای ذخیرهسازی را از جعبه فعال کنند.
اجرای فعلی رمزگذاری ذخیره سازی اندروید ، رمزگذاری مبتنی بر فایل در ترکیب با رمزگذاری ابرداده است. رمزگذاری مبتنی بر فایل، محتویات و نامهای فایل را در پارتیشن دادههای کاربر با استفاده از کلیدهای مختلف برای دایرکتوریهای مختلف به صورت شفاف رمزگذاری میکند. این دایرکتوری های ذخیره سازی رمزگذاری شده با اعتبار و دستگاه رمزگذاری شده برای هر کاربر، از جمله نمایه های کاری، فراهم می کند.
رمزگذاری فراداده مکمل رمزگذاری مبتنی بر فایل است. تمام بلوکهای موجود در پارتیشن دادههای کاربر را که قبلاً توسط رمزگذاری مبتنی بر فایل رمزگذاری نشدهاند، با استفاده از کلیدی که به اعتبار صفحه قفل هیچ کاربر محدود نشده است، اما همچنان توسط Verified Boot محافظت میشود، رمزگذاری میکند.
حفاظت از اعتبار صفحه قفل
Android را می توان به گونه ای پیکربندی کرد که قبل از دسترسی به دستگاه، اعتبار صفحه قفل ارائه شده توسط کاربر (PIN، رمز عبور یا الگو) را تأیید کند. علاوه بر جلوگیری از استفاده غیرمجاز از دستگاه، اعتبار صفحه قفل از کلید رمزنگاری برای داده های رمزگذاری شده با اعتبارنامه محافظت می کند. استفاده از اعتبارنامه صفحه قفل و/یا قوانین پیچیدگی اعتبارنامه میتواند توسط سرپرست دستگاه مورد نیاز باشد.
مدیریت دستگاه
Android 2.2 و نسخه های جدیدتر API مدیریت دستگاه Android را ارائه می دهد که ویژگی های مدیریت دستگاه را در سطح سیستم ارائه می دهد. به عنوان مثال، برنامه ایمیل داخلی اندروید از APIها برای بهبود پشتیبانی Exchange استفاده می کند. از طریق برنامه ایمیل، مدیران Exchange میتوانند خطمشیهای اعتبار صفحه قفل - از جمله گذرواژههای الفبایی یا پینهای عددی - را در همه دستگاهها اعمال کنند. مدیران همچنین می توانند از راه دور گوشی های گم شده یا دزدیده شده را پاک کنند (یعنی پیش فرض های کارخانه را بازیابی کنند).
این APIها علاوه بر استفاده در برنامههای موجود در سیستم Android، برای ارائهدهندگان شخص ثالث راهحلهای مدیریت دستگاه در دسترس هستند. جزئیات API در Device Administration ارائه شده است.