8 بهبود امنیتی،که طی 8 سال در لینوکس رخ داده اند!

از سال ۲۰۰۷ مسائل امنیتی و رفع مشکلات امنیتی یکی از مهم‌ترین نکاتی بوده است که در لینوکس موردتوجه قرارگرفته است؛ مثلاً در سه سال گذشته تا حال تغییرات بسیار خوبی در این زمینه رخ داده است. بااین‌حال، با وجود منبع باز بودن لینوکس، به بهبود امنیت و بر طرف کردن مشکلات نیاز است.

در مدت‌زمانی که تردیدها در مورد امنیت برنامه‌های متن‌باز به دلیل  حملات مبتنی بر آسیب‌پذیری Open SSL و  Bash با نام‌های Heartbleed و Shellshock، در حال افزایش است؛ زمان آن فرارسیده است تا یک بررسی دوباره داشته باشیم؛ در مورد این که در زیمنه امنیت در لینوکس  چه چیزهایی می‌دانیم.

لینوکس به صورت گسترده‌ای در امور تجاری استفاده می‌شود و به صورت عمیقی در برنامه‌های مبتنی بر اینترنت و سایت‌های اینترنتی در حال نقش آفرینی است، هر ایراد و خطای امنیتی در هر یک از این برنامه‌ها معمولاً به انشعابات دردناک منجر گردیده است.

در سال 2007، یکی از همکاران لینوس تروالدز با نام اندرو مورتون، معروف به سرهنگ هسته! به توسعه‌دهندگان گفته که به امنیت و برطرف کردن و خطا و نقاط آسیب‌پذیر،  اهمیت بیشتری دهند.  او در مصاحبه‌ای با نشریه‌ی TIMES گفت:

“دوست دارم ببینیم که مردم وقت بیشتری را صرف  رفع باگ می‌کنند؛ تا اینکه  به ویژگی‌ها جدید بیفزایند، این نظر شخصی من است. “

بنابراین اوضاع چگونه پیش می‌رود، زمانی که مورتون ، پیام خود را گفت؛ لینوکس میلیون‌ها خط کد و هزاران ویژگی جدید به هسته‌ی لینوکس افزود. روند توسعه هسته‌ لینوکس در سالهای اخیر روند رو به رشدی در امنیت داشته است و اهمیت آن در لینوکس در حال افزایش است.  همییشه موضوع امنیت در لینوکس اگر از محصولات تجاری بهتر نبوده، حداقل یکسان بوده است، حتی در زمانی که مورتون چنین چالشی را بیان می‌کرد. با این حال دست‌آوردهای لینوکس تا حدی بوده‌است که باعث شگفتی دیگران شود.

لینوکس از بسیاری  از پروژه‌های تجاری و متن‌بسته بهتر است. برای مثال در حالی که در هر هزار خط کد هسته‌ی لینوکس کمتر از یک ایراد وجود دارد، در سال 2014 در هر هزار خط کد 5.5 ایراد وجود داشت؛ که نشان از پیشرفت قابل توجه دارد که بدون تغییر در فرآیند توسعه هسته‌ی لینوکس نمی‌توانست رخ دهد. آنچه در لینوکس رخ  داده می‌تواند برای دیگر پروژه‌های متن باز به عنوان یک نمونه باشد. پس بنا بر این نگرانی از امنیت زیرساختهای اینترنت که از لینوکس استفاده می‌کنند، قابل حل است. با توجه به مثال ذکر شده.

لینوکس پروژه نرم‌افزاری بسیار بزرگی است، تا آخرین نسخه از این برنامه، 4,100 نفر با آن همکاری داشته اند و در آن کد زده‌اند که بیش از نیمی از آنان را شرکای تازه وارد تشکیل می‌دهد. معمولا بزرگی پروژه به بیشتر شدن نواقص منجر می‌شود.

اما این بزرگترین نکته‌ای است که گروه‌ها و تیم‌های کوچک برنامه‌نویسی می‌توانند با الگو برداری از نهوه‌ی توسعه‌ی لینوکس، به بهبود کد یکدیگر کمک نمایند. همچنین این نکته باعث می‌شود که درک کنیم، یک پروژه بلند مدت با لیست بلند‌بالایی از توسعه‌دهندگان چگونه کار می‌کند.

در هرصورت اگر نکات منفی در مورد پروژه‌های بزرگ را در ذهن دارید این نکته را هم توجه داشته باشید که چگونه لینوکس توانسته است مشکلات خود را به این سرعت کاهش دهد.

CoveritySteveFrenchرفع اشکال

تنها فردی که نگران افزایش فزاینده مشکلات امنیتی در برنامه‌های متن‌باز فقط اندرو مورتون نیست. وزارت امنیتی داخلی آمریکا با بررسی و تحلیل کدهای متن‌باز منتشرشده با همکاری یک گروه در آزمایشگاه علوم کامپیوتر در دانشگاه استنفورد در سال ۲۰۰۶؛ به مشکلاتی پی برد.

کار آنان این بود که با یک سیستم خودکار چک‌کننده کدها به چک کردن و تحلیل کدها بپردازند. این برنامه می‌توانست کدهای  C, C++, C#, and Java را  در چندین پروژه و برنامه متن‌باز، تحلیل کند. Coverity شرکتی است که برای تحلیل و بررسی کدها پایه گزاری شده است. این تجارت بعد از بررسی کدها توسط وزارت امنیت داخلی ایجاد شد؛ تا کدهای متن باز را تحلیل کند.

پروژه منجر به ایجاد محصولی بانام موتور تحلیل‌گر و درستی‌سنج ایستا، SAVE   شد. برنامه‌ای آنلاین که با آخرین نسخه هر برنامه همراه شده و به تحلیل ایستای آن می‌پرداخت به این معنی که کد در حال اجرا نبود. خطوط کد خط به خط بررسی می‌شدند؛ زمانی که سیستم در حال استراحت بود.  با مقداردهی و انجام عملیات مختلف؛ برنامه قادر بود تا به اشکالات رایجی مثل سرریز بافر، تأییدیه‌های معیوب و دیگر آسیب‌پذیری‌هایی که ممکن است هکرها از آنان سودجویند، پی ببرد.

این پروژه مسیر زیادی را تا کسب اعتبار طی کرد. این موضوع قبل از زمانی بود که در لینوکس مورداستفاده قرار گیرد. اما وقتی مورداستفاده قرار گرفت کارایی کد را افزایش داد.

بررسی منظم:

boss

پروژه Coverity به‌صورت رایگان کدها را بررسی می‌کند و در اکثر پروژه‌های معروف متن‌باز مورداستفاده قرارگرفته است. مانند پروژه‌های Apache و Smaba که برای ردوبدل کردن فایل و … بین لینوکس و ویندوز به وجود آمده است. در سال 2013؛ دیو جونز که یکی از کارمندان ردهت برای رفع ایرادت و باگ‌های فدورا و ردهت است، در پی تلاش در  تجربه کردن موضوعی جدید در زمان بررسی کدهای لینوکس توسط Coverity؛ کد کرنل را  به وسیله دستگاهی بزرگ که قبلاً برای این کار مورد بهره‌برداری قرارگرفته بود، به چند قسمت کوچک‌تر تقسیم کرد.  سپس او شروع کرد به بررسی و تحلیل کدهای هر گروه با برنامه Coverity تا ببینید کدام بخش ایرادات بیشتری را دارد.

بعد از سال‌ها که به تحلیل کد پرداخت، توانست کدهای ناقص زیادی را پیدا و رفع کند که عمل رفع باگ و تعداد مشکلاتی که می‌توانست پیدا کند روزبه‌روز بیشتر از قبل می‌شدند.

نواقص و توسعه دهندگان:

dance-tux

شناسایی خودکار نواقص و اشکالت توسط Coverity، این نکته را ثابت کرد که علم وجود به یک نقص امنیتی یا یک آسیب پذیری کافی نیست. به‌طوری‌که توسعه‌دهندگان لینوکس بعد از مدتی با اشکالاتی مواجه می‌شدند که در هسته چندین سال جا خوش کرده بودند! چیزی که لینوکس نیاز داشت؛ گروهی بودند که به رفع خطاها مشغول شوند و نسبت به این کار پاسخگو باشند. بااین‌حال توسعه‌دهندگان این کار را دوست نداشتند، به دلیل آنکه افتخار نوشتن کد و قرار دادن در هسته بسیار بالاتر از رفع اشکال کدهای دیگران می‌دانند.
یکی از راه حل‌هایی که توسط دیو جونز مطرح شد این بود که کدهایی در هنگام بررسی  با عیوب خاصی مشخص شدند؛ به فردی که آن را نوشته است؛ مرجوع شود تا توسط ایراد رفع کن‌ها یا خود لینوس تروالدز به خود توسعه‌دهنده برگردانده شده تا وی خودش آن را حل کند. این کار باعث پاسخگوتر شدن توسعه‌دهندگان در برابر کدی که می‌نویسند خواهد بود.
بنابراین شایستگی افراد فقط با کدهایی که نوشته‌اند اندازه‌گیری نخواهد شد بلکه تعداد اشکالاتی که کد آنان داشته اند، نیز در شناخت آنان مؤثر خواهد شد.
جونز در سال ۲۰۱۴ در رابطه با اداره کردن یک بررسی تمام‌وقت از لینوکس چنین نوشت:

توسعه‌دهنده‌گان بیشتری در Coverity ثبت نام کرده‌اند و دنبال زیر سیستم خود در هر عرضه هستند. که بسیار عالی است، به این معنی است که وقت کمتری را برای ارسال پیام به آنان سپری خواهم کرد.
در این صورت به جای اشاره به هر فرد که این کد مربوط به توست، خود افراد دنبال بررسی کدها و .. می‌روند تا اشکال کار خود را رفع کنند.

نسبت نواقص به کلیت کد پروژه

codebugs
همانطور که اشاره کردیم؛ نسبت خطا در هر 1000 خط کد، که معیاری است برای سنجش اعتبار کدهای نوشته شده،  در لینوکس با شیبی تند کاهش یافته است.  (بر اساس اطلاعات منتشر شده در این بلاگ) مثلا از 5.5 خطا در 1000 خط کد به 0.7 خطا در 1000 خط کد رسیده است؛ که رقم بسیار مناسبی در دنیای تجارت محسوب می‌شود.

سرعت در رفع  مشکلات

admin

یکی از تجربیات و دروسی که پس از سال ۲۰۱۳ در لینوکس می‌توان آموخت سرعت رفع ایراد است. مثلاً در مواردی جونز ایراداتی را گزار کرده است که هنوز ایده‌ی اصلی در ذهن طراح ایده به شکل اصلی خود نرسیده است. یعنی اینکه سرعت پیدا کردن خطاها بسیار افزایش‌یافته است.

مثلاً جونز در نظری اعلام می‌کند که:

به طور کلی علاقه افراد در پیداکردن و رفع ایرادات توسط Coverity در حال افزایش است؛ در حال حاضر نگاه به رفع ایرادات و مراقبت از کدها بسیار جدی‌تر از قبل است.

20 میلیون خط کد:

google-eyes

نبرد با اشکالات و خطاها در لینوکس، مدت‌ها قبل از معرفی Coverity، و پیش از سال ۲۰۱۳ و در سال ۲۰۰۷، آغازشده است. قبل از اینکه اندرو به مشکل برطرف کردن باگ‌ها و ظرورت جدیت در آن اشاره کند. در سال ۲۰۰۷ لینوکس ۳٬۴۵۸٬۳۶۹ خط کد داشت که ۴۲۵ خطا در آن سال تشخیص داده شد و ۲۱۷ از آنان رفع شدند. در سال ۲۰۱۲ زمانی که کرنل دارای ۷٬۳۸۷٬۵۰۸ خط کد بود، ۵٬۸۰۳ عدد باگ جدید تشخیص داده شد ولی  ۵٬۱۷۰ آنان رفع شدند. سال ۲۰۱۳ سالی بود که بیشترین اشکال در لینوکس تشخیص داده شد؛ در آن سال ۳٬۲۹۹ عدد خطا از ۸٬۵۷۸٬۲۵۴ خط کد شناخته شد که ۳٬۳۴۶ خطا رفع شد. یعنی بیش از صد خطا بیشتر از موارد تشخیصی جدید رفع شدند. هسته لینوکس امروزه تقریباً بیست میلیون خط کد دارد.

فراتر از اسکنCoverity

cheگٍرگ هارت‌من که بعد از لینوس تروالدز مسئول نگهداری و رفع ایراد از کرنل بعد از انتشار است، به این نکته اشاره کرد که Coverity مشکلات زیادی را در هسته‌ی لینوکس یافته است و فرآیند رفع باگ را بهبود داده است. وی به این نکته اشاره داشت که روزانه تعداد زیادی پیام مبنی بر پیدا کردن خطا توسط Coverity به‌دستش می‌رسد که این‌یکی از  مهمترین دلایل برطرف شدن تعداد بیشتری از اشکالات لینوکس بوده است؛ بااین‌حال وی در جمع دانشجویان دکتری در زمینه‌ پاکسازی هسته لینوکس به دیگر ترفندها جهت رفع باگ اشاراتی نیز داشت.

ما به ابزاری جالبی مانند Coccinelle نیاز داریم، که اجازه می‌دهند، اسکریپتهایی  بنویسیم که به رفع اشکالات منجر می‌شوند.

او به ترفندهایی دیگری نیز اشاره داشت؛ که بر اساس آن  یک اسکریپت را در چارچوب قرار می‌دهند که هر هفته مطمئن شود که الگویی که ما در خطاهای قبلی با آن برخورد داشتیم، در کدهای جدیدی که نوشته می‌شود تکرار نشوند. این موضوع باعث پیش‌گیری از وقوع خطا خواهد شد.

با استفاده از Coccinelle و قبل از اینکه کدی در کرنل درج شود با روشی که گفته شد، بررسی می‌شود که آیا کد دارای مشکل است یا نه؛ همچنین با ابزارهای بررسی خودکار کد و ابزاری که هارت من به آن اشاره کرد به‌راحتی می‌توان تعداد خطاهای کرنل را کنترل کرد. Coccinelle در ابتدا توسط یک استاد علوم کامپیوتر بانام جولیا لا وال در دانشگاه پیری و مادام کوری اختراع‌شده است.

ابزار Zero-day Bot:

zero-day-bot-tool

گٍرٍگ هارت من به این نکته نیز اشاره داشت که ابزار Zero-day Bot در شرکت اینتل ایجادشده و توسط Fengguang Wu اجرایی شده است. این ابزار بعد از منتشر شدن کد شروع به انجام تست‌های مختلف می‌کند و سپس آنان را گزارش می‌دهد. این ابزار در صورت لزوم به معرفی وصله‌هایی برای وصله کردن این ابزارها کمک می‌کند.

Fengguang Wu یک توسعه‌دهنده کرنل تمام‌وقت است که کارمند اینتل است. این فرد اصلیت چینی دارد و در دانشگاه علوم و فن‌آوری چین فارغ‌التحصیل شده است. او در لینوکس Summit 2012 به معرفی این ابزار پرداخت. این ابزار به دلیل آنکه حتی یک روز هم به کدهای بد اجازه حیات نمی‌دهد به نام Zero-day نام‌گذاری شده است.

این ابزار به توسعه‌دهندگان پیامی را  ارسال می‌کند که خطایی در کدی که آنان مدتی پیش فرستاده‌اند؛ خطا دیده‌شده است. بعدازآن توسعه‌دهنده می‌تواند سریعاً در صفحه‌ای که در صفحه گزارش اشکالات ایجادشده نسبت به خطا واکنش نشان دهد.

لینوکس در برابر دیگر پروژه‌ها:

fedoraCoverity اجازه ندارد تا بررسی‌های خود را از کدهای برخی محصولات مانند محصولات اوراکل و … منتشر کند. اما می‌تواند نتایج را در مورد برنامه‌های متن بازی مثل لینوکس منتشر کند. در هسته‌ی لینوکس حدود ۰٫۵۵ اشکال در هر ۱٬۰۰۰ خط کد وجود دارد که نسبت به برخی پروژه‌ها مانند پروژه مبتنی بر جاوای Hadoop با ۱٫۷۱ ایراد در ۱٬۰۰۰ خط کد، یا برنامه CloudStack با ۶٫۹۶ خطا در ۱٬۰۰۰ خط کد؛ بسیار بهتر است.

سیستم‌عامل‌های دیگری که همانند لینوکس مبتنی بر یونیکس هستند مانند FreeBSD و NetBSD نیز به ترتیب با ۱٫۰۹ و ۱٫۰۶ خطا در هر ۱٬۰۰۰ خط کد، خطاهای بیشتری نسبت به لینوکس دارند. پروژه‌ی Samba نیز ۰٫۶۳ خطا در هر ۱٬۰۰۰ خط کد دارد.

منبع: +


* کلمه لینوکس برای هسته‌ی لینوکس به کار رفته است.

Shortlink:

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *