August 22, 2008

10 نکته در مورد استفاده از Nmap

تا بحال بارها و بارها توسط افرادی که در کار با این نرم افزار به مشکل برخورده اند مورد سوال قرار گرفته ام . گفتم شاید از طریق این پست بتوانم خیال خودم و بقیه را کمی راحت تر کنم!

بدون شک با این نرم افزار آشنا هستید و بارها از آن استفاده کرده اید ، اما آیا از تمام امکانات آن استفاده می کنید ؟ با در نظر داشتن چند نکته و استفاده کمی حرفه ایی تر از قابلیت های Nmap می توان نتایج بسیار بهتری گرفت . در این پست سعی می کنم چند مورد از این نکات را مرور کنم .

1-
سیستم عامل مناسب برای اجرا : گرچه Nmap تقریبآ هر سیستم عاملی را برای کار خود پشتیبانی می کند اما برخی شرایط ایجاد شده توسط سیستم عامل یا موجب کندی و افزایش درصد خطای کار نرم افزار میگردد و یا به کل استفاده از برخی قابلیت های نرم افزار را غیر ممکن می کند . پیشنهاد دوستانه من این است که تا حد ممکن از استفاده از ویندوز برای این منظور پرهیز کنید . دلیل آن محدودیت های ایجاد شده در سطح درایور ها و قابلیت های دسترسی خام (RAW) برای تولید پکت ها ، از زمان انتشار XP Sp2 به بعد است . نرم افرار ها و Patch های متعددی برای حل این مشکل ارائه شده ، اما Nmap تحت ویندوز هرگز به خوبی و دقت نسخه لینوکسی آن کار نکرده است .

2-لینک ارتباطی مناسب برای دسترسی به شبکه : ذات Nmap با ارتباطات مبتنی بر PPPoE مشکل دارد و این مورد بخصوص در ویندوز جدی است . بسیاری از قابلیت های اساسی مانند انواع Ping Scan و تولید بسته های سفارشی شده (ICMP,IGMP,TCP,..) در این حالت ( و تحت ویندوز) مختل می شود . لینک های Dial-up نیز گاهی این مشکلات را پدید می آورند . حد اقل کاری که برای فرار از این موارد می توان انجام داد ، استفاده از نرم افزار با پارامترهای روبرو است “Nmap –sT –P0 به دلیل اینکه Nmap نمی تواند بسته های دلخواه ICMP خود را تولید کند ، ادامه کار نرم افزار درکشف Host های جدید با مشکل روبرو می شود. تا حد امکان سعی کنید سیستمی که Nmap بر روی آن اجرا می شود از طریق یک لینک Ethernet به شبکه متصل شده باشد .حتی اگر این لینک در نهایت به یک مودم ADSL منتهی شده که بر اساس PPPoE کار می کند .

3-انتخاب روش مناسب برای شناسایی سیستم های فعال : Nmap به هر روشی که فکر کنید به شما امکان شناسایی Host های فعال (Alive) را می دهد. بصورت پیشفرض و در صورت امکان ، استفاده از ARP Scanning بهترین گزینه است . بگذارید نکته ای را گوشزد کنم . اگر مطمئن هستید که Host مورد نظر شما وجود دارد و اصطلاحآ Down نیست ، وقت خود را تلف نکنید . با استفاده از پارامتر "-P0" همینجا به این مرحله خاتمه دهید . Nmap با فرض فعال بودن Host کار خود را ادامه می دهد . در غیر اینصورت شما سه روش متفاوت برای شناسایی Host ها پیش رو دارید که عبارتند از ICMP Scan , Protocol Scan و Syn/Ack Scan . پیش از اینکه تصمیم بگیرید از کدام روش استفاده کنید ، به یک سوال جواب دهدید . آیا شبکه هدف درخواست های ICMP را کلآ فیلتر کرده و یا فقط برخی سیستم ها به ICMP پاسخ می دهند ؟ این موضوع را به Ping کردن چند IP شناخته شده در آن شبکه (مثلآ DNS یا Web Server شبکه ) امتحان کنید.
حال می توانیم بهتر تصمیم بگیریم . حتی اگر یک مورد جواب ICMP داشتید ، اولین گزینه استفاده از روش ICMP Discovery می باشد که با یک یا چند پارامتر می توان پاسخ به انواع مختلف درخواست های ICMP را بررسی کرد . "nmap –PE –PP –PM " با این دستور هر سه حالت Echo , Time Stamp و NetMask Request برای تولید درخواست های ICMP استفاده می شود.
بهتر است تنها به نتایج ICMP اطمینان نکنید و از روش دوم هم برای تکمیل شناسایی استفاده کنید که همان روش Syn/Ack Scan است . در صورتی که حدست می زنید شبکه توسط یک فایروال Stateful حفاظت شده ، استفاده از پارامتر "-PS" ( همان Syn Scan) و اگر نوع فایروال Stateless باشد ، استفاده از "-PA" ( یا Ack Scan) انتخاب مناسب است . این دو پارامتر نیاز به یک شماره پورت نیز دارند تا بسته Syn/Ack را به آن پورت ارسال کنند . رایج ترین پورت ها برای این منظور به ترتیب 80,25,22,443,21,113,23,53,554,3389 هستند. می توانید یک یا چند پورت مختلف و همچنین چند روش مختلف اسکن را در یک اجرا داشته باشید . Nmap از این نظر بسیار مهربان و پر حوصله است!

"nmap –sP –PE –PE –PM –PS80,22,23,53 –PA80,22,25,3389 {hosts}"
در نهایت اگر فکر می کنید باز هم چیزی از قلم افتاده ، میتوان از روش
Protocol Scan در کنار روش های بالا استفاده کرد ("-PO") .

4-سرعت اسکن : اشتباه در تنظیم این مورد می تواند موجب از دست دادن سیستم ها و پورت های باز زیادی شود . همچنین شناسایی شدن عمل پورت اسکن شما وابسته به همین مورد است . در ساده ترین حالت توسط پارامتر "-T{1~5}" میتوانید سرعت اسکن را تنظیم کنید . کند ترین حالت "-T1" است. در صورتی که قصد پویش شبکه بزرگی مثل کل شبکه داخلی سازمان خود را دارید ، بهتر است بجای افزایش سرعت بدین روش ، تعداد اسکن های موازی را افزایش دهدید . دلیل این موضوع این است که هرچه سرعت (پارامتر T ) بیشتر باشد ، Nmap دقت و زمان کمتری را صرف تلاش مجدد و انتظار برای دریافت پاسخ از سیستم های کند یا دارای Load بالا می کند . با استفاده از یک زمانبندی مناسب (-T4) و در عوض افزایش تعداد پویش های موازی —min-parallelism , --max-parallelism میتوانید بهترین نتیجه را در زمان کوتاه تر بگیرید. استفاده از پارامتر —min-rate و –max-rate به شما امکان تنظیم دقیق تر این مورد را می دهد.

5-پورت های مورد نظر : nmap بصورت پیش فرض بیش از 1400 پورت را بررسی می کند . در صورتی که نمی دانید در شبکه هدف به دنبال چه چیزی هستید ، می توانید به لیست پیش فرض اعتماد کنید . در غیر اینصورت ، توصیه میکنم تنها اقدام به پویش برای پورت هایی کنید که می دانید قرار است با آنها چه کاری انجام دهید . در این صورت لیست پورت های مورد نظر شما بطور یقین کمتر از 100 مورد خواهد بود. ممکن است فکر کنید پارامتر –F (Fast Scan) تعداد پورت های بسیار کمتری را نسبت به لیست پیش فرض بررسی می کند ، اما این اختلاف تعداد پورت ها کمتر از 250 پورت است و پارامتر –F نیز بیش از 1000 پورت را بررسی می کند . بررسی تمامی پورت های یک سیستم ( پارامتر –p- برای اسکن کل 65535 پورت ) را تنها زمانی انجام دهدید که فکر می کنید سرویسی غیر عادی و یا ناشناخته بر روی سیستم فعال است ، و یا لیست پیش فرض خروجی قابل توجهی به شما نمی دهد . مثلآ ، Hostname آن سیستم نام یا وظیفه ایی مهم را درذهن تداعی می کند اما هیچ سرویس خاصی بر روی پورت های استاندارد به چشم نمی خورد .
اگر قصد پویش یک سرویس خاص در محدوده بزرگی را دارید ، مثلآ شناسایی کلیه سرویس های SMTP در محدوده 217.218.x.x ، باید این را بدانید که با کمال احترام Nmap نرم افزار مناسبی برای این کار نیست . من استفاده از نرم افزاری مانند Dfind ( برای ویندوز) و یا Grabb ( برای لینوکس( را بعنوان Banner Scanner ترجیج می دهم . اسکنر های بسیار زیادی وجود دارند که هدف از طراحی آنها ، پویش و شناسایی یک سرویس خاص در سطح گسترده می باشد .

6-قابلیت Name Resolution : Nmap بطور پیش فرض سعی می کند Hostname مربوط به هر IP را شناسایی کند مگر اینکه توسط پارامتر "-n" این مورد را غیر فعال کرده باشیم . در صورتی که اسکن را در شبکه داخلی انجام نمی دهید ، و یا نیاز خاصی به Hostname های هر IP ندارید این مورد را غیر فعال کنید . Nmap در صورت نیاز بصورت خودکار سعی می کند از DNS Server که در تنظیمات شبکه شما آورده شده ، برای تبدیل IP ها به Hostname استفاده کند . در صورتی که واقعآ به Hostname های دقیق نیاز دارید ، پیشنها می کنم توسط پارامتر –dns-servers نرم افزار Nmap را برای استفاده از DNS Server های شبکه هدف تنظیم کنید . بدین ترتیب اطلاعات دقیق تری بدست خواهید آورد . همچینین بهتر است علاوه بر DNS Server رسمی شبکه ، کلیه DNS Server های فعالی که در شبکه هدف وجود دارند را نیز در این پارامتر بگنجانید .

7-ستفاده از قابلیت Version Detection : در صورتی که واقعآ به این قابلیت نیاز ندارید ، بی جهت از آن استفاده نکنید ! در شرایطی که تعداد زیادی سیستم قرار است مورد بررسی قرار گیرد ، استفاده از این پارامتر (-sV) زمان مور نیاز برای تکمیل اسکن را بسیار افزایش می دهد. در مورد تعداد کم Host این مورد زیاد چشمگیر نیست ، اما اگر قصد پویش یک کلاس B از شبکه ایی را داشته باشید ، تفاوت کاملآ محسوس است. Nmap همچنین قابلیت جالب و نسبتآ جدیدی دارد که ایده آن استفاده از زبان اسکریپت نویسی خاص Nmap ، برای استخراج هر چه بیشتر اطلاعات از یک سرویس است . این قابلیت توسط پارامتر "-sC" فعال می شود . با استفاده از Nmap Scripting Language شما به راحتی می توانید همزمان با پویش برای پورت های باز ، اقدام به Enumeration و یا حتی جستجو برای یک ضعف امنیتی خاص نیز بکنید . توصیه می کنم حتمآ در مورد این قابلیت Nmap اطلاعات بیشتری کسب کنید .

اخطار : در شبکه های داخلی بزرگ و گسترده که انواع و اقسام سرویس ها و نرم افزارهای قدیمی و یا نا شناخته ممکن است وجود داشته باشد ، پارامتر –sV براحتی می تواند موجب بروز اختلال گردد . نسخه های قدیمی سرویس TNS اوراکل و سیستم های مانیتورینگ قدیمی از جمله تلخ ترین تجربه های من هستند ! بهتر است ابتدا چنین سیستم هایی را شناسایی کرده و توسط پارامتر های "—exclude و یا –excludefile" دور آنها خط قرمز بکشید.

8-استفاده از قابلیت هایOS Detection
: با تمام دقت و کاربرد های مفید این قابلیت Nmap ، من تنها زمانی از آن استفاده می کنم که قصد جمع آوری اطلاعات از یک سیستم خاص را داشته باشم و هرگز از این قابلیت ("-O") در اسکن تعداد زیادی سیستم استفاده نمی کنم . اولین دلیل آن طولانی شدن زمان لازم برای انجام اسکن است . پیشنهاد می کنم هر گاه واقعآ نیاز داشتید بدانید یک Host خاص چه سیستم عاملی دارد ، از این قابلیت فقط برای همان سیستم استفاده کنید. گاهی اوقات ممکن است قصد داشته باشید دل به دریا بزنید و تمام زیر و بم یک شبکه را بدست آورید. در این صورت و با قبول تمامی ریسک ها و احتمالات میتوانید از پارامتر ("-A") استفاده کنید که عمل Service Detection , Script-based Detection , OS Detection و Traceroute را یکجا برای شما انجام می دهد .

9-برخورد با فایروال ها در اسکن : در بسیاری از موارد شما با شبکه ایی روبرو هستید که توسط یک فایروال محافظت شده . در این صورت ممکن است قوانین فایروال در کار شما اختلال ایجاد کند . در این صورت رعایت چند نکته کوچک ممکن است در بسیاری از موارد به شما کمک کند . اولین مورد عدم استفاده از اسکن پورت بصورت سریال است . ( پرهیز از استفاده از پارامتر –r ) . مورد بعد استفاده از یک Source-port مورد اعتماد فایروال است . استفاده از پارامتر –source-port 53 در بسیاری از موارد می تواند رفتار فایروال با شما را کمی خوشایند تر کند ! در نهایت ، استفاده از سرعت پایین در انجام اسکن می تواند عکس العمل های فایروال را کاهش دهد. همچنین در مواردی که متود پیش فرض اسکن (-sS یا همان Syn Scan) نتایج درستی به شما نمی دهد ، میتوانید روش سنتی اما قابل اطمینان تر TCP Connect را با استفاده از پارامتر –sT امتحان کنید .

10-آخرین و کلی ترین نکته : nmap یک پروژه زنده بوده و هر روز دوچار تغییراتی شده و مشکلات مختلف آن شناسایی و رفع می شود . سعی کنید همواره از آخرین نسخه آن استفاده کنید . همچنین مطالعه فایل های راهنما (man pages) مربوط به آن اطلاعات بسیار جالبی را در اختیار شما می گذارد . Nmap دارای مستندات و راهنماهای بسیار جامع ، دسته بندی شده و کامل می باشد . از آنها استفاده کنید!

5 comments:

  1. سلام
    بار دیگر مثل همیشه؛جذاب،مفید،نکته بینی و نکته سنجی در آن موج میزد.
    ممنون سید جان
    استفاده بردیم
    شادان باشید
    محمد میرزائی

    ReplyDelete
  2. ممنون دوست عزیز به امید روزهای بهتر

    ReplyDelete
  3. به نام حق

    بعضی مواقع که می ایم ببینم که شما هنوز فعال هستید یا نه (به سر نوشت سی مرغ و امنیت شبکه و ... دچار شدید یا نه)
    بسی کف میکنیم میبینیم چه شده که با زبان مادری خود مینویسید و ...

    اگر کچول لطف کنید و این افت کلاسی را شرح دهدید بسی ما را از گمراهی میرهانید و در این ماه به جمع را شدگان می پیوندید

    ارادتمند ، ...

    ReplyDelete
  4. جناب کف خون
    اول ممنون از اینکه سر میزنید و ممنون که منتظر حلوای بنده هم هستی :)
    تا پکت در کابل ماست ، اینترنت خانه ی ماست ! پس حالا حالا ها در خدمت شما هستیم

    در مورد افت کلاس ( به گفته شما ) هم خیلی وقت پیش توضیح دادم در یک پست مجزا که چرا انگلیسی و اینکه قضیه اصلا کلاس و مدرسه و این قرتی بازی ها نیست
    http://hkashfi.blogspot.com/2008/04/blog-post.html
    اگر این پست بنظرشما جواب قانع کننده ای نبود باز من همینجا در خدمت هستم.

    ReplyDelete
  5. بسیار عالی

    ReplyDelete