## زبان برنامهنویسی “راست” : راهی برای کاهش آسیبپذیریهای نرمافزاری
گوگل زبان برنامهنویسی “راست” (Rust) را به عنوان یک عامل مهم در کاهش آسیبپذیریها، به ویژه در سیستم عامل اندروید، معرفی کرده است. این زبان برنامهنویسی به دلیل دارا بودن ویژگی “امنیت حافظه” (memory safe) ، امکان ایجاد نرمافزارهای ایمنتر از ابتدا (secure-by-design) را فراهم میکند.
آسیبپذیریهای دسترسی به حافظه اغلب در زبانهای برنامهنویسی که “امنیت حافظه” ندارند، رخ میدهند. در سال 2019، مشکلات مربوط به “امنیت حافظه” 76 درصد از کل آسیبپذیریهای اندروید را تشکیل میدادند.
در پاسخ به این چالش، بسیاری از توسعهدهندگان و غولهای فناوری به سمت استفاده از زبانهای برنامهنویسی “امنیت حافظه” گرایش پیدا کردهاند.
### زوال آسیبپذیریها
گوگل در وبلاگ خود، شبیهسازیای از انتقال به زبانهای “امنیت حافظه” ارائه کرده است که در آن به طور تدریجی از کد “امنیت حافظه” در پروژههای جدید استفاده میشود. نتایج این شبیهسازی نشان داد که با وجود افزایش تدریجی کد نوشته شده در زبانهای فاقد “امنیت حافظه” ، آسیبپذیریهای مربوط به “امنیت حافظه” به طور چشمگیری کاهش یافتهاند.
گوگل توضیح میدهد که آسیبپذیریها به صورت تصاعدی کاهش مییابند. کد جدیدی که در زبانهای فاقد “امنیت حافظه” نوشته میشود، اغلب حاوی خطاها و آسیبپذیریها است، اما با مرور و بهروزرسانی کد، این آسیبپذیریها به تدریج از بین میروند و کد ایمنتر میشود.
بنابراین، منبع اصلی آسیبپذیریها کد جدید است. با اولویتبندی استفاده از زبانهای “امنیت حافظه” در شروع پروژههای جدید، تعداد آسیبپذیریها به طور قابلتوجهی کاهش مییابد.
### تغییر گوگل به سمت زبانهای “امنیت حافظه”
در تغییر گوگل به سمت استفاده از زبانهای “امنیت حافظه” ، کاهش قابل توجهی در تعداد آسیبپذیریهای مرتبط با حافظه مشاهده شده است. در سال 2024 ، آسیبپذیریهای “امنیت حافظه” به 24 درصد کاهش یافتهاند که تضاد شدیدی با 70 درصد در سال 2019 و میزان معمول صنعت نشان میدهد.
![Memory safe vulnerability drops compared to lines of code written from 2019 to 2024.](https://cdn.mos.cms.futurecdn.net/ePQU4LiWCWH6e5r4UM57RY.png)
با این حال، استفاده از زبانهای “امنیت حافظه” به عنوان یک راهحل جادویی نیست. گوگل اذعان میکند که “با گذشت زمان، مشخص شده است که هنوز به یک راهحل واقعا مقیاسپذیر و پایدار برای دستیابی به سطح قابل قبولی از خطر دست نیافتهایم”.
### راهبردهایی برای مقابله با آسیبپذیریهای “امنیت حافظه”
استراتژیهای مقابله با آسیبپذیریهای “امنیت حافظه” از راهبردهای “رفع نقص به صورت واکنشی” (reactive patching) شروع شد. در این راهبرد، آسیبپذیریهای “امنیت حافظه” توسط سازندگان نرمافزار اولویتبندی میشوند و به سایر مشکلات اجازه داده میشود که سریعتر استثمار شوند.
راهبرد “کاهش به صورت پیشگیرانه” (proactive mitigating) ، توسعهدهندگان را تشویق میکرد که برای کاهش خطرات از راهبردهایی مانند “canary stack” و “کنترل جریان یکپارچگی” (control-flow integrity) استفاده کنند. با وجود اینکه این راهبردها سرعت اجرا، طول عمر باتری، تاخیر و مصرف حافظه را تحت تاثیر قرار میدادند، توسعهدهندگان توانایی مقابله با روشهای جدید و خلاقانه مهاجمان را برای استثمار آسیبپذیریها نداشتند.
سومین راهبرد، “کشف پیشگیرانه آسیبپذیریها” (proactive vulnerability discovery) بود. در این راهبرد، تمرکز بر شناسایی آسیبپذیریها از طریق “fuzzing” قرار داشت. “fuzzing” یک روش برای یافتن آسیبپذیریها از طریق بررسی علائم حافظه ناامن است. اما همانطور که گوگل اشاره میکند، این ابزارها برای تیمها ناکارآمد و وقتگیر هستند و حتی با چندین بار اجرا هم نمیتوانند همه آسیبپذیریها را شناسایی کنند.
بنابراین راهبرد چهارم گوگل “پیشگیری با اطمینان بالا و توسعه امن از ابتدا” (high-assurance prevention and secure-by-design development) است. با استفاده از زبانهای برنامهنویسی مانند “راست”، توسعهدهندگان خواص کد نوشته شده را میشناسند و درک میکنند و میتوانند آسیبپذیریها را بر اساس این خواص استنباط کنند. این کار هزینه را برای توسعهدهندگان کاهش میدهد زیرا تعداد آسیبپذیریها را از ابتدا کاهش میدهد، از جمله آسیبپذیریهایی که خارج از مشکلات “امنیت حافظه” هستند. این کاهش هزینه انباشته همچنین منجر به افزایش بازدهی توسعهدهندگان میشود.
وبلاگ گوگل نشان میدهد که “مفهوم ساده است: زمانی که شیر آسیبپذیریهای جدید را ببندیم، این آسیبپذیریها به طور تصاعدی کاهش مییابند و تمامی کد ما را ایمنتر میکنند، کارایی طراحی امنیت را افزایش میدهند و چالشهای مقیاسپذیری مرتبط با راهبردهای موجود “امنیت حافظه” را تسکین میدهند تا آنها را به طور کارآمدتر و هدفمندتر به کار بگیرند”.