ایمنی حافظه

این صفحه، باگ‌ها و ابزارهای ایمنی حافظه را شرح می‌دهد.

ناامنی حافظه

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

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

شکل ۱. باگ‌های امنیتی حافظه و تأثیر منفی آنها بر کیفیت، امنیت و هزینه‌ها.

اشکالات ایمنی حافظه تأثیر منفی بر کیفیت و پایداری دارند و سهم قابل توجهی از خرابی‌های مشاهده شده در دستگاه‌های کاربر نهایی را تشکیل می‌دهند. بنابراین، تراکم بالای اشکالات ایمنی حافظه مستقیماً با تجربه کاربری ضعیف مرتبط است.
کد بومی که با زبان‌های ناامن حافظه مانند C، C++ و Assembly نوشته شده است، بیش از ۷۰٪ از کد پلتفرم اندروید را تشکیل می‌دهد و تقریباً در ۵۰٪ از برنامه‌های فروشگاه Google Play وجود دارد.
با توجه به پیچیدگی روزافزون کد، اگر به آن رسیدگی نشود، باگ‌های ایمنی حافظه به مرور زمان افزایش خواهند یافت. بنابراین، فراهم کردن ابزارها و فناوری‌هایی که بتوانند چنین باگ‌هایی را شناسایی و کاهش دهند، برای موفقیت بلندمدت ما بسیار مهم است.
در طول چند سال گذشته، ما با شرکای سخت‌افزاری خود همکاری نزدیکی داشته‌ایم تا فناوری‌های سخت‌افزاری مانند برچسب‌گذاری حافظه Arm را توسعه دهیم و Rust را در پایگاه کد اندروید معرفی کرده‌ایم.
این فناوری‌ها مسیر ما را به سمت ایمنی حافظه تسریع می‌کنند و به صنعت نرم‌افزار کمک می‌کنند تا به یک حوزه مشکل کلیدی رسیدگی کند.

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

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

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

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

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

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

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

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

اشکالات امنیتی حافظه، هزینه‌ها را افزایش می‌دهد

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

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

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

ایمنی حافظه

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

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

الزامات پشتیبانی از ایمنی حافظه

سند تعریف سازگاری اندروید (CDD) اکیداً استفاده از ابزارهای ایمنی حافظه را در طول توسعه توصیه می‌کند.

ما در حال همکاری نزدیک با اکوسیستم خود هستیم تا استفاده از ابزارهای ایمنی حافظه را افزایش داده و آنها را در فرآیندهای ادغام و آزمایش مداوم ادغام کنیم.

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

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

اندروید ۱۲ زبان Rust را به عنوان یک زبان پلتفرم معرفی کرد. Rust امنیت حافظه و نخ را در سطوح عملکردی مشابه C/C++ فراهم می‌کند. ما انتظار داریم Rust انتخاب ارجح برای اکثر پروژه‌های بومی جدید باشد. با این حال، بازنویسی تمام کدهای ناامن حافظه، که در حال حاضر بیش از ۷۰٪ از کد پلتفرم اندروید را تشکیل می‌دهند، در Rust امکان‌پذیر نیست. در آینده Rust مکمل ابزارهای ایمنی حافظه خواهد بود.

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

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

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

شکل 3. چشم‌انداز ابزارهای ایمنی حافظه اندروید.

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