احتمالاّ اسم ابزار Nmap رو تا حالا شنیدید و اولین چیزی که به ذهنتون می رسد اینه که Nmap یک ابزار برای اسکن پورت های باز و بسته هست، در حالی که Nmap ویژگی ها و قابلیت هایی پیشرفته ای مثل اسکن آسیب پذیری، شناسایی سیستم عامل، شناسایی سرویس ها، انواع اسکن، تکنیک های پورت اسکن مثل شناسایی فایروال و حتی اجرا کردن اسکریپت های دلخواه کاربر رو داره که در ادامه از نحوه نصب و کار با Nmap تا معرفی این قابلیت ها به صورت کلی آشنا خواهیم شد.
قبل از شروع بهتره بدونید که Nmap سال 1997 توسط آقای گوردون لیون معرفی و امسال این ابزار 28 ساله شد و همچنان به عنوان یکی از محبوب ترین و قوی ترین ابزارها در دنیای امنیت شناخته میشود و دائماّ در حال توسعه هست.
نصب ابزار Nmap
دو نسخه از Nmap وجود دارد:
1.Nmap CLI (Command-Line)
2.Zenmap GUI (دارای محیط گرافیکی)
کدوم نسخه بهتره؟
از نظر عملکرد هیچ تفاوتی بین دو نسخه Nmap CLI و Zenmap GUI وجود ندارد و تنها یک سری ویژگی های آن ها با هم متفاوت هستند:
Zenmap GUI
- مناسب برای افراد مبتدی و کسانی که با خط فرمان راحت نیستند
- ذخیره تاریخچه اسکن ها
- مهم ترین ویژگی این نسخه نمایش توپولوژی یا ساختار شبکه اهداف اسکن شده به صورت گرافیکی هست:
Nmap CLI
- بسیار انعطاف پذیر و قدرتمند
- اجرای اسکریپت های نوشته شده توسط کاربر
نصب Nmap در ویندوز
برای نصب Nmap در ویندوز نسخه Zenmap GUI رو از لینک زیر دانلود و نصب کنید:
https://nmap.org/download.html#windows
نصب Nmap در لینوکس
برای نصب Nmap در لینوکس با توجه به نوع توزیع لینوکس دستور زیر رو اجرا کنید:
خانواده Debian (Ubuntu، Kali، Debian، Mint و ...) :
sudo apt update
sudo apt install nmap -y
خانواده Red Hat (CentOS, RHEL, Fedora و …):
sudo yum install nmap -y # نسخههای قدیمی
sudo dnf install nmap -y # نسخههای جدیدتر
در این مقاله از Nmap CLI برای ادامه آموزش استفاده می کنیم و همونطور که قبلا اشاره شد هیچ تفاوتی بین نسخه Nmap CLI و Zenmap GUI وجود نداره و میتوانید تمامی دستورات Nmap که در ادامه با آنها آشنا میشویم رو با Zenmap GUI هم امتحان کنید.
آموزش استفاده از Nmap
حالا بعد از نصب Nmap ، میخواهیم پورت های باز DNS سرور گوگل یعنی 8.8.8.8 رو پیدا کنیم:
nmap 8.8.8.8
خروجی:
همونطور که میبینیم پورت های 53 و 443 پروتکل TCP باز هستند و تعداد 998 پورت دیگر فیلتر شده اند یا جوابی از آنها دریافت نشده است.
اسکن پورت های UDP
اگر به عکس بالا دوباره دقت کنید، میبینیم فقط پورت های از نوع TCP اسکن شدند، اما پورت 53 مربوط به سرویس DNS هم به صورت TCP و هم به صورت UDP کار میکند، پس Nmap به صورت پیشفرض پورت های TCP رو اسکن میکند.برای اسکن پورت های UDP با ید از پارامتر sU- استفاده کنیم:
پورت 53 مربوط به سرویس DNS از نوع UDP باز هست و 999 پورت UDP دیگر (کادر زرد رنگ) باز یا فیلتر هستند. در مورد اینکه تفاوت بین پورت باز یا فیلتر شده واینکه اصلا چطور Nmap متوجه میشود یک پورت باز یا بسته هست در ادامه توضیح میدهیم.
نکته: بعضی از پارامترهای Nmap برای اجرا شدن مثل sU- ، نیاز به دسترسی بالاتر root یا Administrator رو دارند، به همین دلیل در ابتدای دستور از sudo استفاده کردیم.
اسکن پورت مشخص
شاید تا اینجا متوجه شدید که Nmap به صورت پیشفرض فقط هزار پورت رو اسکن میکند، پورت هایی که معمولاً اکثرا باز و پرکاربرد هستند. با پارامتر p- مشخص میکنیم که Nmap چه پورت هایی رو اسکن بکند. برای مثال شما میخواین بدونید که پورت 80 و 443 یک دامنه مثل google.com باز هست یا بسته:
همچنین شما میتونید رنجی از پورت ها رو برای اسکن مشخص کنید. برای مثال پورت ۱ تا ۱۰ :
معرفی قابلیت های پیشرفته Nmap
تا به اینجا با اسکن ساده پورت ها و نحوه کار با Nmap آشنا شدیم و حالا میریم سراغ قابلیت های پیشرفته Nmap که در ابتدای مقاله بهش اشاره کردیم:
۱.پینگ اسکن
Nmap قبل از انجام فرایند پورت اسکن به صورت خودکار چندین درخواست از نوع TCP به پورت های 80 و 443 و هچنین یک درخواست از نوع ICMP در لایه Network (لایه سوم از مدل OSI)به سمت مقصد می فرستد، تا از صحت برقراری ارتباط با مقصد مطمئن شود یا به اصطلاح فنی هدف live باشد. اما اگر به دلیل وجود فایروال یا بسته بودن پروتکل ICMP، جوابی از مقصد دریافت نکرد، Nmap فرایند پورت اسکن رو انجام نمی دهد. به عکس زیر دقت کنین:
همونطور که می بینیم، Nmap فرایند پورت اسکن رو به دلیل عدم دریافت پاسخ از مقصد انجام نداد. در خروجی دستور، خود Nmap استفاده از پارامتر Pn- رو برای این وضعیت پیشنهاد می کند.
با استفاده از پارامتر Nmap، -Pn فرایند پینگ اسکن (Ping-Scan) رو انجام نمی دهد و مستقیماً پورت ها رو اسکن می کند:
پینگ اسکن انواع و پارامتر های مختلفی دارد، برای مثال شما میتوانید نوع پروتکل رو برای انجام پینگ اسکن مشخص کنید و یا به طور کل فقط پینگ اسکن انجام بدید و پورت اسکن رو با پارامتر sn- غیرفعال کنید.
در عکس زیر قسمتی از help ابزار Nmap است ، به طور خلاصه پارامتر های مختلف پینگ اسکن توضیح داده شده:
nmap -help #Nmap راهنمای ابزار
2.اسکن سریع (Fast-Scan)
همونطور که قبلا اشاره کردیم Nmap به صورت پیشفرض هزار پورت پرکاربرد رو اسکن میکند، با پارامتر Nmap، -F صد پورت پرکاربرد رو اسکن می کند:
نکته: ما به تعداد 65535 عدد پورت داریم،برای اسکن همه پورت ها از پارامتر -p- استفاده میکنیم.
3.تکنیک های پیشرفته پورت اسکن
قبل از توضیح تکنیک های پورت اسکن، لازم هست بدونیم که Nmap چطور متوجه باز یا بسته بودن پورت میشود؟یا تفاوت پورت باز یا بسته با فیلتر شده چی هست؟!
همونطور که قبلاً گفتیم، Nmap به صورت پیشرفرض پورت های TCP رو اسکن میکند و پروتکل TCP هم برای برقراری ارتباط با مقصد از دست تکانی سه مرحله ای یا Three-way Handshake استفاده میکند.
3Way Handshake چیست؟ معرفی 3 مرحله کاری پروتکل TCP
فرض مثال میخواهیم بدانیم پورت ۸۰ دامنه example.com باز هست یا بسته:
1.Nmap ابتدا یک پکت SYN به سمت پورت 80 مقصد (example.com) میفرستد.
2.مقصد با توجه به وضعیت پورت، یکی از جواب های زیر رو میفرستد:
- اگر پورت 80 باز باشد، مقصد هم در جواب SYN/ACK رو میفرستد و Nmap پورت رو باز در نظر میگیرد.
- اگر پورت 80 بسته باشد،مقصد RST می فرستد و Nmap پورت رو بسته در نظر میگیرد.
- اما اگر فایروالی وجود داشته باشد و پکت SYN ما رو اجازه عبور ندهد یا به اصطلاح فنی بلاک کند، Nmap بعد از چند لحظه متوجه میشود که جوابی از سمت مقصد دریافت نکرده و پورت رو فیلتر شده در نظر میگیرد.
وقتی که از پروتکل UDP برای پورت اسکن استفاده می کنیم، Nmap چطور متوجه باز یا بسته بودن پورت میشود:
- Nmap اگر پاسخی با پروتکل ICMP از مقصد با پیام "Port Unreachable" دریافت کند، پورت را بسته در نظر میگیرد.
- Nmap اگر از مقصد پاسخی دریافت کند ، پورت را در حالت باز در نظر میگیرد:
- Nmap اگر پاسخی از مقصد دریافت نکند، پورت رو در حالت باز یا فیلتر شده در نظر میگیرد. چون پورت های UDP به دلیل Connectionless (بدون اتصال) بودن، در صورت باز بودن معمولاً هیچ پاسخی ارسال نمی کنند و همچنین ممکن هست در صورت وجود فایروال، پروتکل ICMP در فایروال بلاک شده باشد:
حالا با توجه به مباحث بالا، در Nmap تکنیک های پیشرفته ای وجود دارد که می توان با استفاده از آنها، وجود فایروال رو شناسایی کرد، یا رول های فایروال رو برای پورت اسکن مقصد دور زد و یا اینکه پورت اسکن کنیم بدون اینکه ردپایی از خودمان به جا بگذاریم. بیشتر این تکنیک ها با استفاده از هدر پروتکل TCP و با توجه به پاسخ دریافتی از مقصد انجام میشود. برای مطالعه و توضیحات بیشتر به سایت رسمی Nmap مراجعه کنید:
https://nmap.org/book/man-port-scanning-techniques.html
البته توجه داشته باشید که این تکنیک ها تضمین 100 درصدی به شما نمی دهند، اما کمک کننده هستند و همچنین بهتره بدونید بیشتر فایروال ها و سیستم های تشخیص نفوذ امروزی هوشمند و به پورت اسکن، مخصوصا ابزار Nmap حساس هستند.
4.شناسایی سرویس ها و سیستم عامل
همه میدونیم ویندوز 7 با ویندوز 10 فرق داره یا وب سرور IIS نسخه 6 با نسخه 10 فرق داره، چون همه اینها ویژگی های منحصر بفرد خودشون رو دارند با اینکه ممکن هست اشتراکاتی هم با همدیگر داشته باشند. Nmap تمامی این ویژگی های مربوط به هر سیستم عامل یا سرویس ها رو در فایل هایی به اسم nmap-os-db و nmap-service-probes جمع اوری کرده است (مسیر این فایل ها با توجه نوع سیستم عامل متفاوت هست)، که با استفاده از جوابی که از مقصد دریافت میکند، Nmap جواب رو بر اساس این فایل ها و سایر پارامتر های دیگه تجزیه و تحلیل می کند.
برای تشخیص سیستم عامل از پارامتر O- و برای تشخیص نوع سرویس از پارامتر sV- هنگام پورت اسکن استفاده می کنیم:
Nmap بعضی اوقات قادر به شناسایی دقیق سیستم عامل و سرویس نیست و اگر به عکس دقت کنید Nmap توانست سرویس وب Apche و سیستم عامل مقصد که لینوکس هست به درستی تشخیص دهد، اما ورژن کرنل لینوکس رو بین ورژن ۳ تا ۴ به صورت حدودی اشاره کرده است.
5.Nmap Script Engine(NSE)
به بخش آخر و مهم یعنی اسکریپت های Nmap می رسیم، که بسیار قدرتمند هستند و برای کارهای مختلف مثل اسکن آسیب پذیری ها، جمع اوری اطلاعات، شناسایی سرویس ها و ... استفاده می شوند و نکته مهم دیگر اینکه می توانیم اسکریپت های دلخواه خودمان رو به زبان Lua که یک زبان اسکریپتی ساده هست بنویسیم و Nmap آنها رو اجرا کند.
با دستور زیر میتونید لیست همه اسکریپت های آماده Nmap به همراه دسته بندی و توضیحات آنها رو ببینید:
nmap --script-help=all
مسیر پیشفرض اسکریپت های Nmap:
# Linux (Ubuntu, Debian, Kali, و ...)
/usr/share/nmap/scripts/
# macOS (Homebrew یا MacPorts)
/usr/local/share/nmap/scripts/
/opt/local/share/nmap/scripts/
# Windows (محل نصب پیشفرض)
C:\Program Files (x86)\Nmap\scripts\
برای مثال ما می خواهیم اسکریپت ssl-cert.nse که گواهینامه SSL مربوط به دامنه یا آیپی رو بررسی میکند رو با پارامتر اسم اسکریپت=script-- اجرا میکنیم:
توجه داشته باشید که اسکریپت های Nmap روی پورت و سرویس مورد نظر خودش اجرا کنید، برای مثال پروتکل https روی پورت 443 کار میکند ، پس اسکریپت ssl-cert.nse رو با مشخص کردن پورت 443 اجرا میکنیم و پورت هم باید باز باشد،در غیر اینصورت اسکریپت اجرا نمیشود.
در بعضی مواقع هم ممکن هست سرویس ها روی پورتی غیر از پورت پیشفرض باشند، برای مثال پروتکل https روی پورت 8443 راه اندازی شده باشد. پس قبل از اجرای اسکریپت ها، پورت های باز و سرویس ها رو شناساییی کنید.
اشتباهات رایج و نکات کلیدی
معمولاً پورت های UDP و سرویس هایی که روی این پروتکل کار میکنند،هنگام پورت اسکن نادیده گرفته میشوند، پس استفاده از پارامتر sU- رو فراموش نکنید.
هدف این مقاله آموزش استفاده از ابزار Nmap هست و توصیه میشود که به هیچ عنوان از Nmap برای اسکن سایت ها و ایپی های داخلی و حساس استفاده نکنید.
جمع بندی نهایی
در این مقاله به صورت کلی با نحوه کار با ابزار Nmap و ویژگی ها و قابلیت های مهم آن مثل اسکن پورت ها و تکنیک های پورت اسکن، پینگ اسکن، اسکن سریع و اسکریپت های Nmap آشنا شدیم و فهمیدیم که Nmap فراتر از یک پورت اسکنر ساده هست.4
نظرات کاربران (0)