مهندسان گوگل اولین نتایج ارائه پشتیبانی برای توسعه به زبان Rust را در پلتفرم اندروید خلاصه کردند. در اندروید 13، تقریباً 21 درصد از کدهای کامپایل شده جدید اضافه شده با Rust و 79 درصد در C/C++ نوشته شده است. مخزن AOSP (پروژه متن باز اندروید) که کد منبع پلتفرم اندروید را توسعه می دهد، حاوی تقریباً 1.5 میلیون خط کد Rust مرتبط با اجزای جدیدی مانند ذخیره کلید رمزنگاری Keystore2، پشته ای برای تراشه های UWB (باند فوق العاده) است. ، اجرای پروتکل DNS-over-HTTP3، چارچوب مجازی سازی AVF (Android Virtualization Framework)، پشته های آزمایشی برای بلوتوث و Wi-Fi.
مطابق با استراتژی اتخاذ شده قبلی برای کاهش خطر آسیب پذیری های ناشی از خطا در کار با حافظه، زبان Rust در حال حاضر عمدتاً در توسعه کدهای جدید و تقویت تدریجی امنیت آسیب پذیرترین و حیاتی ترین اجزای نرم افزار استفاده می شود. هیچ هدف کلی برای انتقال کل پلت فرم به Rust وجود ندارد و کد قدیمی در C/C++ باقی می ماند و مبارزه با خطاهای موجود در آن با استفاده از تست فازی، آنالیز استاتیک و استفاده در توسعه تکنیک های مشابه انجام می شود. با استفاده از نوع MiraclePtr (اتصال بر روی نشانگرهای خام، انجام بررسی های اضافی برای دسترسی به مناطق حافظه آزاد شده)، سیستم تخصیص حافظه Scudo (جایگزینی مطمئن برای malloc/free) و مکانیسم های تشخیص خطا هنگام کار با حافظه HWAsan (AddressSanitizer به کمک سخت افزار)، GWP-ASAN و KFENCE.
در مورد آمار مربوط به ماهیت آسیبپذیریها در پلتفرم اندروید، خاطرنشان میشود که با کاهش کدهای جدید که با حافظه کار ناامن میکنند، تعداد آسیبپذیریهای ناشی از خطا در هنگام کار با حافظه کاهش مییابد. به عنوان مثال، سهم آسیبپذیریهای ناشی از مشکلات حافظه از ۷۶ درصد در سال ۲۰۱۹ به ۳۵ درصد در سال ۲۰۲۲ کاهش یافته است. در اعداد مطلق، 76 آسیبپذیری مرتبط با حافظه در سال 2019، 35 آسیبپذیری در سال 2022، 2019 آسیبپذیری در سال 223 و 2020 آسیبپذیری در سال 150 شناسایی شد (همه آسیبپذیریهای ذکر شده در کد C/C++ بودند؛ در کد Rust، هیچ مشکل مشابهی تاکنون وجود نداشته است. پیدا شد). سال 2021 اولین سالی بود که در آن آسیبپذیریهای مرتبط با حافظه دیگر تسلط نداشتند.
از آنجایی که آسیبپذیریهای مرتبط با حافظه معمولاً خطرناکترین هستند، آمار کلی همچنین کاهش تعداد مسائل و مسائل مهمی را که میتوان از راه دور از آنها بهرهبرداری کرد، نشان میدهد. در عین حال، پویایی شناسایی آسیبپذیریهای غیر مرتبط با کار با حافظه در 4 سال گذشته تقریباً در همان سطح باقی مانده است - 20 آسیبپذیری در ماه. سهم مشکلات خطرناک در میان آسیبپذیریهای ناشی از خطاهای هنگام کار با حافظه نیز باقی میماند (اما از آنجایی که تعداد این آسیبپذیریها کاهش مییابد، تعداد مشکلات خطرناک نیز کاهش مییابد).
این آمار همچنین ارتباط بین مقدار کد جدیدی که با حافظه کار می کند و تعداد آسیب پذیری های مربوط به حافظه (سرریز شدن بافر، دسترسی به حافظه آزاد شده و غیره) را دنبال می کند. این مشاهدات این فرض را تأیید میکند که هنگام اجرای تکنیکهای برنامهنویسی ایمن، تمرکز باید بر حذف کد جدید به جای بازنویسی کد موجود باشد، زیرا عمده آسیبپذیریهای شناساییشده در کد جدید هستند.
منبع: opennet.ru