بهاي آسيب پذيري ها
نام نویسنده: جان ميلر
همکاران سیستم – يافتن آسيب پذيري ها ارزنده است. هنوز بسياري از مردم معتقدند كه آسيب پذيري وجود ندارد مگر زمانيكه بصورت عمومي برهمگان افشا گردد . ما مي دانيم كه آسيب پذيري ها بايد افشا گردند ولي توليدكنندگان محصولات نرم افزاري چه نقشي در افشاگري عمومي آسيب پذيري هاي محصولات خود دارند .
يكي از مطالبي كه در مورد امنيت اطلاعات من خيلي دوست دارم تعداد زياد تكنولوژي هايي است كه در آن دخالت دارند. تنها با كامپيوتر هاي شخصي ٬ انواع بسياري از ساختار ها ٬ سيستمهاي عامل ٬ وسايل جانبي و پروتكلها را بايد ياد گرفت. هيچ گاه با كمبود منابع اطلاعاتي براي دست و پنجه نرم كردن مواجه نمي شويم و بايد سعي كنيم در فرا گرفتن اندكي از همه چيز و عميق شدن در بعضي موضوعات مشخص و مطلوب ، تعادل را حفظ نماييم كه امري بس دشوار است .
وقتي از آسيب پذيري ها صحبت به ميان مي آيد٬ به همراه آن طيف گسترده اي از اطلاعات منتقل مي شود. در يك ديد ابتدايي و سطحي اين اطلاعات مي تواند در مورد تكنولوژي هايي كه تحت تاثير قرار گرفته و نيز نتايج سوء استفاده از آنها باشد. در مقابل ٬ اگر از عميق ترين سطوح و يك ديد حرفه اي به موضوع نگاه كنيم ٬ بعنوان محقق شما مي توانيد آسيب پذيري ها را در جزئيات مهيب و مخرب مورد بررسي قرار دهيد ( دقيقا” تكه برنامه آسيب پذيرچقدرحساس شناخته شده و اين موضوع چگونه مي تواند مورد سوء استفاده قرار گيرد.) حتي در اين سطح ٬ دانستن اينكه چطو مي شود از يك تكه برنامه آسيب پذير سوءاستفاده كرد٬ با انجام دادن عملي اين كار تفاوت زيادي دارد.طبيعتا” در اين بين يك سطح مياني يا به نوعي نيمه حرفه اي نيز وجود دارد٬ بين يك ديد سطحي و ديدي كه يك محقق مي تواند داشته باشد . اين بسترمياني ( نيمه حرفه اي) گاهي ممكن است به مردم در جهت بهبود يك آسيب پذيري كمك كند٬ يا حتي بدون اينكه متوجه جزئيات پيچيده تكنيكي شوند٬ تا حدي بر موضوع مورد آسيب پذيرعميق شده كه يك سري راهكار نيز در مقابل مجموعه حملات احتمالي به آسيب پذيري ارائه كنند.
گاهي فاصله بين اين سطوح ( مبتدي – نيمه حرفه اي – حرفه اي) كم و اندك است ٬ مانند آسيب پذيري ساده نسبت به SQL Injection ( تزريق دستورات SQL از طريق مرورگر وب ). در اينجا شخصي با ديد كاملا سطحي نيز احتمالا” مشكل زيادي براي يافتن راهي براي سوء استفاده و exploit نخواهد داشت. از طرف ديگر آسيب پذيري هايي وجود دارند كه فاصله بين اين سطوح در آنها بسيار عميق است. سر ريز شدن پشته ديوار آتش DNS parsing kernel stack overflow شركت سيمانتك در سال 2004 مثال بسيار خوبي براي اين مورد مي باشد . سوء استفاده از اين آسيب پذيري ( Exploit ) چيزي است كه فقط ممكن است گروه بسيار معدودي از مردم در مدت زماني چشمگير و قابل توجه موفق به انجامش شوند.
براي آنكه زياد از بحث منحرف شويم ٬ اجازه دهيد فقط بگويم ٬ به نظر من آسي پذيري ها چيزهاي كوچك و جذابي هستند. هركدام موردي يگانه و بي همتا ست و هر كدام به مجموعه اطلاعات پيش نياز خودش براي فهميدن كامل ، وابسته است .
آسيب پذيري ها از كجا مي آيند؟
با اينكه اين سئوال بسيار ساده به نظر مي رسد ولي پاسخ آن هميشه ساده نيست . در مورد اينكه آسيب پذيري ها از كجا مي آيند ( چطور پيدا مي شوند ) دو مكتب فكري وجود دارد كه در مورد هر كدام در ادامه متن صحبت خواهيم كرد.
اغلب آسيب پذيري ها توسط يك محقق امنيتي فاش مي شوند ( و يا گاهي به ندرت نيز ممكن است در ليست ايميل هاي يك وب سايت غول پيكر مربوط به مسايل امنيتي مانند Bugtraq بر ملا شود. ) يك محقق امنيتي مي تواند از كارمندهاي يك شركت ٬ يك محقق امنيتي تمام وقت مستقل ٬ ويا حتي يك بازرس امنيتي شبانه باشد كه در اوقات فراغتش نگاهي به تكه برنامه ها مي اندازد. در بعضي از موارد٬ فردي كه آسيب پذيري را كشف مي كند ممكن است بصورت كاملا” اتفاقي و تصادفي به آن رسيده باشد. در اكثر موارد ٬ تحقيق در مورد يك آسيب پذيري و كشف آن بصورت ريشه اي ٬ پروسه اي متمركز و بسيار فشرده است كه يك فرد متخصص بايد زمان زيادي براي آن صرف كند.
حالا به هر دليل٬ افشاي عمومي يك آسيب پذيري توسط شركت سازنده نرم افزار اغلب با تولد (وجود) آن آسيب پذيري همزمان مي گردد. حتي لغت مصطلح ( zero-day به معني كمتر از يك روز) توسط شركت هاي سازنده نرم افزار كه حاوي آسيب پذيري هستند٬ به نظر مي رسد چنين بيان مي كند كه گويا آسيب پذيري افشا نشده، در حقيقت وجود ندارد. اين باور اشتباهي است كه بسياري از مردم مرتكب مي شوند. مثل اينكه مردم تحت تاثير چنين باوري هستند كه اصلا” تا يك آسيب پذيري بصورت عمومي اعلام نشود هيچگونه خطري براي كسي ايجاد نكرده و هيچ تهديدي محسوب نمي شود. اگر يك آسيب پذيري وسط يك بيابان بي آب و علف پيدا شود و كسي چيزي در مورد آن نشنود٬ آنگاه مردم تصور مي كنند كه در حقيقت اين يك آسيب پذيري نيست و اصلا” ارزش آن را ندارد كه در موردش صحبت كنند .
روند اعلام رسمي و پذيرفتن يك آيب پذيري توسط يك شركت سازنده نرم افزار (Responsible Disclosure) نيازمند آن است كه محققان امنيتي بنشينند بر روی اطلاعاتشان و دست روی دست بگذارند تا تولید کنندگان محصول نرم افزاری وصله ( Patch ) ای برای آسیب پذیری مذکور به مشتریانشان ارائه دهند . در گذشته ما حتی شاهد ستیز و دشمنی بین تولید کنندگان نرم افزار و محققان امنیتی بوده ایم که دو ایده کاملا” متفاوت از یکدیگر در آشکار سازی این نواقص و آسیب پذیری های امنیتی داشته اند. تولید کنندگان نرم افزارها نیازمند زمان برای اصلاح کردن نرم افزارهایشان بودند که می تواند در نوع خود امری بسیار زمان بر و پر پیچ و خم باشد . محققان امنیتی می خواستند که این آسیب پذیریها و ضعفها مورد بررسی قرار گرفته و بر طرف شود ، حال بگذریم که هدف اصلی آنها از فاش ساختن این اطلاعات این مطلب بوده با نه ؟! و با اینکه این دو هدف یکسان به نظر می رسد ولی اختلافات از همینجا ناشی می شود.
در حال حاضر چنان به نظر می رسد که بصورت کلی صنعت امنیت خواستار تایید و بر ملا شدن نواقص و آسیب پذیریهای امنیتی درزمان دقیق افشای نقص و آسیب پذیری می باشد. در حالي كه این آسیب پذیریها و ضعفهای امنیتی در بعضی موارد بعد از هفته ها ، ماه ها و یا حتی سالها به تولید کنندگان نرم افزار گزارش شده اند. هیچ تضمین و گارانتی ای وجود ندارد، بنابر این من معتقدم باور این مطلب بسیار ساده لوحانه است که کسی که يك آسیب پذیری و نقص امنیتی را گزارش می کند ، تنها کسی بوده که ازوجود این آسیب پذیری اطلاع داشته است . که خود این مطلب اگر با دقت به آن بیندیشید بسیار هراسناک است.
بها و ارزش برای آسیب پذیری ها
با گذشت زمان آسیب پذیری ها کم کم تبدیل به متاع با ارزشی می شوند . اخیرا” شایعاتی پیرامون آسیب پذیری جدید WMF منتشر شد که ، پیش از آنکه این آسیب پذیری اعلان عمومی شود و مردم در مورد آن اطلاع پیدا کنند ، به مبلغ 4000 دلار فروخته شد . ( هر چند این مطلب در سطح شایعه باقی ماند و مورد تایید مسوولان قرار نگرفت ) . با فرض اینکه این مطلب صحیح باشد ، من شک دارم که اولین مورد از چنین واقعه ای باشد ، و مطمئن هستم که آخرین پیشامد نیز نخواهد بود.حتی شرکت هایی مانند iDefense و 3Com وجود دارند که حاضرند به محققین برای منتشر نساختن آسیب پذیری ها و ضعفهای امنیتی شان پول پرداخت کنند. شما فکر می کنید این مطلب چه تاثیری بر روی آسیب پذیری ها خواهد گذاشت ؟ مهم نیست که شما چه فکری در این مورد می کنید، آسیب پذیری ها حکم یک پول جرینگي و قلنبه را دارند.
در حالیکه وجوه پرداختی از طرف شرکتهای iDefense و 3Com برای موسسات و شرکتهای بزرگ با تیمهای امنیتی بسیار قوی چیز چشمگیری به حساب نمی آید، این مبالغ برای محققان امنیتی مستقل چنان قابل توجه است که تمام وقت خود را وقف این موضوع نمایند. این افراد می توانند با تسلط داشتن بر یافتن ضعفهای امنیتی و آسیب پذیری ها هزینه زندگی خود را به خوبی از این راه تامین نمایند. این نوع فعالیت می تواند تبدیل به یک تلاش تمام وقت برای این افراد شود که به نظر من فوق العاده است .
وجدان و اخلاق در آسیب پذیری ها
بعضی از افراد ممکن است تصور کنند فروش آسیب پذیری ها از نظر اخلاقی پسندیده نیست و سؤال برانگیز است . آیا نباید محققان امنیتی این اطلاعات را از روی خیر خواهی و رقت قلب منتشر نمایند ؟! شاید. اما در این صورت آیا ما باید از مححققان امنیتی انتظار داشته باشیم که بصورت رایگان از محصولات و نرم افزارهای تجاری دیگران ، که با منافع مالی هنگفت فروخته شده اند ، نگهبانی و پشتیبانی کنند. اگر فروش آسیب پذیری ها از نظر اخلاقی صحیح نیست پس تکلیف فروش و کسب درآمد از طریق نرم افزارهای بسیار نا امن چه می شود ؟ آیا این مطلب اخلاقی است ؟! در حالی که تولید نرم افزارهای کاملا” ایمن و بدون آسیب پذیری امری غیر ممکن است، کاملا” طبیعی است که بعضی از شرکتها حتی تلاش نکنند که نرم افزارها و محصولاتشان از ایمنی برخوردار باشند، و بنابر این مسائل اخلاقی و وجدانی برای شرکتهایی که در فکر فروش محصولاتشان هستند و به فقط به درامد نهايي فکر می کنند هیچ نقی را ایفا نمی کند. تولید نرم افزارهای ایمن پر هزینه و زمان بر است و شرکتها در صورتی که این مطلب تاثیرخاص و قابل توجهي بر درآمد و سود دهی آنها نداشته باشد ، توجه خاصی نشان نمی دهند .
شما از کدامیک جانبداری می کنید ؟ آیا معتقدید آسیب پذیری ها تنها زمانی یک تهدید جدی به حساب می آیند که بصورت عمومی اعلام و منتشر شوند ؟ یا اینکه آسیب پذیری ها در هر صورت فارغ از اینکه بصورت عمومی انتشار پیدا کنند یا نکنند یک تهدید و خطر به حساب می آیند ؟
چرا ما نیاز به انتشار و اعلان عمومی یک آسیب پذیری از طرف تولید کننده نرم افزار داریم ؟
من شخصا” معتقدم آسیب پذیری ها خیلی پیش تر از آنکه بصورت عمومی منتشر شوند یک خطر و تهدید جدی به حساب می آیند. این باور که افشای عمومی و اعلان یک آسیب پذیری مردم را به خطر انداخته و برای آنها ریسک به همراه دارد ، آن هم مدتها پس از آنکه تولید کننده محصول نرم افزاری از وجود آن آگاه شده و ماه ها و حتی شاید سالها بدون هیچگونه اطلاع رسانی عمومی از این آسیب پذیری سپری گشته ، به نظر امری جاهلانه می آید و تنها فریب دادن خودمان است. همچنین این نظر تنها تلاشی است برای شکستن کاسه و کوزه ها بر سر دیگری و جز انداختن تقصیر استفاده از یک نرم افزار لاعلاج اصلاح ناپذیر بر گردن دیگری نیست : دیگرانی غیر از آنها که نرم افزار را تولید کرده اند. نتیجه و ماحصل این است که پس از اینکه یک آسیب پذیری و ضعف کشف شده و و به تولید کننده نرم افزار گزارش می گردد سیستمها همچنان آسیب پذیر و نا امن هستند، فارغ از اینکه این اطلاعات بطورت عمومی منتشر شود یا نه .
برای روشن شدن بهتر موضوع ، من نمی گویم ارسال یک exploit برای Bugtraq حتی پیش از آنکه به تولید کننده نرم افزار اطلاع داده شود ( و یا شاید درست پس از تماس با شرکت تولید کننده نرم افزار) مسئولیتی در پی دارد! ندارد. و نیز نمی گویم که این مطلب مردم را به خطر نمی اندازد. این موضوعات جای بحث زیادی دارد و همچنین من سعی در پایین آوردن ارزش ساختن وصله های نرم افزاری و اده جلوه دادن آنها برای نرم افزارهایی که بصورت گسترده و تجاری فروخته شده اند را نیز ندارم .به هر حال باید محدودیتی در اینجا وجود داشته باشد( فروشنده ای که سر خود را در برف فرو برده و از اعلان عمومی آسیب پذیری نرم افزارش امتناع می کند ، هیچ کمکی به کسی نکرده است).
من فکر می کنم زمان آن فرا رسیده که شرکت های تولید کننده نرم افزار پیش از آنکه وصله های امنیتی خود را منتشر کنند ، آسیب پذیری ها و ضعف های امنیتی خود را بصورت عمومی اعلام کنند ، مخصوصا” زمانی که تهیه چنین وصله هایی ممکن است ماه ها به طول بیانجامد ( یا در مواردی حتی بیش از یک سال ). حد اقل ضعف امنیتی و آسیب پذیی راقبول کرده و مشتریان خود را از نقص و آسیب پذیری آگاه کرده و راهکارهایی به کاربرانشان ارائه کنند تا شاید آنرا کم خطرتر کرده و اندکی از آسیب پذیری کاربرانشان بکاهند.
سر انجام من معتقدم محققان امنیتی به همه ما لطف بزرگی می کنند. این چیزی است که آنها بخاطرش سزاوار پاداش هستند. در حالی که پذیرفتن متعهدانه و آشکار سازی آسیب پذیری ها توسط شرکت های تولید کننده نرم افزار امری بسیار مهم است ، محدودیتهایی نیز برای زمان پاسخگویی آنها وجود دارد( زیرا که مردم خیلی پیش تر از اعلان عمومی آسیب پذیری در ریسک و خطر قرار دارند). در پایان محققان امنیتی کسانی نیستند که آسیب پذیری ها را ایجاد نمایند ، آنها تنها کسانی هستند که این آسیب پذیری ها را کشف می کنند.