- Vulnerability چیست؟
Vulnerability یا بهصورت مختصر vul را در فارسی حفره یا سوراخ امنیتی میگیم. این عبارت رو باید یه کم توضیح بدم. فرض کنید که یه نرمافزار داریم که یه پورتی رو باز میکنه. وقتی این نرمافزار قرار هست که منتشر بشه، شرکت سازنده یه سری تست رو نرمافزار انجام میده که مشکلی نداشته باشه. بعد که اطمینان نسبی خاصل شد، نرمافزار ارائه میشود و سرورها و کلاینتها از اون نرمافزار و از اون ورژن خاص شروع به استفاده میکنن. بعد از اینکه نرمافزار منتشر شد، گروههای مختلفی که در سراسر جهان هستند و کارشان تست امنیتی این نرمافزارهاست شروع به فعالیت میکنند. این گروهها هر چند وقت یک بار موفق به یافتن نقاط ضعفی در این برنامهها میشوند و اونو گزارش میکنن. سایتهایی هستند که کارشون بهطور عمده گزارش جدیدترین vul های کشف شده است. مثلا ممکنه در سایتهایی مثل securitytracker.com یا securityfocus.com و ... به عبارتی مثل :
A vulnerability was reported in ...
برخورد کرده باشید. این بیان میکنه که یه vul جدید کشف شده است. دقت کنید که این vul از وقتی نرمافزار طراحی شده با اون بوده ولی کسی از اون خبر نداشته تا وقتی که این گزارش منتشر بشه! پس این گروهها کارشون کشف باگ هستش نه اختراع باگ!
همچین نرمافزاریی رو vulnerable میگن. یعنی قابل نفوذ.
این vul ها انواع مختلفی دارند و میشه اونا رو catagorize (طبقهبندی) کرد. این بحث رو بعدا بهطور کامل مطرح میکنم. عجالتا بهتره کمی هم راجع به exploit صحبت کنم:
- exploit چیست؟
فرض کنید که یکی میاد و یه باگ رو کشف میکنه. این کشف vul معمولا فقط در حد یک گزارش میمونه تا اینکه یکی همت کنه و روشی برای exploit کردن اون vul درست کنه. پس vul جنبه تئوری قضیه است و exploit قسمت عملی اون. exploit میتونه یه کد (معمولا به زبانهای سی و پرل ) یا یه دستورالعمل یا یه url و ... باشه. وقتی شما مطمئن میشین که فلان سرور از فلان ورژن فلان نرمافزار استفاده میکنه که اون نرمافزار فلان vul رو داره، یا باید exploit بسازید و یا اینکه یه exploit واسه اون از اینترنت پیدا کنید.
نتیجه اینه که ممکنه یه vul کشف شده باشه ولی exploit واسه اون نباشه. حتی من دیدم که سایتهای مطرحی مثل Cert میان و قلم فرسایی میکنن که فلان vul قابل exploit کردن نیست ولی بعد exploit نوشته میشه و اینا ضایع میشن!! البته بگذریم که نمونههایی از vul ها رو داریم که هرگز براش exploit نوشته نشده باشه.
- vul ها رو چگونه نامگذاری میکنند؟
اولین نکتهای که باید بگم، اینه که برای هر Vulnerability یک شماره یا یک نام نسبت میدن. این شماره یا نام در واقع یک استانداردی است که به هکرها و متخصصین امنیت شبکه اجازه میده که حرف همدیگرو بفهمن! مثلا ممکنه جایی ببینید که راجع به NT IIS Unicode Vulnerability صحبت میکنند یا راجع به CVE شماره CVE-2000-0884 یا BID شماره 1806 بحث میکنند. دقت کنید که همه اینها معادل هم هستند. پس برای یک vul خاص ممکن است شمارهها یا عبارتهای معادلی باشد.
۱- CVE اولین جایی است که باید ببینید:
فرض کنید که شما متوجه شدهاید که سروری دارای یک vul به شماره CVE-2000-0508 داشته باشد (اینکه چطوری میشه فهمید یه سرور چه vul هایی داره بعدا بحث خواهم کرد). برای CVE از یکی از آدرسهای زیر استفاده کنید:
http://cve.mitre.org/cgi-bin/cvename.cgi?name=xxxxxxxxxx http://cgi.nessus.org/cve.php3?cve=xxxxxxxxx
که به جای xxxxxxxxx باید شماره CVE رو بنویسید مثلا CVE-2000-0508 یا مثلا CAN-2002-0651 و...
وقتی به این آدرسها رجوع کنید میبینید که یه سری نامها و شماره معادل برای این CVE ذکر شده است. به عبارت دیگه واسه اینکه در مورد یک vul مطالبی بیاموزید، اولین کاری که میکنید رجوع به یکی از دو سایت بالاست. بعد از رجوع به آنها میتونید لینکهایی را استخراج کنید که به شما اجازه میدن، راجع به اون vul مطالبی رو بیاموزید.
فرض کنید که یک vul رو که CVE اونو میدونید در یکی از این سایتها دارید میخونید، ملاحظه خواهید کرد که برای این CVE بعد از یک توضیح مختصر یک سری اسم و شماره ذکر شده است. این اسامی ممکن است، BID یا XF یا ... باشد. در واقع برای اینکه در مورد این vul خاص نکاتی را یاد بگیرید، علاوه بر توضیحات مختصز بالای صفحه باید تک تک این مطالبی که بهشون ارجاع داده شدین، مثل BID مربوطه، XF مربوطه و ... را بخونین. حالا اگه اونحا نوشته باشه:
BID: 1806
از کجا باید اونو خوند؟ (یعنی لینک مستقیمش چی هست؟) همین پایین مهمترهاشو میگم (دقت کنید که همه اون اسمها معادل هم هستند فقط سایتهای مختلف اسمهای مختلفی را واسه یه vul انتخاب میکنند و ما میخواهیم تمام مطالب مرتبط با یه vul خاص رو از سایتهای مختلف پیدا کنیم )
۲- BID یا BugTraq ID یا همون نفس من بیده! :
فرض کنید که صفحه مربوط به CVE خاص رو خوندم و اونجا به عبارت BID: 1806 برخوردم. حالا اونو از کجا بخونم؟ از اینجا :
http://www.securityfocus.com/bid/xxxx
که به جای xxxx باید یک عدد بنویسید (همان عدد مربوز به BID ) مثلا به جای xxxx بنویسید: 1806
اگه بخوام بهترین محل یادگیری راجع به vul ها رو ذکر کنم، جایی بهتر از www.securityfocus.com واسه این کار وجود نداره. دقت کنید وقتی که صفحه مربوط به یک BID خاص رو در این سایت میبینید، یک سری لینک به اسمهای info و discussion و exploit و solution را هم بخونین که جنبههای مختلف اون vul خاص است. مخصوصا قسمت exploit که جایی است که جوجههکرها میتونن با اون حسابی حال کنن! به عبارت دیگه جاییه که واسه اون vul خاص exploit داونلود کنید. خیلی از ابزارهای هک که تبلیغ میشن، در واقع با تغییرات کمی از همین exploit ها بدست میآن!!
۳- XF :
XF استاندارد سایت iss.net برای vul هاست. XF به صورت یک نام (نه عدد) نامگذاری میشوند و اونو باید در صفحه زبر بخونین:
http://www.iss.net/security_center/search.php
که وقتی در این صفحه search کنید، یک سری صفحات static بدست میاد که باید بخونین.
۴- CA یا CERT:
سایت cert.org برای vul ها از اسم CA استفاده میکند، مثل CA-2002-19 برای CA ها صفحه زیر رو ببینید:
http://www.cert.org/advisories/xxxxxxxxx.html
بهجای xxxxxxxxx مثلا مینویسیم: CA-2002-19
ضمنا دقت کنید که وقتی مطالب مربوط به یک vul رو از سایت cert میخونید، ملاحظه میکنید که لینکهایی به صورت VU#xxxxx در آن هست که به جای xxxx یک عدد نوشته شده مثلا 369347 که این VU# رو میتونید از اینجا بخونید:
http://www.kb.cert.org/vuls/id/xxxxxx
۵- و …
- چگونه vul هایی که یه سرور داره رو پیدا کنیم؟
خوب این موضوع کاملا بستگی به سطح اطلاعات شما داره:
۱- جوجه هکرها و هکرهای تازهکار:
جوجه هکرها و نیز هکرهای تازه کار (قابل احترام) واسه پیدا کردن vul های مربوط به یک سرور از security scanner ها یا vulnerability scanner ها یا Vulnerability Analysis استفاده میکنند. به کمک vul scanner میتوان یک ip خاص رو به صورت اتوماتیک اسکن کرد تا ببینیم چه سوراخهایی داره که اونا رو exploit کنیم. بعد از اسکن یک ip یک سری CVE به ما میده که اونا رو باید بخونیم.
۲- هکرهای پیشکسوت:
هکرهای پیش کسوت با تجربهای که دارند میدونند که مثلا اگه یه سرور از IIS 5.0 استفاده میکنه، چه vul هایی برای اون هست پس وقتشون رو با اسکن کردن تلف نمیکنند. تجربه چیزی است که بهتدریج بدست میآورید، پس زیاد عجله نکنید.