سفارشات از بالا: نشت حافظه خود را وصل کنید.
خلاصه عناوین
- کاخ سفید چه می گوید؟
- چرا مهم است؟
- یک زبان ناامن چگونه به نظر می رسد؟
- کد ایمن برای حافظه چگونه به نظر می رسد؟
- آیا باید زبان را تغییر دهم؟
نکات کلیدی
- کاخ سفید خواستار استفاده از زبانهای ایمن برای حافظه مانند Rust برای کاهش آسیبپذیریهای امنیتی در کد است.
- زبانهای سطح پایینتر قدیمیتر مانند C خطر کدهای باگ را به همراه دارند که منجر به حوادث امنیتی میشوند.
- زبانهای ایمن مانند Rust ویژگیهای مدیریت خودکار حافظه و پیشگیری از خطا را ارائه میدهند.
یک آژانس دولتی ایالات متحده حکم داده است که برنامه نویسان باید از زبان های ایمن حافظه مانند Rust و Java استفاده کنند. اما چرا آنها بهتر هستند و آیا این واقعا مهم است؟
کاخ سفید چه می گوید؟
در بیانیه ای در 26 فوریه، دفتر مدیر ملی سایبری کاخ سفید (ONCD) از توسعه دهندگان نرم افزار خواست تا از زبان های برنامه نویسی ایمن مانند Rust استفاده کنند.
ONCE گفت:
ما به عنوان یک ملت، توانایی – و مسئولیت – داریم که سطح حمله در فضای سایبری را کاهش دهیم و از ورود کل کلاسهای باگ امنیتی به اکوسیستم دیجیتال جلوگیری کنیم، اما این بدان معناست که ما باید با مشکل سخت حرکت به سمت زبانهای برنامهنویسی ایمن حافظه مقابله کنیم. .
چرا مهم است؟
ONCD که در سال 2021 تأسیس شد، مستقیماً به رئیس جمهور گزارش می دهد و به آنها در مورد امنیت سایبری و مسائل مربوط به آن مشاوره می دهد. سیاست ایالات متحده احتمالاً تأثیر موجی در سراسر جهان فناوری خواهد داشت.
بسیاری از بدترین آسیبپذیریهای امنیتی، مشکلاتی در ایمنی حافظه به عنوان علت اصلی داشتند. زبانهای سطح پایینتر قدیمیتر به برنامهنویسان قدرت زیادی میدهند، اما این خطر ایجاد کدهای باگ را افزایش میدهد که عواقب جدی ایجاد کند.
صرف نظر از این، استفاده از زبانهای ایمن برای حافظه – مانند Rust، Python و JavaScript – مدتهاست که در حال افزایش است. ONCD احتمالاً این اعلامیه را اعلام میکند، زیرا زبانهای کمایمن مانند C آنقدر وجود داشتهاند که کد قدیمی آنها اکنون در زیرساختها و بسیاری از نرمافزارهایی که ما روزانه استفاده میکنیم جا افتاده است.
یک زبان ناامن چگونه به نظر می رسد؟
کد ناامن همیشه ترسناک یا حتی پیچیده به نظر نمی رسد. این مثال از یک برنامه ساده C را در نظر بگیرید:
#include <stdio.h>
int main (void) {
int arr[3] = { 0, 0, 0 };
printf("%d\n", arr[3]);
return 0;
}
این یک مثال کلاسیک از یک اشکال است که می تواند منجر به حمله سرریز بافر شود. برنامه نویس فراموش کرده است که آرایه ها در C (و اکثر زبان های دیگر) دارای شاخص صفر هستند، به این معنی که عنصر اول در arr[0] و غیره است. بنابراین تلاش برای دسترسی به arr[3] یک اشتباه است، اما C اجازه می دهد. :
مقدار در arr[3] یک آدرس حافظه معتبر است، مانند هر آدرس دیگری، فقط به آرایه تعلق ندارد. هر مقداری میتواند در آنجا ذخیره شود و پیامدهای دسترسی به آن یا نوشتن روی آن میتواند از خرابی برنامه تا یک حادثه امنیتی فاجعهبار متغیر باشد. بسیاری از هکرها در طول تاریخ از چنین اشکالاتی سوء استفاده کرده اند.
اگرچه کامپایلر C همچنان یک هشدار تولید می کند، اما یک فایل اجرایی نیز تولید می کند. یک برنامه نویس آزاد است که هشدارها را نادیده بگیرد و حتی با استفاده از پرچم های کامپایلر آنها را پنهان کند. C همچنان به شما اجازه می دهد به پای خود شلیک کنید در حالی که زبان هایی مانند Rust اصلاً به شما اسلحه پیشنهاد نمی دهند.
کد ایمن برای حافظه چگونه به نظر می رسد؟
در زبان ایمن مانند Rust، مشکل مشابهی وجود ندارد. این هم همین برنامه، در Rust:
fn main() {
let arr: [u32; 5] = [0;3];
println!("{}", arr[3]);
}
در حالی که این کد از نظر نحوی معتبر است، Rust در کامپایل آن شکست خواهد خورد:
کامپایلر مشکل را توضیح می دهد و از تولید فایل اجرایی خودداری می کند. Rust به سادگی به شما اجازه نمی دهد این کد را اجرا کنید.
Rust علاوه بر این ویژگی های بسیار بیشتری دارد که به محافظت از شما کمک می کند. این شامل ویژگی هایی مانند اشاره گرهای هوشمند برای مدیریت خودکار حافظه و جلوگیری از عدم ارجاع اشاره گر تهی است.
آیا باید زبان را تغییر دهم؟
هر زبان برنامهنویسی هدفی دارد، بنابراین باید مراقب توصیههایی باشید که مطلقاً از هر زبانی اجتناب کنید، حتی اگر از طرف رئیس جمهور باشد. در حالی که ممکن است در یک زبان خاص تخصص داشته باشید، یادگیری انواع مختلف و گسترش گزینه های خود همیشه مفید است.
ایمنی حافظه یکی از ویژگی های بسیاری از زبان های مدرن است که ممکن است حداقل با یکی از آنها آشنا باشید. C کاربردهای خود را دارد، اما گزینه های امن تری وجود دارد که باعث بروز بدبختی های کمتری می شود. به طور خاص، اگر به دنبال یک زبان کارآمد هستید که دارای شبکه های ایمنی خوبی باشد، Rust ضروری است.