
اسکن شبکه
شناسایی شبکه با Nmap
یکی از مراحل در تست نفوذ، اسکن شبکه و اسکن پورتهای باز است. تا کنون جمع آوری اطلاعات از طریق منابعی که در بخشهای پیشین به آن اشاره شد، انجام گردید. در حال حاضر نفوذگر ممکن است در سه محل قرار گرفته باشد. وی در شبکه اینترنت یا محیط DMZ قرار دارد یا در شبکه داخلی بوده و یا از طریق شبکه وایرلس اقدام به اسکن و یا شروع دسترسی به شبکه مینماید.
در این مرحله نفوذگر قصد دارد تا ساختار شبکه و دستگاههای موجود در آن را شناسایی نماید. یکی از ابزارهای که به منظور شناسایی و اسکن شبکه در این مرحله از آن استفاده میشود، ابزار قدرتمند Nmap است. این ابزار توسط Fyodor نوشته شده و از طریق تیم Nmap گسترش مییابد. یکی از ویژگی های مهم این ابزار، رایگان بودن و قابلیت اجرا بر روی محیطهای لینوکسی و ویندوزی است. همچنین Nmap دارای یک نسخه گرافیکی به نام Zenmap می باشد که هر دوی این ابزارهای یعنی هم Nmap و هم Zenmap در سیستم عامل کالی لینوکس موجود است.
شناسایی سیستم های فعال در شبکه
بهترین و در عین حال سادهترین روش برای پیدا کردن سیستمهای فعال، روش ping sweep میباشد. در این روش یک پیام ICMP ECHO requests به سیستم ارسال میگردد. اگر سیستم فعال باشد با یک پیام ICMP ECHO reply پاسخ میدهد.
نفوذگران با استفاده از اسکن ping sweep لیستی از سیستمهای فعال در شبکه را تهیه میکنند.
توجه داشته باشید که Nmap قبل از اسکن پورت هر سیستم، ابتدا از Sweeping برای شناسایی آن استفاده مینماید.
Nmap به صورت پیش فرض 4 بسته را به سمت هدف ارسال میکند:

اگر Nmap با UID صفر اجرا نشده باشد به جای مرحله سوم، بسته SYN به پورت 80 ارسال خواهد شد.
البته برای جلوگیری از Sweeping میتوان از سوییچ –Pn استفاده نمود.
Trace Route
برنامههای مربوط به Trace route در پروتکل ICMP کار میکنند و با استفاده از فیلد TTL تعداد روترهای بین مبدا و مقصد را کشف مینمایند.
هنگام ping نمودن یک سیستم همیشه چند بسته بین دستگاه مبدا و مقصد رد و بدل میشود که یکی از موارد قابل مشاهده در این فرآیند، مقدار TTL می باشد.TTL یا همان Time To Live برای یک بسته دو موضوع را نشان میدهد. اولین مورد تعداد روترهای موجود در مسیر بین دو دستگاه است که بسته ارسالی، از هر روتری که رد میشود از عدد آن یکی کم میشود. پیشفرض این عدد برای ویندوز 128 است که اگر همین عدد را برگرداند، یعنی بین مبدا و مقصد هیچ روتری وجود ندارد. (به عنوان مثال کلاینتهای یک شبکه محلی معمولا به این صورت هستند)
کار بعدی TTL جلوگیری از loop شدن بسته است. اگر یک بسته بین چند روتر دست به دست شود (بنا به هر دلیل) عدد TTL یکی یکی کم میشود تا به صفر برسد که اگر به صفر برسد، آن بسته از مسیر حذف می شود.TTL برای محصولات مایکروسافت 128، محصولات سیسکو و محصولات موجود در اینترنت 255 و برای لینوکس 64 است.
نفوذگر به منظور استخراج اطلاعات مربوط به روترها، پروتکلها و سیستمعاملهای شبکه از Trace route استفاده میکند. التبه فایروال میتواند مشکلاتی را در مورد تعداد روترهای تخمین زده شده توسط Trace route به وجود آورد که با استفاده از تکنیکهای دور زدن فایروال میتوان از بروز چنین مشکلاتی جلوگیری نمود.
در محیط CMD ویندوز شما میتوانید با دستور tracert ipaddress\domain name اطلاعات Trace را به دست آورید و در لینوکس نیز با دستور traceroute ipaddress\domain name این اطلاعات به دست می آید.

برای پیشگیری از Network Mapping، موارد زیر باید مد نظر قرار گیرد:
• غیرفعال نمودن پیامهای ورودی ICMP ECHO Request، البته در این حالت کاربران نمیتوانند شما را Ping نمایند.
• غیرفعال نمودن پیامهای خروجیICMP Time Exceeded ، در این حالت کاربران نمیتوانند شما را Traceroute نمایند.
• ایجاد Signature برای شناسایی حملات Ping Sweep که امکان بروز False Positive در این حالت وجود دارد.
• با شناسایی حملات Ping Sweep می توان آدرس نفوذگر را مسدود نمود. در صورت مسدود نمودن آدرسها، به صورت هفتگی یا ماهانه جهت عدم بروز مشکل، فیلترها باید حذف شوند.
شناسایی سیستم عامل با Nmap
یکی از مراحل دیگر برای شناسایی بیشتر هدف، شناسایی سیستم عامل آن است. Nmap این امکان را با استفاده از ارسال بستههای مختلف و آنالیز پاسخ آن، فراهم میکند. برخی از درخواستهایی که به سمت هدف برای شناسایی نوع سیستمعامل آن ارسال میشود به صورت زیر است:

اسکن پورت با Nmap
در ساختار شبکه، دو نوع پورت وجود دارد که شامل پورت سخت افزاری و نرم افزاری یا مجازی میباشد. پورتهای سختافزاری شامل پورت USB، PS2، Serial ، VGA و از این دست میباشند. به طور کلی پورتهای سخت افزاری به صورت فیزیکی قابل رویت بوده و تعداد آنها محدود میباشد.
پورتهای نرم افزاری یا مجازی بر خلاف پورتهای سختافزاری قابل مشاهده نیستند و تعداد آنها از یک تا 65535 میباشد. البته این تعداد هم برای TCP و هم برای UDP میباشد. این پورتها به سه دسته تقسیم بندی میشوند.
انواع پورت های شبکه
1024-1 پورتهای مربوط به سرویسهای خاص شبکه که به آنها پورتهای شناخته شده یا Well-known ports نیز گفته میشود.
49151-1025 پورتهای تصادفی نامیده میشوند. زمانی که قصد برقراری ارتباط به طور مثال با یک وب سایت را داریم، پورتی که در مقصد باز میشود80 بوده و پورت باز شده سمت ما از این دسته میباشد. به این دسته از پورتها Registered ports نیز گفته می شود.
65535-49152 این پورتها که پورتهای آزاد نیز نامیده میشوند، بیشتر در برنامه نویسی کاربرد دارند. به این دسته از پورت ها Dynamic or private ports گفته میشود.
Three-Way Handshake
TCP که یکی از پروتکلهای مهم شبکه است، برای برقراری ارتباط بین دو دستگاه مانند کلاینت و سرور، از روشی به نام دست تکانی سه مرحلهای یا Three-Way Handshake استفاده میکند. مراحل این دست تکانی به شکل زیر است.

مرحله اول: در این مرحله سیستم اول بستهای را که فقط flag SYN در آن تنظیم شده است، به سیستم دوم ارسال میکند.(درخواست برقراری ارتباط)
مرحله دوم: در این مرحله سیستم دوم بستهای را که flag های SYN و ACK در آن تنظیم شده است به سیستم اول پاسخ میدهد.(آمادگی برای ارتباط)
مرحله سوم: در این مرحله سیستم اول پاسخی را به سیستم دوم ارسال میکند که فقط حاوی ACK flag درون بسته ارسالی میباشد.(برقراری ارتباط)
اگر سه مرحله بالا بدون هیچ مشکلی انجام شود، یک ارتباط TCP بین دو سیستم برقرار شده است.
flags TCP
SYN(Synchronize): از این flag برای آغاز یک ارتباط بین دو سیستم استفاده می شود.
ACK(Acknowledgment): از این flag به منظور تصدیق رسیدن یک بسته استفاده می شود.
PSH(Push): این flag به منظور ارسال بلافاصله داده های بافر شده استفاده می شود.
RST(Reset): از این flag به منظور دوباره راه اندازی ارتباط استفاده می شود.
FIN(Finish): این flag اشاره دارد به این موضوع که دیگر انتقال انجام نپذیرد.
URG(Urgent): وجود این flag به این موضوع اشاره دارد که داده های داخل بسته باید بلافاصله پردازش شوند.
برای آشنایی بیشتر با ابزار Nmap می توانید به بخش آموزشی مربوط به این ابزار در لینک زیر مراجعه نمایید:
دوره آموزشی Nmap for Pen Testers
masscan
پورت اسکنهای سنتی دارای سرعت خوبی هستند ولی اگر تعداد هاستها زیاد باشد این سرعت کاهش مییابد. ابزارهایی مانند Masscan فرآیند ارسال SYN و SYN/ACK را جدا کرده و به همین دلیل سرعت بالایی دارند. در این حالت یک بخش از برنامه بسته SYN را به سرعت ارسال نموده و بخش دیگر برنامه منتظر بسته SYN/ACK میماند.
این تکنیک اولین بار در ابزاری به نام Scanrand توسط Dan Kaminsky استفاده شد. پس از آن با افزایش سرعت این تکنیک، ابزاری با نام masscan توسط Robert David Graham تولید شد.
https://github.com/robertdavidgraham/masscan
EyeWitness
یکی از ابزارهای دیگری که برای شناسایی از آن استفاده میشود، ابزار EyeWitness میباشد.
این ابزار دارای قابلیت های زیر است:
• تهیه اسکرین شات از VNC و RDP
• شناسایی صفحات پیشفرض،index ها، نمایش دامنهها و…
• شناسایی نام های کاربری و کلمات عبور پیشفرض

Remux
نفوذگران برای عدم شناسایی توسط سیستمهای امنیتی، از Bot ها و یا سیستمهای تسخیر شده استفاده میکنند. اما روش دیگر استفاده از اسکریپت Remux.py میباشد. Remuxپس از اجرا یک Proxy Listener را اجرا نموده و نفوذگر میتواند مرورگر یا ابزار خود را برای ارسال و دریافت اطلاعات از طریق Remux تنظیم نماید.
در این حالت Remux لیستی از پراکسیهای آنلاین را شناسایی نموده و بدین صورت اسکن یا Browsing از طریق Remux با استفاده از پراکسیهای کشف شده انجام میگردد. در ابتدا هنگام کشف پراکسیها، ابزار Remux به سرعت کار نمیکند ولی پس از کشف کامل پراکسیها سرعت ابزار افزایش پیدا میکند.
روشهای پیشگیری از حملات اسکن پورت
در ادامه به منظور پیشگیری از حملات Port Scan، موارد زیر باید مد نظر قرار گیرد:
• بستن تمامی پورتهای غیرقابل استفاده توسط خاموش کردن سرویسها
• بکارگیری فایروالهای State Full
• بکارگیری سیستمهای تشخیص نفوذ
• استفاده از چندین Signature برای اسکن پورت در IDS
• آنالیز لاگهای ثبت شده که تلاش برای اتصال مشکوک را نشان میدهد.
همچنین جهت شناسایی پورتهای باز در ویندوز از دستور netstat استفاده میشود:
netstat -na => لیست پورتهای باز
netstat -nao => PIDلیست پورتهای باز به همراه نمایش
netstat –nab => EXE/DLLلیست پورتهای باز به همراه نمایش
netstat -na | find “LISTENING” => لیست پورتهای باز که به گوش هستند
غیر فعال نمودن سرویسها در ویندوز
یکی از روشهای مناسب برای پیشگیری از حملات اسکن، غیرفعال نمودن سرویسها و از بین بردن پروسسها میباشد. برای از بین بردن پروسسها میتوان از Task Manger و یا از WMIC استفاده نمود.
wmic process [pid] delete
به منظور غیرفعال سازی سرویسها، هم میتوان از Services.msc آنها را غیرفعال نموده و یا از دستور SC استفاده نمود.
sc query => list of services
sc stop [service] => shut off a service
sc config [service] start= disabled
غیرفعال نمودن سرویسها در لینوکس
جهت شناسایی پورتهای باز در لینوکس از دستور netstat استفاده میشود.
netstat -nap
برای غیرفعال نمودن سرویسها و پورتها در لینوکس هم میتوان پروسسهای مربوط به سرویس را Kill نمود و همچنین برای غیر فعال کردن سرویسها توسط فایلهای inetd و xinetd میتوان خطوط مربوط به هر سرویس را اصطلاحات کامنت نمود.
Inetd: Comment out line in /etc/inetd.conf
/etc/xinetd.d: Delete file or make sure it contains “disable=yes”
همچنین غیرفعال کردن سرویس توسط تغییردادن فایل /etc/rc.d یا دستور chkconfig نیز به صورت زیر است:
chkconfig -list
chkconfig [service name] off
توجه داشته باشید که تنظیمات در راه اندازی مجدد اعمال میشوند.