در طی سال های اخیر بسیاری از شرکت ها برای راحتی بیشتر مشتریان و کارمندان خود، برخی امکانات اضافی را به برنامه های کاربردی موجود اضافه کرده و یا برنامه های کاربردی جدیدی را پیاده سازی کرده اند. برای مثال می توان به دسترسی آنلاین به خدمات بانکی و یا گسترش شیوه های ارتباط الکترونیک برای کارمندانی که در خانه کار می کنند، اشاره کرد. از طرف دیگر بسیاری از شرکت ها به ضرورت حضور در اینترنت برای جذب مشتریان بالقوه و حفظ مشتریان فعلی پی برده اند. در هر دو مورد، زمانی که بحث حضور در اینترنت پیش می آید، عنصر امنیت به خصوص امنیت سرورها اهمیت ویژه ای پیدا می کند. سرورهای وب، در کنار سرویس های مفید خود، مجموعه جدیدی از آسیب پذیری ها را نیز پدید آورده اند که لازم است دست اندرکاران سیستم های رایانه ای، به خصوص سیستم های مبتنی بر وب، آنها را جدی تلقی کنند. البته آسیب پذیری ها به سرورها محدود نمی شوند و ممکن است به صورت عمدی یا غیر عمدی در طراحی و پیاده سازی برنامه های کاربردی، حتی برنامه هایی که مدتهاست در حال کار هستند، ایجاد شده باشند. به همین جهت شناسایی آسیب پذیری ها و میزان نفوذ و تأثیر آنها بر روی سیستم از اهمیت ویژه ای برخوردار است. لذا بسیاری از شرکت ها برای نیل به هدف فوق از تست نفوذ استفاده می کنند.
در مقاله درباره چگونگی اجرای تست نفوذ صحبت خواهیم کرد.
پیش نیاز اجرای تست نفوذ
هر شرکت یا سازمان، پیش از اجرای تست نفوذ، به یک سیاست امنیتی کامپیوتر نیاز دارد. سیاست امنیتی، یک آئین نامه رسمی از قوانینی است که باید توسط افرادی که دسترسی به دارایی های اطلاعاتی و فناوری یک شرکت یا سازمان دارند، رعایت شوند. تدوین سیاست امنیتی باید با توجه به ارزش دارایی ها و منابع اطلاعاتی شرکت انجام شده و سپس رویه های امنیتی مناسب با آنها ایجاد شوند. فاکتور اصلی در تعیین رویه ها و کنش های امنیتی مناسب در سیاست امنیتی کامپیوتر، هزینه ای است که شرکت در صورت از دست دادن داده ها متحمل می شود. برای مثال، در صورتی که شرکتی با اطلاعات دولتی و یا مالی سر و کار داشته باشد، روند غیر فعال کردن یک حساب کاربری (User ID) در آن، متفاوت از یک دانشکده خواهد بود. به علاوه اگر شرکتی دارای اطلاعات خصوصی، اسرار تجاری و یا لیست مشتریانی است که رقبا نباید از آن اطلاع حاصل کنند، لازم است ارزش امنیتی بالاتری را برای اطلاعات مذکور قائل شده و گام های امنیتی مناسب برای حفاظت از آنها برداشته شود.
یک سیاست امنیتی کامپیوتر باید موارد زیر را پوشش دهد:
- اتصالات از/به اینترنت
- اتصالات از طریق خط تلفن (dial-up)
- امنیت دسترسی فیزیکی
- مدیریت کلمه عبور
- مسئولیت ها و حقوق کاربران
- مسئولیت ها و حقوق مدیران
- محافظت از اطلاعات حساس
- روال های پاسخگویی به فوریت ها
- مستند سازی
- پشتیبان گیری از اطلاعات
- گزارش ها و ثبت وقایع (logs)
- رسیدگی به رخدادها
- چگونگی گزارش یک مشکل یا رخداد امنیتی
- تخلفاتی که باید گزارش شوند
- اجرای سیاست
- مسئول نهایی
برنامه ریزی تست نفوذ
قبل از اجرای تست نفوذ لازم است برای آن برنامه ریزی شده و میزان آزادی عمل تست و قلمروی آن دقیقاً معین شود. همچنین در این مرحله در مورد اجرای تست به شیوه جعبه سفید و یا جعبه سیاه تصمیم گیری صورت می گیرد، اعضای تیم مشخص می گردند، معیارهای موفقیت تست تعریف می شوند و مجوز مدیریت دریافت می گردد. در این مرحله با توجه به حوزه تست نفوذ، پارامترهای ضروری برای تشخیص آسیب پذیری ها تعیین می گردد. مواردی که در زمینه برنامه ریزی تست نفوذ باید مورد توجه قرار گیرند عبارتند از:
- مدت زمان انجام تست چقدر است؟
- چه کسانی از انجام تست اطلاع دارند؟
- چه کسی تأیید کننده دسترسی غیر مجاز است؟
- چه منابع و سیستم هایی و چگونه تست شوند ؟
- تنظیمات فایروال
- اطلاعات کامل
- بدون اطلاعات
- سیستم های میزبان
- وب سرورها
- انتخاب کلمات عبور
- چگونگی به اشتراک گذاری
- سرورهای FTP
- سیستم تشخیص نفوذ
- سرورهای DNS
- مودم ها Dial in
- دسترسی های بی سیم
- Public Branch Exchange(PBX)
- غیر فعال سازی UserID و یا روند خارج شدن یک کارمند از سیستم
- دسترسی های فیزیکی
- مهندسی اجتماعی
- کامپیوترهای رومیزی
- انتخاب کلمات عبور
- تنظیمات مودم ها برای پاسخگویی اتوماتیک و یا دسترسی به نرم افزارهای خارجی
- چگونگی ارائه نتایج
- بعد از چه مدت زمانی، تست دیگری برای اطمینان از نتایج تغییرات انجام می شود؟
جمع آوری اطلاعات (شناسایی)
پس از تعیین قلمروی تست نفوذ، نوبت به جمع آوری اطلاعات درباره شرکت هدف تست می رسد. تست نفوذ معمولاً با سه مرحله پیش تست آغاز می شود. footprinting، scanning و enumerating. این سه مرحله پیش تست بسیار مهم هستند زیرا تفاوت بین یک تست موفق که تصویری کامل از شبکه هدف را فراهم می سازد و یک تست ناموفق که این کار را انجام نمی دهد، از این سه مرحله ناشی می شود. این سه با یکدیگر به عنوان گام شناسایی یا reconnaissance شناخته می شوند. در این گام سعی می شود تا حد امکان اطلاعات در مورد شبکه هدف جمع آوری گردد و شامل هفت زیر مرحله می شود:
- جمع آوری اطلاعات اولیه
- مشخص کردن دامنه آدرس های IP شبکه
- شناسایی رایانه های فعال
- کشف پورت های باز و نقاط دسترسی
- شناسایی سیستم عامل
- شناسایی سرویس های ارائه شده در هر پورت
- نگاشت شبکه
در زیر در مورد هر کدام از گام های پیش تست بیشتر توضیح می دهیم:
Footprinting
در این مرحله دو گام اول مرحله شناسایی یعنی جمع آوری اطلاعات اولیه و مشخص کردن دامنه آدرس های IP شبکه هدف صورت انفعالی انجام می پذیرد. این مرحله بسیار مهم است زیرا هکرها می توانند اطلاعات به دست آمده در این مرحله را بدون آگاهی سازمان هدف جمع آوری کنند. در این زمینه تعدادی منابع و ابزار رایگان و تجاری وجود دارند که می توانند در به دست آوردن اطلاعات اولیه کمک خوبی باشند. دسترسی به بعضی از این منابع مانند خبرنامه های شرکت بسیار آسان است. تست کنندگان با استفاده از این منبع به اطلاعات مفیدی دست پیدا می کنند که کارمندان حتی بدون آنکه متوجه باشند آنها را بروز می دهند. دیگر روش ها برای جمع آوری اطلاعات استفاده از Whois، Nslookup، Smart Whois و SamSpade است. برای مثال Whois با استفاده از سرویس های دایرکتوری، اطلاعاتی را در مورد دامنه ها و ثبت کنندگان آنها در اختیار می گذارد و Nslookup یک پرس و جوی تعاملی را با سرورهای نام دامنه انجام می دهد.
Scanning
چهار مرحله بعدی گام شناسایی (شناسایی رایانه های فعال، کشف پورت های باز و نقاط دسترسی، شناسایی سیستم عامل و شناسایی سرویس های ارائه شده در هر پورت) به عنوان بخشی از مرحله پویش یا Scanning در نظر گرفته می شوند. در این مرحله هدف جمع آوری اطلاعات در مورد پورت های باز، پویش برنامه های کاربردی، ping کردن دستگاه ها، مشخص کردن حدود شبکه و پویش پورت های هر دستگاه به تنهایی است. این مرحله نسبت به footprinting پویاتر بوده و اطلاعات جزئی تری از هدف جمع آوری می شود. مانند مرحله قبل برخی ابزارها در این مرحله یاری رسانند مانند NMap، ping، Telnet ،Traceroute، SuperScan، Netcat، NeoTrace و Visual Route. برای مثال با استفاده از Ping می توان یک تقاضای ICMP ECHO را به یک میزبان شبکه مشخص ارسال کرد. در دستور ping می توان یک پورت را نیز تعیین کرد که دریافت پاسخ، نشان دهنده باز بودن پورت مذکور برای ارتباط TCP/IP است. همچنین با استفاده از Telnet می توان یک ارتباط تعاملی را با یک میزبان مشخص برقرار کرده و یک پورت را در این دستور وارد کرد. دریافت پاسخ نشان دهنده باز بودن پورت مذکور برای ارتباط TCP/IP است. Traceroute ابزار دیگری است که مسیرهای ارتباطی اینترنت را بین دو سیستمی که ارتباط TCP/IP دارند، مشخص می سازد.
Enumerating
آخرین مرحله گام شناسایی نگاشت شبکه است که با استفاده از اطلاعات Scanning انجام شده و مرحله Enumerating را تشکیل می دهد. در این مرحله هدف طراحی یک تصویر نسبتاً کامل از شبکه هدف است. در این مرحله اطلاعات نام کاربران و گروه ها، منابع شبکه به اشتراک گذاشته شده و برنامه های کاربردی جمع آوری می گردد. مخصوصاً اطلاعات مربوط به سیستم عامل مورد استفاده (همراه با نسخه آن) و برنامه های کاربردی نصب شده و نسخه آنها اطلاعات باارزشی در این زمینه محسوب می شوند. با دانستن نوع سیستم عامل و برنامه های کاربردی می توان از آسیب پذیری های شناخته شده موجود در آنها جهت پیاده سازی نفوذ استفاده کرد. در این مرحله می توان از تکنیک های زیر استفاده کرد:
- به دست آوردن اطلاعات Active Directory و شناسایی کاربران آسیب پذیر
- شناسایی NetBIOS با استفاده از Nbscan
- استفاده از SNMPutil برای SNMP
- به کارگیری پرس و جوهای DNS
- ایجاد ارتباطات و نشست هایnull
هر کدام از ابزارها و تکنیک های فوق می توانند در مورد ارتباطات شبکه و یا سیستم میزبان نیز اطلاعات بیشتری را در اختیار بگذارند. در این مرحله از تست که اولین مرحله است، توصیه به جمع آوری هر چه بیشتر اطلاعات می شود. اطلاعات مذکور از طرفی انتخاب تست های قابل انجام را راحت تر می کنند و از طرف دیگر تست را بیشتر به شبیه سازی یک نفوذ واقعی هدایت می کنند. هکرهای واقعی قبل از انجام حمله تا جایی که می توانند به مطالعه و تحقیق در مورد سیستم مورد حمله می پردازند و لذا یک انجام دهنده تست نفوذ نیز بایستی با اطلاعاتی مشابه یک هکر واقعی به انجام تست بپردازد. هر چقدر اطلاعات کمتری توسط ابزارهای فوق به دست آید، نشان دهنده امنیت بالاتر سیستم است.
به کارگیری آسیب پذیری ها با هدف نفوذ
در مرحله سوم تست نفوذ، برای شناسایی مشکلات مربوط به تنظیمات سیستم، از ابزارهای پویش کردن آسیب پذیری ها و Password Crackers استفاده می شود. برخی از ابزارهای قابل استفاده در این زمینه عبارتند از:
- Nessus – ابزاری برای تشخیص آسیب پذیری ها در سیستم های Unix
- SARA – دومین نسل از ابزار پویش آسیب پذیری SATAN
- Whisker – ابزار پویش آسیب پذیری در CGI
- Hping2 – یک ابزار شبکه است که می تواند بسته های دلخواه ICMP، UDP و TCP را ارسال کند و برای آزمودن قوانین فایروال و بررسی قطعات (fragments) بسته ها استفاده می شود.
- Firewalk - یک ابزار شبیه دنبال کننده های مسیر است که اجازه دسترسی به Access Control List یک فایروال را می دهد و همچنین امکان در آوردن نقشه شبکه را نیز فراهم می کند.
- NAT(NetBIOS Auditing tool) – یک ابزار برای مشخص کردن آسیب پذیری ها در تنظیمات NetBIOS یک سیستم NT است.
- Toneloc – ابزاری برای بررسی مودم سیستم های رومیزی است که برای جواب دهی اتوماتیک و یا اجرای نرم افزار از راه دور به کار می روند. برخی ابزارهای تجاری نیز در این زمینه وجود دارند که عبارتند از:
- Internet Security Server (ISS) – این محصول بسیار پر کاربرد است و بسیاری از شرکت های انجام دهنده تست نفوذ از آن برای شناسایی آسیب پذیری ها استفاده می کنند.
- CyberCop – این ابزار نیز برای پویش آسیب پذیری ها به کار می رود.
- Phonesweep - ابزاری برای بررسی مودم سیستم های رومیزی است که برای جواب دهی اتوماتیک و یا اجرای نرم افزار از راه دور به کار می روند.
به غیر از موارد ذکر شده در بالا ابزارهایی نیز برای تشخیص نفوذ و مدیریت داده های تولید شده در روند تشخیص نفوذ وجود دارند. البته مبحث تشخیص نفوذ با اینکه مرتبط با تست نفوذ است ولی نیازمند بررسی جداگانه و مفصلی است و لذا از آوردن ابزارهای مرتبط با آن خودداری کرده ایم. بعد از انتخاب ابزارهای ارزیابی آسیب پذیری، باید از آنها بر روی سیستم ها و شبکه استفاده کرد. اطلاعاتی که از ابزارهای فوق به دست می آید، به روشنی آسیب پذیری های اصلی را مشخص می کنند. در این مرحله لازم است با توجه به نوع نفوذ، کاری انجام داد تا وجود آسیب پذیری را به اثبات رساند. برای مثال باید فایلی را در منطقه کنترل شده قرار داد و یا کلمه عبور مربوط به نام کاربری مهمان را تغییر داد. همچنین در موارد دسترسی های فیزیکی باید بخشی از پرونده ای را برداشت و یا در شبیه سازی حملات مهندسی اجتماعی می توان به شماره تلفن منزل مدیر سیستم دسترسی پیدا کرد. در این مرحله برخی از حملات مانند حملات تزریق SQL، XSS، سرریز بافر و تروجان ها نیز بر روی شبکه شبیه سازی می شوند که در مقاله جداگانه ای چگونگی انجام آنها را به تفصیل توضیح خواهیم داد.
پاکسازی
در این مرحله تمام فایل هایی که در حین تست نفوذ انجام شده اند پاک شده و تمام تنظیمات و یا پارامترهایی که تغییر یافته اند به حالت اولیه باز می گردند. همچنین تمام ردپاها پاک شده و تمام سیستم هایی که به آنها نفوذ شده است به حالت پیش از تست نفوذ بر می گردند.
ارائه نتایج تست
نتایج تست باید حاوی راه حل هایی برای کاهش و یا حذف آسیب پذیری ها باشد. تفاوت اصلی ممیزی امنیتی و تست نفوذ در نکته مذکور است. باید یک برنامه زمانی برای رفع آسیب پذیری های کشف شده نیز ارائه گردد و بعد از آن دوباره سیستم را برای اطمینان از رفع آسیب پذیری های مذکور بررسی کرد.
راه حل های ارائه شده بستگی به نوع آسیب پذیری ها دارد و در آنها باید هزینه هایی که بر شرکت در صورت سوءاستفاده از آسیب پذیری تحمیل می شود و همچنین هزینه راه حل آورده شود. برای مثال ممکن است در یک راه حل خواسته شود سیستم های جدیدی که برای وب سرور مورد استفاده قرار می گیرند قبل از نصب تست شوند و در یک راه حل دیگر خواسته شود تا ایمیل های ارسالی درون سیستم، ابتدا به یک میل سرور مرکزی ارجاع و سپس برای گیرنده ارسال شوند.
در پایان باید گفت نتایج تست نفوذ باید به دقت محافظت شده و محرمانه تلقی گردند، زیرا در صورت دسترسی افراد ناباب، امکان سوءاستفاده از آن بسیار زیاد است.