باگ نرم افزار چیست ؟

دیوید بروملی (David Brumley)، استاد برق و مهندس رایانه دانشگاه کارنگی ملون، مؤسس و مدیر شرکت «ForAllSecure» مقاله‌ای را به نام «ماشین هک کلاه‌سفید» (The White-Hat Hacking Machine) منتشر و پیرامون تهدیدات امینت سایبری امروزی در آن صبحت کرده است. در ادامه می‌توان محتوای به اشتراک گذاشته شده توسط این فرد را مطالعه کرد.


زمانی که مارک اندرسون (Marc Andreessen)، در سال 2011 گفت «جهان توسط نرم‌افزار در حال بلعیده شدن است»، این ایده همچنان تازه به نظر می‌رسید. برنامه‌ها در حال حاضر به زندگی انسان‌ها نفوذ کرده‌اند. این نرم‌افزارها را می‌توان در طیف گسترده‌ای از ابزارهای پیچیده الکترونیکی مانند دستگاه‌های پزشکی و وسایل نقلیه خودمختار تا اشیا ساده‌ای مانند لامپ مجهز به اینترنت مشاهده کرد. در حال حاضر انسان‌ها توسط نرم‌افزار احاطه شده‌اند. این مسئله نشان می‌دهد که مردم بیش از هر زمان دیگری در معرض حمله از سوی آن‌ها قرار دارند.


هر ساله 111 میلیارد خط کد به نرم‌افزارها اضافه می‌شود و هر خط آن ظرفیت بالقوه‌ای برای تبدیل شدن به یک تهدید جدید را دارند. استیو مورگان (Steve Morgan)، مؤسس و رهبر ارشد شرکت تحقیقاتی «CyberSecurity Ventures» پیش‌بینی می‌کند، ورود غیرقانونی به سیستم‌ها از طریق آسیب‌پذیری‌های ناشناخته-که در صنعت به عنوان روز صفرم (Zero-day) از آن یاد می‌شود- در سال 2021 به صورت میانگین، یک بار در روز رخ می‌دهد. این در حالی است که آمار یاد شده در سال 2015، یک‌مرتبه در هفته بود.


بروملی و گروهش در دانشگاه کارنگی ملون، نزدیک به 10 سال را روی توسعه یک فناوری که نرم‌افزارها را به صورت خودکار ایمن نگه می‌دارد، تحقیق کردند. سپس در سال 2012 به منظور تجاری‌سازی این دستاورد، شرکت «ForAllSecure» تأسیس شد. وی توضیح می‌دهد یکی از راه‌هایی که می‌توانستند عملکرد نوآوری خود را اثبات کنند، قرار دادن آن در یک رقابت بود.

سال ۲۰۱۶:


سازمان دارپا در سال 2016 رقابتی را با نام «سایبر گرند چلنج» (Cyber Grand Challenge) برگزار کرد. چنین رویدادی تاکنون چندین بار توسط دارپا برگزار شده و هدف آن بهبود امنیت ملی اعلام می‌شود. برای نمونه می‌توان به اوایل دهه 2000 که اقدامی مشابه توسط این سازمان برای وسایل نقلیه بی‌سرنشین انجام گرفته بود، اشاره کرد.

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


میدان مبارزه‌ی امنیت سایبری توسط تعداد بسیار زیادی هکر که از مهارت‌های فنی بالایی برخوردار هستند پر شده است. این افراد در سو استفاده از حفره‌های امنیتی و نفوذ به دفاع سازمان‌ها بسیار خلاق هستند. مجرمانی که این کار را برای دستیابی به اهداف شخصی یا خراب کارانه انجام می‌دهند، کلاه سیاه نام دارند. این افراد در اغلب موارد ابزارهایی را به وجود می‌آورند که هکرهای آماتور یا «اسکید » (script kiddies) قادر هستند با بهره‌مندی از آن‌ها تخریب گسترده‌ای را به وجود آورند.


برای نمونه می‌توان به بات‌نت اینترنت اشیا میرای (Mirai) اشاره کرد که در سال 2016، پس از نفوذ به طیف بسیاری از ابزارهای خانگی، حمله اختلال سرویس گسترده‌ای را انجام داد و در نتیجه‌ی آن اینترنت کل جهان به شدت کند شد.

در مقابل گروه بالا کلاه سفیدها قرار دارند که از توان خود برای مقابله با حمله‌های سایبری بهره می‌برند؛ اما به وضوح مشخص است که تعداد این افراد –حتی بدون در نظر گرفتن زیرساخت‌ها و بسترهای نظامی سراسر جهان- برای دفاع از نرم‌افزارها و سامانه‌های تجاری سراسر جهان کافی نیست.

سایبر گرند:


سازمان دارپا در سال 2014 پروژه‌ای 2 ساله را به نام سایبر گرند چلنج آغاز کرد. هدف پروژه یاد شده، بررسی این موضوع بود که آیا می‌توان نوعی سامانه هوش مصنوعی توسعه داد که قادر باشد آسیب‌پذیری‌ها را شناسایی و وصله کند یا خیر. در سال 2015 حدود یک صد گروه به رقابت پرداختند. 7 گروه برتر این جمع در سال 2016 مرحله‌ی نهایی این رقابت را پشت سر گذاشتند. 3 گروه برتر این رقابت به ترتیب 2 میلیون، 1 میلیون و 750 هزار دلار جایزه دریافت کردند.


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


گروه بروملی در هتل بالروم شهر لاس‌وگاس گردهم آمدند تا در رقابتی که هزاران ساعت برای آن آماده‌سازی کرده بودند، شرکت کنند؛ اما به نظر می‌رسید که با شکست مواجه شدند.

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


پیشرفته‌ترین نرم‌افزارهای امنیتی امروزی از ابزارهای ویژه‌ای بهره می‌برند که امکان بررسی کد منبع و پرچم گذاری آسیب‌پذیری‌های بالقوه را فراهم می‌آورند؛ اما این فرایندها طیف گسترده‌ای از هشدارهای کاذب (False positive) را به وجود می‌آورند، پرچم گذاری مواردی که در واقع آسیب‌پذیری نیستند؛ بنابراین اپراتورها باید پس از هر بار تکمیل فرآیند به صورت دستی همه‌ی علامت‌گذاری‌ها را بررسی کنند.


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


سامانه‌ی توسعه‌یافته پژوهشگران مورد بحث که به منظور شرکت در رقابت ساخته شده بود، «میهم» (Mayhem)، نام داشت. این سامانه می‌تواند کاری مشابه با هکرهای کلاه سفید انجام دهد. این سیستم نه تنها می‌تواند آسیب‌پذیری‌های احتمالی را شناسایی کند؛ بلکه به منظور حصول اطمینان از این که واقعاً حفره‌ی امنیتی هستند، از آن سو استفاده می‌کند. اثبات این که پرچم‌های گذاشته شده، واقعاً آسیب‌پذیری هستند، در رقابت سایبر گراند از اهمیت بالایی برخوردار بود و باعث بالا رفتن امتیاز هر سیستم می‌شد. همچنین با توجه به این که میهم، سامانه‌ای است که می‌تواند صدها هزار گره (nodes) را به سرعت تجزیه‌وتحلیل کند، از هر انسانی سریع‌تر است.

ایجاد میهم:


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

درخت یاد شده به قدری سریع رشد می‌کند که مدیریت آن بسیار چالش‌برانگیز یا غیرممکن می‌گردد؛ اما محققان روشی هوشمندانه را به وجود آوردند تا شاخه‌ها را حرص کنند. در نتیجه تعداد احتمالاتی که باقی می‌ماند را می‌توان به شکلی عمیق‌تر مورد بررسی قرار داد.


اجرای نمادین (Symbolic execution) به منظور بررسی همه‌ی منطق برنامه، یک معادله را به وجود می‌آورد. برای مثال ابتدا معادله «X + 5 = 7» را در نظر گرفته، سپس شروع به حل آن خواهد کرد. این راهکار در تضاد با دیگر روش‌های تجزیه‌وتحلیل نرم‌افزاری مانند فازینگ (Fuzzing) قرار دارد. در فازینگ تا زمان از کار افتاد برنامه، جایگشت‌های تصادفی داده‌ها به برنامه داده می‌شود. پس از پایان این مرحله کاربر می‌تواند آسیب‌پذیری‌های متداول را شناسایی کرده و نحوه سو استفاده از آن‌ها را در یک حمله‌ی عمدی درک کند. فازینگ تا زمانی به این کار ادامه می‌دهد که رشته‌ی خاصی از ورودی‌ها، پاسخ صحیح را به وجود آورند و در نهایت تشخیص داده شود که X برابر با 2 است.


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

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


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


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

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


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

محققان در سال 2014، فناوری میهم را روی سرتاسر توزیع دبین (Debian) لینوکس آزمایش کردند که در سرورها و دسکتاپ‌های سراسر جهان از کاربرد بالایی برخوردار است. سامانه مورد بحث موفق شد 14 هزار آسیب‌پذیری منحصر به فرد را شناسایی کند. سپس با توجه به جدید بودن و اولویت بالاتر آن‌ها، این تعداد را به 250 عدد کاهش داد. این آزمایش بدون دخالت هیچ انسانی و با بهره‌مندی میهم از چندین سرور خدمات ابری آمازون انجام گرفت و در کمتر از یک هفته به پایان رسید.

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

آغاز رقابت


در 3 ژوئن 2015، بیش از یک صد گروه وارد دور مقدماتی شدند. در این مرحله 131 چالش منحصربه‌فرد وجود داشتند که هر یک شامل آسیب‌پذیری‌های امنیتی نرم‌افزاری بودند. در نهایت 7 گروه اول که بیشترین امتیاز را بر پایه شناسایی حفره امنیتی و وصله‌ی آن کسب کرده بودند، مجوز ورود به مرحله‌ی نهایی را دریافت کردند. در این مرحله امتیاز ForAllSecure بیش از 2 برابر بالاتر از گروه دوم بود.

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

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

سازندگان میهم به منظور آماده شدن برای رقابت نهایی با دو چالش بزرگ مواجه بودند که در زیر قابل‌مطالعه هستند:


  1. با وجود این که گروه از شیوه عملکرد میهم به منظور شناسایی آسیب‌پذیری‌ها رضایت داشت، معتقد بود که وصله‌های ایجاد شده کارآمدی کافی را ندارند. در طول رقابت یا حتی جهان واقعی، هیچ‌کس به نصب وصله‌ای که قدرت پردازشی بیشتری را طلب کرده، از توان نهایی سیستم می‌کاهد، علاقه‌ای ندارد؛ بنابراین زمان زیادی به توسعه قابلیت ایجاد وصله‌ی خودکار -آسیب‌پذیری‌هایی که سربار آن‌ها بین 0 تا 5 درصد است- اختصاص داده شد.
  2. گروه به راهبردی نیاز داشت که به پیروزی آن‌ها در رقابت بینجامد. این گونه فرض کنید که یک آسیب‌پذیری را شناسایی و وصله‌ای را برای آن تولید کرده‌اید. شما ممکن است -در صورتی که احتمال ایجاد سربار اضافی و کد شدن برنامه وجود دارد- تمایل نداشته باشید، وصله یاد شده را به سرعت نصب کنید. در عوض بعضی مواقع بهتر است صبر کرده و تنها موارد قطعاً اضطراری را وصله کنید. پژوهشگران برای رفع این چالش، سامانه‌ای را به وجود آوردند که تصمیم می‌گیرد، بهترین زمان رفع یک آسیب‌پذیری، چه هنگامی است.

رقابت نهایی:

مرحله‌ی نهایی رقابت سایبر گراند در تاریخ 5 آگوست 2016، در هتل بالروم لاس‌وگاس آغاز شد. در سالن برگزاری 7 سامانه‌ی غول‌پیکر روی سکویی قرار داشت. زیر این سکو، استخری شامل 180 تن آب به منظور خنک‌سازی این سیستم‌ها آماده شده بود.


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

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

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

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


انقلاب در امنیت نرم‌افزار

مایک والکر (Mike Walker)، مدیر برنامه دارپا اشاره کرد، رویداد امنیت سایبری خودمختار به نمایش درآمده، تنها آغاز یک انقلاب در زمینه امنیت نرم‌افزاری است.

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

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