در ادامه سری آموز‌ش‌های nmap در این مقاله راه‌های شناسایی قوانین firwall در نرم‌افزار nmap بررسی می‌شوند. شناخت قوانین firewall برای دور زدن این قوانین اهمیت بالایی دارد.

پورت‌هایی که توسط قوانین firewall فیلتر شده‌اند به‌وسیله nmap شناسایی می‌شوند ولی برای اسکن، بسته هستند. روش موثر برای اسکن این پورت‌ها استفاده از پکت‌های معمولی SYN است. سپس با استفاده از تکنیک‌های غیرمعمول مانند اسکن ACK در این مقاله و توالی IP ID  شبکه در آموزش‌های بعدی بررسی می‌شوند. در ادامه همره باگدشت باشید.

اسکن استاندارد SYN:

یکی از ویژگی‌های موثر در پرتکل TCP، استفاده سیستم‌ها از پرتکل کنترل انتقال RFC 793 است. RFC 793 به درخواست‌های اتصال ناخواسته پاسخ منفی به شکل پکت TCP RST (reset) می‌دهد. nmap توسط پکت‌های RST پورت‌های بسته را شناسایی می‌کند. تجهیزات فیلتر مانند قوانین firewall ها، پکت‌های ممنوع را drop می‌کنند. در حالت‌هایی قوانین firewall  برای پورت‌های بسته پیام خطای ICMP (معمولا برای پورت‌های غیرقابل دسترسی این پیام برگردانده می‌شود.) برمی‌گرداند. Nmap با استفاده از پکت‌های RST، پورت‌های بسته از پورت‌های فیلتر شده را تشخیص می‌دهد.

مثال ۱:
# nmap -sS -T4 scanme.nmap.org

Starting Nmap ( https://nmap.org )
Nmap scan report for scanme.nmap.org (64.13.134.52)
Not shown: 994 filtered ports
PORT    STATE  SERVICE
۲۲/tcp  open   ssh
۲۵/tcp  closed smtp
۵۳/tcp  open   domain
۷۰/tcp  closed gopher
۸۰/tcp  open   http
۱۱۳/tcp closed auth

Nmap done: 1 IP address (1 host up) scanned in 5.40 seconds

مهمترین نکته مثال بالا فیلتر ۹۹۴ پورت (۹۹۴ filtered ports) است. به عبارت دیگر، تنظیمات این فیلتر در حالت پیش فرض به درستی تنظیم شده است. فقط پورت‌هایی که ادمین اجازه دسترسی را داده، باز هستند. در حالت پیش‌فرض این پورت‌ها فیلتر هستند. سه پورت ۲۲، ۵۳ و ۸۰ در حالت باز و سه پورت ۲۵، ۷۰ و ۱۱۳ در حالت بسته هستند. ۹۹۴ پورت تست شده با اسکن معمولی در دسترس نیستند(پورت‌های فیلتر شده).

بازگرداندن RST توسط فایروال:

تشخیص پورت‌های بسته شده(بازگرداندن پکت RST) و پورت‌های فیلتر شده(پاسخ نمی دهند یا خطای ICMP می‌دهند) توسط nmap معمولا دقیق است. فایروال‌های امروزی پکت‌های RST را جعل می‌کنند و حضور فایروال را نمی توان تشخیص داد. در این حالت پورت بسته اعلام می‌شود. به عنوان مثال از این توانایی فایروال، سیستم Linux iptables استفاده می‌کند. این سیستم متدهای زیادی برای نپذیرفتن پکت‌های ناشناس دارد. اسناد iptables man page با ویژگی‌های زیر است:

–reject-with type

بجای type گزینه‌های زیر قرار می‌گیرد:

  • icmp-net-unreachable
  • icmp-host-unreachable
  • icmp-port-unreachable
  • icmp-proto-unreachable
  • icmp-net-prohibited
  • icmp-host-prohibited

گزینه‌های بالا پیام خطای ICMP را برمی‌گردانند(port-unreachable در حالت پیش‌فرض است). گزینه tcp-reset فقط در پرتکل TCP تطبیق داده شده می‌توان استفاده کرد: در این حالت پکت TCP RST برگشت داده می‌شود. این حالت برای شناسایی پروب‌های مسدود شده، (۱۱۳/tcp) استفاده می‌شود. مسدود کردن پروب‌ها زمانی اتفاق می‌افتد که ایمیل به هاست میل از کار افتاده فرستاده شود.

جعل پکت‌های RST توسط فایروال و IDS/IPS معمولا خارج از پورت ۱۱۳ نیستند. این فرایند برای اپراتورهای شبکه‌های قانونی و اسکنرهای مجاز، غیرعادی و گیج کننده است و بدون اینکه منتظر timeout به دلیل drop packets باشند، اسکن پورت بعدی را شروع می‌کنند. جعل پکت با این روش معمولا با آنالیز دقیق پکت‌های RST و مقایسه با دیگر پکت‌های فرستاده شده ماشین، شناسایی می‌شوند. این بخش را با نام Detecting Packet Forgery by Firewall and Intrusion Detection Systems به عنوان تکنیک موثر شناخته می‌شود.

جعل پکت‌های RST توسط فایروال و IDS/IPS معمولا خارج از پورت ۱۱۳ نیستند. این فرایند برای اپراتورهای شبکه‌های قانونی و اسکنرهای مجاز، غیرعادی و گیج کننده است و بدون اینکه منتظر timeout به دلیل drop packets باشند، اسکن پورت بعدی را شروع می‌کنند. جعل پکت با این روش معمولا با آنالیز دقیق پکت‌های RST و مقایسه با دیگر پکت‌های فرستاده شده ماشین، شناسایی می‌شوند. این بخش را با نام Detecting Packet Forgery by Firewall and Intrusion Detection Systems به عنوان تکنیک موثر شناخته می‌شود.

اسکن ACK:

این اسکن با دستور sA-  فعال می‌شود. اسکن ACK پکت‌های TCP را می‌فرستد و این پکت‌ها مقدار بیت ACK را تنظیم می‌کنند. صرف نظر از باز یا بسته بودن پورت‌ها، هدف زیر تست به RFC 793 نیاز دارد که به پکت‌های RST پاسخ دهد. فایروال‌هایی که پروب را مسدود می‌کنند، معمولا پاسخی نمی‌دهند یا پیام خطای غیرقابل دسترسی به مقصد ICMP می‌فرستند. گزارش پورت‌های فیلتر شده توسط اسکن nmap ACK اغلبا از اسکن SYN روی یک ماشین هدف کوچکتر است. دلیل این موضوع سختتر بودن فیلتر اسکن ACK است. بسیاری از شبکه‌ها اجازه ارتباط نامحدود را می‌دهند، ولی می‌خواهند جلوی ایجاد ارتباط با هاست‌های اینترنت را بگیرند. یک راه ساده پکت‌های SYN مسدود(بدون تنظیم بیت ACK) شود ولی اجازه عبور پکت‌های ACK را بدهید. مسدود کردن پکت‌های ACK به دلیل اینکه مبدا کانکشن معلوم نیست سخت است. برای اینکه پکت‌های ناخواسته ACK را مسدود شوند، فایروال باید روی کانکشن‌ها نظارت کامل داشته باشد تا ACK مناسب مشخص شود. فایروال‌های stateful که کانکشن‌ها را بررسی می‌کنند، به دلیل توانایی ایجاد محدودیت بیشتر امنیت بالایی دارند. مسدود کردن اسکن ACK یک ویژگی اضافه است. نکته منفی در این رابطه نیاز بیشتر به منابع و راه‌اندازی مجدد فایروال stateful باعث از دست رفتن کنترل فایروال stateful روی تمام کانکشن‌ها است.

هنوز فایروال stateless رایج است. ولی استفاده از فایروال‌های stateful در حال افزایش است. برای مثال، سیستم‌های لینوکسی Netfilter/iptables از –syn پشتیبانی می‌کنند. ویژگی –syn بررسی فایروال stateless را راحت می‌کند. در بخش قبلی اسکن SYN روی ۱۰۰۰ پورت scanme.nmap.org را فیلتر نشان داد. در مثال زیر اسکن ACK روی scanme.nmap.org نوع فیلتر را نشان می‌دهد:

مثال ۲: اسکن ACK روی scanme
# nmap -sA -T4 scanme.nmap.org

Starting Nmap ( https://nmap.org )
Nmap scan report for scanme.nmap.org (64.13.134.52)
Not shown: 994 filtered ports
PORT    STATE      SERVICE
۲۲/tcp  unfiltered ssh
۲۵/tcp  unfiltered smtp
۵۳/tcp  unfiltered domain
۷۰/tcp  unfiltered gopher
۸۰/tcp  unfiltered http
۱۱۳/tcp unfiltered auth

Nmap done: 1 IP address (1 host up) scanned in 5.96 seconds

هر ۶ پورت در اسکن SYN نشان داده شده است و ۹۹۴ پورت دیگر همچنان فیلتر هستند. دلیل خروجی مثال به این شکل محافظت از سایت scanme.nmap.org با فیلتر stateful iptables directive است.

iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

این فیلتر فقط پکت‌های کانکشن وصل شده را قبول می‌کند. پکت‌های ناشناس ACK که توسط nmap فرستاده می‌شوند، drop می‌شوند، به غیر از شش پورت نشان داده شده، پکت‌های nmap را قبول می‌کنند. قوانین ویژه به پورت‌های ۲۲، ۲۵، ۵۳، ۷۰ و ۸۰ به تمام پکت‌ها اجازه عبور می‌دهند. به‌علاوه با پکت RST به پروب پورت ۱۱۳ پاسخ می‌دهند. نکته قابل توجه، حالت unfiltered، ۶ پورت نشان داده شده است. اسکن ACK نمی‌تواند بررسی دقیق روی پورت‌های open (22،۵۳ و ۸۰) یا closed (25، ۷۰ و ۱۱۳) انجام دهد. در مثال زیر روی یک هاست لینوکسی به نام para در یک شبکه لوکال، از اسکریپت (ساده سازی برای ذخیره کردن) زیر استفاده شده است:

#!/bin/sh
#
# A simple, stateless, host-based firewall script.

# First of all, flush & delete any existing tables
iptables -F
iptables -X

# Deny by default (input/forward)
iptables --policy INPUT DROP
iptables --policy OUTPUT ACCEPT
iptables --policy FORWARD DROP

# I want to make ssh and www accessible from outside
iptables -A INPUT -m multiport -p tcp --destination-port 22,80 -j ACCEPT

# Allow responses to outgoing TCP requests
iptables -A INPUT --proto tcp ! --syn -j ACCEPT

در کد بالا فایروال از نوع stateless است و هیچ گونه نشانه‌ای از گزینه option– یا ماژول ریکوئست m state- نیست. در مثال ۳ اسکن‌های SYN و ACK روی یک هاست نشان داده شده است.

مثال ۳: تفاوت اسکن SYN و ACK روی هاست para:
# nmap -sS -p1-100 -T4 para

Starting Nmap ( https://nmap.org )
Nmap scan report for para (192.168.10.191)
Not shown: 98 filtered ports
PORT   STATE  SERVICE
۲۲/tcp open   ssh
۸۰/tcp closed http
MAC Address: 00:60:1D:38:32:90 (Lucent Technologies)

Nmap done: 1 IP address (1 host up) scanned in 3.81 seconds

# nmap -sA -p1-100 -T4 para

Starting Nmap ( https://nmap.org )
All 100 scanned ports on para (192.168.10.191) are: unfiltered
MAC Address: 00:60:1D:38:32:90 (Lucent Technologies)

Nmap done: 1 IP address (1 host up) scanned in 0.70 seconds

در اسکن SYN، ۹۸ پورت از ۱۰۰ پورت فیلتر هستند. اسکن ACK هر پورت اسکن شده را هنوز unfiltered نشان می‌دهد. به عبارت دیگر، تمام پکت‌های ACK به راحتی عبور می‌کنند و پاسخ‌های RST را دریافت می‌کنند. این پاسخ‌ها زمان اسکن را تا پنج برابر کم می‌کند و لازم نیست منتظر timeouts شویم.

اکنون فرق بین فایروال stateful و stateless را می‌دانیم. پکت‌های اسکن ACK نشان داده شده در این اسکن احتمالا به هاست مقصد رسیده‌اند. زمانی که ایجاد کانکشن TCP امکان ندارد، اسکن ACK می‌تواند برای تشخیص IP Address، تست تشخیص OS، IP ID shenanigans و برای ایجاد کانال برای تونل کامند به rootkits نصب شده روی سیستم هدف، استفاده شود.

با روش اسکن پورت به تنهایی تشخیص ویژگی‌های پورت امکان پذیر نیست. در یک نوع اسکن، یک پورت فیلتر شده تشخیص داده می‌شود و در اسکن دیگر پورت فیلتر نشده تشخیص داده می‌شود. IP address پورت اسکن شده، قوانین فیلتر تجهیزات روی اسکن nmap اثر می‌گذارد. جدول پورت‌ها در خروجی nmap، پاسخ‌های پورت‌ها به اسکن nmap است. در آموزش بعدی IP ID Tricks آموزش داده می‌شود.