در فارسی به صورت “نقطه ضعف” یا “حفره” یا “آسیب پذیری” ترجمه شده است و تعریف رایج آن عبارت است از “هرگونه ضعف نرم افزاری که قابل سوءاستفاده باشد”.
مشهورترین نقطه ضعف ها در نرم افزارها و سیستم های عامل وجود دارند که از اشکالات و محدودیت های برنامه نویسی ناشی می شوند. البته برخی کارشناسان می گویند ضعف نرم افزاری را فقط نباید در برنامه های کامپیوتری خلاصه کرد زیرا یک نقطه ضعف ممکن است در عادات فردی کاربران نیز خودنمایی کند. مانند کارشناس یا مدیری که رمزهای عبورش را برروی کاغذی یاداشت کرده و در زیر شیشه میزش قرار می دهد یا به بدنه کامپیوتر می چسباند و فراموش می کند که همیشه تنها پشت میزش ننشسته است!
گاهی هم پیش می آید که نقطه ضعف در یک فناوری (Technology) وجود دارد. مثلا یکی از اشکالات پودمان (Protocol) انتقال فایل (FTP) آنست که نام کاربر و رمز عبورها به همان شکلی که تایپ می شوند
(Clear Text) و رمز نشده بین سرویس گیرنده و سرویس دهنده رد و بدل می شود. در نتیجه اگر نفوذگری در این بین باشد و داده ها را شنود کند می تواند نام کاربری و رمز عبور را از جریان داده ها استخراج کند.
اما برای آنکه بتوانیم خوانندگان را با جنبه های متفاوت این مفهوم آشنا کنیم خوبست از نقاط ضعف امنیتی موجود در قالب دسته بندی های معمول زیر سخن به میان آوریم:
1- پروسه ها (Process)
نقطه ضعف در پروسه های سیستم های عامل و سایر نرم افزارها از مشهورترین نقاط ضعف رایج در دنیا هستند. نقطه ضعف در یک پروسه معمولا بدین صورت خود را نشان می دهد که وقتی داده های خاصی برای نرم افزار فرستاده می شود، واکنش های غیرمعمولی از سوی نرم افزار مشاهده می شود. این واکنش ها بر حسب درجه خطری که برای دستگاه دارند به موارد زیر فراز می شوند:
– در کم خطرترین شکل، نتیجه نقطه ضعف می تواند به صورت از کار افتادن نرم افزار باشد بدون آنکه اختلالی در عملکرد دستگاه پیش آید. یعنی پروسه درگیر مشکل، از حافظه دستگاه خارج شده اما بقیه پروسه ها به صورت عادی به کار خود ادامه می دهند.
– در حالتهایی سخت تر پروسه دارای نقطه ضعف می تواند سبب خراب شدن (Corrupt) بخشهایی از حافظه دستگاه شود که در اینحالت کاربر پیغام های خطای پی در پی را مشاهده می کند که گاهی فقط با راه اندازی (Restart) دستگاه، مشکل حل خواهد شد.
– اشکالاتی هم در برخی از نرم افزارها وجود دارد که اشکالی برای پروسه در حال اجرا ایجاد نمی کند، اما نتایج ناخواسته ای به بار می آورد که سبب به خطر افتادن امنیت اطلاعات می گردد. در اینگونه موارد فرد سوءاستفاده کننده داده های ورودی خاصی را به پروسه ای می دهد تا نتایج دلخواهش را به دست بیاورد. مشهورترین پروسه ای که بیشترین آسیب پذیری را در این رابطه داشته است، پروسه اصلی نرم افزار مشهور Microsoft SQL Server می باشد. اگر بخواهیم نمونه ساده ای از نفوذ به این شکل را توضیح دهیم، می توانیم حالتی را مثال بزنیم که فردی به جای وارد کردن شماره شناسایی خود بر روی سایت، یک دستور کوتاه زبان SQL را وارد نماید. اگر برنامه سرویس دهنده Web این داده را کنترل نکرده و فرض کند کاربر دقیقا عددهای شماره شناسایی اش را وارد کرده است و این داده ها را مستقیما به نرم افزار SQL بدهد، بانک اطلاعاتی SQL آنرا اجرا کرده و خروجی را برای کاربر می فرستد. حالا فرض کنید داده های ارسال شده در قالب شماره شناسایی، در واقع دستوراتی برای دریافت اطلاعات خاصی از بانک اطلاعاتی باشد که توسط پروسه اصلی SQL پردازش شده و نفوذگر را به مقاصد شومش می رساند. به این عمل تزریق (Injection) می گویند. بسته به نوع نقطه ضعف یا هدف سوءاستفاده کننده ممکن است تمامی اطلاعات یک بانک اطلاعاتی سرقت و یا حذف شود. گاهی هم دستور تزریق شده برای آنست که کاربر بدون تایید (Authentication) وارد سایتی شود و از امکانات آن استفاده کند. برای رفع این مشکلات هم بهترین روش آنست که داده ها پیش از ارسال به بانک اطلاعاتی وارسی شده و در صورت مغایرت با قالب تعریف شده، مورد قبول واقع نشوند.
– اما در موارد خطرناک تر سوءاستفاده از نقاط ضعف مربوط به یک پروسه می تواند سبب خطاهای سرریز حافظه (Buffer Overflow) و خارج شدن کنترل از دست پروسه درحال اجرا باشد. در این حالت اگر نفوذگر یا ویروسی از این نقطه ضعف استفاده کرده باشد، کنترل دستگاه را به پروسه ای که خود معرفی می کند، سپرده و هر بلایی که بخواهد بر سر کامپیوتر می آورد.
یکی از معروف ترین خطاهای سرریز حافظه، مربوط به سیستم عامل Windows بود که در سال 2003 برای تولید ویروس Blaster استفاده شده و سبب از کارافتادن میلیونها دستگاه در سرتاسر دنیا شد.
خطای سرریز حافظه گرچه به ظاهر در سطح پردازشگر اصلی دستگاه (CPU) رخ می دهد اما علت اصلی آن به محدودیت ها و کاستی های زبان های برنامه نویسی (مانند زبان C و C++) برمی گردد. برای پیشگیری از این خطاها در چند سال اخیر پردازشگرها به سیستم های جلوگیری از سرریز حافظه مجهز شده اند، اما ادعا می شود که در صورت استفاده از زبان های برنامه نویسی پیشرفته تر مانند C# (بخوانید “سی شارپ”) برای تهیه نرم افزارها، خطاهای سرریز حافظه ریشه کن خواهند شد.
نقاط ضعف موجود در نرم افزارها معمولا پس از کشف توسط شرکت سازنده آن بررسی و راه حلی برای آن ارائه می گردد. این راه حل معمولا به شکل یک اصلاحیه (Patch) می باشد. برخی از شرکت های بزرگ برنامه منظمی برای انتشار اصلاحیه ها دارند. مثلا شرکت مایکروسافت سه شنبه دوم هر ماه میلادی اقدام به انتشار اصلاحیه های مربوط سیستم عامل Windows و سایر نرم افزارهای تولیدی خود می کند.
2- تنظیمات نادرست (Misconfiguration)
برخی از نرم افزارها تنظیمات پیش فرض ساده ای دارند تا کاربر بتواند براحتی کار با آنرا شروع کند. در برخی موارد هم کاربر اقدام به خلاصه کردن تنظیمات برای راحتی خود می نماید. اما این تنظیمات ساده می تواند توسط ویروس نویس یا نفوذگران مورد سوءاستفاده قرار گیرد. نمونه ای از این موارد که هنوز کاربرانی در چهارگوشه جهان به آن دچار می شوند، تنظیمات Open Relay برروی سرویس دهنده های پست الکترونیک (Email) می باشد. در این حالت مسئول مربوطه، نرم افزار سرویس دهنده پست الکترونیک شرکت یا سازمان را بگونه ای تنظیم می کند تا همه کاربران شرکت هرکجا که هستند به آسانی به صندوق های پستی خود دسترسی داشته باشند. از دید فنی با تنظیماتی که در نرم افزار صورت می دهد، به هر درخواست ارسال نامه بدون تایید کاربر (Authentication) پاسخ مثبت خواهد داد. در نتیجه اگر این سرویس دهنده در ارتباط با شبکه جهانی اینترنت قرار گیرد، فرستندگان هرزنامه (Spam) از سراسر دنیا مشتاقانه نامه هایشان را به این سرویس دهنده می دهند تا به دست کاربران برساند. این روال سبب می شود تا فرستنده اصلی هرزنامه از هرگونه تعقیبی مصون بماند.
گرچه تا جندسال پیش برخی از نرم افزارهای مشهور هم به شکل پیش فرض در حالت Open Relay کار می کردند اما استانداردها و رگولاتوری های سخت گیرانه چنین امکانی را به سازندگان نرم افزارها نمی دهد. گرچه هنوز هم کارشناسان فراوانی در دنیا بدون آگاهی از عواقب چنین تنظیماتی آنرا برروی سرویس دهنده پستی خود پیاده میکنند!
3- کاربران ناامن (Unsecured Users)
وجود برخی از کاربران به شکل پیش فرض در سیستم عامل و نرم افزارهای کاربردی نیز گاهی کار دست افراد یا شرکتها می دهد. یکی از مشهورترین این کاربران، کاربر میهمان (Guest) در سیستم عامل Windows می باشد که از سالیان دراز در سیستم عامل Windows مهمان بود و مشکلاتی که به نام این کاربر برای دستگاه ها پیش می آمد سبب شد شرکت مایکروسافت در بسته بروزرسانی شماره سه (Service Pack 3) سیستم عامل Windows XP آنرا غیرفعال (disable) کند. این کاربر گرچه برای استفاده آسان کاربران شبکه های Workgroup از منابع دستگاه های دیگر مانند شاخه های اشتراکی و چاپگرها تعریف شده بود اما از سوی ویروس نویسان به شکل گسترده ای برای انتشار ویروس در شبکه استفاده شد و سبب شد این مهمان قدیمی، ناخوانده تلقی شود!
حیف است از کاربر دیگری در اینجا نام نبریم که سوءاستفاده از او بدنامی فراوانی برایش به بار آورده است. نرم افزار Microsoft SQL Server از نگارش های قدیمی کاربری به نام sa داشت که دسترسی کاملی برروی سرویس دهنده SQL داشته و مدیر (System Admin) آن محسوب می شد. بدتر آن که کاربر sa نه تنها مدیر SQL بود بلکه دسترسی هایی در سطح مدیر (Administrator) سیستم عامل Windows که نرم افزار SQL برروی آن نصب بود، نیز داشت. از همه اینها بدتر آن بود که درهنگام نصب این نرم افزار (نگارش های 2000 و قبل از آن) رمز پیش فرض برای این کاربر خالی (Blank) تنظیم می گردید! با گسترش استفاده از نرم افزار Microsoft SQL در دنیا و قرارگرفتن بسیاری از این سرویس دهنده ها در شبکه جهانی اینترنت آمار سوءاستفاده از این کاربر برای دزدی و نفوذ به شدت بالا رفت. امروزه با گذشت سال ها و با پیشرفت هایی که در نگارشهای 2005 و 2008 این نرم افزار صورت گرفته است، هنوز هم آمار قابل توجهی از سرویس دهنده های SQL(بیشتر نگارش 2000 این نرم افزار) که به خاطر عدم تنظیم رمزعبور برای این کاربر و یا داشتن رمزعبور ضعیف مورد حمله قرار می گیرند، وجود دارد.
4- درپشتی (Backdoor)
این عبارت گرچه امروزه بهیچوجه بار معنایی مثبتی ندارد، اما در روزگاران قدیم در بین برنامه نویسان مفهوم جذابی محسوب می شد. درپشتی می تواند درگاهی (Port) باشد که یک نرم افزار پس از نصب یا اجرا، برروی دستگاهی باز میکند تا در مواقع لزوم از آن برای ردوبدل داده ها استفاده کند. گاهی از این امکان برای بروزرسانی یک نرم افزار و در مواردی برای دسترسی از راه دور به نرم افزار در جهت رفع اشکال (Troubleshooting) از آن استفاده می شد. در نظر بگیرید از چنین درگاهی برروی دستگاه ها که معمولا بدون ملاحظات دقیق امنیتی باز شده است، چه سوءاستفاده هایی که نمی توان کرد. امروزه با وضع مقررات سختگیرانه رگولاتوری ها تقریبا هیچ شرکتی اقدام به قراردادن درپشتی در محصولاتش نمی کند و برای بروزرسانی نرم افزار هم پودمان های معمول و پراستفاده مانند HTTP و FTP به کارگرفته می شوند. برای دسترسی از راه دور به دستگاه ها هم امکانات متعددی چه به شکل توکار در سیستم عامل (مانند Remote Desktop) و چه نرم افزارهای جداگانه (مانند Remote Admin یا TeamViewer ) وجود دارد.
5- سرویس های غیرضروری (Unnecessary Services)
برخی از سرویس های فعال در سیستم عامل ممکن است برای تمام دستگاه ها مورد استفاده قرار نگیرند، اما بدون درنظر گرفتن ملاحظات امنیتی برای تمام کاربران فعال باشند. نمونه آن دو سرویس Messanger و Alerter در سیستم عامل Windows می باشد که گرچه برای محیط شبکه و ارسال پیام های چند خطی به کاربران شبکه طراحی شده بودند، اما فعال بودن آن در تمام نگارش های Windows سبب می شد که ازسوی نفوذگران به شکل گسترده ای مورد سوءاستفاده قرار گیرد. با استفاده از این سرویس ها، نفوذگران می توانستند به راحتی برای هر دستگاهی که به شبکه اینترنت وصل می شود پیغام هایی بفرستند تا او را برای خریدن کالایی یا مراجعه به سایتی اغفال کنند. به یک نمونه از این پیغام ها در شکل زیر توجه کنید:
ویروس های گوناگونی در سالیان پیش منتشرشد که پس از فعال شدن در دستگاه شروع به ارسال اینگونه پیامها برای سایر دستگاه های شبکه (هم شبکه محلی و هم شبکه اینترنت) می کرد.
این دو سرویس با نصب بسته بروزرسانی 2 (Service Pack 2) سیستم عامل Windows XP برروی دستگاه غیرفعال می گردد و طبیعتا برروی سیستم عامل های جدیدتر هم به شکل سابق وجود ندارد.
6- فناوری ها (Technology)
در مواردی اشکالات دردسر سازی در طراحی فناوری ها وجود دارد که در ابتدا به چشم نمی آید اما با گذشت زمان خود را نشان می دهد. مثلا سی و چند سال پیش که استانداردهای مربوط به دریافت و ارسال نامه های الکترونیکی (SMTP) تدوین می شد به فکر هیچکس نرسید که روالی برای تایید هویت فرستنده نامه در نظر گرفته شود تا هر کسی نتواند خود را به جای فرد دیگری جابزند و از سوی او برای دیگران نامه بفرستد. موضوع به این شکل است که اگر فردی به سرویس دهنده پست الکترونیکی Yahoo وصل شده و بگوید user@shabakeh.net است و می خواهد به کاربر everyone@yahoo.com نامه بفرستد، در اینصورت سرویس دهنده Yahoo هیج ابزار همه گیری برای تعیین صحت ادعای او که کاربری از دامنه Shabakeh.net است در اختیار ندارد و بنابراین باید به گفته او اعتماد کند. به همین خاطر بود که یک دهه پس از رواج پست الکترونیکی با سوءاستفاده هایی که از این نقطه ضعف صورت گرفت، سوءتفاوت های زیادی بوجود آمد. بسیار پیش می آمد که شما هرزنامه و یا نامه ای حاوی ویروس از دوستتان دریافت می کردید درحالیکه آن دوست بهیچوجه در جریان موضوع نبود! بعد از آنکه پیگیری می کردید متوجه می شدید که نشانی شما و دوستتان برروی رایانه دیگری که آلوده به ویروس شده وجود داشته است. ویروس مزبور هم به گونه ای طراحی شده بود که نشانی های الکترونیکی موجود بر روی دستگاه فربانی را جمع آوری کرده و به عنوان فرستنده و گیرنده یک نامه حاوی ویروس یا هرزنامه ازآن استفاده می کرد.
امروزه نیز برخی از کارشناسان، مزاحمتهای فراگیر هرزنامه ها را به پای این نقطه ضعف در فناوری دریافت و ارسال نامه ها می نویسند. با وجودیکه روش های گوناگونی برای پوشش این نقطه ضعف ابداع شده اما هیچکدام به شکل گسترده ای مورد استفاده و قبول کارشناسان قرار نگرفته است.