چه كسي مسول خطا و حفره‌هاي امنيتي در نرم افزار است؟

در يك دعواي حقوقي در كاليفرنيا بر عليه شركت مايكروسافت ادعا شده بود، نرم‌افزاري كه داراي ضعف امنيتي بوده به فروش رسانده و باعث خسارت به مشتري شده است. جواب ميکروسافت اين بود كه فقط حق بهره برداري از نرم افزار به همان صورتي كه هست فروخته شده، نه تمام محصول نرم افزاري. حال چند سوال در اين زمينه مطرح مي‌شود.

1- آيا شركت‌هاي نرم‌افزاری بايد مسول مشکلات حادث شده از محصول فروخته شده خود باشند؟ اگر شركت جنرال موتورز يا فورد اتومبيل معيوب فروخته باشند، آيا خسارت ناشي از عيب را نمي پردازند؟ همه مي‌دانيم دادگاه آنها را ملزوم به پرداخت خسارت مي‌كند. اما چرا نرم‌افزارها چنين نباشند.
2- حتي اگر شركت‌ها ي نرم‌افزاري مسول كيفيت محصول خود باشند، آيا واقعا مي‌توان انتظار داشت كه حفره‌هاي امنيتي را مانند عيب‌هاي ديگر مرتفع سازند؟
3- چرا مايكروسافت، معمولا طرف دعوا واقع مي‌شود؟ آيا واقعا محصولات آن بد است؟

موسسه استاندارد و فن‌آوري ملي امريكا در سال 2002 برآورد كرده بود كه هزينه كيفيت نرم‌افزار 60 ميليارد دلار در سال مي‌گردد. و مشتريان دو سوم آن را پرداخت مي‌نمايند. در فوريه 2003 در يك دعواي حقوقي بر عليه يك محصول نرم افزاري، بيش از دو ميليون دلار خسارت دريافت گرديد.  بنابراين خيلي دور از ذهن نيست كه شركت‌هاي نرم‌افزاري را مسول پرداخت خسارتِ ناشي از عيب‌هاي نرم افزارشان نماييم.

اين مسئله در مورد محصولاتي كه به سفارش مشتري توليد مي شوند، بيشتر احساس گردد. شركت هاي نرم‌افزاري از نظر توليد محصول با كيفيت، بسيار متفاوت مي‌باشند. پاره‌اي از آنها محصولات بسيار خوب و با نقص ناچيز توليد مي نمايند و پاره اي از آنها مشتري را به ستوه مي‌آورند.  اما جوابِ اين سوال كه آيا شركتي مي تواند محصول نرم‌افزاري بدون نقص و حفرهِ امنيتي توليد كند؟ بطور قطع و يقين خير است.

در يك نمونه‌گيري از 104 شركت نرم‌افزاري در سراسر جهان كه در سال 2002 و 2003 جمع آوري گرديد، بطور متوسط 15 صدم درصد از هر هزار خط برنامه، تا 12 ماه بعد از دريافت و کارکرد محصول، اشكال پيدا شد. در يك مثال كوچكتر كه در 40 پروژه در آمريكا و ژاپن در سال 1990 انجام گرديده بود، حدود 6 دهم درصد از هزار خط داراي اشكال بود. به عبارت ديگر در سال 1990 چهار برابر بيشتر اشکال مشاهده شد. اما هنوز اگر 15 صدم درصد در هر هزار خط را بپذيريم، براي يك ميليون خط برنامه حدود 150 اشکال خواهيم داشت. در حال حاضر محصولاتي هستند كه داراي دهها ميليون خط برنامه هستند و اصلا جالب نيست كه شاهد صدها اشکال در محصول بهترين شركت‌ها باشيم.  مشگل هنوز خاتمه نيافته. براي محصولاتي كه تحت وب و اينترنت هستند، ويروسها، خرابكاران، نفوذي‌ها و غيره هر لحظه مي توانند ما را با يك حمله غافلگير كننده نابود سازند.

حال بهتر مي توان تصور كرد كه ويندوز 2000 با حدود 30  ميليون خط برنامه و متصل به اينترنت داراي چه ميزان باگ مي‌تواند باشد. براي نمونه بد نيست بدانيم که تقريبا هر نسل منتشر شده از يونيكس و لينوكس كه توسط سان، آي‌بي‌ام و ردهت منتشر ميشود، داراي اشكال امنيتي در انتقال داده‌ها بين سيستم‌های متفاوت است. لينوكس نيز اشكال‌هايي در توابع فشرده سازي دارد. سيستم عامل شبكه سيسكو (IOS ) شكافي در پردازش بسته‌هاي ديتا داشت كه باعث مي شد يك نفوذي بتواند به آن حمله كند. شركت سان گزارش شكاف‌هايي در ماشين مجازي جاوا داد كه به نفوذي ها اجازه مي داد كه كنترل مرورگر وب را در اختيار گرفته، نام و رمز كاربران را سرقت كنند.

نت اسكيپ گزارش‌هاي مشابهي در مرورگر خود و جاوا اسکريپت داد. شركت سان گزارش داد كه در توابع XDR خود مشگل شناسايي كاربر دارد.  اراكل نيز گزارشي از شكاف امنيتي در سوييت ايي‌بيزنس خود مي‌داد. آي بي ام مجبور شد مشگل امنيتي خود را در سرورهاي دامينو كه توسط بخش لوتوس توليد شده بود رفع كند. 
آپاچي در دنياي منابع باز نيز خبر از شكافي در وب‌سرور خود ‌داد كه از امكان نفوذ بالقوه‌ يك نفوذي با سرريز كردن يكي از بافرهاي آن مي داد. اس‌اس‌ال نيز فهرستي بلند از مشکلات امنيتي دارد. حتي شركت ضد ويروس سيمنتِك نيز يك شكاف امنيتي داشت كه اجازه مي داد كاربران بطور مجاني و بصورت آنلاين رايانه‌هاي خود را وارسي نمايند.

نتيجه گيري :

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