گوگل از گنجاندن زبان برنامه نویسی Rust در میان زبان های مجاز برای توسعه پلتفرم اندروید خبر داده است. کامپایلر زبان Rust در سال 2019 در درخت منبع اندروید گنجانده شد، اما پشتیبانی از این زبان به صورت آزمایشی باقی ماند. برخی از اولین مؤلفههای Rust که برای اندروید برنامهریزی شدهاند، شامل پیادهسازیهای جدیدی از مکانیسم ارتباط بین پردازشی Binder و پشته بلوتوث میشوند.
معرفی Rust به عنوان بخشی از پروژه ای برای تقویت امنیت، ترویج تکنیک های برنامه نویسی ایمن و افزایش کارایی شناسایی مشکلات هنگام کار با حافظه در اندروید انجام شد. خاطرنشان می شود که حدود 70 درصد از تمام آسیب پذیری های خطرناک شناسایی شده در اندروید ناشی از خطاهای هنگام کار با حافظه است. استفاده از Rust که بر ایمنی حافظه و مدیریت خودکار حافظه تمرکز دارد، خطر آسیبپذیریهای ناشی از خطاهای حافظه مانند دسترسی پس از آزاد شدن و بیش از حد بافر را کاهش میدهد.
Rust ایمنی حافظه را در زمان کامپایل از طریق بررسی مرجع، مالکیت شی و ردیابی طول عمر شی (محدودهها) و با ارزیابی صحت دسترسیهای حافظه در زمان اجرا تقویت میکند. Rust همچنین محافظت در برابر سرریز اعداد صحیح را فراهم می کند، نیاز دارد که مقادیر متغیر قبل از استفاده مقداردهی اولیه شوند، مدیریت خطا در کتابخانه استاندارد بهتر است، به طور پیش فرض از مفهوم ارجاعات و متغیرهای تغییرناپذیر استفاده می کند و تایپ ثابت قوی برای به حداقل رساندن خطاهای منطقی ارائه می دهد.
در اندروید، ایمنی حافظه در زبان های قبلاً پشتیبانی شده Kotlin و Java ارائه شده است، اما به دلیل سربار زیاد برای توسعه اجزای سیستم مناسب نیستند. Rust دستیابی به عملکردی نزدیک به زبانهای C و C++ را ممکن میسازد، که امکان استفاده از آن را برای توسعه بخشهای سطح پایین پلتفرم و اجزای تعامل با سختافزار فراهم میکند.
برای اطمینان از امنیت کدهای C و C++، اندروید از جداسازی جعبه ایمنی، تجزیه و تحلیل استاتیک و تست فازی استفاده میکند. قابلیت های جداسازی جعبه شنی محدود است و به حد توان خود رسیده است (تجزیه بیشتر در فرآیندها از نقطه نظر مصرف منابع غیر عملی است). محدودیتهای استفاده از سندباکس شامل هزینههای سربار زیاد و افزایش مصرف حافظه ناشی از نیاز به ایجاد فرآیندهای جدید و همچنین تاخیرهای اضافی مرتبط با استفاده از IPC است.
در عین حال، sandbox آسیبپذیریهای کد را حذف نمیکند، بلکه فقط خطرات را کاهش میدهد و حمله را پیچیده میکند، زیرا بهرهبرداری مستلزم شناسایی نه یک، بلکه چندین آسیبپذیری است. روشهای مبتنی بر تست کد از این جهت محدود هستند که برای شناسایی خطاها، لازم است شرایطی ایجاد شود تا مشکل خود را نشان دهد. پوشش همه گزینه های ممکن ممکن نیست، بنابراین بسیاری از خطاها مورد توجه قرار نمی گیرند.
برای فرآیندهای سیستم در اندروید، گوگل از "قاعده دو" پیروی می کند، که طبق آن هر کد اضافه شده نباید بیش از دو مورد از سه شرط را داشته باشد: کار با داده های ورودی نامعتبر، استفاده از یک زبان برنامه نویسی ناامن (C/C++)، و در حال اجرا بدون انزوا سختگیر ماسهبازی (دارای امتیازات بالا). این قانون به این معنی است که کد پردازش داده های خارجی یا باید به حداقل امتیازات کاهش یابد (ایزوله) یا در یک زبان برنامه نویسی امن نوشته شود.
گوگل قصد ندارد کدهای C/C++ موجود را در Rust بازنویسی کند، بلکه قصد دارد از این زبان برای توسعه کدهای جدید استفاده کند. استفاده از Rust برای کدهای جدید منطقی است زیرا از نظر آماری، اکثر اشکالات در کدهای جدید یا اخیراً تغییر یافته ظاهر می شوند. به طور خاص، حدود 50 درصد از خطاهای حافظه شناسایی شده در اندروید در کدهایی که کمتر از یک سال پیش نوشته شده است شناسایی می شوند.
منبع: opennet.ru