70 درصد از مشکلات امنیتی در Chromium ناشی از خطاهای حافظه است
توسعه دهندگان پروژه Chromium تجزیه و تحلیل کرد 912 آسیبپذیری پرخطر و حیاتی در نسخههای پایدار کروم از سال 2015 شناسایی شدند و به این نتیجه رسیدند که 70 درصد از آنها ناشی از ناامنی حافظه (خطاهای هنگام کار با اشارهگرها در کد C/C++) است. نیمی از این مشکلات (36.1٪) ناشی از دسترسی به بافر پس از آزادسازی حافظه مرتبط با آن (استفاده پس از آزاد) است.
هنگام طراحی Chromium در ابتدا بود گذاشته، که ممکن است خطاها در کد ظاهر شوند، بنابراین تأکید زیادی بر استفاده از ایزوله sandbox برای محدود کردن عواقب آسیب پذیری ها شد. در حال حاضر، امکانات استفاده از این فناوری به مرز تواناییهای خود رسیده است و تکه تکه شدن بیشتر در فرآیندها از نظر مصرف منابع غیرعملی است.
برای حفظ امنیت پایگاه کد، Google همچنین "قانون دوطبق آن، هر کد اضافه شده نباید بیش از دو مورد از سه شرط را داشته باشد: کار با داده های ورودی نامعتبر، استفاده از یک زبان برنامه نویسی ناامن (C/C++) و اجرای با امتیازات بالا. این قانون به این معنی است که کد پردازش داده های خارجی یا باید به حداقل امتیازات کاهش یابد (ایزوله) یا در یک زبان برنامه نویسی امن نوشته شود.
برای افزایش بیشتر امنیت پایه کد، پروژه ای برای جلوگیری از ظاهر شدن خطاهای حافظه در پایه کد راه اندازی شده است. سه رویکرد اصلی وجود دارد: ایجاد کتابخانههای ++C با عملکردهایی برای عملکرد ایمن حافظه و گسترش دامنه زباله جمعآور، با استفاده از مکانیسمهای حفاظت سختافزاری. Mte (حافظه برچسب گذاری حافظه) و نوشتن اجزاء به زبان هایی که کار ایمن با حافظه را تضمین می کند (جاوا، کاتلین، جاوا اسکریپت، Rust، سوئیفت).
انتظار می رود که کار در دو حوزه متمرکز شود:
تغییر قابل توجهی در فرآیند توسعه C++، که تأثیر منفی بر عملکرد را رد نمی کند (بررسی محدودیت های اضافی و جمع آوری زباله). به جای اشاره گرهای خام، پیشنهاد می شود از نوع استفاده شود MiraclePtr، که به شما امکان می دهد تا خطاهای قابل بهره برداری پس از استفاده رایگان را به خرابی هایی که تهدیدی امنیتی نیستند کاهش دهید، بدون اینکه تأثیر منفی قابل توجهی بر عملکرد، مصرف حافظه و پایداری داشته باشد.
استفاده از زبانهای طراحیشده برای انجام بررسیهای ایمنی حافظه در زمان کامپایل (تأثیر منفی بر عملکرد ذاتی چنین بررسیهایی در حین اجرای کد را از بین میبرد، اما منجر به هزینههای اضافی برای سازماندهی تعامل کد در یک زبان جدید با کد در C++).
استفاده از کتابخانههای ایمن برای حافظه سادهترین و در عین حال کارآمدترین راه است. بازنویسی کد در Rust به عنوان موثرترین و در عین حال بسیار گران ترین راه رتبه بندی می شود.