ایمنی حافظه

ناامنی حافظه

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

اشکالات ایمنی حافظه بر تجربه کاربر، هزینه ها و امنیت تأثیر می گذارد.
شکل 1 : اشکالات ایمنی حافظه و تأثیر منفی آنها بر کیفیت، امنیت و هزینه ها

اشکالات ایمنی حافظه بر کیفیت و پایداری تأثیر منفی می گذارد و سهم قابل توجهی از خرابی های مشاهده شده در دستگاه های کاربر نهایی را تشکیل می دهد. بنابراین تراکم بالای اشکالات ایمنی حافظه به طور مستقیم با تجربه ضعیف کاربر مرتبط است.
کد بومی که در زبان‌های ناامن حافظه مانند C، C++ و Assembly نوشته شده است، بیش از 70 درصد کد پلتفرم اندروید را نشان می‌دهد و تقریباً در 50 درصد از برنامه‌های فروشگاه Play وجود دارد.
با توجه به پیچیدگی روزافزون کد، در صورت عدم توجه، اشکالات ایمنی حافظه در طول زمان افزایش خواهند یافت. بنابراین، ارائه ابزارها و فناوری‌هایی برای اکوسیستم ما که می‌توانند چنین اشکالاتی را شناسایی و کاهش دهند، برای موفقیت بلندمدت ما حیاتی است.
در چند سال گذشته، ما با شرکای سخت افزاری خود برای توسعه فناوری های سخت افزاری مانند Arm Memory Tagging همکاری نزدیکی داشته ایم و Rust را در پایگاه کد اندروید معرفی کرده ایم.
این فناوری‌ها مسیر ما به سمت ایمنی حافظه را تسریع می‌کنند و به صنعت نرم‌افزار گسترده‌تر کمک می‌کنند تا یک منطقه مشکل اصلی را حل کند.

اشکالات ایمنی حافظه بر کیفیت تأثیر منفی می گذارد

اشکالات ایمنی حافظه پنهان بسته به وضعیت سیستم می تواند نتایج غیر قطعی ایجاد کند. این رفتار غیرقابل پیش بینی منجر به خرابی و آزار کاربران ما می شود.

هر روز میلیون‌ها خرابی بومی را از دستگاه‌های کاربر نهایی مشاهده می‌کنیم و با معرفی GWP-ASan ، اکثر آنها را به اشکالات ایمنی حافظه ردیابی کرده‌ایم.
این نقطه داده ارتباط بین کیفیت و تراکم اشکالات ایمنی حافظه را تأیید می کند و با آنچه همکاران Chrome ما مشاهده می کنند مطابقت دارد (به فهرست داغ اشکالات Chrome GWP-ASan مراجعه کنید).

اشکالات ایمنی حافظه بر امنیت تأثیر منفی می گذارد

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

اشکالات ایمنی حافظه بر امنیت تأثیر منفی می گذارد.
شکل 2 : اشکالات ایمنی حافظه به آسیب‌پذیری‌های اندروید کمک می‌کند

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

اشکالات ایمنی حافظه باعث افزایش هزینه ها می شود

به روز نگه داشتن دستگاه ها با اصلاحات امنیتی، کاربران ما را ایمن نگه می دارد، اما برای اکوسیستم ما هزینه مالی دارد.

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

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

ایمنی حافظه

با شروع Android 12، ما تغییرات سیستمی را برای کاهش تراکم باگ های ایمنی حافظه در پایگاه های کد اندروید ایجاد کرده ایم. ما ابزارهای ایمنی حافظه اندروید را گسترش می دهیم و الزامات جدیدی را معرفی می کنیم که اکوسیستم ما را تشویق می کند تا به این دسته از اشکالات رسیدگی کند. با گذشت زمان، اینها باید به کیفیت بالاتر و امنیت بهتر برای کاربران و هزینه کمتر برای فروشندگان ما تبدیل شوند.

ایمنی حافظه احتمالاً در سال‌های آینده به عاملی برای کیفیت و امنیت تبدیل خواهد شد و اندروید قصد دارد در این راه پیشرو باشد.

الزامات حمایت از ایمنی حافظه

سند تعریف سازگاری اندروید (CDD) اکیداً استفاده از ابزارهای ایمنی حافظه را در طول توسعه توصیه می‌کند.
ما در حال همکاری نزدیک با اکوسیستم خود هستیم تا استفاده از ابزارهای ایمنی حافظه را افزایش دهیم و آنها را در فرآیندهای یکپارچه سازی و آزمایش مداوم ادغام کنیم.
با گذشت زمان، ما می‌خواهیم اطمینان حاصل کنیم که هر دستگاه یک مجموعه تست سازگاری کامل ( CTS ) را با استفاده از ابزارهای ایمنی حافظه انجام می‌دهد، که نشان می‌دهد چنین باگ‌هایی یافت نشد. به عنوان مثال، پلتفرم‌های Arm v9 باید اجرای CTS را با برچسب‌گذاری حافظه فعال ارائه دهند، در حالی که از پلتفرم‌های Arm v8 درخواست می‌شود که اجرای CTS با استفاده از HWASAN و KASAN ارائه کنند.

Rust به عنوان یک زبان برنامه نویسی جدید برای کد پلت فرم

اندروید 12 Rust را به عنوان یک زبان پلتفرم معرفی کرد. Rust ایمنی حافظه و نخ را در سطوح عملکردی مشابه C/C++ فراهم می‌کند. ما انتظار داریم که Rust انتخاب ارجح برای اکثر پروژه های بومی جدید باشد. با این حال، بازنویسی همه کدهای ناامن حافظه، که در حال حاضر بیش از 70 درصد از کد پلتفرم اندروید را نشان می‌دهد، در Rust امکان‌پذیر نیست. حرکت رو به جلو Rust مکمل ابزار ایمنی حافظه خواهد بود.

ابزار ایمنی حافظه

اندروید از طیف گسترده ای از ابزارها پشتیبانی می کند که به شناسایی اشکالات ایمنی حافظه کمک می کند. شکل زیر طبقه بندی ابزارهای ایمنی حافظه اندروید موجود را نشان می دهد.

اشکالات ایمنی حافظه بر امنیت تأثیر منفی می گذارد.
شکل 3 : چشم انداز ابزار ایمنی حافظه اندروید

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