در سرور مجازی چگونه از Nmap برای اسکن پورت های باز استفاده کنیم
مقدمه
شبکه برای بسیاری از مدیران سیستم مبحثی رو به رشد و بسیار وسیع است. لایه ها، پروتکل ها، رابط های کاربری، ابزارها و برنامه های کاربردی زیادی وجود دارند که باید بر آنها مسلط شد تا درکی از این مبحث به دست آوریم.
این راهنما به مبحث پورت ها (ports) میپردازد و نشان خواهیم داد که چگونه برنامه nmap را بکار گیریم تا از وضعیت پورت های ماشین در شبکه اطلاعاتی کسب کنیم.
نکته: این راهنما پروتکل اینترنت نسخه چهار (IPv4) را پوشش میدهد. در لینوکس پروتکل اینترنت نسخه شش جدای از نسخه چهار است. مثلاً nmap به صورت پیشفرض آدرس های IPv4 را اسکن میکند ولی اگر تنظیمات خاصی اعمال شده باشد (nmap-6) میتواند آدرس های نسخه شش را هم اسکن کند.
اگر سرور مجازی شما برای نسخه شش پیکربندی شده است به یاد داشته باشید که هر دو رابط شبکه ایِ نسخه چهار و نسخه شش را با ابزارهای مناسب ایمن سازید.
پورت چیست؟
در مدل اتصال متقابل سامانه های باز (OSI model) چندین لایه وجود دارد. لایه انتقال (transport layer) لایه ای است که مسئول ارتباط بین سرویس ها و برنامه های مختلف است.
عمده ترین لایه ای که به پورت ها ارتباط دارد، همین لایه انتقال است.
واژگان تخصصی پورت
برای درک پیکربندی پورت باید بعضی اصطلاحات را بدانید. در ادامه چندین اصطلاح را توضیح خواهیم داد تا مباحث بعدی را بهتر درک کنید.
پورت: یک مکان در شبکه که نشانی پذیر است و داخل سیستم عامل پیاده سازی میشود تا به تشخیص و تمایز ترافیکِ برنامه ها و سرویس های مختلف کمک کند.
سوکت اینترنتی: یک توصیف گر فایل است که یک آدرس آی پی و یک پورت مرتبط را مشخص میکند. همچنین پروتکلی که برای انتقال داده ها استفاده خواهد شد را نیز تعیین میکند.
بایندینگ: این فرایند وقتی روی میدهد که یک برنامه یا سرویس از یک سوکت اینترنتی برای داده های ورودی یا خروجی استفاده میکند.
گوش دادن (Listening): وقتی گفته میشود سرویسی بر روی پورتی گوش میدهد یعنی با ترکیبی از پورت/پروتکل/آدرس آی پی بایندینگ انجام داده است تا از آن راه منتظر درخواست های کلاینت های آن سرویس باشد.
به محض دریافت یک درخواست، آن سرویس ارتباطی را از طریق همان پورتی که بر رویش گوش میداد برقرار خواهد کرد. چون سوکت اینترنتی که مورد استفاده قرار گرفته است با آدرس آی پی کلاینت بخصوصی مرتبط است، پس این کار باعث نخواهد شد که سرور همزمان به سایر درخواست های کلاینت ها گوش ندهد و به آنها خدمت نکند.
اسکن پورت: یعنی تلاش برای اتصال به تعدادی از پورت های پی در پی برای اینکه بفهمیم کدام یک از پورت ها باز هستند و چه سرویس و چه سیستم عاملی در پس آن است.
پورت های رایج:
پورت ها با اعدادی بین 1 و 65535 مشخص میشوند.
بسیاری از پورت های زیر 1024 به سرویس هایی مرتبط هستند که سیستم عامل های لینوکس و شبه یونیکس آن سرویس ها را برای کارکردهای شبکه مهم و حیاتی میدانند. پس باید از امتیازات روت بهره مند باشید تا بتوانید سرویس هایی را به آنها مرتبط کنید.
پورت های بین 1024 و 49151 پورت های ثبت شده (registered) هستند یعنی میتوانید به آیانا (IANA) درخواست دهید و آنها را برای سرویس های مشخصی رزرو کنید. البته خیلی هم سفت و سخت و مشخص نیست ولی سرنخی به دست میدهند که چه سرویس هایی ممکن است بر روی پورتی خاص در حال اجرا باشند.
پورت های بین 49152 تا 65535 را نمیتوان ثبت کرد و برای کاربری های خصوصی در نظر گرفته شده اند.
از آنجایی که تعداد زیادی پورت موجود است پس لازم نیست نگران اکثریت سرویس هایی باشید که تمایل به یاندینگ با پورت های بخصوصی دارند.
ولی بازهم بعضی پورت های فراگیر و پر کاربرد وجود دارند که ارزش دانستن دارند. در این لیست فقط به تعدادی از آنها اشاره شده است.
20 : داده های FTP
21: پورت کنترل FTP
22: SSH
23: تلنت (Telnet) . البته ایمن نیست و برای بسیاری کاربردها توصیه نمیشود.
25: SMTP پروتکل ساده نامه رسانی
43: پروتکل WHOIS
53: سرویس های DNS
67: پورت سرور DHCP (پروتکل پیکربندی پویای میزبان)
68: پورت کلاینت DHCP
80: ترافیک HTTP (ترافیک معمولی وب)
110: پورت نامه رسانی POP3
113: خدمات تصدیق Ident در شبکه های IRC
143: پورت پروتکل پیام گزینی (IMAP)
161: پروتکل آسان مدیریت شبکه (SNMP)
194: چت رله اینترنتی (IRC)
389: پورت پروتکل دسترسی سبک وزن دایرکتوری (LDAP)
443: پورت HTTPS برای ترافیک ایمن در وب
587: پروتکل ساده نامه رسانی (SMTP) پورت ارسال پیغام
631: پورت پرینت شبح وار (CUPS)
666: پورت DOOM مخصوص بازی DOOM
اینها فقط تعداد کمی از سرویس هایی بودند که به صورت معمول با بعضی پورت ها مرتبط هستند. برای برنامه هایی که میخواهید با مستندسازی مربوطه شان آنها را پیکربندی کنید باید بتوانید پورت های مناسبی پیدا کنید.
بسیاری از خدمات را میتوان طوری پیکربندی کرد که از پورت هایی بغیر از پورت های پیشفرض استفاده کنند ولی باید اطمینان حاصل کنید که هم کلاینت و هم سرور برای استفاده از پورتی غیر استاندارد پیکربندی شده باشند.
میتوانید لیست کوتاهی از بعضی پورت های رایج بدست آورید. تایپ کنید:
less /etc/services
و این لیست از پورت های رایج و سرویس های مرتبط با آنها را میدهد:
. . .
tcpmux 1/tcp # TCP port service multiplexer
echo 7/tcp
echo 7/udp
discard 9/tcp sink null
discard 9/udp sink null
systat 11/tcp users
daytime 13/tcp
daytime 13/udp
netstat 15/tcp
qotd 17/tcp quote
msp 18/tcp # message send protocol
. . .
در ادامه خواهید دید چگونه با nmap لیستی کاملتر بدست بیاوریم.
چگونه پورت های باز خود را بررسی کنیم؟
چندین ابزار برای اسکن پورت های باز وجود دارد و یکی از آنها که به صورت پیشفرض بر روی اکثر توزیع های لینوکس وجود دارد، netstat است.
با صدور فرمانی با پارامترهای زیر میتوانید به سرعت دریابید که چه سرویس هایی در حال اجرا هستند:
sudo netstat -plunt
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 785/sshd
tcp6 0 0 :::22 :::* LISTEN 785/sshd
با این کار، پورت و سوکت در حال گوش دادن که با سرویسی در ارتباط است نشان داده میشود و همچنین هر دو پروتکل UDP و TCP را لیست میکند.
نصب Nmap در سرور مجازی
بخشی از ایمن سازی یک شبکه، انجام آزمون آسیب پذیری است یعنی سعی در نفوذ به شبکه خودتان و کشف نقاط ضعف آن به همان شکلی که یک مهاجم ممکن است انجام بدهد.
شاید nmap بین تمام ابزارهای موجود، قویترین و رایجترین باشد. میتوانید با وارد کردن دستور زیر، nmap را روی یک ماشین Ubuntu یا Debian نصب کنید:
sudo apt-get update
sudo apt-get install nmap
یکی از مزایای جانبی نصب این نرم افزار، داشتن یک فایل پیشرفته نگاشت پورت (port mapping) است. با نگاه کردن به این فایل، ارتباط بین پورت ها و سرویس ها را با جزئیات بیشتری میبینید:
less /usr/share/nmap/nmap-services
. . .
tcpmux 1/tcp 0.001995 # TCP Port Service Multiplexer [rfc-1078]
tcpmux 1/udp 0.001236 # TCP Port Service Multiplexer
compressnet 2/tcp 0.000013 # Management Utility
compressnet 2/udp 0.001845 # Management Utility
compressnet 3/tcp 0.001242 # Compression Process
compressnet 3/udp 0.001532 # Compression Process
unknown 4/tcp 0.000477
rje 5/udp 0.000593 # Remote Job Entry
unknown 6/tcp 0.000502
echo 7/tcp 0.004855
echo 7/udp 0.024679
echo 7/sctp 0.000000
. . .
این فایل علاوه بر اینکه تقریباً 20 هزار سطر دارد، فیلدهای اضافه ای هم دارد. مثلاً ستون سوم (open frequency) که میزان تناوب و تکرار باز بودن آن پورت را لیست کرده که درخلال اسکن های پژوهشی در اینترنت بدست آمده است.
چگونه با Nmap پورت ها را اسکن کنیم؟
این نرم افزار اطلاعات زیادی در مورد یک میزبان در اختیار میگذارد و البته ممکن است مدیر سیستم هدف فکر کند کسی مشغول نفوذ به سرور مجازی اش است. به همین دلیل Nmap را فقط در سرور مجازی خودتان امتحان کنید یا مالک سرور مجازی هدف را در جریان بگذارید.
سازندگان Nmap یک سرور مجازی آزمایشی برای این مقاصد ایجاد کرده اند:
scanme.nmap.org
این سرور مجازی یا VPS های خودتان هدف مناسبی برای تمرین Nmap هستند.
در ادامه بعضی عملیاتهای رایج که با Nmap قابل انجام است را خواهیم گفت. برای اجتناب از کسب نتایج ناقص برای بعضی از جستجوها، از حالت sudo استفاده خواهیم کرد. انجام بعضی فرامین ممکن است زمان زیادی به طول بیانجامد.
فرمان تشخیص سیستم عامل میزبان:
sudo nmap -O remote_host
از قسمت کشف شبکه بگذرید و با این فرمان آنرا غیرفعال کنید:
sudo nmap -PN remote_host
با استفاده از “-” یا “/24” دامنه ای را برای اسکن تعدادی از هاست ها مشخص کنید.
sudo nmap -PN xxx.xxx.xxx.xxx-yyy
دامنه یک سرور را برای یافتن سرویس های موجود اسکن کنید:
sudo nmap -sP network_address_range
برای اسکن بدون پرس و جوی بازگشتی DNS (reverse DNS lookup) بر روی آی پی آدرسهای مشخص شده، متن زیر را تایپ کنید. در بیشتر موارد اینکار باعث صرفه جویی در زمان میشود:
sudo nmap -n remote_host
اسکن یک پورت مشخص نه همه پورت های رایج:
sudo nmap -p port_number remote_host
nmap میتواند برای اسکن ارتباطات TCP یک دستدهی سه مرحله ای (3-way handshake) با پورت مورد نظر انجام دهد. اینگونه:
sudo nmap -sT remote_host
برای اسکن ارتباطات UDP اینرا تایپ کنید:
sudo nmap -sU remote_host
برای اسکن تمامی پورت های باز TCP و UDP:
sudo nmap -n -PN -sT -sU -p- remote_host
اسکن SYN (یا همان نیمه باز) تی سی پی، نحوه برقراری ارتباط TCP را مورد سواستفاده قرار میدهد.
برای شروع یک ارتباط TCP، طرف درخواست دهنده یک بسته درخواست همگام سازی (synchronize request) به سرور مجازی میفرستد و سرور مجازی در جواب یک بسته تصدیق وصول همگام سازی (synchronize acknowledgment) میفرستد. سپس طرف اول یک بسته تصدیق وصول به سرور میفرستد و ارتباط برقرار میشود.
ولی اسکن SYN وقتی اولین بسته را از سرور دریافت کرد، ارتباط را قطع میکند و به همین علت به آن اسکن نیمه باز میگویند و سابقاً به عنوان روشی برای اسکن پنهانی پورت ها مدنظر بود چون برقراری ارتباط نیمه تمام رها شده بود و برنامه ای که با آن پورت مرتبط بود، ترافیکی دریافت نمیکرد.
امروزه فایروال های پیشرفته تری مورد استفاده قرار میگیرد و در بسیاری از پیکربندی ها ارتباطات نیمه تمام تقاضاهای SYN پرچمدار میشوند. بنابراین این روش دیگر پنهانی و دور از دید نیست.
برای اجرای اسکن SYN تایپ کنید:
sudo nmap -sS remote_host
رویکرد پنهانی تر این است که سرآیندهای (header) نامعتبر TCP بفرستیم تا در صورت موافقت میزبان با مشخصات تی سی پی، اگر پورت بسته باشد میزبان بسته ای خواهد فرستاد. این روش در سرور مجازی های غیر ویندوزی جواب میدهد.
میتوانید از پرچم های –sF ، -sX یا –sN استفاده کنید. همگی میتوانند پاسخ هایی که دنبالشان هستیم را ایجاد کنند:
sudo nmap -PN -p port_number -sN remote_host
برای یافتن نسخه سرویسی که بر روی میزبان در حال اجراست میتوانید از این فرمان استفاده کنید که سعی دارد با تست پاسخ های متفاوت سرور، سرویس و نسخه اش را مشخص کند:
sudo nmap -PN -p port_number -sV remote_host
فرامین بسیاری هست که میتوانید از آنها استفاده کنید ولی همین ها که گفتیم کافیست تا شروع به کشف آسیب پذیری های شبکه تان کنید.
نتیجه
درک پیکربندی پورت و دانستن اینکه چه بردارهای حمله ای (attack vector) در سرور مجازی تان وجود دارند، فقط یک قدم در مسیر ایمن سازی اطلاعات و VPS تان است ولی بازهم مهارتی حیاتی و ضروری است.
کشف پورت های باز و دانستن اینکه سرویس ها با برقراری ارتباط بر روی آن پورت چه اطلاعاتی بدست میدهند، به شما اطلاعات موردنیاز برای کنترل کردن سرورتان را میدهد. هرگونه نشت اطلاعات ماشین شما به خارج ممکن است توسط کاربران بدکار مورد استفاده قرار گیرد تا از نقاط آسیب پذیر شناخته شده بهره برداری کنند یا نقاط آسیب پذیر تازه ای ایجاد کنند. هرچه کمتر بدانند بهتر است.
ترجمه شده توسط : بابک طهماسبی
پست های توصیه شده
آموزش نصب لاراول در سرور دایرکت ادمین
۶ خرداد, ۱۳۹۹