| NMAP(1) | Nmap Reference Guide | NMAP(1) |
نام (NAME)
nmap - ابزار کاوش شبکه و پویشگر امنیتی / درگاه (پورت)
خلاصه دستور (SYNOPSIS)
nmap [نوع پویش...] [گزینهها] {مشخصکردن هدف}
توضیحات (DESCRIPTION)
نرمافزار Nmap (مخفف “Network Mapper”) یک ابزار متنباز برای کاوش شبکه و ممیزی امنیتی است. این ابزار برای پویش سریع شبکههای بزرگ طراحی شده است، هرچند بر روی تکمیزبانها نیز به خوبی کار میکند. Nmap از بستههای خام IP به روشهای نوآورانه استفاده میکند تا تعیین کند چه میزبانهایی در شبکه در دسترس هستند، چه سرویسهایی (نام و نسخه برنامه) توسط آن میزبانها ارائه میشوند، چه سیستمعاملهایی (همراه با نسخه سیستمعامل) در حال اجرا هستند، چه نوع فیلترهای بسته/فایروالهایی مورد استفاده قرار گرفتهاند و دهها ویژگی دیگر. اگرچه Nmap معمولاً برای ممیزیهای امنیتی استفاده میشود، اما بسیاری از مدیران سیستم و شبکه آن را برای کارهای روزمره مانند موجودیبرداری شبکه، مدیریت برنامههای ارتقای سرویس و نظارت بر آپتایم میزبان یا سرویس مفید میدانند.
خروجی Nmap فهرستی از اهداف پویششده است، همراه با اطلاعات تکمیلی در مورد هر یک که بسته به گزینههای استفادهشده ارائه میشود. مهمترین بخش این اطلاعات، “جدول درگاههای جالبتوجه” است. این جدول شماره درگاه و پروتکل، نام سرویس و وضعیت آن را فهرست میکند. وضعیت هر درگاه یکی از موارد زیر است: باز (open)، فیلترشده (filtered)، بسته (closed)، یا فیلترنشده (unfiltered). وضعیت Open (باز) بدین معناست که برنامهای روی ماشین هدف در حال گوش دادن به اتصالات/بستهها روی آن درگاه است. وضعیت Filtered (فیلترشده) بدین معناست که یک فایروال، فیلتر یا مانع شبکهای دیگر درگاه را مسدود کرده است، بهطوری که Nmap نمیتواند تشخیص دهد درگاه open یا closed است. درگاههای Closed (بسته) هیچ برنامهای روی آنها در حال گوش دادن نیست، اگرچه ممکن است هر لحظه باز شوند. درگاهها به عنوان unfiltered (فیلترنشده) دستهبندی میشوند زمانی که به کاوشهای Nmap پاسخ میدهند، اما Nmap نمیتواند تعیین کند که آیا آنها باز هستند یا بسته. Nmap ترکیبهای وضعیتی open|filtered و closed|filtered را زمانی گزارش میکند که نتواند تشخیص دهد کدام یک از این دو وضعیت درگاه را توصیف میکند. جدول درگاهها همچنین ممکن است شامل جزئیات نسخه نرمافزار باشد، در صورتی که تشخیص نسخه درخواست شده باشد. هنگامی که پویش پروتکل IP درخواست میشود (-sO)، Nmap به جای درگاههای شنونده، اطلاعاتی در مورد پروتکلهای IP پشتیبانیشده ارائه میدهد.
علاوه بر جدول درگاههای جالبتوجه، Nmap میتواند اطلاعات بیشتری در مورد اهداف ارائه دهد، از جمله نامهای معکوس DNS، حدسهای سیستمعامل، انواع دستگاه و آدرسهای MAC.
یک پویش معمول Nmap در مثال 1 نشان داده شده است. تنها آرگومانهای Nmap که در این مثال استفاده شدهاند عبارتند از: -A برای فعالسازی تشخیص سیستمعامل و نسخه، پویش اسکریپت و traceroute؛ -T4 برای اجرای سریعتر؛ و سپس نام میزبان.
مثال 1. نمونهای از یک پویش نماینده با Nmap
# nmap -A -T4 scanme.nmap.org Nmap scan report for scanme.nmap.org (74.207.244.221) Host is up (0.029s latency). rDNS record for 74.207.244.221: li86-221.members.linode.com Not shown: 995 closed ports PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 5.3p1 Debian 3ubuntu7 (protocol 2.0) | ssh-hostkey: 1024 8d:60:f1:7c:ca:b7:3d:0a:d6:67:54:9d:69:d9:b9:dd (DSA) |_2048 79:f8:09:ac:d4:e2:32:42:10:49:d3:bd:20:82:85:ec (RSA) 80/tcp open http Apache httpd 2.2.14 ((Ubuntu)) |_http-title: Go ahead and ScanMe! 646/tcp filtered ldp 1720/tcp filtered H.323/Q.931 9929/tcp open nping-echo Nping echo Device type: general purpose Running: Linux 2.6.X OS CPE: cpe:/o:linux:linux_kernel:2.6.39 OS details: Linux 2.6.39 Network Distance: 11 hops Service Info: OS: Linux; CPE: cpe:/o:linux:kernel TRACEROUTE (using port 53/tcp) HOP RTT ADDRESS [Cut first 10 hops for brevity] 11 17.65 ms li86-221.members.linode.com (74.207.244.221) Nmap done: 1 IP address (1 host up) scanned in 14.40 seconds
جدیدترین نسخه Nmap را میتوان از https://nmap.org دریافت کرد. جدیدترین نسخه این صفحه راهنما در نشانی https://nmap.org/book/man.html در دسترس است. همچنین به عنوان فصلی از کتاب Nmap Network Scanning: The Official Nmap Project Guide to Network Discovery and Security Scanning گنجانده شده است (ببینید https://nmap.org/book).
خلاصه گزینهها (OPTIONS SUMMARY)
این خلاصه گزینهها زمانی که Nmap بدون هیچ آرگومانی اجرا میشود چاپ میشود، و آخرین نسخه آن همیشه در https://svn.nmap.org/nmap/docs/nmap.usage.txt در دسترس است. این خلاصه به یادآوری پرکاربردترین گزینهها کمک میکند، اما جایگزینی برای مستندات جامع در ادامه این راهنما نیست. برخی از گزینههای مبهم و پیچیده حتی در اینجا گنجانده نشدهاند.
Nmap 7.99SVN ( https://nmap.org )
Usage: nmap [Scan Type(s)] [Options] {target specification}
TARGET SPECIFICATION:
Can pass hostnames, IP addresses, networks, etc.
Ex: scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254
-iL <inputfilename>: Input from list of hosts/networks
-iR <num hosts>: Choose random targets
--exclude <host1[,host2][,host3],...>: Exclude hosts/networks
--excludefile <exclude_file>: Exclude list from file
HOST DISCOVERY:
-sL: List Scan - simply list targets to scan
-sn: Ping Scan - disable port scan
-Pn: Treat all hosts as online -- skip host discovery
-PS/PA/PU/PY[portlist]: TCP SYN, TCP ACK, UDP or SCTP discovery to given ports
-PE/PP/PM: ICMP echo, timestamp, and netmask request discovery probes
-PO[protocol list]: IP Protocol Ping
-n/-R: Never do DNS resolution/Always resolve [default: sometimes]
--dns-servers <serv1[,serv2],...>: Specify custom DNS servers
--system-dns: Use OS's DNS resolver
--traceroute: Trace hop path to each host
SCAN TECHNIQUES:
-sS/sT/sA/sW/sM: TCP SYN/Connect()/ACK/Window/Maimon scans
-sU: UDP Scan
-sN/sF/sX: TCP Null, FIN, and Xmas scans
--scanflags <flags>: Customize TCP scan flags
-sI <zombie host[:probeport]>: Idle scan
-sY/sZ: SCTP INIT/COOKIE-ECHO scans
-sO: IP protocol scan
-b <FTP relay host>: FTP bounce scan
PORT SPECIFICATION AND SCAN ORDER:
-p <port ranges>: Only scan specified ports
Ex: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9
--exclude-ports <port ranges>: Exclude the specified ports from scanning
-F: Fast mode - Scan fewer ports than the default scan
-r: Scan ports sequentially - don't randomize
--top-ports <number>: Scan <number> most common ports
--port-ratio <ratio>: Scan ports more common than <ratio>
SERVICE/VERSION DETECTION:
-sV: Probe open ports to determine service/version info
--version-intensity <level>: Set from 0 (light) to 9 (try all probes)
--version-light: Limit to most likely probes (intensity 2)
--version-all: Try every single probe (intensity 9)
--version-trace: Show detailed version scan activity (for debugging)
SCRIPT SCAN:
-sC: equivalent to --script=default
--script=<Lua scripts>: <Lua scripts> is a comma separated list of
directories, script-files or script-categories
--script-args=<n1=v1,[n2=v2,...]>: provide arguments to scripts
--script-args-file=filename: provide NSE script args in a file
--script-trace: Show all data sent and received
--script-updatedb: Update the script database.
--script-help=<Lua scripts>: Show help about scripts.
<Lua scripts> is a comma-separated list of script-files or
script-categories.
OS DETECTION:
-O: Enable OS detection
--osscan-limit: Limit OS detection to promising targets
--osscan-guess: Guess OS more aggressively
TIMING AND PERFORMANCE:
Options which take <time> are in seconds, or append 'ms' (milliseconds),
's' (seconds), 'm' (minutes), or 'h' (hours) to the value (e.g. 30m).
-T<0-5>: Set timing template (higher is faster)
--min-hostgroup/max-hostgroup <size>: Parallel host scan group sizes
--min-parallelism/max-parallelism <numprobes>: Probe parallelization
--min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <time>: Specifies
probe round trip time.
--max-retries <tries>: Caps number of port scan probe retransmissions.
--host-timeout <time>: Give up on target after this long
--scan-delay/--max-scan-delay <time>: Adjust delay between probes
--min-rate <number>: Send packets no slower than <number> per second
--max-rate <number>: Send packets no faster than <number> per second
FIREWALL/IDS EVASION AND SPOOFING:
-f; --mtu <val>: fragment packets (optionally w/given MTU)
-D <decoy1,decoy2[,ME],...>: Cloak a scan with decoys
-S <IP_Address>: Spoof source address
-e <iface>: Use specified interface
-g/--source-port <portnum>: Use given port number
--proxies <url1,[url2],...>: Relay connections through HTTP/SOCKS4 proxies
--data <hex string>: Append a custom payload to sent packets
--data-string <string>: Append a custom ASCII string to sent packets
--data-length <num>: Append random data to sent packets
--ip-options <options>: Send packets with specified ip options
--ttl <val>: Set IP time-to-live field
--spoof-mac <mac address/prefix/vendor name>: Spoof your MAC address
--badsum: Send packets with a bogus TCP/UDP/SCTP checksum
OUTPUT:
-oN/-oX/-oS/-oG <file>: Output scan in normal, XML, s|<rIpt kIddi3,
and Grepable format, respectively, to the given filename.
-oA <basename>: Output in the three major formats at once
-v: Increase verbosity level (use -vv or more for greater effect)
-d: Increase debugging level (use -dd or more for greater effect)
--reason: Display the reason a port is in a particular state
--open: Only show open (or possibly open) ports
--packet-trace: Show all packets sent and received
--iflist: Print host interfaces and routes (for debugging)
--append-output: Append to rather than clobber specified output files
--resume <filename>: Resume an aborted scan
--noninteractive: Disable runtime interactions via keyboard
--stylesheet <path/URL>: XSL stylesheet to transform XML output to HTML
--webxml: Reference stylesheet from Nmap.Org for more portable XML
--no-stylesheet: Prevent associating of XSL stylesheet w/XML output
MISC:
-6: Enable IPv6 scanning
-A: Enable OS detection, version detection, script scanning, and traceroute
--datadir <dirname>: Specify custom Nmap data file location
--send-eth/--send-ip: Send using raw ethernet frames or IP packets
--privileged: Assume that the user is fully privileged
--unprivileged: Assume the user lacks raw socket privileges
-V: Print version number
-h: Print this help summary page.
EXAMPLES:
nmap -v -A scanme.nmap.org
nmap -v -sn 192.168.0.0/16 10.0.0.0/8
nmap -v -iR 10000 -Pn -p 80
SEE THE MAN PAGE (https://nmap.org/book/man.html) FOR MORE OPTIONS AND EXAMPLES
مشخصکردن هدف (TARGET SPECIFICATION)
هر چیزی در خط فرمان Nmap که یک گزینه (یا آرگومان گزینه) نباشد، به عنوان مشخصات میزبان هدف در نظر گرفته میشود. سادهترین حالت، مشخص کردن آدرس IP یا نام میزبان هدف برای پویش است.
هنگامی که یک نام میزبان به عنوان هدف داده میشود، از طریق سامانه نام دامنه (DNS) تحلیل و ترجمه میشود تا آدرس IP برای پویش تعیین گردد. اگر نام به بیش از یک آدرس IP ترجمه شود، تنها اولین آدرس پویش خواهد شد. برای اینکه Nmap تمام آدرسهای ترجمهشده را به جای فقط اولی پویش کند، از گزینه --resolve-all استفاده کنید.
گاهی اوقات میخواهید کل یک شبکه از میزبانهای مجاور را پویش کنید. برای این منظور، Nmap از آدرسدهی به سبک CIDR پشتیبانی میکند. میتوانید عبارت /تعداد بیتها را به یک آدرس IP یا نام میزبان اضافه کنید و Nmap هر آدرس IP را که اولین تعداد بیتها ی آن با آدرس IP یا نام میزبان مرجع دادهشده یکسان باشد، پویش خواهد کرد. برای مثال، 192.168.10.0/24 تمام ۲۵۶ میزبان بین 192.168.10.0 (دودویی: 11000000 10101000 00001010 00000000) و 192.168.10.255 (دودویی: 11000000 10101000 00001010 11111111) را به طور کامل پویش میکند. 192.168.10.40/24 دقیقاً همان اهداف را پویش خواهد کرد. با توجه به اینکه میزبان scanme.nmap.org در آدرس IP برابر با 64.13.134.52 قرار دارد، مشخصه scanme.nmap.org/16 تعداد ۶۵٬۵۳۶ آدرس IP بین 64.13.0.0 و 64.13.255.255 را پویش میکند. کوچکترین مقدار مجاز /0 است که کل اینترنت را هدف قرار میدهد. بزرگترین مقدار برای IPv4 برابر با /32 است که فقط همان میزبان یا آدرس IP مشخصشده را پویش میکند زیرا تمام بیتهای آدرس ثابت هستند. بزرگترین مقدار برای IPv6 برابر با /128 است که همان کار را انجام میدهد.
نمادگذاری CIDR کوتاه است اما همیشه به اندازه کافی انعطافپذیر نیست. برای مثال، ممکن است بخواهید 192.168.0.0/16 را پویش کنید اما از هر آدرس IP که به .0 یا .255 ختم میشود صرفنظر نمایید، زیرا ممکن است به عنوان آدرس شبکه زیرشبکه و آدرس پخش همگانی (broadcast) استفاده شوند. Nmap از طریق آدرسدهی بازه هشتبیتی (octet range) از این کار پشتیبانی میکند. به جای مشخص کردن یک آدرس IP معمولی، میتوانید فهرستی از اعداد یا بازهها را با کاما برای هر هشتبیت (بایت) مشخص کنید. برای مثال، 192.168.0-255.1-254 از تمام آدرسهای موجود در بازه که به .0 یا .255 ختم میشوند صرفنظر میکند، و 192.168.3-5,7.1 چهار آدرس 192.168.3.1، 192.168.4.1، 192.168.5.1 و 192.168.7.1 را پویش میکند. هر طرف از یک بازه میتواند حذف شود؛ مقادیر پیشفرض 0 در سمت چپ و 255 در سمت راست است. استفاده از - به تنهایی معادل 0-255 است، اما به یاد داشته باشید که در هشتبیت اول از 0- استفاده کنید تا مشخصات هدف شبیه به یک گزینه خط فرمان به نظر نرسد. بازهها نیازی نیست محدود به هشتبیتهای انتهایی باشند: مشخصه 0-255.0-255.13.37 یک پویش در سطح کل اینترنت برای تمام آدرسهای IP که به 13.37 ختم میشوند انجام میدهد. این نوع نمونهبرداری گسترده میتواند برای پیمایشها و پژوهشهای اینترنتی مفید باشد.
آدرسهای IPv6 را میتوان با آدرس یا نام میزبان کامل IPv6 آنها یا با نمادگذاری CIDR برای زیرشبکهها مشخص کرد. بازههای هشتبیتی هنوز برای IPv6 پشتیبانی نمیشوند.
آدرسهای IPv6 با دامنه غیرسراسری (non-global scope) باید یک پسوند شناسه ناحیه (zone ID) داشته باشند. در سیستمهای یونیکس، این شناسه یک علامت درصد به همراه نام رابط شبکه است؛ یک آدرس کامل ممکن است به صورت fe80::a8bb:ccff:fedd:eeff%eth0 باشد. در ویندوز، از شماره اندیس رابط به جای نام رابط استفاده کنید: fe80::a8bb:ccff:fedd:eeff%1. میتوانید فهرستی از اندیسهای رابط را با اجرای دستور netsh.exe interface ipv6 show interface مشاهده کنید.
نرمافزار Nmap چندین مشخصه میزبان را در خط فرمان میپذیرد و نیازی نیست که همه آنها از یک نوع باشند. دستور nmap scanme.nmap.org 192.168.0.0/8 10.0.0,1,3-7.- دقیقاً همان کاری را انجام میدهد که انتظار دارید.
اگرچه اهداف معمولاً در خط فرمان مشخص میشوند، اما گزینههای زیر نیز برای کنترل انتخاب هدف در دسترس هستند:
-iL inputfilename (خواندن ورودی از فهرست)
فایل ورودی میتواند حاوی توضیحاتی (کامنت) باشد که با # شروع میشوند و تا انتهای خط ادامه دارند.
-iR num hosts (انتخاب تصادفی اهداف)
--exclude host1[,host2[,...]] (مستثنی کردن میزبانها/شبکهها)
--excludefile exclude_file (مستثنی کردن فهرست از فایل)
فایل استثناها میتواند حاوی توضیحاتی باشد که با # شروع شده و تا انتهای خط ادامه دارند.
-n (عدم تحلیل نام معکوس DNS)
-R (تحلیل معکوس DNS برای تمام اهداف)
--resolve-all (پویش تمام آدرسهای ترجمهشده)
--unique (پویش هر آدرس فقط یکبار)
--system-dns (استفاده از تحلیلگر DNS سیستم)
--dns-servers server1[,server2[,...]] (کارگزارهای مورد استفاده برای پرسوجوهای DNS)
این گزینه همچنین هنگام پویش شبکههای خصوصی بسیار مفید است. گاهی اوقات تنها چند کارگزار نام اطلاعات DNS مناسب را ارائه میدهند و ممکن است حتی ندانید کجا قرار دارند. میتوانید شبکه را برای درگاه ۵۳ پویش کنید (شاید با تشخیص نسخه)، سپس پویشهای فهرستی Nmap (-sL) را با مشخص کردن هر کارگزار نام به صورت تکتک با --dns-servers امتحان کنید تا زمانی که یکی را پیدا کنید که کار کند.
اگر پاسخ DNS از اندازه یک بسته UDP فراتر رود، این گزینه ممکن است رعایت نشود. در چنین شرایطی تحلیلگر DNS ما تمام تلاش خود را میکند تا پاسخی را از بسته کوتاه شده استخراج کند و در صورت عدم موفقیت، به استفاده از تحلیلگر سیستم باز میگردد.
کشف میزبان (HOST DISCOVERY)
یکی از نخستین گامها در هر مأموریت شناسایی شبکه، کاهش دادن یک مجموعه (گاهی بسیار بزرگ) از محدودههای IP به فهرستی از میزبانهای فعال یا جالبتوجه است. پویش تکتک درگاههای هر آدرس IP فرایندی کند و معمولاً غیرضروری است. البته اینکه چه چیزی یک میزبان را جالبتوجه میکند به شدت به اهداف پویش بستگی دارد. ممکن است مدیران شبکه فقط به میزبانهایی که یک سرویس خاص را اجرا میکنند علاقهمند باشند، در حالی که ممیزان امنیتی ممکن است به تکتک دستگاههای دارای آدرس IP اهمیت دهند. یک مدیر ممکن است تنها با استفاده از یک پینگ ساده ICMP برای مکانیابی میزبانها در شبکه داخلی خود راحت باشد، در حالی که یک آزمایشکننده نفوذ خارجی ممکن است از مجموعهای متنوع شامل دهها کاوشگر برای دور زدن محدودیتهای فایروال استفاده کند.
از آنجا که نیازهای کشف میزبان بسیار متنوع هستند، Nmap گزینههای گستردهای را برای سفارشیسازی تکنیکهای مورد استفاده ارائه میدهد. کشف میزبان گاهی اوقات پویش پینگ نامیده میشود، اما بسیار فراتر از بستههای ساده درخواست انعکاس (echo request) در پروتکل ICMP است که با ابزار همهجاحاضر ping شناخته میشوند. کاربران میتوانند مرحله کشف را به طور کامل با یک پویش فهرستی (-sL) یا با غیرفعال کردن کشف میزبان (-Pn) نادیده بگیرند، یا شبکه را با ترکیبهای دلخواهی از کاوشگرهای چنددرگاهی TCP SYN/ACK، UDP، SCTP INIT و ICMP به کار گیرند. هدف این کاوشگرها برانگیختن پاسخهایی است که نشان دهد یک آدرس IP واقعاً فعال است (توسط یک میزبان یا دستگاه شبکه استفاده میشود). در بسیاری از شبکهها، در هر زمان تنها درصد کمی از آدرسهای IP فعال هستند. این امر به ویژه در فضای آدرسهای خصوصی مانند 10.0.0.0/8 رایج است. آن شبکه دارای ۱۶ میلیون IP است، اما من دیدهام که توسط شرکتهایی با کمتر از هزار ماشین استفاده میشود. کشف میزبان میتواند آن ماشینها را در دریایی از آدرسهای IP با تخصیص پراکنده پیدا کند.
اگر هیچ گزینهای برای کشف میزبان داده نشود، Nmap یک درخواست انعکاس ICMP، یک بسته TCP SYN به درگاه ۴۴۳، یک بسته TCP ACK به درگاه ۸۰ و یک درخواست برچسب زمان ICMP ارسال میکند. (برای IPv6، درخواست برچسب زمان ICMP حذف میشود زیرا بخشی از ICMPv6 نیست.) این پیشفرضها معادل گزینههای -PE -PS443 -PA80 -PP هستند. استثنا در این مورد، پویشهای ARP (برای IPv4) و Neighbor Discovery (برای IPv6) هستند که برای هر هدفی در یک شبکه محلی اترنت استفاده میشوند. برای کاربران بدون امتیاز پوسته یونیکس، کاوشگرهای پیشفرض یک بسته SYN به درگاههای ۸۰ و ۴۴۳ با استفاده از فراخوانی سیستمی connect است. این شیوه کشف میزبان اغلب هنگام پویش شبکههای محلی کافی است، اما مجموعه جامعتری از کاوشگرهای کشف برای ممیزی امنیتی توصیه میشود.
گزینههای -P* (که انواع پینگ را انتخاب میکنند) میتوانند با یکدیگر ترکیب شوند. شما میتوانید شانس خود را برای نفوذ به فایروالهای سختگیر با ارسال انواع مختلف کاوشگرها با استفاده از درگاهها/فلگهای مختلف TCP و کدهای ICMP افزایش دهید. همچنین توجه داشته باشید که کشف ARP/Neighbor Discovery به طور پیشفرض برای اهداف موجود در شبکه محلی اترنت انجام میشود، حتی اگر سایر گزینههای -P* را مشخص کنید، زیرا تقریباً همیشه سریعتر و موثرتر است.
به طور پیشفرض، Nmap ابتدا کشف میزبان را انجام میدهد و سپس یک پویش درگاه را روی هر میزبانی که مشخص شود آنلاین است اجرا میکند. این امر حتی در صورتی که انواع کشف میزبان غیرپیشفرض مانند کاوشگرهای UDP (-PU) را مشخص کنید نیز صادق است. توضیحات مربوط به گزینه -sn را بخوانید تا یاد بگیرید چگونه فقط کشف میزبان را انجام دهید، یا از -Pn برای صرفنظر از کشف میزبان و پویش درگاه تمام آدرسهای هدف استفاده کنید. گزینههای زیر کشف میزبان را کنترل میکنند:
-sL (پویش فهرستی)
نرمافزار Nmap همچنین تعداد کل آدرسهای IP را در پایان گزارش میدهد. پویش فهرستی یک بررسی سلامت مناسب است تا اطمینان حاصل شود که آدرسهای IP درستی برای اهداف خود دارید. اگر میزبانها نامهای دامنهای دارند که آنها را نمیشناسید، ارزش دارد که برای جلوگیری از پویش اشتباه شبکه یک شرکت دیگر بیشتر تحقیق کنید.
از آنجا که ایده اصلی صرفاً چاپ فهرستی از میزبانهای هدف است، گزینههای عملکردهای سطح بالاتر مانند پویش درگاه، تشخیص سیستمعامل یا کشف میزبان را نمیتوان با این گزینه ترکیب کرد. اگر میخواهید کشف میزبان را غیرفعال کنید در حالی که همچنان چنین عملکردهای سطح بالاتری را انجام میدهید، توضیحات گزینه -Pn (صرفنظر از کشف میزبان) را بخوانید.
-sn (بدون پویش درگاه)
مدیران سیستم نیز اغلب این گزینه را ارزشمند میدانند. میتوان از آن به راحتی برای شمارش ماشینهای موجود در یک شبکه یا نظارت بر در دسترس بودن سرور استفاده کرد. این عمل اغلب جاروب پینگ (ping sweep) نامیده میشود و مطمئنتر از پینگ کردن آدرس پخش همگانی (broadcast) است زیرا بسیاری از میزبانها به پرسوجوهای broadcast پاسخ نمیدهند.
کشف میزبان پیشفرضی که با -sn انجام میشود، شامل یک درخواست انعکاس ICMP، ارسال TCP SYN به درگاه ۴۴۳، ارسال TCP ACK به درگاه ۸۰ و یک درخواست برچسب زمان ICMP است. هنگامی که توسط یک کاربر بدون امتیاز اجرا میشود، فقط بستههای SYN (با استفاده از فراخوانی connect) به درگاههای ۸۰ و ۴۴۳ روی هدف ارسال میشوند. هنگامی که یک کاربر دارای دسترسی ریشه تلاش میکند اهدافی را در یک شبکه محلی اترنت پویش کند، درخواستهای ARP استفاده میشوند مگر اینکه --send-ip مشخص شده باشد. گزینه -sn میتواند با هر یک از انواع کاوشگرهای کشف (گزینههای -P*) برای انعطافپذیری بیشتر ترکیب شود. اگر هر یک از آن گزینههای نوع کاوشگر و شماره درگاه استفاده شوند، کاوشگرهای پیشفرض لغو میشوند. هنگامی که فایروالهای سختگیر بین میزبان منبع اجراکننده Nmap و شبکه هدف وجود دارند، استفاده از این تکنیکهای پیشرفته توصیه میشود. در غیر این صورت ممکن است در زمانی که فایروال کاوشگرها یا پاسخهای آنها را مسدود (drop) میکند، میزبانها نادیده بمانند.
در نسخههای قبلی Nmap، گزینه -sn به عنوان -sP شناخته میشد.
-Pn (بدون پینگ)
برای ماشینهای موجود در شبکه محلی اترنت، پویش ARP همچنان انجام خواهد شد (مگر اینکه --disable-arp-ping یا --send-ip مشخص شده باشد) زیرا Nmap برای پویش بیشتر میزبانهای هدف به آدرسهای MAC نیاز دارد. در نسخههای قبلی Nmap، گزینه -Pn به صورت -P0 و -PN بود.
-PS port list (پینگ TCP SYN)
فلگ SYN به سیستم راه دور نشان میدهد که شما در حال تلاش برای برقراری یک اتصال هستید. به طور معمول درگاه مقصد بسته خواهد بود و یک بسته RST (بازنشانی) بازگردانده میشود. اگر درگاه باز باشد، هدف مرحله دوم دستتکانی سهمرحلهای TCP (three-way handshake) را با پاسخ دادن با یک بسته TCP SYN/ACK انجام میدهد. سپس ماشینی که Nmap را اجرا میکند با پاسخ دادن با یک RST به جای ارسال بسته ACK (که دستتکانی سهمرحلهای را تکمیل کرده و اتصال کامل برقرار میکرد)، اتصال نوپا را قطع میکند. بسته RST توسط هسته ماشینی که Nmap را اجرا میکند در پاسخ به SYN/ACK غیرمنتظره ارسال میشود، نه توسط خود Nmap.
برای Nmap اهمیتی ندارد که درگاه باز است یا بسته. هر یک از پاسخهای RST یا SYN/ACK که قبلاً مورد بحث قرار گرفت به Nmap میگوید که میزبان در دسترس و پاسخگو است.
در سیستمهای یونیکس، معمولاً فقط کاربر ممتاز root قادر به ارسال و دریافت بستههای خام TCP است. برای کاربران عادی، یک راهکار جایگزین به طور خودکار به کار گرفته میشود که در آن فراخوانی سیستمی connect علیه هر درگاه هدف آغاز میشود. این کار اثر ارسال یک بسته SYN به میزبان هدف را در تلاش برای برقراری اتصال دارد. اگر connect با موفقیت سریع یا خطای ECONNREFUSED برگردد، پشته TCP زیرین باید یک SYN/ACK یا RST دریافت کرده باشد و میزبان به عنوان در دسترس علامتگذاری میشود. اگر تلاش برای اتصال تا رسیدن به زمان وقفه (timeout) معلق بماند، میزبان به عنوان خاموش/غیرفعال (down) علامتگذاری میشود.
-PA port list (پینگ TCP ACK)
گزینه -PA از همان درگاه پیشفرض کاوشگر SYN (درگاه ۸۰) استفاده میکند و همچنین میتواند فهرستی از درگاههای مقصد را در همان قالب دریافت کند. اگر یک کاربر غیرممتاز این گزینه را امتحان کند، از راهکار connect که قبلاً مورد بحث قرار گرفت استفاده میشود. این راهکار ناقص است زیرا connect در واقع بستهای از نوع SYN ارسال میکند نه ACK.
دلیل ارائه هر دو کاوشگر پینگ SYN و ACK به حداکثر رساندن شانس دور زدن فایروالها است. بسیاری از مدیران، مسیریابها و سایر فایروالهای ساده را به گونهای پیکربندی میکنند که بستههای ورودی SYN را به جز مواردی که برای سرویسهای عمومی مانند وبسایت یا سرور ایمیل شرکت در نظر گرفته شدهاند، مسدود کنند. این کار از سایر اتصالات ورودی به سازمان جلوگیری میکند، در حالی که به کاربران اجازه میدهد اتصالات خروجی بدون مانع به اینترنت برقرار کنند. این رویکرد غیرمبتنی بر وضعیت (stateless) منابع کمی را روی فایروال/مسیریاب اشغال میکند و به طور گسترده توسط فیلترهای سختافزاری و نرمافزاری پشتیبانی میشود. نرمافزار فایروال Netfilter/iptables لینوکس گزینه راحت --syn را برای پیادهسازی این رویکرد بدون وضعیت ارائه میدهد. هنگامی که قوانین فایروال بدون وضعیت مانند این حاکم هستند، کاوشگرهای پینگ SYN (-PS) به احتمال زیاد هنگام ارسال به درگاههای بسته هدف مسدود میشوند. در چنین مواردی، کاوشگر ACK میدرخشد زیرا مستقیماً از این قوانین عبور میکند.
نوع متداول دیگری از فایروالها از قوانین مبتنی بر وضعیت (stateful) استفاده میکنند که بستههای غیرمنتظره را دور میاندازند. این ویژگی در ابتدا بیشتر در فایروالهای سطح بالا یافت میشد، اگرچه در طول سالها بسیار متداولتر شده است. سیستم Netfilter/iptables لینوکس از طریق گزینه --state از این ویژگی پشتیبانی میکند که بستهها را بر اساس وضعیت اتصال دستهبندی مینماید. یک کاوشگر SYN بیشتر احتمال دارد در برابر چنین سیستمی کار کند، زیرا بستههای غیرمنتظره ACK معمولاً به عنوان جعلی شناسایی شده و دور انداخته میشوند. راهحل این دوراهی، ارسال هر دو کاوشگر SYN و ACK با مشخص کردن همزمان -PS و -PA است.
-PU port list (پینگ UDP)
بارهای داده همان کاوشگرهای استفادهشده در تشخیص سرویس و نسخه هستند و در فایل nmap-service-probes تعریف شدهاند. محتوای بسته همچنین میتواند با گزینههای --data، --data-string و --data-length تغییر کند.
فهرست درگاهها همان قالبی را دارد که در گزینههای -PS و -PA ذکر شد. اگر هیچ درگاهی مشخص نشود، پیشفرض ۴۰۱۲۵ است. این مقدار پیشفرض را میتوان در زمان کامپایل با تغییر DEFAULT_UDP_PROBE_PORT_SPEC در nmap.h تنظیم کرد. یک درگاه بسیار نامعمول به طور پیشفرض استفاده میشود زیرا ارسال به درگاههای باز اغلب برای این نوع پویش خاص نامطلوب است.
پس از برخورد با یک درگاه بسته در ماشین هدف، کاوشگر UDP باید یک بسته ICMP port unreachable را در پاسخ دریافت کند. این امر برای Nmap نشان میدهد که ماشین روشن و در دسترس است. بسیاری از انواع دیگر خطاهای ICMP، مانند غیرقابل دسترس بودن میزبان/شبکه یا پایان زمان حیات (TTL exceeded) نشاندهنده یک میزبان خاموش یا غیرقابل دسترس هستند. عدم پاسخ نیز به همین صورت تفسیر میشود. اگر به یک درگاه باز برسد، بیشتر سرویسها به سادگی بسته خالی را نادیده میگیرند و هیچ پاسخی ارسال نمیکنند. به همین دلیل است که درگاه کاوش پیشفرض ۴۰۱۲۵ است که بعید است مورد استفاده قرار گیرد. تعداد کمی از سرویسها، مانند پروتکلتولید کاراکتر (chargen)، به یک بسته خالی UDP پاسخ میدهند و بدین ترتیب برای Nmap فاش میکنند که ماشین در دسترس است.
مزیت اصلی این نوع پویش این است که فایروالها و فیلترهایی را که فقط TCP را بازرسی میکنند دور میزند. برای مثال، زمانی یک مسیریاب بیسیم پهنباند Linksys BEFW11S4 داشتم. رابط خارجی این دستگاه تمام درگاههای TCP را به طور پیشفرض فیلتر میکرد، اما کاوشگرهای UDP همچنان پیامهای غیرقابل دسترس بودن درگاه را دریافت میکردند و در نتیجه دستگاه را لو میدادند.
-PY port list (پینگ SCTP INIT)
قطعه INIT به سیستم راه دور نشان میدهد که شما در تلاش برای برقراری یک ارتباط (association) هستید. به طور معمول درگاه مقصد بسته خواهد بود و یک قطعه ABORT برگردانده میشود. اگر درگاه تصادفاً باز باشد، هدف مرحله دوم دستتکانی چهارمرحلهای SCTP را با پاسخ دادن با یک قطعه INIT-ACK انجام میدهد. اگر ماشینی که Nmap را اجرا میکند دارای پشته SCTP کاربردی باشد، سپس ارتباط نوپا را با پاسخ دادن با یک قطعه ABORT به جای ارسال قطعه COOKIE-ECHO (که مرحله بعدی در دستتکانی چهارمرحلهای است) قطع میکند. بسته ABORT توسط هسته ماشین اجراکننده Nmap در پاسخ به INIT-ACK غیرمنتظره ارسال میشود، نه توسط خود Nmap.
برای Nmap تفاوتی ندارد که درگاه باز باشد یا بسته. هر دو پاسخ ABORT یا INIT-ACK نشان میدهند که میزبان در دسترس و پاسخگو است.
در سیستمهای یونیکس، معمولاً فقط کاربر ممتاز root قادر به ارسال و دریافت بستههای خام SCTP است. استفاده از پینگهای SCTP INIT در حال حاضر برای کاربران بدون امتیاز امکانپذیر نیست.
-PE؛ -PP؛ -PM (انواع پینگ ICMP)
اگرچه درخواست echo پرسوجوی استاندارد پینگ ICMP است، اما Nmap به همین جا ختم نمیشود. استانداردهای ICMP (RFC 792[3] و RFC 950[4]) همچنین بستههای درخواست برچسب زمان (timestamp request)، درخواست اطلاعات (information request) و درخواست ماسک آدرس (address mask request) را به ترتیب به عنوان کدهای ۱۳، ۱۵ و ۱۷ مشخص میکنند. اگرچه هدف ظاهری این پرسوجوها به دست آوردن اطلاعاتی مانند ماسک آدرس و زمان فعلی است، اما میتوان به راحتی از آنها برای کشف میزبان استفاده کرد. سیستمی که پاسخ میدهد، روشن و در دسترس است. نرمافزار Nmap در حال حاضر بستههای درخواست اطلاعات را پیادهسازی نمیکند، زیرا به طور گسترده پشتیبانی نمیشوند. سند RFC 1122 تأکید میکند که “یک میزبان نباید این پیامها را پیادهسازی کند”. پرسوجوهای برچسب زمان و ماسک آدرس را میتوان به ترتیب با گزینههای -PP و -PM ارسال کرد. پاسخ برچسب زمان (کد ۱۴ در ICMP) یا پاسخ ماسک آدرس (کد ۱۸) نشان میدهد که میزبان در دسترس است. این دو پرسوجو زمانی میتوانند ارزشمند باشند که مدیران بستههای درخواست echo را مسدود کردهاند، در حالی که فراموش کردهاند سایر پرسوجوهای ICMP میتوانند برای همین منظور استفاده شوند.
-PO protocol list (پینگ پروتکل IP)
این روش کشف میزبان یا به دنبال پاسخهایی با استفاده از همان پروتکل کاوشگر میگردد، یا پیامهای ICMP protocol unreachable که نشان میدهد پروتکل ارائهشده در میزبان مقصد پشتیبانی نمیشود. هر دو نوع پاسخ نشان میدهند که میزبان هدف زنده و فعال است.
--disable-arp-ping (غیرفعال کردن پینگ ARP یا ND)
رفتار پیشفرض معمولاً سریعتر است، اما این گزینه در شبکههایی که از Proxy ARP استفاده میکنند مفید است، جایی که یک مسیریاب به تمام درخواستهای ARP پاسخ میدهد و باعث میشود طبق پویش ARP هر هدفی روشن به نظر برسد.
--discovery-ignore-rst (نادیده گرفتن پاسخهای RST در کشف)
--traceroute (ردیابی مسیر تا میزبان)
عملکرد Traceroute با ارسال بستههایی با TTL (زمان حیات) کم انجام میشود تا تلاش کند پیامهای ICMP Time Exceeded را از گامهای (hops) میانی بین پویشگر و میزبان هدف دریافت کند. پیادهسازیهای استاندارد traceroute با TTL برابر با ۱ شروع میکنند و TTL را افزایش میدهند تا زمانی که به میزبان مقصد برسند. اما traceroute در Nmap با TTL بالا شروع میکند و سپس TTL را کاهش میدهد تا به صفر برسد. انجام معکوس این کار به Nmap اجازه میدهد تا از الگوریتمهای هوشمند ذخیرهسازی موقت (caching) برای سرعت بخشیدن به ردیابیها روی چندین میزبان استفاده کند. به طور متوسط Nmap بین ۵ تا ۱۰ بسته کمتر در هر میزبان، بسته به شرایط شبکه، ارسال میکند. اگر یک زیرشبکه واحد در حال پویش باشد (مانند 192.168.0.0/24)، Nmap ممکن است فقط مجبور باشد دو بسته به بیشتر میزبانها بفرستد.
مبانی پویش درگاه (PORT SCANNING BASICS)
اگرچه Nmap در طول سالها از نظر کارایی رشد چشمگیری داشته است، اما کار خود را به عنوان یک پویشگر کارآمد درگاه آغاز کرد و این قابلیت همچنان عملکرد اصلی آن باقی مانده است. دستور ساده nmap target تعداد ۱٬۰۰۰ درگاه TCP را روی میزبان target پویش میکند. در حالی که بسیاری از پویشگرهای درگاه به طور سنتی تمام درگاهها را به دو وضعیت باز یا بسته تقسیم میکردند، Nmap بسیار دقیقتر عمل میکند. این ابزار درگاهها را به شش وضعیت تقسیم میکند: باز (open)، بسته (closed)، فیلترشده (filtered)، فیلترنشده (unfiltered)، باز|فیلترشده (open|filtered)، یا بسته|فیلترشده (closed|filtered).
این وضعیتها ویژگیهای ذاتی خود درگاه نیستند، بلکه نحوه مشاهده آنها توسط Nmap را توصیف میکنند. برای مثال، پویش Nmap از درون همان شبکه هدف ممکن است درگاه 135/tcp را به صورت باز (open) نشان دهد، در حالی که پویشی در همان زمان با همان گزینهها از طریق اینترنت ممکن است آن درگاه را به صورت فیلترشده (filtered) نشان دهد.
شش وضعیت درگاه که توسط Nmap شناخته میشوند
باز (open)
بسته (closed)
فیلترشده (filtered)
فیلترنشده (unfiltered)
باز|فیلترشده (open|filtered)
بسته|فیلترشده (closed|filtered)
تکنیکهای پویش درگاه (PORT SCANNING TECHNIQUES)
به عنوان یک فرد مبتدی در تعمیر خودرو، ممکن است ساعتها تلاش کنم تا ابزارهای ابتدایی خود (چکش، نوار چسب، آچار و غیره) را برای انجام کار تطبیق دهم. وقتی با شکست مفتضحانهای روبرو میشوم و ماشین قراضهام را پیش یک مکانیک واقعی یدککشی میکنم، او همیشه در جعبهابزار عظیم خود جستجو میکند تا ابزار کاملی را بیرون بیاورد که کار را بسیار آسان میکند. هنر پویش درگاه نیز مشابه است. کارشناسان دهها تکنیک پویش را درک کرده و تکنیک مناسب (یا ترکیبی از آنها) را برای یک کار معین انتخاب میکنند. از سوی دیگر، کاربران بیتجربه و اسکریپتکیدها تلاش میکنند هر مشکلی را با پویش پیشفرض SYN حل کنند. از آنجا که Nmap رایگان است، تنها مانع برای تسلط بر پویش درگاه، دانش است. این قطعاً بهتر از دنیای خودرو است، جایی که ممکن است برای تشخیص اینکه به یک کمپرسور فنر لول نیاز دارید مهارت زیادی لازم باشد، و سپس همچنان باید هزاران دلار برای آن بپردازید.
بیشتر انواع پویش فقط برای کاربران ممتاز (دارای دسترسی ریشه) در دسترس هستند. این به این دلیل است که آنها بستههای خام ارسال و دریافت میکنند، که در سیستمهای یونیکس نیاز به دسترسی root دارد. استفاده از یک حساب مدیر (administrator) در ویندوز توصیه میشود، اگرچه Nmap گاهی اوقات برای کاربران بدون امتیاز در آن پلتفرم زمانی که Npcap از قبل در سیستمعامل بارگذاری شده است کار میکند. الزام دسترسی ریشه زمانی که Nmap در سال ۱۹۹۷ منتشر شد یک محدودیت جدی بود، زیرا بسیاری از کاربران فقط به حسابهای پوسته اشتراکی دسترسی داشتند. اکنون دنیا متفاوت است؛ رایانهها ارزانتر شدهاند، افراد بسیار بیشتری دسترسی مستقیم و همیشگی به اینترنت دارند و سیستمهای یونیکس رومیزی (از جمله لینوکس و Mac OS X) فراگیر هستند. نسخه ویندوزی Nmap اکنون در دسترس است و اجازه میدهد تا روی سیستمهای رومیزی بیشتری اجرا شود. به تمام این دلایل، کاربران نیاز کمتری به اجرای Nmap از حسابهای پوسته اشتراکی محدود دارند. این مایه خوششانسی است، زیرا گزینههای ممتاز Nmap را بسیار قدرتمندتر و انعطافپذیرتر میکنند.
اگرچه Nmap تلاش میکند نتایج دقیقی تولید کند، اما به خاطر داشته باشید که تمام بینشهای آن بر اساس بستههای بازگرداندهشده توسط ماشینهای هدف (یا فایروالهای جلوی آنها) است. چنین میزبانهایی ممکن است غیرقابل اعتماد باشند و پاسخهایی ارسال کنند که هدف آنها گیج کردن یا گمراه کردن Nmap است. بسیار رایجتر میزبانهایی هستند که با RFC سازگار نیستند و آنطور که باید به کاوشهای Nmap پاسخ نمیدهند. پویشهای FIN، NULL و کریسمس به ویژه در معرض این مشکل هستند. چنین مسائلی مختص انواع خاصی از پویشها هستند و بنابراین در بخشهای مربوط به هر نوع پویش مورد بحث قرار میگیرند.
این بخش حدود دوازده تکنیک پویش درگاه را که توسط Nmap پشتیبانی میشوند مستند میکند. در هر بار فقط میتوان از یک روش استفاده کرد، به جز اینکه پویش UDP (-sU) و هر یک از انواع پویش SCTP (-sY، -sZ) میتوانند با هر یک از انواع پویش TCP ترکیب شوند. به عنوان یک راهنمای حافظه، گزینههای نوع پویش درگاه به صورت -sC هستند، که در آن C یک حرف برجسته در نام پویش است، که معمولاً اولین حرف است. تنها استثنا در این مورد، پویش منسوخشده جهش FTP (-b) است. به طور پیشفرض، Nmap یک پویش SYN انجام میدهد، اگرچه اگر کاربر امتیاز مناسب برای ارسال بستههای خام را نداشته باشد (نیاز به دسترسی ریشه در یونیکس)، پویش connect را جایگزین میکند. از بین پویشهای فهرستشده در این بخش، کاربران بدون امتیاز تنها میتوانند پویشهای connect و جهش FTP را اجرا کنند.
-sS (پویش TCP SYN)
این تکنیک اغلب به عنوان پویش نیمهباز (half-open scanning) نامیده میشود، زیرا شما یک اتصال کامل TCP را باز نمیکنید. شما یک بسته SYN ارسال میکنید، گویی در حال باز کردن یک اتصال واقعی هستید و سپس منتظر پاسخ میمانید. یک پاسخ SYN/ACK نشان میدهد که درگاه در حال شنود (باز) است، در حالی که یک RST (بازنشانی) نشاندهنده عدم شنود است. اگر پس از چندین بار ارسال مجدد پاسخی دریافت نشود، درگاه به عنوان فیلترشده علامتگذاری میشود. همچنین اگر خطای غیرقابل دسترس بودن ICMP (type 3, code 0, 1, 2, 3, 9, 10, or 13) دریافت شود، درگاه به عنوان فیلترشده علامتگذاری میشود. درگاه همچنین در صورتی باز در نظر گرفته میشود که یک بسته SYN (بدون فلگ ACK) در پاسخ دریافت شود. این میتواند ناشی از یک ویژگی بسیار نادر TCP باشد که به عنوان اتصال باز همزمان یا دستتکانی تقسیمشده شناخته میشود (ببینید https://nmap.org/misc/split-handshake.pdf).
-sT (پویش TCP connect)
هنگامی که پویش SYN در دسترس است، معمولاً انتخاب بهتری است. نرمافزار Nmap کنترل کمتری بر فراخوانی سطح بالای connect نسبت به بستههای خام دارد که کارایی آن را کاهش میدهد. فراخوانی سیستمی به جای انجام بازنشانی نیمهباز که پویش SYN انجام میدهد، اتصالات را به درگاههای باز هدف کامل میکند. این امر نه تنها زمان بیشتری میبرد و برای به دست آوردن همان اطلاعات به بستههای بیشتری نیاز دارد، بلکه احتمال ثبت اتصال توسط ماشینهای هدف در لاگها بسیار بیشتر است. یک سامانه تشخیص نفوذ (IDS) مناسب هر دو را ثبت میکند، اما بیشتر ماشینها چنین سیستم هشداری ندارند. بسیاری از سرویسها در یک سیستم یونیکس معمولی، زمانی که Nmap متصل میشود و سپس بدون ارسال داده اتصال را میبندد، یادداشتی به syslog اضافه میکنند و گاهی اوقات یک پیام خطای مبهم نمایش میدهند. برخی سرویسهای ضعیف در هنگام رخ دادن این اتفاق از کار میافتند، اگرچه این امر غیرمعمول است. مدیری که دستهای از تلاشهای اتصال را در لاگهای خود از یک سیستم واحد میبیند باید بداند که مورد پویش connect قرار گرفته است.
-sU (پویشهای UDP)
پویش UDP با گزینه -sU فعال میشود. میتوان آن را با یک نوع پویش TCP مانند پویش SYN (-sS) ترکیب کرد تا هر دو پروتکل در یک اجرا بررسی شوند.
پویش UDP با ارسال یک بسته UDP به هر درگاه هدف کار میکند. برای برخی از درگاههای رایج مانند ۵۳ و ۱۶۱، یک بار داده مخصوص پروتکل ارسال میشود تا نرخ پاسخ افزایش یابد، اما برای بیشتر درگاهها بسته خالی است مگر اینکه گزینههای --data، --data-string یا --data-length مشخص شده باشند. اگر یک خطای ICMP port unreachable (type 3, code 3) بازگردانده شود، درگاه بسته (closed) است. سایر خطاهای ICMP unreachable (type 3, codes 0, 1, 2, 9, 10, or 13) درگاه را به عنوان فیلترشده (filtered) علامتگذاری میکنند. گاهی اوقات، یک سرویس با یک بسته UDP پاسخ میدهد که ثابت میکند باز (open) است. اگر پس از ارسالهای مجدد پاسخی دریافت نشود، درگاه به عنوان باز|فیلترشده (open|filtered) دستهبندی میشود. این بدان معناست که درگاه ممکن است باز باشد، یا شاید فیلترهای بسته مانع ارتباط شدهاند. تشخیص نسخه (-sV) میتواند برای کمک به تمایز درگاههای واقعاً باز از درگاههای فیلترشده استفاده شود.
یک چالش بزرگ در پویش UDP انجام سریع آن است. درگاههای باز و فیلترشده به ندرت پاسخی ارسال میکنند، و باعث میشوند Nmap منتظر اتمام زمان وقفه (timeout) بماند و سپس ارسالهای مجدد را انجام دهد تا در صورتی که کاوش یا پاسخ گم شده باشند جبران شود. درگاههای بسته اغلب حتی مشکل بزرگتری هستند؛ آنها معمولاً یک خطای ICMP port unreachable برمیگردانند. اما بر خلاف بستههای RST ارسالشده توسط درگاههای بسته TCP در پاسخ به یک پویش SYN یا connect، بسیاری از میزبانها به طور پیشفرض پیامهای ICMP port unreachable را محدود به نرخ خاصی (rate limit) میکنند. لینوکس و سولاریس به ویژه در این مورد سختگیر هستند. برای مثال، هسته لینوکس 2.4.20 پیامهای غیرقابل دسترس بودن مقصد را به یک پیام در ثانیه محدود میکند (در net/ipv4/icmp.c).
نرمافزار Nmap این محدودیت نرخ را تشخیص داده و سرعت خود را به متناسب با آن کاهش میدهد تا از غرق کردن شبکه با بستههای بیفایدهای که ماشین هدف دور میاندازد جلوگیری کند. متأسفانه، یک محدودیت به سبک لینوکس یعنی یک بسته در ثانیه، باعث میشود پویش ۶۵٬۵۳۶ درگاه بیش از ۱۸ ساعت طول بکشد. ایدههایی برای افزایش سرعت پویشهای UDP شامل پویش همزمان میزبانهای بیشتر، انجام پویش سریع فقط روی درگاههای محبوب در ابتدا، پویش از پشت فایروال و استفاده از --host-timeout برای رد کردن میزبانهای کند است.
-sY (پویش SCTP INIT)
این تکنیک اغلب به عنوان پویش نیمهباز نامیده میشود، زیرا شما یک ارتباط کامل SCTP را باز نمیکنید. شما یک قطعه INIT ارسال میکنید، گویی در حال باز کردن یک ارتباط واقعی هستید و سپس منتظر پاسخ میمانید. یک قطعه INIT-ACK نشان میدهد که درگاه در حال شنود (باز) است، در حالی که یک قطعه ABORT نشاندهنده عدم شنود است. اگر پس از چندین بار ارسال مجدد پاسخی دریافت نشود، درگاه به عنوان فیلترشده علامتگذاری میشود. همچنین اگر یک خطای غیرقابل دسترس بودن ICMP (type 3, code 0, 1, 2, 3, 9, 10, or 13) دریافت شود، درگاه به عنوان فیلترشده علامتگذاری میشود.
-sN؛ -sF؛ -sX (پویشهای TCP NULL، FIN و Xmas)
هنگام پویش سیستمهای سازگار با این متن RFC، هر بستهای که حاوی بیتهای SYN، RST یا ACK نباشد، در صورت بسته بودن درگاه منجر به یک RST بازگرداندهشده و در صورت باز بودن درگاه بدون هیچ پاسخی خواهد بود. تا زمانی که هیچ یک از این سه بیت شامل نشوند، هر ترکیبی از سه بیت دیگر (FIN، PSH و URG) مجاز است. Nmap با سه نوع پویش از این مزیت استفاده میکند:
پویش تهی (-sN)
پویش FIN (-sF)
پویش کریسمس (-sX)
این سه نوع پویش دقیقاً در رفتار یکسان هستند به جز فلگهای TCP که در بستههای کاوش تنظیم شدهاند. اگر یک بسته RST دریافت شود، درگاه بسته (closed) در نظر گرفته میشود، در حالی که عدم پاسخ به معنای باز|فیلترشده (open|filtered) است. درگاه در صورتی که یک خطای غیرقابل دسترس بودن ICMP (type 3, code 0, 1, 2, 3, 9, 10, or 13) دریافت شود، به عنوان فیلترشده (filtered) علامتگذاری میشود.
مزیت کلیدی این نوع پویشها این است که میتوانند از فایروالهای غیرمبتنی بر وضعیت خاص و مسیریابهای فیلترکننده بسته عبور کنند. مزیت دیگر این است که این نوع پویشها حتی کمی پنهانکارانهتر از پویش SYN هستند. البته روی این موضوع حساب نکنید—بیشتر محصولات مدرن IDS را میتوان برای شناسایی آنها پیکربندی کرد. نکته منفی بزرگ این است که همه سیستمها از RFC 793 مو به مو پیروی نمیکنند. تعدادی از سیستمها بدون توجه به باز یا بسته بودن درگاه، پاسخهای RST به کاوشها ارسال میکنند. این امر باعث میشود تمام درگاهها به عنوان بسته (closed) برچسبگذاری شوند. سیستمعاملهای عمدهای که این کار را انجام میدهند عبارتند از مایکروسافت ویندوز، بسیاری از دستگاههای سیسکو، BSDI و IBM OS/400. با این حال این پویش در برابر بیشتر سیستمهای مبتنی بر یونیکس کار میکند. یکی دیگر از معایب این پویشها این است که نمیتوانند درگاههای باز (open) را از درگاههای فیلترشده (filtered) خاص تمایز دهند، و شما را با پاسخ باز|فیلترشده (open|filtered) تنها میگذارند.
-sA (پویش TCP ACK)
بسته کاوش پویش ACK فقط فلگ ACK را تنظیم کرده است (مگر اینکه از --scanflags استفاده کنید). هنگام پویش سیستمهای فیلترنشده، هر دو درگاه باز و بسته یک بسته RST بازمیگردانند. سپس Nmap آنها را به عنوان فیلترنشده (unfiltered) برچسبگذاری میکند، به این معنی که با بسته ACK قابل دسترسی هستند، اما اینکه آیا آنها باز یا بسته هستند مشخص نشده است. درگاههایی که پاسخ نمیدهند، یا پیامهای خطای ICMP خاصی را برمیگردانند (type 3, code 0, 1, 2, 3, 9, 10, or 13)، به عنوان فیلترشده (filtered) برچسبگذاری میشوند.
-sW (پویش پنجره TCP)
این پویش به یک جزئیات پیادهسازی در اقلیتی از سیستمها در اینترنت متکی است، بنابراین نمیتوانید همیشه به آن اعتماد کنید. سیستمهایی که از آن پشتیبانی نمیکنند معمولاً تمام درگاهها را بسته (closed) بازمیگردانند. البته ممکن است ماشین واقعاً هیچ درگاه بازی نداشته باشد. اگر بیشتر درگاههای پویششده بسته باشند اما چند شماره درگاه رایج (مانند ۲۲، ۲۵، ۵۳) فیلترشده باشند، سیستم به احتمال زیاد مستعد این ویژگی است. گاهی اوقات، سیستمها حتی رفتار کاملاً معکوس را نشان میدهند. اگر پویش شما ۱٬۰۰۰ درگاه باز و سه درگاه بسته یا فیلترشده را نشان دهد، آن سه درگاه ممکن است در واقع درگاههای واقعاً باز باشند.
-sM (پویش TCP Maimon)
--scanflags (فلگهای سفارشی پویش TCP)
آرگومان --scanflags میتواند یک مقدار عددی فلگ مانند ۹ (PSH و FIN) باشد، اما استفاده از نامهای نمادین آسانتر است. کافی است هر ترکیبی از URG، ACK، PSH، RST، SYN و FIN را به هم بچسبانید. برای مثال، --scanflags URGACKPSHRSTSYNFIN همه چیز را تنظیم میکند، هرچند برای پویش چندان مفید نیست. ترتیبی که این موارد در آن مشخص میشوند اهمیتی ندارد.
علاوه بر مشخص کردن فلگهای مورد نظر، میتوانید یک نوع پویش پایه TCP (مانند -sA یا -sF) را نیز مشخص کنید. آن نوع پایه به Nmap میگوید که چگونه پاسخها را تفسیر کند. برای مثال، یک پویش SYN عدم پاسخ را نشاندهنده یک درگاه فیلترشده میداند، در حالی که یک پویش FIN با همین حالت به عنوان باز|فیلترشده رفتار میکند. نرمافزار Nmap به همان روشی که برای نوع پویش پایه عمل میکند رفتار خواهد کرد، با این تفاوت که از فلگهای TCP مشخصشده توسط شما استفاده میکند. اگر نوع پایه را مشخص نکنید، از پویش SYN استفاده میشود.
-sZ (پویش SCTP COOKIE ECHO)
-sI zombie host[:probeport] (پویش غیرفعال / Idle scan)
علاوه بر اینکه به دلیل ماهیت کورکورانه خود فوقالعاده پنهانکارانه است، این نوع پویش امکان نقشهبرداری از روابط اعتماد مبتنی بر IP بین ماشینها را فراهم میکند. فهرست درگاهها، درگاههای باز را از دیدگاه میزبان زامبی نشان میدهد. بنابراین میتوانید با استفاده از زامبیهای مختلفی که فکر میکنید ممکن است مورد اعتماد باشند (از طریق قوانین فیلتر بسته/مسیریاب) هدف را پویش کنید.
اگر مایلید یک درگاه خاص را روی زامبی برای تغییرات IP ID کاوش کنید، میتوانید یک دونقطه و به دنبال آن شماره درگاه را به میزبان زامبی اضافه کنید. در غیر این صورت Nmap از درگاهی که به طور پیشفرض برای پینگهای TCP استفاده میکند (درگاه ۸۰) استفاده خواهد کرد.
-sO (پویش پروتکل IP)
علاوه بر اینکه این پویش به خودی خود مفید است، قدرت نرمافزارهای متنباز را نشان میدهد. اگرچه ایده اساسی بسیار ساده است، اما من به اضافه کردن آن فکر نکرده بودم و هیچ درخواستی برای چنین قابلیتی دریافت نکرده بودم. سپس در تابستان سال ۲۰۰۰، گرهارد ریگر (Gerhard Rieger) این ایده را مطرح کرد، یک وصله عالی برای پیادهسازی آن نوشت و آن را به لیست پستی announce (که آن زمان nmap-hackers نامیده میشد) ارسال کرد. من آن وصله را در درخت کدهای Nmap ادغام کردم و روز بعد نسخه جدیدی را منتشر نمودم. تعداد کمی از نرمافزارهای تجاری کاربرانی دارند که به اندازه کافی مشتاق باشند تا پیشرفتهای خود را طراحی کرده و مشارکت دهند!
پویش پروتکل به روشی مشابه با پویش UDP کار میکند. به جای تکرار روی فیلد شماره درگاه یک بسته UDP، هدرهای بسته IP را ارسال میکند و روی فیلد هشتبیتی پروتکل IP تکرار میشود. هدرها معمولاً خالی هستند، بدون داده و حتی فاقد هدر مناسب برای پروتکل ادعا شده. استثناها TCP، UDP، ICMP، SCTP و IGMP هستند. یک هدر پروتکل مناسب برای آنها گنجانده شده است زیرا برخی از سیستمها در غیر این صورت آنها را ارسال نمیکنند و همچنین Nmap قبلاً توابعی برای ایجاد آنها دارد. به جای مراقبت از پیامهای ICMP port unreachable، پویش پروتکل مراقب پیامهای ICMP protocol unreachable است. اگر Nmap هر پاسخی در هر پروتکلی از میزبان هدف دریافت کند، آن پروتکل را به عنوان باز (open) علامتگذاری میکند. خطای ICMP protocol unreachable (type 3, code 2) باعث میشود پروتکل به عنوان بسته (closed) علامتگذاری شود در حالی که port unreachable (type 3, code 3) پروتکل را به عنوان باز (open) علامتگذاری میکند. سایر خطاهای ICMP unreachable (type 3, code 0, 1, 9, 10, or 13) باعث میشوند پروتکل به عنوان فیلترشده (filtered) علامتگذاری شود (اگرچه همزمان ثابت میکنند که ICMP باز است). اگر پس از ارسالهای مجدد پاسخی دریافت نشود، پروتکل به عنوان باز|فیلترشده (open|filtered) علامتگذاری میشود.
-b FTP relay host (پویش جهش FTP)
این آسیبپذیری در سال ۱۹۹۷ که Nmap منتشر شد گسترده بود، اما تا حد زیادی برطرف شده است. با این حال سرورهای آسیبپذیر همچنان وجود دارند، بنابراین زمانی که راههای دیگر شکست میخورند ارزش امتحان کردن را دارد. اگر هدف شما دور زدن فایروال است، شبکه هدف را برای درگاه ۲۱ (یا حتی برای هر سرویس FTP در صورتی که تمام درگاهها را با تشخیص نسخه پویش کنید) پویش کرده و از اسکریپت NSE با نام ftp-bounce استفاده کنید. نرمافزار Nmap به شما خواهد گفت که آیا میزبان آسیبپذیر است یا خیر. اگر فقط سعی دارید ردپای خود را بپوشانید، نیازی نیست (و در واقع نباید) خود را به میزبانهای موجود در شبکه هدف محدود کنید. قبل از اینکه به پویش آدرسهای تصادفی اینترنتی برای یافتن سرورهای آسیبپذیر FTP بپردازید، توجه داشته باشید که ممکن است مدیران سیستم از سوءاستفاده شما از سرورهایشان به این روش استقبال نکنند.
مشخصکردن درگاهها و ترتیب پویش (PORT SPECIFICATION AND SCAN ORDER)
علاوه بر تمام روشهای پویش که قبلاً مورد بحث قرار گرفت، Nmap گزینههایی را برای مشخص کردن اینکه کدام درگاهها پویش شوند و اینکه آیا ترتیب پویش تصادفی باشد یا ترتیبی ارائه میدهد. به طور پیشفرض، Nmap رایجترین ۱٬۰۰۰ درگاه را برای هر پروتکل پویش میکند.
-p port ranges (فقط پویش درگاههای مشخصشده)
هنگام پویش ترکیبی از پروتکلها (مانند TCP و UDP)، میتوانید با قرار دادن پیشوند قبل از شماره درگاهها، پروتکل خاصی را مشخص کنید: T: برای TCP، U: برای UDP، S: برای SCTP، یا P: برای پروتکل IP. این توصیفکننده تا زمانی که توصیفکننده دیگری را مشخص نکنید معتبر میماند. برای مثال، آرگومان -p U:53,111,137,T:21-25,80,139,8080 درگاههای UDP شماره ۵۳، ۱۱۱ و ۱۳۷ و همچنین درگاههای TCP فهرستشده را پویش میکند. توجه داشته باشید که برای پویش هر دو پروتکل UDP و TCP، باید -sU و حداقل یک نوع پویش TCP (مانند -sS، -sF یا -sT) را مشخص کنید. اگر هیچ توصیفکننده پروتکلی داده نشود، شماره درگاهها به تمام فهرستهای پروتکل اضافه میشوند. درگاهها همچنین میتوانند بر اساس نامی که در فایل nmap-services به آنها ارجاع داده شده مشخص شوند. حتی میتوانید از نویسههای عام (wildcards) * و ? همراه با نامها استفاده کنید. برای مثال، برای پویش FTP و تمام درگاههایی که نام آنها با “http” شروع میشود، از -p ftp,http* استفاده کنید. در مورد بسطهای پوسته (shell expansions) دقت داشته باشید و در صورت عدم اطمینان، آرگومان -p را در کوتیشن قرار دهید.
بازههای درگاهها را میتوان در کروشه قرار داد تا نشاندهنده درگاههایی در آن بازه باشد که در nmap-services ظاهر میشوند. برای مثال، دستور زیر تمام درگاههای موجود در nmap-services را که مساوی یا کمتر از ۱۰۲۴ هستند پویش میکند: -p [-1024]. در مورد بسطهای پوسته دقت کنید و در صورت عدم اطمینان آرگومان -p را در کوتیشن قرار دهید.
--exclude-ports port ranges (مستثنی کردن درگاههای مشخصشده از پویش)
هنگامی که درخواست میشود درگاهها مستثنی شوند، آنها از تمام انواع پویش مستثنی میشوند (یعنی تحت هیچ شرایطی پویش نخواهند شد). این موضوع شامل مرحله کشف نیز میشود.
-F (پویش سریع (درگاههای محدود))
نرمافزار Nmap برای دانستن اینکه کدام درگاهها رایجترین هستند، به فایل nmap-services همراه با اطلاعات فراوانی نیاز دارد. اگر اطلاعات فراوانی درگاه در دسترس نباشد، شاید به دلیل استفاده از یک فایل nmap-services سفارشی، Nmap تمام درگاههای نامگذاریشده به علاوه درگاههای ۱ تا ۱۰۲۴ را پویش میکند. در آن حالت، -F به معنای پویش تنها درگاههایی است که در فایل سرویسها نام برده شدهاند.
-r (عدم تصادفیسازی درگاهها)
--port-ratio ratio<عدد اعشاری بین ۰ و ۱>
--top-ports n
تشخیص سرویس و نسخه (SERVICE AND VERSION DETECTION)
اگر Nmap را به سمت یک ماشین راه دور نشانه بروید، ممکن است به شما بگوید که درگاههای 25/tcp، 80/tcp و 53/udp باز هستند. Nmap با استفاده از پایگاهداده nmap-services خود شامل حدود ۲٬۲۰۰ سرویس شناختهشده، گزارش میدهد که آن درگاهها احتمالاً به ترتیب با یک سرور ایمیل (SMTP)، وبسرور (HTTP) و سرور نام (DNS) مطابقت دارند. این تطبیق معمولاً دقیق است—اکثریت قریب به اتفاق دیمنهایی که روی درگاه TCP ۲۵ گوش میدهند، در واقع سرورهای ایمیل هستند. با این حال، نباید امنیت خود را روی این موضوع شرطبندی کنید! افراد میتوانند و سرویسها را روی درگاههای عجیب و غریب اجرا میکنند.
حتی اگر Nmap درست بگوید، و سرور فرضی بالا در حال اجرای سرورهای SMTP، HTTP و DNS باشد، این اطلاعات چندان زیادی نیست. هنگام انجام ارزیابیهای آسیبپذیری (یا حتی موجودیبرداری ساده شبکه) شرکتها یا مشتریان خود، شما واقعاً میخواهید بدانید کدام سرورهای ایمیل و DNS و چه نسخههایی از آنها در حال اجرا هستند. داشتن یک شماره نسخه دقیق به طور چشمگیری در تعیین اینکه یک سرور در برابر چه آسیبپذیریهایی حساس است کمک میکند. تشخیص نسخه به شما در به دست آوردن این اطلاعات کمک مینماید.
پس از اینکه درگاههای TCP و/یا UDP با استفاده از یکی از روشهای دیگر پویش کشف شدند، تشخیص نسخه آن درگاهها را بازجویی میکند تا اطلاعات بیشتری در مورد آنچه در واقع اجرا میشود به دست آورد. پایگاهداده nmap-service-probes حاوی کاوشگرهایی برای پرسوجو از سرویسهای مختلف و عبارات تطبیق برای شناسایی و تجزیه پاسخها است. نرمافزار Nmap سعی میکند پروتکل سرویس (مانند FTP، SSH، Telnet، HTTP)، نام برنامه (مانند ISC BIND، Apache httpd، Solaris telnetd)، شماره نسخه، نام میزبان، نوع دستگاه (مانند چاپگر، مسیریاب) و خانواده سیستمعامل (مانند ویندوز، لینوکس) را تعیین کند. در صورت امکان، Nmap همچنین نمایهسازی پلتفرم مشترک (CPE) از این اطلاعات را به دست میآورد. گاهی اوقات جزئیات متفرقهای مانند اینکه آیا یک سرور X برای اتصالات باز است، نسخه پروتکل SSH یا نام کاربری KaZaA در دسترس هستند. البته بیشتر سرویسها همه این اطلاعات را ارائه نمیدهند. اگر Nmap با پشتیبانی از OpenSSL کامپایل شده باشد، به سرورهای SSL متصل میشود تا سرویس گوشدهنده در پشت آن لایه رمزنگاری را استنتاج کند. برخی از درگاههای UDP پس از اینکه پویش درگاه UDP نتواند تعیین کند که آیا درگاه باز است یا فیلترشده، در وضعیت باز|فیلترشده (open|filtered) باقی میمانند. تشخیص نسخه سعی میکند پاسخی از این درگاهها دریافت کند (دقیقاً همانطور که با درگاههای باز انجام میدهد) و در صورت موفقیت، وضعیت را به باز تغییر میدهد. با درگاههای TCP در وضعیت باز|فیلترشده نیز به همین روش رفتار میشود. توجه داشته باشید که گزینه -A در Nmap از جمله موارد دیگر، تشخیص نسخه را فعال میکند. مقالهای که عملکرد، استفاده و سفارشیسازی تشخیص نسخه را مستند میکند در نشانی https://nmap.org/book/vscan.html در دسترس است.
هنگامی که سرویسهای RPC کشف میشوند، خردکننده RPC در Nmap (RPC grinder) به طور خودکار برای تعیین برنامه RPC و شمارههای نسخه استفاده میشود. این قابلیت تمام درگاههای TCP/UDP شناساییشده به عنوان RPC را میگیرد و دستورات SunRPC program NULL را به آنها ارسال میکند تا مشخص کند آیا آنها درگاههای RPC هستند یا خیر، و در صورت مثبت بودن، چه برنامه و شماره نسخهای را ارائه میدهند. بنابراین شما میتوانید به طور موثر همان اطلاعات rpcinfo -p را به دست آورید حتی اگر نگاشتکننده درگاه هدف (portmapper) پشت فایروال باشد (یا توسط بستهبندهای TCP محافظت شود). طعمهها (Decoys) در حال حاضر با پویش RPC کار نمیکنند.
هنگامی که Nmap پاسخهایی از یک سرویس دریافت میکند اما نمیتواند آنها را با پایگاهداده خود تطبیق دهد، یک اثر انگشت (fingerprint) ویژه و یک URL برای شما چاپ میکند تا در صورتی که مطمئن هستید چه چیزی روی درگاه در حال اجرا است، آن را ارسال کنید. لطفاً دو دقیقه وقت بگذارید و این ارسال را انجام دهید تا یافته شما به نفع همه باشد. به لطف این مشارکتها، Nmap حدود ۶٬۵۰۰ الگوی تطبیق برای بیش از ۶۵۰ پروتکل مانند SMTP، FTP، HTTP و غیره دارد.
تشخیص نسخه با گزینههای زیر فعال و کنترل میشود:
-sV (تشخیص نسخه)
-sR یک نام مستعار برای -sV است. قبل از مارس ۲۰۱۱، برای فعال کردن خردکننده RPC به طور جداگانه از تشخیص نسخه استفاده میشد، اما اکنون این گزینهها همیشه ترکیب شدهاند.
--allports (عدم استثنای هیچ درگاهی از تشخیص نسخه)
--version-intensity intensity (تنظیم شدت پویش نسخه)
--version-light (فعال کردن حالت سبک)
--version-all (آزمودن تکتک کاوشگرها)
--version-trace (ردیابی فعالیت پویش نسخه)
تشخیص سیستمعامل (OS DETECTION)
یکی از شناختهشدهترین ویژگیهای Nmap، تشخیص سیستمعامل از راه دور با استفاده از انگشتنگاری پشته TCP/IP است. نرمافزار Nmap یک سری بستههای TCP و UDP را به میزبان راه دور ارسال میکند و عملاً تکتک بیتها را در پاسخها بررسی مینماید. پس از انجام دهها آزمایش مانند نمونهبرداری TCP ISN، پشتیبانی و ترتیب گزینههای TCP، نمونهبرداری IP ID و بررسی اندازه پنجره اولیه، Nmap نتایج را با پایگاهداده nmap-os-db خود شامل بیش از ۲٬۶۰۰ اثر انگشت سیستمعامل شناختهشده مقایسه میکند و در صورت وجود تطبیق، جزئیات سیستمعامل را چاپ مینماید. هر اثر انگشت شامل یک توصیف متنی آزاد از سیستمعامل و یک طبقهبندی است که نام سازنده (مانند Sun)، سیستمعامل پایه (مانند Solaris)، نسل سیستمعامل (مانند ۱۰) و نوع دستگاه (کاربرد عمومی، مسیریاب، سوییچ، کنسول بازی و غیره) را ارائه میدهد. بیشتر اثر انگشتها همچنین دارای یک نمایش نامگذاری مشترک پلتفرم (CPE) هستند، مانند cpe:/o:linux:linux_kernel:2.6.
اگر Nmap قادر به حدس زدن سیستمعامل یک ماشین نباشد و شرایط مناسب باشد (مانند یافتن حداقل یک درگاه باز و یک درگاه بسته)، Nmap یک URL ارائه میدهد که میتوانید در صورتی که سیستمعامل در حال اجرا روی ماشین را (به طور قطعی) میدانید، برای ارسال اثر انگشت از آن استفاده کنید. با انجام این کار، شما به مجموعه سیستمعاملهای شناختهشده برای Nmap کمک میکنید و در نتیجه دقت آن برای همه بیشتر خواهد شد.
تشخیص سیستمعامل برخی آزمایشهای دیگر را فعال میکند که از اطلاعات جمعآوریشده در طول این فرایند استفاده میکنند. یکی از این آزمایشها، طبقهبندی پیشبینیپذیری توالی TCP است. این آزمایش تقریباً اندازهگیری میکند که برقراری یک اتصال جعلی TCP علیه میزبان راه دور چقدر سخت است. این قابلیت برای سوءاستفاده از روابط اعتماد مبتنی بر IP مبدا (مانند rlogin، فیلترهای فایروال و غیره) یا برای پنهان کردن منبع حمله مفید است. این نوع جعل هویت امروزه به ندرت انجام میشود، اما بسیاری از ماشینها هنوز در برابر آن آسیبپذیر هستند. عدد دشواری واقعی بر اساس نمونهبرداری آماری است و ممکن است نوسان داشته باشد. معمولاً بهتر است از طبقهبندی انگلیسی مانند “worthy challenge” یا “trivial joke” استفاده شود. این گزارش فقط در خروجی معمولی در حالت پرگویی (-v) ارائه میشود. هنگامی که حالت پرگویی همراه با -O فعال باشد، تولید توالی IP ID نیز گزارش میشود. بیشتر ماشینها در کلاس “incremental” قرار دارند، به این معنی که فیلد ID را در هدر IP برای هر بستهای که ارسال میکنند افزایش میدهند. این امر آنها را در برابر چندین حمله پیشرفته جمعآوری اطلاعات و جعل هویت آسیبپذیر میکند.
بخش دیگری از اطلاعات اضافی که توسط تشخیص سیستمعامل فعال میشود، حدس زدن زمان کارکرد (uptime) هدف است. این بخش از گزینه برچسب زمان TCP (RFC 1323[9]) برای حدس زدن زمان آخرین راهاندازی مجدد ماشین استفاده میکند. این حدس میتواند به دلیل صفر نبودن اولیه شمارنده برچسب زمان یا سرریز شدن و دور زدن شمارنده نادرست باشد، بنابراین فقط در حالت پرگویی چاپ میشود.
مقالهای که نحوه کارکرد، استفاده و سفارشیسازی تشخیص سیستمعامل را مستند میکند در نشانی https://nmap.org/book/osdetect.html در دسترس است.
تشخیص سیستمعامل با گزینههای زیر فعال و کنترل میشود:
-O (فعالسازی تشخیص سیستمعامل)
--osscan-limit (محدود کردن تشخیص سیستمعامل به اهداف امیدوارکننده)
--osscan-guess؛ --fuzzy (حدس زدن نتایج تشخیص سیستمعامل)
--max-os-tries (تنظیم حداکثر تعداد تلاشهای تشخیص سیستمعامل برای یک هدف)
موتور اسکریپتنویسی انمپ (NSE) (NMAP SCRIPTING ENGINE)
موتور اسکریپتنویسی Nmap (یا NSE) یکی از قدرتمندترین و انعطافپذیرترین ویژگیهای Nmap است. این موتور به کاربران اجازه میدهد تا اسکریپتهای سادهای را (با استفاده از زبان برنامهنویسی Lua[10]) بنویسند (و به اشتراک بگذارند) تا طیف گستردهای از وظایف شبکه را خودکارسازی کنند. این اسکریپتها به صورت موازی و با سرعت و کارایی بالایی که از Nmap انتظار دارید اجرا میشوند. کاربران میتوانند به مجموعه در حال رشد و متنوعی از اسکریپتهای توزیعشده با Nmap اعتماد کنند، یا اسکریپتهای سفارشی خود را برای برآورده کردن نیازهای خاص بنویسند.
وظایفی که ما هنگام ایجاد این سیستم در نظر داشتیم شامل کشف شبکه، تشخیص پیشرفتهتر نسخه و تشخیص آسیبپذیریها است. حتی میتوان از NSE برای سوءاستفاده از آسیبپذیریها (exploitation) استفاده کرد.
برای بازتاب این کاربردهای مختلف و سادهسازی انتخاب اسکریپتهای اجرایی، هر اسکریپت شامل فیلدی است که آن را با یک یا چند دستهبندی مرتبط میسازد. دستهبندیهای تعریفشده فعلی عبارتند از: auth، broadcast، default، discovery، dos، exploit، external، fuzzer، intrusive، malware، safe، version و vuln. همه این موارد در نشانی https://nmap.org/book/nse-usage.html#nse-categories شرح داده شدهاند.
اسکریپتها در محیط ایزوله (sandbox) اجرا نمیشوند و بنابراین میتوانند به طور تصادفی یا مخرب به سیستم شما آسیب برسانند یا به حریم خصوصی شما نفوذ کنند. هرگز اسکریپتهای اشخاص ثالث را اجرا نکنید مگر اینکه به نویسندگان آنها اعتماد داشته باشید یا خودتان اسکریپتها را با دقت بررسی کرده باشید.
موتور اسکریپتنویسی Nmap با جزئیات کامل در نشانی https://nmap.org/book/nse.html توصیف شده و توسط گزینههای زیر کنترل میشود:
-sC
توجه داشته باشید که این گزینه خلاصه هر زمان که حداقل یک گزینه --script نیز مشخص شده باشد، نادیده گرفته میشود.
--script filename|category|directory/|expression[,...]
دو ویژگی ویژه فقط برای کاربران پیشرفته وجود دارد: اولی قرار دادن پیشوند + قبل از نام اسکریپتها و عبارات است تا اجرای آنها را حتی در صورتی که به طور معمول اجرا نمیشدند (مثلاً سرویس مربوطه در درگاه هدف شناسایی نشده باشد) اجباری کند. ویژگی دیگر این است که میتوان از آرگومان all برای مشخص کردن تکتک اسکریپتهای موجود در پایگاهداده Nmap استفاده کرد. در استفاده از این گزینه احتیاط کنید زیرا NSE شامل اسکریپتهای خطرناکی مانند اکسپلویتها، شکنندههای احراز هویت با حمله brute force و حملات منع سرویس (DoS) است.
نام فایلها و دایرکتوریها ممکن است نسبی یا مطلق باشند. نامهای مطلق مستقیماً استفاده میشوند. مسیرهای نسبی در پوشه scripts در هر یک از مکانهای زیر جستجو میشوند تا پیدا شوند:
هنگامی که یک نام دایرکتوری که به / ختم میشود داده شود، Nmap هر فایلی را در آن دایرکتوری که نام آن با .nse ختم میشود بارگذاری میکند. تمام فایلهای دیگر نادیده گرفته میشوند و دایرکتوریها به صورت بازگشتی جستجو نمیشوند. هنگامی که یک نام فایل داده میشود، نیازی نیست که پسوند .nse داشته باشد؛ در صورت لزوم به طور خودکار اضافه خواهد شد. اسکریپتهای Nmap به طور پیشفرض در زیرپوشه scripts از دایرکتوری دادههای Nmap ذخیره میشوند (ببینید https://nmap.org/book/data-files.html).
برای افزایش کارایی، اسکریپتها در پایگاهدادهای ذخیره شده در scripts/script.db نمایهگذاری میشوند که دستهبندی یا دستهبندیهایی را که هر اسکریپت به آنها تعلق دارد فهرست میکند. هنگام ارجاع به اسکریپتها از script.db بر اساس نام، میتوانید از نویسه عام به سبک پوسته ‘*’ استفاده کنید.
nmap --script "http-*"
انتخاب پیچیدهتر اسکریپتها میتواند با استفاده از عملگرهای and، or و not برای ساختن عبارات بولین انجام شود. این عملگرها همان اولویت[11] را مانند زبان Lua دارند: not بالاترین اولویت را دارد، پس از آن and و سپس or. میتوانید با استفاده از پرانتزها اولویت را تغییر دهید. از آنجا که عبارات حاوی نویسههای فاصله هستند، لازم است آنها را در کوتیشن قرار دهید.
nmap --script "not intrusive"
nmap --script "default or safe"
nmap --script "default and safe"
nmap --script "(default or safe or intrusive) and not http-*"
--script-args n1=v1,n2={n3=v3},n4={v4,v5}
--script-args-file filename
--script-help filename|category|directory|expression|all[,...]
--script-trace
--script-updatedb
زمانبندی و کارایی (TIMING AND PERFORMANCE)
یکی از بالاترین اولویتهای من در توسعه Nmap همیشه کارایی بوده است. یک پویش پیشفرض (nmap hostname) از یک میزبان در شبکه محلی من یکپنجم ثانیه طول میکشد. این زمان به سختی برای یک چشم به هم زدن کافی است، اما وقتی صدها یا هزاران میزبان را پویش میکنید بر روی هم انباشته میشود. علاوه بر این، گزینههای خاص پویش مانند پویش UDP و تشخیص نسخه میتوانند زمان پویش را به طور قابل توجهی افزایش دهند. برخی پیکربندیهای فایروال، به ویژه محدودسازی نرخ پاسخ (rate limiting) نیز میتوانند همین اثر را داشته باشند. در حالی که Nmap از موازیسازی و الگوریتمهای پیشرفته متعددی برای سرعت بخشیدن به این پویشها استفاده میکند، کاربر کنترل نهایی را بر نحوه اجرای Nmap دارد. کاربران خبره با دقت دستورات Nmap را تنظیم میکنند تا فقط اطلاعات مورد نظر خود را به دست آورند و در عین حال محدودیتهای زمانی خود را رعایت کنند.
تکنیکهای بهبود زمان پویش شامل حذف آزمایشهای غیرضروری و ارتقا به آخرین نسخه Nmap است (بهبودهای کارایی مرتباً انجام میشوند). بهینهسازی پارامترهای زمانبندی نیز میتواند تفاوت چشمگیری ایجاد کند. این گزینهها در زیر فهرست شدهاند.
برخی از گزینهها یک پارامتر time (زمان) را میپذیرند. این مقدار به طور پیشفرض بر حسب ثانیه مشخص میشود، اگرچه میتوانید ‘ms’ (میلیثانیه)، ‘s’ (ثانیه)، ‘m’ (دقیقه) یا ‘h’ (ساعت) را به مقدار اضافه کنید. بنابراین در گزینه --host-timeout آرگومانهای 900000ms، 900، 900s و 15m همگی کار یکسانی را انجام میدهند.
--min-hostgroup numhosts؛ --max-hostgroup numhosts (تنظیم اندازه گروههای پویش موازی)
به طور پیشفرض، Nmap رویکردی مصالحهآمیز را برای این تعارض در پیش میگیرد. با اندازه گروهی به کوچکی ۵ شروع میکند تا نتایج اولیه به سرعت حاصل شوند و سپس اندازه گروه را تا ۱۰۲۴ افزایش میدهد. اعداد دقیق پیشفرض به گزینههای دادهشده بستگی دارند. به دلایل کارایی، Nmap از اندازههای گروه بزرگتر برای پویشهای UDP یا پویشهای کمدرگاه TCP استفاده میکند.
هنگامی که حداکثر اندازه گروه با --max-hostgroup مشخص شود، Nmap هرگز از آن اندازه فراتر نخواهد رفت. حداقل اندازه را با --min-hostgroup مشخص کنید و Nmap سعی خواهد کرد اندازه گروهها را بالاتر از آن سطح نگه دارد. اگر میزبانهای هدف کافی روی یک رابط شبکه مشخص برای برآورده کردن حداقل تعیینشده باقی نمانده باشند، ممکن است Nmap مجبور شود از گروههای کوچکتری استفاده کند. هر دو را میتوان برای نگه داشتن اندازه گروه در یک محدوده خاص تنظیم کرد، اگرچه این کار به ندرت مورد نیاز است.
این گزینهها در مرحله کشف میزبان یک پویش تأثیری ندارند. این شامل پویشهای پینگ ساده (-sn) نیز میشود. کشف میزبان همیشه در گروههای بزرگی از میزبانها برای بهبود سرعت و دقت کار میکند.
کاربرد اصلی این گزینهها مشخص کردن حداقل اندازه گروه بزرگ است تا کل پویش سریعتر اجرا شود. یک انتخاب رایج ۲۵۶ برای پویش یک شبکه در قطعات به اندازه /24 است. برای پویشی با درگاههای زیاد، فراتر رفتن از این عدد بعید است کمک زیادی کند. برای پویشهای شامل تعداد کمی شماره درگاه، اندازههای گروه میزبان ۲۰۴۸ یا بیشتر ممکن است مفید باشند.
--min-parallelism numprobes؛ --max-parallelism numprobes (تنظیم موازیسازی کاوشگرها)
رایجترین کاربرد، تنظیم --min-parallelism روی عددی بالاتر از ۱ برای افزایش سرعت پویش میزبانها یا شبکههای دارای کارایی ضعیف است. این گزینه خطرناکی برای دستکاری است، زیرا تنظیم بسیار بالای آن ممکن است بر دقت تأثیر بگذارد. تنظیم این گزینه همچنین توانایی Nmap را برای کنترل پویای موازیسازی بر اساس شرایط شبکه کاهش میدهد. مقدار ۱۰ ممکن است معقول باشد، اگرچه من این مقدار را تنها به عنوان آخرین راهکار تنظیم میکنم.
گزینه --max-parallelism گاهی اوقات روی ۱ تنظیم میشود تا از ارسال بیش از یک کاوشگر در هر زمان توسط Nmap به میزبانها جلوگیری کند. گزینه --scan-delay که بعداً مورد بحث قرار میگیرد، روش دیگری برای انجام این کار است.
--min-rtt-timeout time، --max-rtt-timeout time، --initial-rtt-timeout time (تنظیم زمانهای وقفه کاوشگر)
اگر تأخیر شبکه قابل توجه و متغیر باشد، این زمان وقفه میتواند به چند ثانیه افزایش یابد. همچنین در سطح محافظهکارانه (بالا) شروع میشود و ممکن است هنگام پویش میزبانهای بدون پاسخ توسط Nmap مدتی به همان شکل باقی بماند.
مشخص کردن مقادیر کمتر برای --max-rtt-timeout و --initial-rtt-timeout نسبت به پیشفرضها میتواند زمان پویش را به طور قابل توجهی کاهش دهد. این امر به ویژه برای پویشهای بدون پینگ (-Pn) و پویشهایی که در شبکههای به شدت فیلترشده انجام میشوند صادق است. با این حال خیلی تهاجمی عمل نکنید؛ اگر مقدار بسیار کمی را مشخص کنید، در حالی که پاسخ در حال انتقال است بسیاری از کاوشها دچار وقفه شده و مجدداً ارسال میشوند و در نتیجه زمان پویش طولانیتر خواهد شد.
اگر همه میزبانها در یک شبکه محلی باشند، ۱۰۰ میلیثانیه (--max-rtt-timeout 100ms) یک مقدار تهاجمی و معقول است. اگر مسیریابی در کار است، ابتدا یک میزبان در شبکه را با ابزار پینگ ICMP یا با یک ابزار سفارشیساز بسته مانند Nping که شانس بیشتری برای عبور از فایروال دارد پینگ کنید. به حداکثر زمان رفت و برگشت از میان حدود ۱۰ بسته نگاه کنید. ممکن است بخواهید آن مقدار را برای --initial-rtt-timeout دو برابر و برای --max-rtt-timeout سه یا چهار برابر کنید. من معمولاً حداکثر RTT را زیر ۱۰۰ میلیثانیه تنظیم نمیکنم، مهم نیست زمانهای پینگ چقدر باشد. همچنین از ۱۰۰۰ میلیثانیه فراتر نمیروم.
گزینه --min-rtt-timeout گزینهای است که به ندرت استفاده میشود و زمانی مفید است که شبکه آنقدر غیرقابل اعتماد باشد که حتی پیشفرض Nmap نیز بیش از حد تهاجمی باشد. از آنجا که Nmap فقط زمانی زمان وقفه را به حداقل کاهش میدهد که شبکه قابل اعتماد به نظر برسد، این نیاز غیرعادی است و باید به عنوان یک باگ به لیست پستی nmap-dev گزارش شود.
--max-retries numtries (مشخص کردن حداکثر تعداد تلاشهای مجدد کاوش درگاه)
حالت پیشفرض (بدون قالب -T) اجازه ۱۰ بار ارسال مجدد را میدهد. اگر یک شبکه قابل اعتماد به نظر برسد و میزبانهای هدف محدودیت نرخ نداشته باشند، Nmap معمولاً فقط یک بار ارسال مجدد انجام میدهد. بنابراین بیشتر پویشهای هدف حتی با کاهش --max-retries به مقدار کمی مانند ۳ تحت تأثیر قرار نمیگیرند. چنین مقادیری میتوانند پویشهای میزبانهای کند (دارای محدودیت نرخ) را به میزان قابل توجهی سرعت بخشند. معمولاً وقتی Nmap زودتر از درگاهها صرفنظر میکند برخی اطلاعات را از دست میدهید، هرچند ممکن است این بهتر از منقضی شدن --host-timeout و از دست دادن تمام اطلاعات مربوط به هدف باشد.
--host-timeout time (صرفنظر از میزبانهای هدف کند)
مقدار ویژه 0 میتواند به معنای “بدون زمان وقفه” استفاده شود که برای لغو قالب زمانبندی T5 (که زمان وقفه میزبان را روی ۱۵ دقیقه تنظیم میکند) کاربرد دارد.
--script-timeout time (تنظیم زمان وقفه اسکریپت)
مقدار ویژه 0 میتواند به معنای “بدون زمان وقفه” استفاده شود تا قالب زمانبندی T5 را که زمان وقفه اسکریپت را روی ۱۰ دقیقه تنظیم میکند، لغو نماید.
--scan-delay time؛ --max-scan-delay time (تنظیم تاخیر بین کاوشها)
هنگامی که Nmap تاخیر پویش را برای مقابله با محدودیت نرخ افزایش میدهد، سرعت پویش به طور چشمگیری کاهش مییابد. گزینه --max-scan-delay بیشترین تاخیری را که Nmap اجازه میدهد مشخص میکند. یک مقدار کم برای --max-scan-delay میتواند سرعت Nmap را افزایش دهد، اما پرخطر است. تنظیم بسیار پایین این مقدار میتواند منجر به ارسال مجدد بیهوده بستهها و از دست رفتن احتمالی درگاهها در زمان اعمال محدودیت نرخ دقیق توسط هدف شود.
کاربرد دیگر --scan-delay دور زدن سیستمهای تشخیص و جلوگیری از نفوذ مبتنی بر آستانه (IDS/IPS) است.
--min-rate number؛ --max-rate number (کنترل مستقیم نرخ پویش)
هنگامی که گزینه --min-rate داده میشود، Nmap تمام تلاش خود را میکند تا بستهها را به همان سرعت یا سریعتر از نرخ دادهشده ارسال کند. آرگومان یک عدد حقیقی مثبت است که نرخ بسته را بر حسب بسته در ثانیه نشان میدهد. برای مثال، مشخص کردن --min-rate 300 به این معنی است که Nmap سعی خواهد کرد نرخ ارسال را در ۳۰۰ بسته در ثانیه یا بالاتر نگه دارد. مشخص کردن حداقل نرخ مانع از سریعتر رفتن Nmap در صورت مساعد بودن شرایط نمیشود.
به همین ترتیب، --max-rate نرخ ارسال یک پویش را به حداکثر معینی محدود میکند. برای مثال، از --max-rate 100 برای محدود کردن ارسال به ۱۰۰ بسته در ثانیه در یک شبکه سریع استفاده کنید. از --max-rate 0.1 برای یک پویش آهسته شامل یک بسته در هر ده ثانیه استفاده کنید. از --min-rate و --max-rate با هم برای نگه داشتن نرخ در یک محدوده خاص استفاده نمایید.
این دو گزینه سراسری هستند و بر کل پویش تأثیر میگذارند، نه میزبانهای منفرد. آنها فقط بر پویشهای درگاه و پویشهای کشف میزبان تأثیر میگذارند. سایر ویژگیها مانند تشخیص سیستمعامل زمانبندی مخصوص به خود را پیادهسازی میکنند.
دو حالت وجود دارد که در آنها نرخ پویش واقعی ممکن است به کمتر از حداقل درخواستی کاهش یابد: حالت اول زمانی است که حداقل سرعت از سریعترین نرخی که Nmap میتواند ارسال کند (که به سختافزار وابسته است) سریعتر باشد؛ در این حالت Nmap صرفاً بستهها را با حداکثر سرعت ممکن ارسال میکند، اما آگاه باشید که چنین نرخهای بالایی احتمالاً باعث افت دقت میشوند. حالت دوم زمانی است که Nmap چیزی برای ارسال ندارد، به عنوان مثال در پایان یک پویش که آخرین کاوشها ارسال شدهاند و Nmap منتظر اتمام زمان وقفه آنها یا دریافت پاسخ است. افت نرخ پویش در پایان یک پویش یا بین گروههای میزبان طبیعی است. نرخ ارسال ممکن است موقتاً از حداکثر فراتر رود تا تاخیرهای غیرقابل پیشبینی را جبران کند، اما به طور متوسط نرخ در حد حداکثر یا کمتر از آن باقی خواهد ماند.
مشخص کردن حداقل نرخ باید با احتیاط انجام شود. پویش سریعتر از آنچه یک شبکه میتواند پشتیبانی کند ممکن است منجر به افت دقت شود. در برخی موارد، استفاده از یک نرخ سریعتر میتواند باعث شود پویش زمان بیشتری نسبت به یک نرخ کندتر ببرد. این به این دلیل است که الگوریتمهای ارسال مجدد تطبیقی در Nmap شلوغی شبکه ناشی از نرخ پویش بیش از حد را تشخیص داده و تعداد ارسالهای مجدد را به منظور بهبود دقت افزایش میدهند. بنابراین اگرچه بستهها با نرخ بالاتری ارسال میشوند، اما در کل بستههای بیشتری ارسال میگردد. اگر نیاز دارید محدودیتی برای کل زمان پویش تعیین کنید، تعداد ارسالهای مجدد را با گزینه --max-retries محدود کنید.
--defeat-rst-ratelimit
استفاده از این گزینه میتواند دقت را کاهش دهد، زیرا برخی از درگاهها بدون پاسخ به نظر میرسند به این دلیل که Nmap به اندازه کافی برای یک پاسخ دارای محدودیت نرخ RST منتظر نمانده است. با یک پویش SYN، عدم پاسخ منجر به برچسبگذاری درگاه به عنوان فیلترشده (filtered) میشود، به جای وضعیت بسته (closed) که هنگام دریافت بستههای RST میبینیم. این گزینه زمانی مفید است که فقط به درگاههای باز اهمیت میدهید و تمایز بین درگاههای بسته و فیلترشده ارزش صرف زمان اضافی را ندارد.
--defeat-icmp-ratelimit
--nsock-engine iocp|epoll|kqueue|poll|select
-T paranoid|sneaky|polite|normal|aggressive|insane (تنظیم قالب زمانبندی)
این قالبها به کاربر اجازه میدهند مشخص کند چقدر میخواهد تهاجمی عمل کند، در حالی که انتخاب مقادیر دقیق زمانبندی را به Nmap واگذار میکند. قالبها همچنین برخی تنظیمات جزئی سرعت را انجام میدهند که در حال حاضر گزینههای کنترل دقیق برای آنها وجود ندارد. برای مثال، -T4 مانع از فراتر رفتن تاخیر پویش پویا از ۱۰ میلیثانیه برای درگاههای TCP میشود و -T5 این مقدار را روی ۵ میلیثانیه محدود میکند. قالبها را میتوان در ترکیب با کنترلهای دقیق استفاده کرد، و کنترلهای دقیقی که مشخص میکنید بر پیشفرض قالب زمانبندی برای آن پارامتر تقدم خواهند داشت. من استفاده از -T4 را هنگام پویش شبکههای نسبتاً مدرن و قابل اعتماد توصیه میکنم. این گزینه را حتی زمانی که کنترلهای دقیق را اضافه میکنید حفظ نمایید تا از بهینهسازیهای جزئی اضافهای که فعال میکند بهرهمند شوید.
اگر در یک اتصال پهنباند یا اترنت مناسب هستید، توصیه میکنم همیشه از -T4 استفاده کنید. برخی افراد عاشق -T5 هستند، اگرچه برای سلیقه من بیش از حد تهاجمی است. افراد گاهی اوقات -T2 را مشخص میکنند زیرا فکر میکنند احتمال از کار انداختن میزبانها کمتر است یا به این دلیل که خود را به طور کلی مودب میدانند. آنها اغلب متوجه نمیشوند که -T polite واقعاً چقدر کند است. پویش آنها ممکن است ده برابر بیشتر از یک پویش پیشفرض طول بکشد. خرابی ماشین و مشکلات پهنای باند با گزینههای زمانبندی پیشفرض (-T3) نادر است و بنابراین من معمولاً آن را برای پویشگران محتاط توصیه میکنم. حذف تشخیص نسخه در کاهش این مشکلات بسیار موثرتر از دستکاری مقادیر زمانبندی است.
در حالی که -T0 و -T1 ممکن است برای جلوگیری از هشدارهای IDS مفید باشند، اما برای پویش هزاران ماشین یا درگاه زمان فوقالعاده زیادی میبرند. برای چنین پویش طولانی، ممکن است ترجیح دهید به جای تکیه بر مقادیر آماده -T0 و -T1، مقادیر دقیق زمانبندی مورد نیاز خود را تنظیم کنید.
اثرات اصلی T0 سریالی کردن پویش است به طوری که در هر زمان فقط یک درگاه پویش شود، و ۵ دقیقه بین ارسال هر کاوشگر منتظر میماند. T1 و T2 مشابه هستند اما به ترتیب تنها ۱۵ ثانیه و 0.4 ثانیه بین کاوشها منتظر میمانند. T3 رفتار پیشفرض Nmap است که شامل موازیسازی میشود. -T4 معادل --max-rtt-timeout 1250ms --min-rtt-timeout 100ms --initial-rtt-timeout 500ms --max-retries 6 عمل میکند و حداکثر تاخیر پویش TCP و SCTP را روی ۱۰ میلیثانیه تنظیم میکند. T5 معادل --max-rtt-timeout 300ms --min-rtt-timeout 50ms --initial-rtt-timeout 250ms --max-retries 2 --host-timeout 15m --script-timeout 10m عمل میکند و همچنین حداکثر تاخیر پویش TCP و SCTP را روی ۵ میلیثانیه تنظیم مینماید. حداکثر تاخیر پویش UDP توسط T4 یا T5 تنظیم نمیشود، اما میتوان آن را با گزینه --max-scan-delay تنظیم کرد.
دور زدن فایروال/IDS و جعل هویت (FIREWALL/IDS EVASION AND SPOOFING)
بسیاری از پیشگامان اینترنت یک شبکه باز جهانی را با یک فضای آدرس IP فراگیر پیشبینی میکردند که اتصالات مجازی را بین هر دو گره ممکن میساخت. این امر به میزبانها اجازه میدهد تا به عنوان همتایان واقعی عمل کنند و اطلاعات را از یکدیگر ارائه و دریافت نمایند. افراد میتوانستند از محل کار به تمام سیستمهای خانگی خود دسترسی داشته باشند، تنظیمات تهویه مطبوع را تغییر دهند یا درها را برای مهمانان زودهنگام باز کنند. این چشمانداز از اتصال جهانی به دلیل کمبود فضای آدرس و نگرانیهای امنیتی خفه شده است. در اوایل دهه ۱۹۹۰، سازمانها شروع به استقرار فایروالها با هدف صریح کاهش اتصال کردند. شبکههای عظیم با پروکسیهای کاربردی، ترجمه آدرس شبکه (NAT) و فیلترهای بسته از اینترنت فیلترنشده جدا شدند. جریان نامحدود اطلاعات جای خود را به نظارت شدید بر کانالهای ارتباطی تاییدشده و محتوایی که از طریق آنها منتقل میشود داد.
موانع شبکه مانند فایروالها میتوانند نقشهبرداری از یک شبکه را بسیار دشوار کنند. این کار آسانتر نخواهد شد، زیرا خنثی کردن شناساییهای غیررسمی اغلب یک هدف کلیدی در پیادهسازی این دستگاهها است. با این حال، Nmap ویژگیهای زیادی را برای کمک به درک این شبکههای پیچیده و تأیید عملکرد فیلترها مطابق با انتظارات ارائه میدهد. حتی از سازوکارهایی برای دور زدن دفاعهای ضعیف پشتیبانی میکند. یکی از بهترین روشها برای درک وضعیت امنیتی شبکه، تلاش برای غلبه بر آن است. خود را در ذهنیت یک مهاجم قرار دهید و تکنیکهای این بخش را علیه شبکههای خود به کار بگیرید. یک پویش جهش FTP، پویش بیکار (idle scan)، حمله تکهتکهسازی اجرا کنید، یا سعی کنید از طریق یکی از پروکسیهای خود تونل بزنید.
علاوه بر محدود کردن فعالیتهای شبکه، شرکتها به طور فزایندهای ترافیک را با سیستمهای تشخیص نفوذ (IDS) مانیتور میکنند. همه سامانههای اصلی IDS با قوانینی ارائه میشوند که برای شناسایی پویشهای Nmap طراحی شدهاند زیرا پویشها گاهی اوقات مقدمهای برای حملات هستند. بسیاری از این محصولات اخیراً به سامانههای پیشگیری از نفوذ (IPS) تبدیل شدهاند که ترافیک مخرب تلقیشده را به طور فعال مسدود میکنند. متأسفانه برای مدیران شبکه و فروشندگان IDS، تشخیص قابل اعتماد نیتهای بد با تجزیه و تحلیل دادههای بسته یک مشکل دشوار است. مهاجمان با صبر، مهارت و کمک برخی گزینههای Nmap معمولاً میتوانند بدون شناسایی از IDS عبور کنند. در همین حال، مدیران باید با تعداد زیادی نتایج مثبت کاذب (false positive) کنار بیایند که در آنها فعالیتهای بیضرر به اشتباه تشخیص داده شده و درباره آنها هشدار داده شده یا مسدود میشوند.
گاهی اوقات افراد پیشنهاد میکنند که Nmap نباید ویژگیهایی را برای دور زدن قوانین فایروال یا عبور پنهانی از IDSها ارائه دهد. آنها استدلال میکنند که این ویژگیها همانقدر که توسط مهاجمان سوءاستفاده میشوند، توسط مدیران برای ارتقای امنیت استفاده نمیشوند. مشکل این منطق این است که این روشها همچنان توسط مهاجمانی استفاده میشوند که صرفاً ابزارهای دیگری را پیدا میکنند یا این قابلیتها را به Nmap وصله میزنند. در این میان، کار مدیران بسیار سختتر خواهد شد. استقرار تنها سرورهای مدرن و وصلهشده FTP دفاعی بسیار قویتر از تلاش برای جلوگیری از توزیع ابزارهایی است که حمله جهش FTP را پیادهسازی میکنند.
هیچ راهحل جادویی (یا گزینه واحدی در Nmap) برای شناسایی و براندازی فایروالها و سیستمهای IDS وجود ندارد. این کار نیازمند مهارت و تجربه است. یک آموزش جامع فراتر از حوصله این راهنما است که فقط گزینههای مربوطه را فهرست کرده و عملکرد آنها را توضیح میدهد.
-f (تکهتکهسازی بستهها)؛ --mtu (با استفاده از MTU مشخصشده)
تکهتکهسازی فقط برای ویژگیهای بسته خام Nmap پشتیبانی میشود، که شامل پویشهای درگاه TCP و UDP (به جز پویش connect و پویش جهش FTP) و تشخیص سیستمعامل است. ویژگیهایی مانند تشخیص نسخه و موتور اسکریپتنویسی Nmap عموماً از تکهتکهسازی پشتیبانی نمیکنند زیرا برای برقراری ارتباط با سرویسهای هدف به پشته TCP میزبان شما وابسته هستند.
-D decoy1[,decoy2][,ME][,...] (پنهان کردن پویش با طعمهها)
هر میزبان طعمه را با کاما جدا کنید، و میتوانید به صورت اختیاری از ME به عنوان یکی از طعمهها برای نمایش موقعیت آدرس IP واقعی خود استفاده کنید. اگر ME را در موقعیت ششم یا بعد از آن قرار دهید، بعید است برخی از آشکارسازهای رایج پویش درگاه (مانند Scanlogd عالی اثر Solar Designer) آدرس IP شما را اصلاً نشان دهند. اگر از ME استفاده نکنید، Nmap شما را در یک موقعیت تصادفی قرار میدهد. همچنین میتوانید از RND برای تولید یک آدرس IP تصادفی و غیررزرو شده، یا از RND:number برای تولید number آدرس استفاده کنید.
توجه داشته باشید که میزبانهایی که به عنوان طعمه استفاده میکنید باید روشن باشند وگرنه ممکن است به طور تصادفی اهداف خود را دچار سیلاب SYN (SYN flood) کنید. همچنین اگر تنها یک میزبان واقعاً در شبکه فعال باشد، تعیین اینکه کدام میزبان در حال پویش است بسیار آسان خواهد بود. ممکن است بخواهید از آدرسهای IP به جای نامها استفاده کنید (تا شبکههای طعمه شما را در لاگهای سرور نام خود نبینند). در حال حاضر تولید آدرس IP تصادفی فقط با IPv4 پشتیبانی میشود.
طعمهها هم در پویش اولیه کشف میزبان (با استفاده از ICMP، SYN، ACK یا هر چیز دیگری) و هم در مرحله پویش واقعی درگاه استفاده میشوند. طعمهها همچنین در طول تشخیص از راه دور سیستمعامل (-O) استفاده میشوند. طعمهها با تشخیص نسخه یا پویش TCP connect کار نمیکنند. هنگامی که تاخیر پویش اعمال میشود، تاخیر بین هر دسته از کاوشهای جعلشده اعمال میشود، نه بین هر کاوشگر منفرد. از آنجا که طعمهها به صورت دستهای و یکباره ارسال میشوند، ممکن است موقتاً محدودیتهای کنترل ازدحام را نقض کنند.
شایان ذکر است که استفاده از تعداد بیش از حد طعمه ممکن است پویش شما را کند کرده و حتی دقت آن را کاهش دهد. همچنین، برخی از ارائهدهندگان اینترنت (ISP) بستههای جعلی شما را فیلتر میکنند، اما بسیاری از آنها بستههای IP جعلی را اصلاً محدود نمینمایند.
-S IP_Address (جعل آدرس مبدا)
کاربرد احتمالی دیگر این فلگ جعل هویت پویش است تا اهداف فکر کنند شخص دیگری در حال پویش آنها است. تصور کنید یک شرکت مکرراً توسط یک رقیب مورد پویش درگاه قرار گیرد! گزینه -e و -Pn عموماً برای این نوع استفاده مورد نیاز هستند. توجه داشته باشید که شما معمولاً بستههای پاسخ را دریافت نخواهید کرد (آنها به IP که در حال جعل آن هستید ارسال میشوند)، بنابراین Nmap گزارشهای مفیدی تولید نخواهد کرد.
-e interface (استفاده از رابط مشخصشده)
--source-port portnumber؛ -g portnumber (جعل شماره درگاه مبدا)
راهحلهای امنی برای این مشکلات وجود دارد، اغلب به شکل پروکسیهای سطح برنامه یا ماژولهای فایروال تجزیهکننده پروتکل. متأسفانه راهحلهای آسانتر و ناامنی نیز وجود دارد. با توجه به اینکه پاسخهای DNS از درگاه ۵۳ و FTP فعال از درگاه ۲۰ میآیند، بسیاری از مدیران در این دام افتادهاند که صرفاً اجازه ترافیک ورودی از آن درگاهها را بدهند. آنها اغلب فرض میکنند که هیچ مهاجمی متوجه چنین حفرههای فایروالی نخواهد شد و از آنها سوءاستفاده نخواهد کرد. در موارد دیگر، مدیران این را یک اقدام موقت میدانند تا زمانی که بتوانند یک راهحل امنتر را پیادهسازی کنند، و سپس ارتقای امنیتی را فراموش میکنند.
مدیران شبکه با حجم کاری بالا تنها کسانی نیستند که در این دام میافتند؛ محصولات متعددی با این قوانین ناامن عرضه شدهاند. حتی مایکروسافت نیز مقصر بوده است. فیلترهای IPsec که با ویندوز ۲۰۰۰ و ویندوز XP عرضه شدند شامل یک قانون ضمنی هستند که تمام ترافیک TCP یا UDP را از درگاه ۸۸ (Kerberos) مجاز میدانند. در یک مورد شناختهشده دیگر، نسخههای فایروال شخصی Zone Alarm تا نسخه 2.1.25 اجازه هرگونه بسته ورودی UDP با درگاه مبدا ۵۳ (DNS) یا ۶۷ (DHCP) را میدادند.
نرمافزار Nmap گزینههای -g و --source-port (آنها معادل هستند) را برای سوءاستفاده از این نقاط ضعف ارائه میدهد. به سادگی یک شماره درگاه ارائه دهید و Nmap در صورت امکان بستهها را از آن درگاه ارسال خواهد کرد. بیشتر عملیاتهای پویش که از سوکتهای خام استفاده میکنند، از جمله پویشهای SYN و UDP، این گزینه را به طور کامل پشتیبانی میکنند. این گزینه به طور قابل توجهی برای هر عملیاتی که از سوکتهای معمولی سیستمعامل استفاده میکند، از جمله درخواستهای DNS، پویش TCP connect، تشخیص نسخه و پویش اسکریپت تأثیری ندارد. تنظیم درگاه مبدا برای تشخیص سیستمعامل نیز کار نمیکند، زیرا Nmap باید از شماره درگاههای مختلفی برای کارکرد صحیح آزمایشهای خاص تشخیص سیستمعامل استفاده کند.
--data hex string (افزودن دادههای باینری سفارشی به بستههای ارسالی)
--data-string string (افزودن رشته سفارشی به بستههای ارسالی)
--data-length number (افزودن دادههای تصادفی به بستههای ارسالی)
--ip-options R|S [route]|L [route]|T|U ... ؛ --ip-options hex string (ارسال بستهها با گزینههای مشخصشده IP)
قدرتمندترین راه برای مشخص کردن گزینههای IP این است که مقادیر را به عنوان آرگومان به --ip-options ارسال کنید. قبل از هر عدد هگزادسیمال عبارت \x و سپس دو رقم را قرار دهید. میتوانید با قرار دادن یک ستاره بعد از کاراکترها و سپس تعداد دفعاتی که میخواهید تکرار شوند، نویسههای خاصی را تکرار کنید. برای مثال، \x01\x07\x04\x00*36\x01 یک رشته هگز حاوی ۳۶ بایت NUL است.
نرمافزار Nmap همچنین یک سازوکار میانبر برای مشخص کردن گزینهها ارائه میدهد. کافی است حرف R، T، یا U را به ترتیب برای درخواست record-route، record-timestamp یا هر دو گزینه با هم ارسال کنید. مسیریابی مبدا انعطافپذیر یا سختگیرانه را میتوان با یک L یا S مشخص کرد که به دنبال آن یک فاصله و سپس فهرستی از آدرسهای IP جداشده با فاصله قرار دارد.
اگر مایلید گزینهها را در بستههای ارسالی و دریافتی مشاهده کنید، گزینه --packet-trace را مشخص نمایید. برای کسب اطلاعات بیشتر و مشاهده مثالهایی از استفاده از گزینههای IP با Nmap، به نشانی https://seclists.org/nmap-dev/2006/q3/52 مراجعه کنید.
--ttl value (تنظیم فیلد زمان حیات IP)
--randomize-hosts (تصادفیسازی ترتیب میزبانهای هدف)
--spoof-mac MAC address, prefix, or vendor name (جعل آدرس MAC)
--proxies فهرست آدرسهای URL پروکسی جداشده با کاما (رله اتصالات TCP از طریق زنجیرهای از پروکسیها)
این گزینه فهرستی از پروکسیها را به عنوان آرگومان میپذیرد که به صورت URL در قالب proto://host:port بیان میشوند. برای جدا کردن URLهای گرهها در یک زنجیره از کاما استفاده کنید. هنوز هیچ احراز هویتی پشتیبانی نمیشود. پروتکلهای معتبر عبارتند از HTTP و SOCKS4.
هشدار: این ویژگی هنوز در حال توسعه است و محدودیتهایی دارد. این ویژگی در کتابخانه nsock پیادهسازی شده است و بنابراین هیچ تأثیری بر مراحل پینگ، پویش درگاه و کشف سیستمعامل در یک پویش ندارد. تاکنون تنها NSE و پویش نسخه از این گزینه بهرهمند میشوند—سایر ویژگیها ممکن است آدرس واقعی شما را فاش کنند. اتصالات SSL هنوز پشتیبانی نمیشوند، و همچنین تحلیل DNS در سمت پروکسی نیز پشتیبانی نمیشود (نامهای میزبان همیشه توسط خود Nmap تحلیل میشوند).
--badsum (ارسال بستهها با مجموعهای مقابلهای جعلی TCP/UDP)
--adler32 (استفاده از الگوریتم منسوخشده Adler32 به جای CRC32C برای مجموعهای مقابلهای SCTP)
خروجی (OUTPUT)
هر ابزار امنیتی تنها به اندازه خروجی که تولید میکند مفید است. آزمایشها و الگوریتمهای پیچیده اگر به شیوهای سازمانیافته و قابل درک ارائه نشوند، ارزش چندانی ندارند. با توجه به روشهای متعددی که Nmap توسط افراد و سایر نرمافزارها استفاده میشود، هیچ قالب واحدی نمیتواند رضایت همه را جلب کند. بنابراین Nmap چندین قالب ارائه میدهد، از جمله حالت تعاملی برای خواندن مستقیم توسط انسان و XML برای تجزیه آسان توسط نرمافزارها.
علاوه بر ارائه قالبهای مختلف خروجی، Nmap گزینههایی را برای کنترل پرگویی (verbosity) خروجی و همچنین پیامهای اشکالزدایی (debugging) فراهم میکند. انواع خروجی ممکن است به خروجی استاندارد یا به فایلهای نامگذاریشده ارسال شوند که Nmap میتواند خروجی جدید را به آنها اضافه کرده یا روی آنها بازنویسی کند. فایلهای خروجی همچنین میتوانند برای از سرگیری پویشهای متوقفشده استفاده شوند.
نرمافزار Nmap خروجی را در پنج قالب مختلف در دسترس قرار میدهد. قالب پیشفرض خروجی تعاملی (interactive output) نام دارد و به خروجی استاندارد (stdout) ارسال میشود. همچنین خروجی عادی (normal output) وجود دارد که شبیه به خروجی تعاملی است با این تفاوت که اطلاعات و هشدارهای کمتری را در زمان اجرا نمایش میدهد، زیرا انتظار میرود پس از اتمام پویش به جای زمان اجرا مورد تجزیه و تحلیل قرار گیرد.
خروجی XML یکی از مهمترین انواع خروجی است، زیرا میتواند به HTML تبدیل شود، به راحتی توسط برنامههایی مانند رابطهای گرافیکی Nmap تجزیه شود، یا به پایگاههای داده وارد گردد.
دو نوع خروجی باقیمانده عبارتند از خروجی قابل گرپ (grepable output) ساده که بیشتر اطلاعات یک میزبان هدف را در یک خط قرار میدهد، و خروجی اسکریپتکید (sCRiPt KiDDi3 0utPUt) برای کاربرانی که خود را حرفهای میدانند.
در حالی که خروجی تعاملی پیشفرض است و هیچ گزینه خط فرمانی به آن اختصاص داده نشده است، چهار گزینه دیگر از ساختار یکسانی استفاده میکنند. آنها یک آرگومان دریافت میکنند که همان نام فایلی است که نتایج باید در آن ذخیره شوند. میتوان چندین قالب را مشخص کرد، اما هر قالب را فقط یک بار میتوان مشخص نمود. برای مثال، ممکن است بخواهید خروجی عادی را برای بررسی شخصی خود ذخیره کنید در حالی که XML همان پویش را برای تحلیل برنامهنویسی ذخیره مینمایید. میتوانید این کار را با گزینههای -oX myscan.xml -oN myscan.nmap انجام دهید. در حالی که این فصل از نامهای سادهای مانند myscan.xml برای اختصار استفاده میکند، به طور کلی نامهای توصیفیتر توصیه میشوند. نامهای انتخابشده به سلیقه شخصی بستگی دارد، اگرچه من از نامهای طولانی استفاده میکنم که شامل تاریخ پویش و یک یا دو کلمه در توصیف پویش است و در دایرکتوری به نام شرکتی که پویش میکنم قرار میگیرد.
در حالی که این گزینهها نتایج را در فایلها ذخیره میکنند، Nmap همچنان طبق معمول خروجی تعاملی را به stdout چاپ میکند. برای مثال، دستور nmap -oX myscan.xml target خروجی XML را در myscan.xml چاپ میکند و خروجی استاندارد را با همان نتایج تعاملی پر میکند که در صورت عدم مشخص کردن -oX چاپ میکرد. میتوانید این رفتار را با ارسال یک علامت خط تیره (-) به عنوان آرگومان به یکی از انواع قالب تغییر دهید. این امر باعث میشود Nmap خروجی تعاملی را غیرفعال کند و در عوض نتایج را با قالبی که مشخص کردهاید به جریان خروجی استاندارد چاپ کند. بنابراین دستور nmap -oX - target فقط خروجی XML را به stdout ارسال خواهد کرد. خطاهای جدی ممکن است همچنان به جریان معمول خطا، stderr، چاپ شوند.
بر خلاف برخی آرگومانهای Nmap، فاصله بین فلگ گزینه فایل لاگ (مانند -oX) و نام فایل یا خط تیره اجباری است. اگر فلگها را حذف کنید و آرگومانهایی مانند -oG- یا -oXscan.xml بدهید، یک ویژگی سازگاری عقروعقب Nmap باعث ایجاد فایلهای خروجی در قالب عادی به نامهای G- و Xscan.xml به ترتیب خواهد شد.
تمام این آرگومانها از تبدیلهای شبیه به strftime در نام فایل پشتیبانی میکنند. عبارتهای %H، %M، %S، %m، %d، %y و %Y همگی دقیقاً همانند strftime هستند. %T همان %H%M%S، %R همان %H%M و %D همان %m%d%y است. یک % به همراه هر نویسه دیگری صرفاً همان نویسه را تولید میکند (%% یک علامت درصد به شما میدهد). بنابراین -oX 'scan-%T-%D.xml' از یک فایل XML با نامی به شکل scan-144840-121307.xml استفاده خواهد کرد.
نرمافزار Nmap همچنین گزینههایی را برای کنترل پرگویی پویش و افزودن به انتهای فایلهای خروجی به جای بازنویسی روی آنها ارائه میدهد. تمام این گزینهها در زیر شرح داده شدهاند.
قالبهای خروجی Nmap
-oN filespec (خروجی عادی)
-oX filespec (خروجی XML)
قالب XML یک فرمت پایدار ارائه میدهد که به راحتی توسط نرمافزارها تجزیه میشود. تجزیهکنندههای رایگان XML برای تمام زبانهای اصلی رایانهای، از جمله C/C++، Perl، Python و Java در دسترس هستند. حتی بایندرهایی برای اکثر این زبانها نوشته شده است تا خروجی و اجرای Nmap را به طور خاص مدیریت کنند. نمونههایی از این دست عبارتند از Nmap::Scanner[14] و Nmap::Parser[15] در Perl CPAN. تقریباً در تمام مواردی که یک برنامه کاربردی با Nmap تعامل دارد، XML قالب ترجیحی است.
خروجی XML به یک شیوهنامه XSL ارجاع میدهد که میتواند برای قالببندی نتایج به صورت HTML استفاده شود. سادهترین راه برای استفاده از این قابلیت، باز کردن خروجی XML در یک مرورگر وب مانند فایرفاکس است. به طور پیشفرض، این کار به دلیل مسیر فایلسیستمی ثابت nmap.xsl فقط روی ماشینی که Nmap را روی آن اجرا کردهاید (یا ماشینی با پیکربندی مشابه) کار خواهد کرد. از گزینههای --webxml یا --stylesheet برای ایجاد فایلهای قابل حمل XML استفاده کنید که در هر ماشین متصل به وب به صورت HTML رندر میشوند.
-oS filespec (خروجی اسکریپتکید)
-oG filespec (خروجی قابل گرپ)
با این حال، خروجی قابل گرپ هنوز کاملاً محبوب است. این قالبی ساده است که هر میزبان را در یک خط فهرست میکند و میتواند به سادگی با ابزارهای استاندارد یونیکس مانند grep، awk، cut، sed، diff و Perl جستجو و تجزیه شود. حتی من معمولاً از آن برای آزمایشهای موردی که در خط فرمان انجام میشوند استفاده میکنم. پیدا کردن تمام میزبانهایی که درگاه SSH آنها باز است یا سولاریس اجرا میکنند، تنها با یک دستور ساده grep برای شناسایی میزبانها و ارسال پایپ به دستور awk یا cut برای چاپ فیلدهای مورد نظر انجام میشود.
خروجی قابل گرپ شامل خطوط توضیحات (خطوطی که با علامت پوند (#) شروع میشوند) و خطوط هدف است. یک خط هدف شامل ترکیبی از شش فیلد برچسبدار است که با تب جدا شده و با یک دونقطه پایان مییابند. این فیلدها عبارتند از: Host، Ports، Protocols، Ignored State، OS، Seq Index، IP ID و Status.
مهمترین این فیلدها معمولاً Ports است که جزئیات مربوط به هر درگاه جالبتوجه را ارائه میدهد. این فیلد یک فهرست جداشده با کاما از ورودیهای درگاه است. هر ورودی درگاه نشاندهنده یک درگاه جالبتوجه است و به شکل هفت زیرفیلد جداشده با اسلش (/) درمیآید. آن زیرفیلدها عبارتند از: شماره درگاه (Port number)، وضعیت (State)، پروتکل (Protocol)، مالک (Owner)، سرویس (Service)، اطلاعات SunRPC و اطلاعات نسخه (Version info).
مانند خروجی XML، این صفحه راهنما اجازه مستندسازی کل قالب را نمیدهد. نگاهی دقیقتر به قالب خروجی قابل گرپ Nmap در نشانی https://nmap.org/book/output-formats-grepable-output.html در دسترس است.
-oA basename (خروجی به تمام قالبها)
گزینههای پرگویی و اشکالزدایی
-v (افزایش سطح پرگویی)، -vlevel (تنظیم سطح پرگویی)
بیشتر تغییرات فقط بر خروجی تعاملی تأثیر میگذارند و برخی نیز بر خروجی عادی و خروجی اسکریپتکید تأثیر دارند. سایر انواع خروجی برای پردازش توسط ماشینها در نظر گرفته شدهاند، بنابراین Nmap میتواند به طور پیشفرض جزئیات قابل توجهی را در آن قالبها بدون خسته کردن کاربر انسانی ارائه دهد. با این حال، تغییرات کمی در حالتهای دیگر وجود دارد که در آنها میتوان اندازه خروجی را با حذف برخی جزئیات به میزان قابل توجهی کاهش داد. برای مثال، یک خط کامنت در خروجی قابل گرپ که فهرستی از تمام درگاههای پویششده را ارائه میدهد فقط در حالت پرگویی چاپ میشود زیرا میتواند بسیار طولانی باشد.
-d (افزایش سطح اشکالزدایی)، -dlevel (تنظیم سطح اشکالزدایی)
خروجی اشکالزدایی زمانی مفید است که به وجود باگی در Nmap مشکوک شوید، یا اگر صرفاً در مورد اینکه Nmap چه کاری و چرا انجام میدهد گیج شدهاید. از آنجا که این ویژگی بیشتر برای توسعهدهندگان در نظر گرفته شده است، خطوط دیباگ همیشه خودتوضیح نیستند. ممکن است چیزی شبیه به این دریافت کنید: Timeout vals: srtt: -1 rttvar: -1 to: 1000000 delta 14987 ==> srtt: 14987 rttvar: 14987 to: 100000. اگر خطی را متوجه نمیشوید، تنها راههای چاره شما نادیده گرفتن آن، جستجوی آن در کد منبع یا درخواست کمک از لیست توسعه (nmap-dev) است. برخی از خطوط واضح و خودتوضیح هستند، اما با افزایش سطح دیباگ، پیامها مبهمتر میشوند.
--reason (دلایل وضعیت میزبان و درگاه)
--stats-every time (چاپ دورهای آمار زمانبندی)
--packet-trace (ردیابی بستهها و دادههای ارسالی و دریافتی)
--open (نمایش فقط درگاههای باز (یا احتمالاً باز))
از Nmap 7.40 به بعد، گزینه --open مستلزم --defeat-rst-ratelimit است، زیرا آن گزینه فقط بر درگاههای closed و filtered تأثیر میگذارد که توسط --open پنهان میشوند.
--iflist (فهرست رابطها و مسیرها)
گزینههای متفرقه خروجی
--append-output (افزودن به انتهای فایلهای خروجی به جای بازنویسی)
--resume filename (از سرگیری پویش لغوشده)
--noninteractive (غیرفعالسازی تعاملات در زمان اجرا)
--stylesheet path or URL (تنظیم شیوهنامه XSL برای تبدیل خروجی XML)
--webxml (بارگذاری شیوهنامه از Nmap.Org)
--no-stylesheet (حذف اعلان شیوهنامه XSL از XML)
گزینههای متفرقه (MISCELLANEOUS OPTIONS)
این بخش برخی از گزینههای مهم (و نهچندان مهم) را توصیف میکند که واقعاً در هیچ بخش دیگری جای نمیگیرند.
-6 (فعالسازی پویش IPv6)
اگرچه IPv6 دقیقاً جهان را درنوردیده است، اما در برخی کشورها (معمولاً آسیایی) کاربرد قابل توجهی دارد و بیشتر سیستمعاملهای مدرن از آن پشتیبانی میکنند. برای استفاده از Nmap با IPv6، هم مبدا و هم هدف پویش شما باید برای IPv6 پیکربندی شده باشند. اگر ارائهدهنده خدمات اینترنت شما (مانند بیشتر آنها) آدرسهای IPv6 را به شما اختصاص نمیدهد، کارگزارهای تونل رایگان به طور گسترده در دسترس هستند و با Nmap به خوبی کار میکنند. من از سرویس رایگان کارگزار تونل IPv6 در http://www.tunnelbroker.net استفاده میکنم. سایر کارگزارهای تونل در ویکیپدیا فهرست شدهاند[17]. تونلهای 6to4 رویکرد رایگان و محبوب دیگری هستند.
در ویندوز، پویشهای سوکت خام IPv6 فقط در دستگاههای اترنت (نه تونلها) و فقط در ویندوز ویستا و نسخههای بعدی پشتیبانی میشوند. در شرایط دیگر از گزینه --unprivileged استفاده کنید.
-A (گزینههای پویش تهاجمی)
--datadir directoryname (مشخص کردن مکان سفارشی فایلهای داده Nmap)
--servicedb services file (مشخص کردن فایل سفارشی سرویسها)
--versiondb service probes file (مشخص کردن فایل سفارشی کاوشگرهای سرویس)
--send-eth (استفاده از ارسال در سطح اترنت خام)
--send-ip (ارسال در سطح IP خام)
--privileged (فرض بر این که کاربر کاملاً دارای دسترسی ممتاز است)
--unprivileged (فرض بر این که کاربر فاقد دسترسی سوکت خام است)
--release-memory (آزادسازی حافظه قبل از خروج)
-V؛ --version (چاپ شماره نسخه)
-h؛ --help (چاپ صفحه خلاصه راهنما)
تعامل در زمان اجرا (RUNTIME INTERACTION)
در حین اجرای Nmap، تمام کلیدهای فشردهشده ضبط میشوند. این کار به شما امکان میدهد بدون لغو و راهاندازی مجدد برنامه با آن تعامل داشته باشید. برخی کلیدهای ویژه گزینهها را تغییر میدهند، در حالی که هر کلید دیگری یک پیام وضعیت را چاپ میکند که جزئیات پویش را به شما میگوید. قرارداد این است که حروف کوچک مقدار چاپ را افزایش میدهند، و حروف بزرگ مقدار چاپ را کاهش میدهند. همچنین میتوانید ‘?’ را برای دریافت راهنما فشار دهید.
v / V
d / D
p / P
?
هر کلید دیگر
Stats: 0:00:07 elapsed; 20 hosts completed (1 up), 1 undergoing Service Scan Service scan Timing: About 33.33% done; ETC: 20:57 (0:00:12 remaining)
مثالها (EXAMPLES)
در اینجا چند مثال از کاربرد Nmap، از موارد ساده و روزمره تا مواردی کمی پیچیدهتر و خاصتر آورده شده است. برخی از آدرسهای IP و نامهای دامنه واقعی برای ملموستر شدن مسائل استفاده شدهاند. به جای آنها باید آدرسها/نامهای مربوط به شبکه خودتان را جایگزین کنید. در حالی که من فکر نمیکنم پویش درگاه سایر شبکهها غیرقانونی باشد یا باید غیرقانونی باشد، برخی از مدیران شبکه از پویشهای ناخواسته شبکههای خود استقبال نمیکنند و ممکن است شکایت کنند. گرفتن مجوز از قبل بهترین رویکرد است.
برای اهداف آزمایشی، شما اجازه دارید میزبان scanme.nmap.org را پویش کنید. این مجوز فقط شامل پویش از طریق Nmap است و شامل آزمایش اکسپلویتها یا حملات منع سرویس نمیشود. برای حفظ پهنای باند، لطفاً روزانه بیش از دوازده پویش علیه آن میزبان آغاز نکنید. اگر از این سرویس هدف پویش رایگان سوءاستفاده شود، غیرفعال خواهد شد و Nmap خطای Failed to resolve given hostname/IP: scanme.nmap.org را گزارش خواهد داد. این مجوزها همچنین برای میزبانهای scanme2.nmap.org، scanme3.nmap.org و غیره اعمال میشود، اگرچه این میزبانها در حال حاضر وجود ندارند.
nmap -v scanme.nmap.org
این دستور تمام درگاههای رزروشده TCP را روی ماشین scanme.nmap.org پویش میکند. گزینه -v حالت پرگویی را فعال مینماید.
nmap -sS -O scanme.nmap.org/24
یک پویش مخفی SYN را در برابر هر ماشینی که از میان ۲۵۶ IP در شبکه با اندازه /24 که Scanme در آن قرار دارد فعال است آغاز میکند. همچنین سعی میکند تعیین کند چه سیستمعاملی روی هر میزبانی که بالا و فعال است اجرا میشود. این دستور به دلیل پویش SYN و تشخیص سیستمعامل به امتیازات دسترسی ریشه (root) نیاز دارد.
nmap -sV -p 22,53,110,143,4564 198.116.0-255.1-127
شمارش میزبان و یک پویش TCP را در نیمه اول هر یک از ۲۵۵ زیرشبکه هشتبیتی ممکن در فضای آدرس 198.116.0.0/16 آغاز میکند. این دستور بررسی میکند که آیا سیستمها SSH، DNS، POP3 یا IMAP را روی درگاههای استاندارد خود اجرا میکنند یا هر چیزی روی درگاه ۴۵۶۴ اجرا میشود. برای هر یک از این درگاهها که باز یافت شوند، از تشخیص نسخه برای تعیین برنامه در حال اجرا استفاده میشود.
nmap -v -iR 100000 -Pn -p 80
از Nmap میخواهد ۱۰۰٬۰۰۰ میزبان را به صورت تصادفی انتخاب کرده و آنها را برای وبسرورها (درگاه ۸۰) پویش کند. شمارش میزبان با -Pn غیرفعال شده است زیرا ارسال اولیه چند کاوشگر برای تعیین فعال بودن میزبان زمانی که به هر حال فقط یک درگاه را روی هر میزبان هدف کاوش میکنید، بیهوده است.
nmap -Pn -p80 -oX logs/pb-port80scan.xml -oG logs/pb-port80scan.gnmap 216.163.128.20/20
این دستور ۴۰۹۶ آدرس IP را برای هرگونه وبسرور (بدون پینگ کردن آنها) پویش میکند و خروجی را در قالبهای قابل گرپ و XML ذخیره مینماید.
کتاب انمپ (NMAP BOOK)
در حالی که این راهنما تمام گزینههای اساسی Nmap را با جزئیات شرح میدهد، نمیتواند به طور کامل نحوه بهکارگیری آن ویژگیها را برای حل سریع وظایف در دنیای واقعی نشان دهد. برای این منظور، ما کتاب Nmap Network Scanning: The Official Nmap Project Guide to Network Discovery and Security Scanning را منتشر کردیم. موضوعات شامل براندازی فایروالها و سامانههای تشخیص نفوذ، بهینهسازی کارایی Nmap، و خودکارسازی کارهای معمول شبکه با موتور اسکریپتنویسی Nmap است. نکات و دستورالعملهایی برای کارهای معمول Nmap مانند موجودیبرداری شبکه، آزمایش نفوذ، تشخیص نقاط دسترسی بیسیم سرکش، و سرکوب شیوع کرمهای شبکه ارائه شده است. مثالها و نمودارها ارتباطات واقعی را روی خط نشان میدهند. بیش از نیمی از کتاب به صورت آنلاین و رایگان در دسترس است. برای اطلاعات بیشتر به https://nmap.org/book مراجعه کنید.
گزارش باگها (BUGS)
نرمافزار Nmap مانند نویسندهاش کامل و بینقص نیست. اما شما میتوانید با ارسال گزارشهای باگ یا حتی نوشتن وصلهها به بهتر شدن آن کمک کنید. اگر Nmap آنطور که انتظار دارید رفتار نمیکند، ابتدا به آخرین نسخه موجود در https://nmap.org ارتقا دهید. اگر مشکل همچنان ادامه داشت، کمی تحقیق کنید تا مشخص شود آیا قبلاً کشف و برطرف شده است یا خیر. سعی کنید مشکل یا پیام خطا را در گوگل جستجو کنید زیرا انجمنهای بسیاری را تجمیع میکند. اگر نتیجهای نگرفتید، یک گزارش اشکال (Issue) در سامانه ردیابی ما ایجاد کنید (http://issues.nmap.org) و/یا گزارش باگ را به <dev@nmap.org> ارسال نمایید. اگر قبل از ارسال پیام در لیست nmap-dev مشترک شوید، پیام شما از نظارت عبور کرده و سریعتر ارسال میشود. در https://nmap.org/mailman/listinfo/dev مشترک شوید. لطفاً هر آنچه را که در مورد مشکل متوجه شدهاید، به همراه نسخه Nmap مورد استفاده و نسخه سیستمعاملی که روی آن اجرا میشود، قید کنید. سایر پیشنهادات برای بهبود Nmap نیز ممکن است به لیست پستی توسعهدهندگان Nmap ارسال شود.
اگر قادر به نوشتن وصلهای برای بهبود Nmap یا رفع باگ هستید، این بسیار بهتر است! دستورالعملهای ارسال وصلهها یا درخواستهای ادغام گیت (Pull Request) در https://github.com/nmap/nmap/blob/master/CONTRIBUTING.md در دسترس است.
مسائل به ویژه حساس مانند گزارشهای امنیتی ممکن است مستقیماً برای نویسنده Nmap، فیودور (Fyodor)، به نشانی <fyodor@nmap.org> ارسال شود. تمام گزارشها و نظرات دیگر باید از لیست توسعهدهندگان یا سامانه ردیابی مشکلات استفاده کنند زیرا افراد بیشتری آنها را میخوانند، دنبال میکنند و به آنها پاسخ میدهند.
نویسندگان (AUTHORS)
گوردون “فیودور” لیون (Gordon “Fyodor” Lyon) <fyodor@nmap.org> نرمافزار Nmap را در سال ۱۹۹۷ نوشت و منتشر کرد. از آن زمان، صدها نفر مشارکتهای ارزشمندی داشتهاند، همانطور که در فایل CHANGELOG توزیعشده با Nmap و همچنین در نشانی https://nmap.org/changelog.html به تفصیل آمده است. دیوید فایفیلد (David Fifield) و دانیل میلر (Daniel Miller) به خاطر مشارکتهای عظیم چندساله خود شایسته قدردانی ویژه هستند!
نکات حقوقی (LEGAL NOTICES)
حق نشر و مجوز انمپ (Nmap Copyright and Licensing)
پویشگر امنیتی Nmap تحت حق نشر (C) 1996–2022 متعلق به Nmap Software LLC ("The Nmap Project") است. همچنین Nmap یک علامت تجاری ثبتشده متعلق به The Nmap Project میباشد. این نرمافزار تحت مجوز منبع عمومی Nmap (NPSL)[18] منتشر شده است. این مجوز به طور کلی به کاربران نهایی اجازه میدهد Nmap را به صورت رایگان دانلود و استفاده کنند. اما اجازه نمیدهد Nmap در محصولات نرمافزاری یا سختافزاری تجاری (از جمله تجهیزات سختافزاری، ماشینهای مجازی و برنامههای کاربردی سنتی) استفاده و بازتوزیع شود. ما بودجه پروژه را با فروش ویرایش ویژه Nmap OEM برای این منظور تأمین میکنیم، همانطور که در https://nmap.org/oem توضیح داده شده است. صدها فروشنده بزرگ و کوچک نرمافزار قبلاً مجوزهای OEM را خریداری کردهاند تا فناوری Nmap مانند کشف میزبان، پویش درگاه، تشخیص سیستمعامل، تشخیص نسخه و موتور اسکریپتنویسی Nmap را در محصولات خود تعبیه کنند.
پروژه Nmap اجازه بازتوزیع Npcap را دارد که یک درایور و کتابخانه ضبط بسته برای پلتفرم مایکروسافت ویندوز است. نرمافزار Npcap یک اثر جداگانه با مجوز مخصوص به خود به جای مجوز Nmap است. از آنجا که مجوز Npcap اجازه بازتوزیع بدون مجوز ویژه را نمیدهد، بستههای باینری ویندوز Nmap ما که حاوی Npcap هستند ممکن است بدون مجوز ویژه بازتوزیع نشوند.
اگرچه NPSL بر اساس GPLv2 است، اما حاوی مقررات متفاوتی است و مستقیماً سازگار نیست. این مجوز با برخی دیگر از مجوزهای متنباز نیز ناسازگار است. در برخی موارد ما میتوانیم بخشهایی از Nmap را مجدداً مجوزدهی کنیم یا مجوزهای ویژهای برای استفاده از آن در سایر نرمافزارهای متنباز اعطا نماییم. لطفاً برای هرگونه درخواست از این دست با fyodor@nmap.org تماس بگیرید. به طور مشابه، ما نرمافزارهای متنباز ناسازگار را بدون مجوز ویژه از دارندگان حق نشر در Nmap ادغام نمیکنیم.
اگر یک توافقنامه مجوز یا قرارداد کتبی برای Nmap (مانند یک مجوز Nmap OEM[19]) دریافت کردهاید که شرایطی غیر از این را بیان میکند، میتوانید به جای آن، استفاده و بازتوزیع Nmap را تحت آن شرایط انتخاب کنید.
مجوز کریتیو کامنز برای این راهنما (Creative Commons License for this Nmap Guide)
این راهنمای مرجع Nmap تحت حق نشر (C) 2005–2022 متعلق به Nmap Software LLC است. بدین وسیله تحت نسخه ۳.۰ از مجوز انتساب کریتیو کامنز (Creative Commons Attribution License)[20] قرار میگیرد. این به شما امکان میدهد تا زمانی که به منبع اصلی ارجاع میدهید، اثر را به دلخواه خود بازتوزیع و اصلاح کنید. متناوباً، میتوانید با این سند به گونهای رفتار کنید که گویی تحت همان مجوز خود Nmap قرار دارد (که قبلاً مورد بحث قرار گرفت).
در دسترس بودن کد منبع و مشارکتهای جامعه (Source Code Availability and Community Contributions)
کد منبع این نرمافزار ارائه شده است زیرا ما معتقدیم کاربران حق دارند قبل از اجرای یک برنامه دقیقاً بدانند که چه کاری انجام خواهد داد. این امر همچنین به شما امکان میدهد نرمافزار را برای حفرههای امنیتی ممیزی کنید.
کد منبع همچنین به شما اجازه میدهد Nmap را به پلتفرمهای جدید پورت کنید، باگها را برطرف سازید و ویژگیهای جدیدی اضافه کنید. از شما بسیار تشویق میشود که تغییرات خود را به عنوان درخواست ادغام گیتهاب (PR) ارسال کنید یا آنها را به <dev@nmap.org> برای ادغام احتمالی در توزیع اصلی بفرستید. با ارسال چنین تغییراتی، فرض بر این است که شما حق نامحدود و غیرانحصاری برای استفاده مجدد، اصلاح و مجوزدهی مجدد کد را به The Nmap Project واگذار میکنید. این امر مهم است زیرا ناتوانی در مجوزدهی مجدد کد باعث ایجاد مشکلات ویرانگری برای سایر پروژههای نرمافزار آزاد (مانند KDE و NASM) شده است. ما همچنین مجوزهای تجاری Nmap OEM[21] را میفروشیم. اگر مایلید شرایط مجوز ویژهای را برای مشارکتهای خود مشخص کنید، کافی است هنگام ارسال آنها این موضوع را قید نمایید.
سلب مسئولیت و عدم ضمانت (No Warranty)
این برنامه به این امید که مفید باشد توزیع میشود، اما بدون هرگونه ضمانت؛ حتی بدون ضمانت ضمنی تجاری بودن یا مناسب بودن برای یک هدف خاص.
همچنین باید توجه داشت که Nmap گاهی اوقات باعث از کار افتادن برنامههایی با نگارش ضعیف، پشتههای TCP/IP و حتی سیستمعاملها شده است. اگرچه این امر بسیار نادر است، اما توجه به آن مهم است. Nmap هرگز نباید در برابر سیستمهای حساس و حیاتی اجرا شود مگر اینکه آماده پذیرش قطعی سرویس باشید. ما در اینجا اذعان میکنیم که Nmap ممکن است سیستمها یا شبکههای شما را از کار بیندازد و از هرگونه مسئولیت در قبال خسارات یا مشکلاتی که Nmap میتواند ایجاد کند سلب مسئولیت میکنیم.
استفاده نامناسب (Inappropriate Usage)
به دلیل خطر جزئی خرابی سیستمها و به این دلیل که تعداد کمی از هکرهای کلاهسیاه مایلند از Nmap برای شناسایی قبل از حمله به سیستمها استفاده کنند، مدیرانی هستند که وقتی سیستم آنها پویش میشود ناراحت میشوند و ممکن است شکایت کنند. بنابراین، اغلب توصیه میشود قبل از انجام حتی یک پویش سبک شبکه، مجوز درخواست کنید.
نرمافزار Nmap هرگز نباید با امتیازات ویژه (مانند suid root) نصب شود. این کار یک آسیبپذیری امنیتی بزرگ ایجاد میکند زیرا سایر کاربران روی سیستم (یا مهاجمان) میتوانند از آن برای ارتقای امتیاز استفاده کنند.
نرمافزار Nmap برای استفاده در محیطهای خطرناک که نیازمند عملکرد بدون نقص و ضدخرابی (fail-safe) هستند و در آنها نقص نرمافزار میتواند مستقیماً منجر به مرگ، آسیب شخصی یا آسیبهای شدید فیزیکی یا محیطی شود، طراحی، ساخته یا در نظر گرفته نشده است.
نرمافزارهای شخص ثالث و اعلانات مالی (Third-Party Software and Funding Notices)
این محصول شامل نرمافزارهایی است که توسط Bunyad نرمافزار آپاچی (Apache Software Foundation)[22] توسعه یافته است. نسخه اصلاحشدهای از کتابخانه ضبط بسته قابل حمل Libpcap[23] همراه با Nmap توزیع شده است. نسخه ویندوز Nmap به جای آن از کتابخانه Npcap[24] مشتقشده از Libpcap استفاده میکند. پشتیبانی از عبارتهای باقاعده توسط کتابخانه PCRE[25] ارائه میشود که نرمافزاری متنباز است و توسط فیلیپ هیزل (Philip Hazel) نوشته شده است. برخی عملکردهای شبکه خام از کتابخانه شبکه Libdnet[26] استفاده میکنند که توسط داگ سانگ (Dug Song) نوشته شده است. نسخه اصلاحشدهای از آن با Nmap توزیع میشود. نرمافزار Nmap میتواند به صورت اختیاری با جعبهابزار رمزنگاری OpenSSL[27] برای پشتیبانی از تشخیص نسخه SSL پیوند داده شود. موتور اسکریپتنویسی Nmap از یک نسخه تعبیهشده از زبان برنامهنویسی Lua[10] استفاده میکند. کتابخانه طبقهبندی خطی Liblinear[28] برای تکنیکهای یادگیری ماشین تشخیص سیستمعامل IPv6[29] ما استفاده میشود.
تمام نرمافزارهای شخص ثالث شرحدادهشده در این پاراگراف تحت مجوزهای نرمافزاری به سبک BSD به صورت رایگان قابل بازتوزیع هستند.
بستههای باینری برای ویندوز و Mac OS X شامل کتابخانههای پشتیبانی لازم برای اجرای Zenmap و Ndiff با پایتون و PyGTK هستند. (پلتفرمهای یونیکس معمولاً نصب این کتابخانهها را آسان میکنند، بنابراین بخشی از بستهها نیستند). فهرستی از این کتابخانههای پشتیبانی و مجوزهای آنها در فایلهای LICENSES گنجانده شده است.
این نرمافزار تا حدی از طریق Google Summer of Code[30] و برنامه DARPA CINDER[31] (DARPA-BAA-10-84) پشتیبانی مالی شده است.
کنترل صادرات ایالات متحده (United States Export Control)
نرمافزار Nmap تنها زمانی از رمزنگاری استفاده میکند که با پشتیبانی اختیاری OpenSSL کامپایل شده و با OpenSSL پیوند داده شود. هنگامی که بدون پشتیبانی OpenSSL کامپایل شود، The Nmap Project معتقد است که Nmap مشمول کنترل صادرات مقررات مدیریت صادرات ایالات متحده (EAR)[32] نیست. به این ترتیب، هیچ ECCN (شماره طبقهبندی کنترل صادرات) قابل اعتمالی وجود ندارد و صادرات نیازی به مجوز خاص یا سایر مجوزهای دولتی ندارد.
هنگامی که با پشتیبانی OpenSSL کامپایل شود یا به صورت کد منبع توزیع گردد، The Nmap Project معتقد است که Nmap تحت شماره ECCN ایالات متحده به شرح 5D002[33] (“Information Security Software”) قرار میگیرد. ما Nmap را تحت استثنای TSU برای نرمافزارهای رمزنگاری در دسترس عموم تعریفشده در EAR 740.13(e)[34] توزیع میکنیم.
یادداشتها (NOTES)
- 1.
- Nmap Network Scanning: The Official Nmap Project Guide to Network Discovery and Security Scanning
- 2.
- RFC 1122
- 3.
- RFC 792
- 4.
- RFC 950
- 5.
- UDP
- 6.
- SCTP
- 7.
- TCP RFC
- 8.
- RFC 959
- 9.
- RFC 1323
- 10.
- زبان برنامهنویسی Lua
- 11.
- اولویت عملگرها
- 12.
- پروتکل IP
- 13.
- RFC 2960
- 14.
- Nmap::Scanner
- 15.
- Nmap::Parser
- 16.
- xsltproc
- 17.
- فهرستشده در ویکیپدیا
- 18.
- مجوز منبع عمومی Nmap (NPSL)
- 19.
- مجوز Nmap OEM
- 20.
- مجوز انتساب کریتیو کامنز
- 21.
- Nmap OEM
- 22.
- بنیاد نرمافزار آپاچی (Apache Software Foundation)
- 23.
- کتابخانه ضبط بسته قابل حمل Libpcap
- 24.
- کتابخانه Npcap
- 25.
- کتابخانه PCRE
- 26.
- Libdnet
- 27.
- جعبهابزار رمزنگاری OpenSSL
- 28.
- کتابخانه طبقهبندی خطی Liblinear
- 29.
- تکنیکهای یادگیری ماشین تشخیص سیستمعامل IPv6
- 30.
- Google Summer of Code
- 31.
- برنامه DARPA CINDER
- 32.
- مقررات مدیریت صادرات (EAR)
- 33.
- 5D002
- 34.
- EAR 740.13(e)
| 03/27/2026 | Nmap |