گوگل: پس از استفاده از Rust، آسیبپذیریهای ایمنی حافظه اندروید را کاهش دادیم
گوگل دور شدن از C/C++ را چالش برانگیز میداند، اما در حال ادامه پروژه برای اندروید است. با این حال، به Rust برای Chrome منتقل نمی شود.
“فروتنی باید هر دو راه را طی کند. زنگ همه مشکلات را حل نمی کند، و مناطقی وجود دارد که C/C++ حداقل برای مدتی کاربردی ترین گزینه برای توسعه خواهد بود. این اشکالی ندارد.
ما روی کاهش آن در طول زمان کار خواهیم کرد و در عین حال به افزایش استفاده از Rust خود ادامه میدهیم و به سرمایهگذاری و توسعه پیشرفتها در C/C++ ادامه میدهیم.»
Vander Stoep خاطرنشان می کند که این تغییر توسط “قهرمانان” انجام نشده است – فقط توسعه دهندگان از بهترین ابزارها برای کار استفاده می کنند. تیم اندروید قصد دارد استفاده از Rust را افزایش دهد، اگرچه برنامهای برای خلاص شدن از C و C++ برای برنامهنویسی سیستمهایش وجود ندارد.
با این حال، برای اندروید، گوگل لایههای انتزاعی سختافزاری فضای کاربران (HAL) را در Rust پیادهسازی کرده و از Rust در برنامههای مورد اعتماد پشتیبانی میکند. همچنین سیستم عامل ماشین مجازی را در چارچوب مجازی سازی اندروید به Rust منتقل کرده است. و با پشتیبانی از Rust در کرنل لینوکس نسخه 6.1، گوگل امنیت حافظه را به هسته می آورد و از درایورهای هسته شروع می شود.
او در ادامه خاطرنشان می کند که در اندروید 13، 1.5 میلیون خط کد Rust وجود دارد که حدود 21 درصد از کل کدهای جدید را نشان می دهد. تا به امروز، گوگل حتی یک آسیبپذیری ایمنی حافظه را در کد Rust اندروید ندیده است.
گوگل میگوید ابزارهای امنیتی مانند fuzzing نیز تأثیر زیادی بر باگهای ایمنی حافظه گذاشتهاند.
واندر استوپ خاطرنشان میکند که همبستگی با علیت برابری نمیکند، اما درصد اشکالات امنیتی ایمنی حافظه – که بر اشکالات با شدت بالا غالب هستند – با زبانهای مورد استفاده برای کد جدید کاملاً مطابقت دارد.
در طی آن دوره، آسیبپذیریهای ایمنی حافظه از ۷۶ درصد به ۳۵ درصد از کل آسیبپذیریهای اندروید کاهش یافته است. یادداشت مهندس نرم افزار امنیتی اندروید جفری واندر استوپ. با این کاهش آسیبپذیریهای ایمنی حافظه، گوگل نیز شاهد کاهش نقصهای حیاتی و قابل بهرهبرداری از راه دور است.
دیگر زبانهایی که گوگل برای اندروید استفاده کرده است، از جمله جاوا و کوتلین سازگار با جاوا هستند. C و C++ همچنان زبانهای غالب در AOSP هستند، اما Android 13 اولین نسخهای است که بیشتر کدهای جدید از زبانهای ایمن برای حافظه هستند. پس از اینکه گوگل آن را برای AOSP در آوریل 2021 پذیرفت، Rust اکنون حدود 21 درصد از کد جدید را به خود اختصاص داده است. پروژه هسته لینوکس امسال Rust را به عنوان زبان دوم رسمی جدید برای C پذیرفت.
“اگر بخواهم یک ویژگی را شناسایی کنم که این امکان را فراهم می کند، می گویم “تواضع”. همراه با استحکام برای پیگیری و ایجاد تغییرات، از جمله تغییرات سیستمی،” او در توییتی خاطرنشان کرد.
نسخه 10 اندروید 2019 دارای 223 باگ ایمنی حافظه بود، در حالی که اندروید 13 دارای 85 مشکل ایمنی حافظه شناخته شده است.
“این نشان میدهد که Rust به هدف مورد نظر خود یعنی جلوگیری از رایجترین منبع آسیبپذیری اندروید عمل میکند. تراکم آسیبپذیری تاریخی بیشتر از 1/kLOC (1 آسیبپذیری در هر هزار خط کد) در بسیاری از اجزای C/C++ Android (مانند رسانه، بلوتوث) است. بر اساس این تراکم آسیبپذیری تاریخی، احتمالاً استفاده از Rust از رسیدن صدها آسیبپذیری به تولید جلوگیری کرده است.» Vander Stoep اشاره میکند.
ما به سرمایهگذاری بر روی ابزارهایی برای بهبود ایمنی C/C++ خود ادامه میدهیم. در چند نسخه گذشته، ما تخصیص دهنده سخت شده Scudo، HWASAN، GWP-ASAN و KFENCE را در دستگاههای تولیدی اندروید معرفی کردهایم. همچنین ما را افزایش دادهایم. پوشش فازی بر اساس کد موجود ما. آسیبپذیریهایی که با استفاده از این ابزارها یافت میشوند، هم به جلوگیری از آسیبپذیریها در کد جدید و هم آسیبپذیریهای موجود در کدهای قدیمی که در ارزیابی بالا گنجانده شدهاند کمک میکنند. اینها ابزارهای مهمی هستند و برای C/ما بسیار مهم هستند. کد ++C. با این حال، اینها به تنهایی دلیل تغییر بزرگی در آسیبپذیریهایی که میبینیم نیست، و سایر پروژههایی که این فناوریها را به کار گرفتهاند، تغییر عمدهای در ترکیب آسیبپذیری خود مشاهده نکردهاند. ما معتقدیم که تغییر مداوم اندروید از ناامن بودن حافظه واندر استوپ می نویسد: زبان های ایمن برای حافظه عامل اصلی است.
این اولین سالی است که آسیبپذیریهای ایمنی حافظه بزرگترین دسته نقصهای امنیتی نیستند و یک سال پس از آن است که گوگل Rust را بهعنوان پیشفرض برای کدهای جدید در پروژه منبع باز اندروید (AOSP) قرار داد.
به نظر می رسد تصمیم گوگل برای استفاده از Rust برای کدهای جدید در اندروید به منظور کاهش نقص های مربوط به حافظه، نتیجه داده است. آسیبپذیریهای ایمنی حافظه در اندروید بیش از نصف شده است – نقطه عطفی که همزمان با تغییر Google از C و C++ به زبان برنامهنویسی ایمن برای حافظه، Rust است.