نحوه اسکن پورت های باز با nmap

ممکن است که پورت های خاصی در دیواره آتش(Firewall) شبکه شما یا شبکه مقصد، بسته باشند. در این صورت بسته های اطلاعاتی ارسالی بوسیله دیواره آتش متوقف یا به اصطلاح Block می شوند.

اما چگونه بفهمیم که یک پورت در دیواره آتش باز است و بوسیله آن بلاک نمی شود؟ برای این کار روش ساده ای وجود دارد.

پورت چیست؟

پورت که در معنا به معنی درگاه است برای رد و بدل کردن اطلاعات بین دو کامپیوتر استفاده میشود.‏محلی است که داده‌ها وارد یا خارج می‌شوند. در مبحث هک معمولا با پورت‌های نرم‌افزاری سروکار داریم که به هر کدام عددی نسبت می‌دهیم.شماره پورت(که معمولا یک عدد ۱۶ بیتی است ) برای تعیین اینکه یک بسته اطلاعاتی (packet)در اینترنت یا سایر شبکه های به چه برنامه ای در رایانه مقصد تعلق دارد، استفاه می شود. در پروتکل های ارتباطی TCP , UDP این عدد ۱۶ بیتی در header بسته اطلاعاتی ارسالی قرار می گیرد و به کامپیوتر مقصد ارسال می گردد.چون شما میتوانید بوسیله ی همین پورت ها وارد کامپیوتر دیگران شده و به اصلاح او را هک کنید از این رو تمام پورت ها حفاظت شده میباشند و یا به عبارت دیگر بسته هستند و تنها موقعی باز میشوند که ‏اطلاعات بخواهد از آن عبور کند،البته این رد و بدل شدن ارتباطات نیز تحت کنترل برنامه های فایر وال میتواند ‏باشد که فقط موقعی باز شوند که اولا اطلاعات بخواهند رد و بدل شوند و ثانیا کاربر اجازه ی آنرا از طریق پیغام ‏فایر وال صادر کند.ممکن است که پورت های خاصی در دیواره آتش(Firewall) شبکه شما یا شبکه مقصد، بسته باشند. در این صورت بسته های اطلاعاتی ارسالی بوسیله دیواره آتش متوقف یا به اصطلاح Block می شوند.

واژگان تخصصی پورت

برای درک پیکربندی پورت باید بعضی اصطلاحات را بدانید. در ادامه چندین اصطلاح را توضیح خواهیم داد تا مباحث بعدی را بهتر درک کنید.
پورت: یک مکان در شبکه که نشانی پذیر است و داخل سیستم عامل پیاده سازی میشود تا به تشخیص و تمایز ترافیکِ برنامه ها و سرویس های مختلف کمک کند.
سوکت اینترنتی: یک توصیف گر فایل است که یک آدرس آی پی و یک پورت مرتبط را مشخص میکند. همچنین پروتکلی که برای انتقال داده ها استفاده خواهد شد را نیز تعیین میکند.
بایندینگ: این فرایند وقتی روی میدهد که یک برنامه یا سرویس از یک سوکت اینترنتی برای داده های ورودی یا خروجی استفاده میکند.
گوش دادن (Listening): وقتی گفته میشود سرویسی بر روی پورتی گوش میدهد یعنی با ترکیبی از پورت/پروتکل/آدرس آی پی بایندینگ انجام داده است تا از آن راه منتظر درخواست های کلاینت های آن سرویس باشد.
به محض دریافت یک درخواست، آن سرویس ارتباطی را از طریق همان پورتی که بر رویش گوش میداد برقرار خواهد کرد. چون سوکت اینترنتی که مورد استفاده قرار گرفته است با آدرس آی پی کلاینت بخصوصی مرتبط است، پس این کار باعث نخواهد شد که سرور همزمان به سایر درخواست های کلاینت ها گوش ندهد و به آنها خدمت نکند.
اسکن پورت: یعنی تلاش برای اتصال به تعدادی از پورت های پی در پی برای اینکه بفهمیم کدام یک از پورت ها باز هستند و چه سرویس و چه سیستم عاملی در پس آن است.

پورت های رایج:

پورت ها با اعدادی بین ۱ و ۶۵۵۳۵ مشخص میشوند.
بسیاری از پورت های زیر ۱۰۲۴ به سرویس هایی مرتبط هستند که سیستم عامل های لینوکس و شبه یونیکس آن سرویس ها را برای کارکردهای شبکه مهم و حیاتی میدانند. پس باید از امتیازات روت بهره مند باشید تا بتوانید سرویس هایی را به آنها مرتبط کنید.
پورت های بین ۱۰۲۴ و ۴۹۱۵۱ پورت های ثبت شده (registered) هستند یعنی میتوانید به آیانا (IANA) درخواست دهید و آنها را برای سرویس های مشخصی رزرو کنید. البته خیلی هم سفت و سخت و مشخص نیست ولی سرنخی به دست میدهند که چه سرویس هایی ممکن است بر روی پورتی خاص در حال اجرا باشند.
پورت های بین ۴۹۱۵۲ تا ۶۵۵۳۵ را نمیتوان ثبت کرد و برای کاربری های خصوصی در نظر گرفته شده اند.
از آنجایی که تعداد زیادی پورت موجود است پس لازم نیست نگران اکثریت سرویس هایی باشید که تمایل به یاندینگ با پورت های بخصوصی دارند.
ولی بازهم بعضی پورت های فراگیر و پر کاربرد وجود دارند که ارزش دانستن دارند. در این لیست فقط به تعدادی از آنها اشاره شده است.
۲۰ : داده های FTP
۲۱: پورت کنترل FTP
۲۲: SSH
۲۳: تلنت (Telnet) . البته ایمن نیست و برای بسیاری کاربردها توصیه نمیشود.
۲۵: SMTP پروتکل ساده نامه رسانی
۴۳: پروتکل WHOIS
۵۳: سرویس های DNS
۶۷: پورت سرور DHCP (پروتکل پیکربندی پویای میزبان)
۶۸: پورت کلاینت DHCP
۸۰: ترافیک HTTP (ترافیک معمولی وب)
۱۱۰: پورت نامه رسانی POP3
۱۱۳: خدمات تصدیق Ident در شبکه های IRC
۱۴۳: پورت پروتکل پیام گزینی (IMAP)
۱۶۱: پروتکل آسان مدیریت شبکه (SNMP)
۱۹۴: چت رله اینترنتی (IRC)
۳۸۹: پورت پروتکل دسترسی سبک وزن دایرکتوری (LDAP)
۴۴۳: پورت HTTPS برای ترافیک ایمن در وب
۵۸۷: پروتکل ساده نامه رسانی (SMTP) پورت ارسال پیغام
۶۳۱: پورت پرینت شبح وار (CUPS)
۶۶۶: پورت 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
. . .

این فایل علاوه بر اینکه تقریباً ۲۰ هزار سطر دارد، فیلدهای اضافه ای هم دارد. مثلاً ستون سوم (open frequency) که میزان تناوب و تکرار باز بودن آن پورت را لیست کرده که درخلال اسکن های پژوهشی در اینترنت بدست آمده است.

 

چگونه با Nmap پورت ها را اسکن کنیم؟

 این نرم افزار اطلاعات زیادی در مورد یک میزبان در اختیار میگذارد و البته ممکن است مدیر سیستم هدف فکر کند کسی مشغول نفوذ به سرور مجازی اش است. به همین دلیل Nmap را فقط در سرور مجازی خودتان امتحان کنید یا مالک سرور مجازی هدف را در جریان بگذارید.

سازندگان Nmap یک سرور مجازی آزمایشی برای این مقاصد ایجاد کرده اند:

scanme.nmap.org

این سرور مجازی یا VPS های خودتان هدف مناسبی برای تمرین Nmap هستند.

در ادامه بعضی عملیاتهای رایج که با Nmap قابل انجام است را خواهیم گفت. برای اجتناب از کسب نتایج ناقص برای بعضی از جستجوها، از حالت sudo استفاده خواهیم کرد. انجام بعضی فرامین ممکن است زمان زیادی به طول بیانجامد.

فرمان تشخیص سیستم عامل میزبان:

sudo nmap -O remote_host

از قسمت کشف شبکه بگذرید و با این فرمان آنرا غیرفعال کنید:

sudo nmap -PN remote_host

با استفاده از “-” یا “/۲۴” دامنه ای را برای اسکن تعدادی از هاست ها مشخص کنید.

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 یک دستدهی سه مرحله ای (۳-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 تان است ولی بازهم مهارتی حیاتی و ضروری است.

کشف پورت های باز و دانستن اینکه سرویس ها با برقراری ارتباط بر روی آن پورت چه اطلاعاتی بدست میدهند، به شما اطلاعات موردنیاز برای کنترل کردن سرورتان را میدهد. هرگونه نشت اطلاعات ماشین شما به خارج ممکن است توسط کاربران بدکار مورد استفاده قرار گیرد تا از نقاط آسیب پذیر شناخته شده بهره برداری کنند یا نقاط آسیب پذیر تازه ای ایجاد کنند. هرچه کمتر بدانند بهتر است.