وبلاگ جوجه مهندس ها

یادداشت های دو دانشجوی مهندسی کامپیوتر

وبلاگ جوجه مهندس ها

یادداشت های دو دانشجوی مهندسی کامپیوتر

خداحافظ.!!

به دلیل مشکلات فوق العاده جهت مدیریت وبلاگ و پست مطالب جدید، این وبلاگ تا اطلاع ثانوی به گل نشست....

و ....

وبلاگ جدید در آدرس

http://engineers.blogfa.com

آماده پاسخگویی به سوالات شما وبگردان عزیز می باشد.!

اصول پویش پورت - بخش دوم

اصول کار با Nmap  

 

Nmap وضعیت پورت ها را به شش حالت تقسیم می کند:

·                     باز(open) : یک برنامه کاربردی به طور کامل بسته های TCP و UDP را در این پورت می پذیرد. یافتن یک پورت باز بر روی ماشین هدف برای نفوذگر به منزله راهی برای حمله است که می تواند با ارسال کدهای مخرب ماشین هدف را تحت نفوذخود قرار دهد.

·                     بسته (closed): یک پورت بسته ، در دسترس است ، یعنی به بسته های ارسالی از سوی Nmap پاسخ می دهد، ولی هیچ برنامه کاربردی به این پورت گوش نمی دهد. چنین پورتی برای نشان دادن فعال بودن یک ماشین در شبکه ، به طور مثال برای Ping کردن ماشین ، مفید خواهد بود.

·                     فیلترشده (filtered) : در مواجهه با این پورت ، Nmap یا هر نرم افزار پویشگر دیگر نمی تواند جستجوی زیادی انجام دهد. زیرا این پورت توسط firewall نرم افزاری یا سخت افزاری از پاسخ دادن به بسته های TCP یا UDP جلوگیری می شود و Nmap نمی تواند درباره آن نظر دهد.

·                     فیلترنشده (unfiltered): فیلترنشده یعنی پورت مذکور در دسترس است ولی Nmap قادر به تشخیص باز یا بسته بودن آن نیست. پویش چنین پورتی با SYN Scan و یا  FIN Scan ممکن است به تشخیص باز بودن پورت کمک کند.

·                     باز یا فیلتر شده (open|filtered): Nmap پورتی را در این وضعیت گزارش می کند که باز یا فیلتر بودن پورت را نتواند تشخیص دهد. این حالت زمانی پیش می آید که پورت هیچ پاسخی به بسته ها نمی دهد و در نتیجه Nmap قادر به این تشخیص نیست.

·                     بسته یا فیلترشده(close|filtered): زمانی که Nmap بسته یا فیلتر بودن پورت را نتواند تشخیص دهد آن را در حالت بسته یا فیلترشده گزارش می کند.

 

روش Nmap برای پویش

کلیه نتایجی که توسط Nmap به ما گزارش می شود، بر اساس بسته هایی است که از ماشین هدف در پاسخ به بسته های ارسالی توسط Nmap ، برای ما فرستاده شده. برخی از هاست ها برای گمراه کردن Nmap ، بسته هایی را که خود مایلند ارسال می کنند . این هاست ها اصول RFC را رعایت نمی کنند . پویش های FIN ، Null و Xmas در مواجهه با این شرایط حساس هستند و باید از روش های دیگری برای پویش پورت استفاده کرد.

 

 تکنیک های پویش پورت و Nmap

از بین دستورات زیر تنها مجاز به استفاده یکی از آن ها در یک زمان هستیم با این تفاوت که می توانیم پویش UDP (-sU ) را همراه با هر یک از پویش های TCP به کار بریم. انواع مکانیزم های پویش پورت در Nmap تعریف شده است. دستوری که برای این کار استفاده می شود به صورت –sC است که C کاراکتر خاصی است که در هر مکانیزم پویش جایگزین با کاراکتر مشخص آن روش می شود.

·                     -sS (TCP SYN SCAN) : SYN Scan پویش پیش فرض و معمول سیستم است . این روش می تواند به سرعت پورت ها را پویش کند. پویش هزار پورت در ثانیه در یک شبکه سریع که با دیوار آتش حمایت نمی شود ، از ویژگی ممتاز این گزینه است. این گزینه تمایز بین پورت های باز، بسته و فیلتر شده را دقیقاً مشخص می کند.

·                     -sT (TCP Connect Scan) : بعد از SYN Scan ، یعنی در حالتی که این گزینه نباشد، پویش پیش فرض سیستم این روش است. زمانی استفاده می شود که نفوذگر اجازه ارسال بسته های خام(row packet)را ندارد و یا در حال پویش شبکه ایست که از پروتکل IPv6 استفاده می کند. در این حالت Nmap از سیستم عامل ماشین هدف درخواست به برقراری یک اتصال ، با ارسال دستور سیستمی connect() می کند.  این یک واسط برنامه نویسی است که اکثر برنامه های کاربردی رایج وب از آن برای برقراری اتصال استفاده می کنند. در واقع Nmap از داده های خام برای کسب اطلاعات پورت ها استفاده نمی کند ،بلکه از یک (Appllication Programming Interface) API  ، و برقراری یک ارتباط واقعی برای این کار بهره می برد. در صورتی که –sS موجود و قابل استفاده باشد ، نسبت به این روش گزینه بهتری برای پویش پورت است. زیرا Nmap برروی بسته های خام کنترل بیشتری از یک دستور سیستمی مثل connect() دارد. اشکال بزرگ این روش ، ثبت این عملیات در فایل ثبت وقایع است و از این طریق امکان شناسایی نفوذگر از طریق سیستم هایی که مجهز به IDS یا همان سیستم های کشف مزاحمت ، وجود دارد. برقراری اتصال با یک سیستم و سپس قطع آن ، بدون ارسال هیچ داده ای کار غیرمعمولی است . و مدیر سیستم با مشاهده مجموعه ای از این تلاش ها می تواند نتیجه بگیرد که این عملیات از سوی یک نفوذگر است.

·                     -sU (UDP SCAN) : سرویس هایی مثل DNS ، SNMP ، و DHCP که به ترتیب بر پورت های  53 ، 162/161 و 68/67 ثبت شده اند، سه تا از معمول ترین سرویس های هستند که مبتنی بر پروتکل UDP هستند. پویش UDP به طور کلی کندتر و مشکل تر از انواع پویش های TCP است و به همین دلیل بعضی از مسئولین امنیتی شبکه ها از این پورت ها صرف نظر می کنند. و این اشتباه بزرگی است .چرا که نفوذ به سرویس های UDP نیز تقریباً معمول است و نفوذگر از این پورت ها صرف نظر نمی کند. به هر حال Nmap امکان پویش و کسب اطلاعات پورت های مبتنی بر UDP را نیز فراهم کرده است.

پویش UDP با گزینه –sU فعال می شود و می تواند با هریک از پویش های TCP همراه شود تا هر دو پروتکل را در نظر گرفته و پویش کنند.

·                     -sN , -sF, -sX (TCP Null , FIN Scan , Xmas Scan ) : این سه گزینه برای پویش های نام برده شده استفاده می شوند. مهمترین حسن این سه تکنیک مخفی ماندن از دید برخی از دیوارهای آتش خاص و مسیریاب هایی است که بسته ها را فیلتر می کنند. و عدم تشخیص و تمایز بین پورت های باز و فیلترشده از معایب این سه روش محسوب می شود که Nmap ، نتیجه آن را به صورت باز| فیلتر شده برای ما گزارش می کند.

·                     -sA (TCP ACK Scan ) : این گزینه با روش های قبلی متفاوت است و به هیچ وجه نمی تواند پورت های باز و یا حتی باز|فیلترشده را تشخیص دهد. این گزینه برای تعیین قواعد و قوانین دیوارآتش استفاده می شود و پورت های فیلتر شده را مشخص می کند.

·                     -sW (TCP Window Scan) : این گزینه مانند –sA عمل می کند، با این تفاوت که روش خاصی برای تمایز و تشخیص پورت های باز و بسته دارد.

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

·                     -sM (TCP Maimon Scan ) : این روش را شخصی به نام Uriel Maimon ابداع کرد. روش مشابه Null ، FIN و Xmas  است با یک تفاوت جزئی.

 

طبق RFC 793  که اصول TCP را تعریف می کند، بسته RST باید از پورت های باز یا بسته ارسال شود. Uriel Maimon این نکته را ذکر کرد که بسیاری از سیستم های مبتنی بر BSD این بسته را تنها در پورت های باز ارسال می کنند!.

·                     --scanflags : کاربران حرفه ای  Nmap مجبور نیستند تنها از چند پویش محدود و از پیش تعریف شده آن استفاده کنند. با استفاده از این گزینه می توانند به طوردلخواه پرچم های TCP را تنظیم و از یک بسته مطابق نظر خود برای ارسال و دریافت و تحلیل نتیجه و در نهایت تشخیص حالت پورت استفاده کنند. در مقابل این دستور نام پرچم ها به ترتیب یک بسته TCP قرار می گیرند و یک پویش خاص مطابق نظر کاربر یا همان نفوذگر می سازد.

علاوه بر تعریف این پرچم ها می توان یک روش پویش TCP نیز تعریف کرد که به Nmap می گوید که نتایج را چگونه تفسیر کند. اگر هیچ روشی ذکر نشود، به طور پیش فرض از SYN Scan استفاده می کند.

·                     -sI <zombie host[:probeport]> : با استفاده از این روش هیچ بسته ای به ماشین هدف از آدرس IP واقعی نفوذگر ارسال نمی شود و در نتیجه ماهیت نفوذگر از دید سیستم های کشف مزاحمت مخفی می ماند.

·                     -sO (IP Protocol Scan ) :  این گزینه به نفوذگر این امکان را می دهد که تعیین کند چه پروتکل هایی در ماشین هدف پویش شود .مثلاً TCP ، ICMP ، IGMP و غیره. درواقع این روش ، پویش پورت نیست ، زیرا در بین پروتکل ها به جستجو می پردازد، بر خلاف سایر روش ها که پورت های TCP یا UDP را پویش می کردند. پویش پروتکل ها به روشی مشابه UDP Scan انجام می شود. به جای اینکه در میان شماره پورت های یک بسته UDP جستجو کند، سرآیند بسته های IP را ارسال کرده و در میان فیلد 8 بیتی پروتکل IP می گردد. و به جای اینکه منتظر رسیدن پیغام ICMP Port Unreachable باشد، در انتظار ICMP Protocol Unreachable ، برای تشخیص وضعیت پورت است. اگر هیچ پیغامی از هیچ پروتکلی در ماشین هدف ، دریافت نکند، آن را باز در نظر می گیرد. دریافت خطای ICMP Protocol Unreachable با کد 2 تعیین کننده پروتکل بسته و خطاهای دیگر ICMP Protocol Unreachable با کد 1، 3، 9 ، 10 یا 13 پروتکل را فیلترشده مشخص می کند.

·                     -b <ftp relay host> (FTP Bounce Scan) : این گزینه برای FTP Bounce Scan که شرح کامل آن ارائه شد، درنظر گرفته شده است. که باید آدرس هاست ftp غیرواقعی منظور را در دستور ذکر کنیم.

تعیین پورت ها و ترتیب پویش

در Nmap علاوه بر دستورات فوق که به نفوذگر امکان انتخاب هر یک از روش های پویش پورت را می دهد، امکان تعیین شماره پورت ها و ترتیب پویش پورت ها به صورت تصادفی یا به ترتیب وجود دارد. به صورت پیش فرض 1024 پورت را پویش می کند. گزینه های موجود برای این انتخاب ها به شرح زیر است:

·                     -p <port ranges> : با این دستور تنها شماره پورت های مشخص شده در محدوده پورت پویش می شود. در صورتی که بخواهیم پورت های TCP و UDP را پویش کنیم، پروتکل موردنظر را به صورت T: برای TCP و U: برای UDP و به دنبال آن شماره پورت موردنظر را ذکر می کنیم.

·                     -F : تنها شماره پورت های معمول و رایجی را پویش می کند که این شماره پورت ها در فایل nmap-services ذخیره شده است.  همچنین امکان تعیین فایل دلخواه نفوذگر به جای nmap-services با استفاده از دستور –datadir وجود دارد.

·                     -r : Nmap به صورت پیش فرض پورت ها را به صورت تصادفی از میان مجموعه مورد نظر انتخاب می کند. استفاده از این دستور Nmap را مجبور می کند پورت ها را به ترتیب پویش کند.

 

 تشخیص نوع سیستم عامل

یکی از بهترین ویژگیهای شناخته شده در Nmap تشخیص سیستم عامل ماشین هدف با استفاده از روش TCP Stack Fingerprinting است.

Nmap نتایج به دست آمده را با پایگاه داده خود به نام nmap-os-fingerprints که شامل اطلاعات بیش از 1500 سیستم است مقایسه کرده و نوع سیستم هدف را تشخیص می دهد و به صورت متنی که شامل نام شرکت تولید کننده (مثل Sun ) ، نام سیستم عامل ( مثل Solaris ) و نسخه سیستم (مثلاً 10)  و نوع ماشین و دستگاه ( چند منظوره ، مسیریاب ، سوئیچ و یا کنسول بازی) ، است به کاربر نمایش می دهد.

تشخیص سیستم عامل ماشین هدف ، مزایای زیادی را برای نفوذگر به ارمغان می آورد. یکی از اطلاعاتی که نفوذگر می تواند از آن کشف کند، اندازه گیری زمان up بودن سیستم است. این کار را با استفاده از TCP Timesamp که می تواند زمان آخرین راه اندازی مجدد سیستم را مشخص کند ، انجام می دهد . از دیگر اطلاعاتی که نفوذگر می تواند با این روش به دست آورد تعیین کلاس پیش بینی دنباله TCP است که با استفاده از آن نفوذگر می تواند برای ارسال و برقراری ارتباط با آدرس IP های جعلی استفاده کند. بسیاری از ماشین ها نسبت به این مساله آسیب پذیر هستند.

دستوراتی که Nmap برای این منظور فراهم کرده است به قرار زیر است:

·                     -O :  برای تشخیص نوع سیستم عامل استفاده می شود . در ابتدا سیستم عامل های نسل دوم و در صورتی که در میان آن ها موفق به کشف سیستم عامل هدف نشود از بین سیستم عامل های نسل اول به دنبال سیستم ماشین هدف جستجو می کند.

·                     -O2 :  با استفاده از این دستور Nmap تنها در میان سستم عامل های نسل دوم به جستجو و پویش می پردازد.

·                     -O1 : جستجو در میان سیستم عامل های نسل اول 

اصول پویش پورت - بخش اول

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

 

یکی از ابزارهای مفید برای پویش پورت ها نرم افزار Nmap است .رایگان و اپن سورس بوده و امکان توسعه ویژگیهای آن برای کاربر وجود دارد.و تحت لینوکس کار می کند. البته یک نسخه ویندوزی از Nmap هم وجود دارد ول خوب!!! میان ماه من تا ماه گردون ، تفاوت از زمین تا آسمان است...

 

برای این که درک کاملی از این مقاله داشته باشید، باید در ابتدا اصول و روش های علمی پویش پورت را بدانید. منع مفیدی که در این زمینه می تونه به شما کمک کنه کتاب نفوذگری در شبکه و روشهای مقابله با آن نوشته مهندس احسان ملکیان است که با اجازه مهندس ملکیان و البته شما! ، من تکنیکهای علمی پویش پورت رو از همین کتاب با روش کاملاً علمی Copy & Paste!!  در وبلاگ ذکر می کنم. و در ادامه هم روش کار با Nmap رو بدون استفاده از روش Copy & Paste  براتون توضیح می دهم.

 

مکانیزم های پویش پورت

مکانیزم پویش مودبانه (Polite Scan)

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

·                     یک بستهSYN  به سمت ماشین هدف ارسال می شود.

·                     پویشگر، مدت زمان مشخصی انتظار می کشد تا پاسخSYN-ACK  برگردد. اگر چنین پاسخی برگردد، بنابراین پورت مربوطه باز است. در غیر این صورت ممکن است پورت باز نباشد.

·                     اگر پورت باز بود و جوابSYN-ACK  برگشت، مرحله سوم از دست تکانی(Hand Shaking)  سه مرحله ای با ارسال بسته ACK تکمیل می شود.

·                     حال ارتباطTCP  برقرار است و باید مودبانه ختم شود . زیرا هدف مبادله داده نبوده و فقط یک بررسی و آزمایش بوده. پویشگر بلافاصله این ارتباط را با ارسال بسته FIN=1 ختم می نماید.

عدم بازگشت پاسخ در مرحله دوم این یقین را حاصل نمی کند که آن پورت بسته است. زمانی می توان مطمئن شد که پورت مورد نظر بسته است که در پاسخ به بسته SYN-ACK یکی از دو پیغام زیر برگردد:

·                     بستهRESET به جای بسته ACK برگردد.

·                     بستهICMP Port unreachable  به جای بسته ACK برگردد.

این نوع پویش و جستجو اگر چه برای استفاده صلح جویانه و اهداف مدیریت شبکه بسیار مناسب است ، ولی به دو دلیل نفوذگر از این روش استقبال نمی کند:

·                     بسیاری از سرویس دهنده ها به محض تکمیل شدن مراحل دست تکانی سه مرحله ای و برقراری یک ارتباط TCP ، مشخصات آن را در فایلی درج می کند.( Log) . لذا بسادگی آدرس نفوذگر کشف خواهد شد. در برقراری ارتباط TCP ، نفوذگر نمی تواند از آدرس های دروغین(IP Spoofing)  استفاده کند. زیرا در این صورت قطعاً هیچ پاسخی مبنی بر باز یا بسته بودن پورت دریافت نخواهد کرد. چون بسته پاسخ برای آدرس جعلی ارسال خواهد شد. بدین ترتیب نفوذگر مجبور است از آدرس IP حقیقی استفاده کند که درج شدن این آدرس در فایل ثبت عملکرد (Log file) ، هویت او را آشکار خواهد کرد.

·                     تکمیل سه مرحله دست تکانی و خاتمه دادن به ارتباط TCP ، برای نفوذگر بسیار وقت گیر است، زیرا باید به ازای هر پورت مورد آزمایش ، این عملیات از نو تکرار شود و چون تعداد پورت ها نسبتاً زیاد است، وقت بسیار زیادی از نفوذگر خواهد گرفت. زیرا زمانی که نرم افزار پویشگر پس از ارسال بسته SYN باید منتظر بماند تا پاسخ SYN-ACK برگردد نسبتاً زیاد و در حد چند ثانیه است.

به دلایل فوق نفوذگر از روش های مخفیانه و سریعتری بهره می گیرد.

 

 پویش مخفیانه: TCP SYN Scan

در این مکانیزم، مراحل زیر دنبال می شود:

·                               یک بستهSYN  به سمت ماشین هدف ارسال می شود.

·                               پویشگر، مدت زمان مشخصی انتظار می کشد تا بسته SYN-ACK بازگردد. بازگشت چنین بسته ای نشان می دهد که پورت باز است.

·                               در صورت برگشت بسته SYN-ACK ، پویشگر بلافاصله بسته RESET را ارسال می کند. قبل از آنکه هیچ ارتباطی برقرار شود.

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

اگر پورت مورد نظر بسته باشد ممکن است در پاسخ به بسته SYN ، بسته RESET و یا پیغام ICMP Port Unreachable باز گردد. در صورت دریافت چنین بسته هایی می توان اطمینان یافت که پورت بسته است.

البته مسیریاب هائی که به دیوار آتش مجهز هستند، قادرند ورود بسته های SYN را ردیابی و ثبت نمایند.

 

 پویش به روش نقض اصول پروتکل

در دو روش قبلی عمل پویش پورت با ارسال بسته SYN و انتظار برای دریافت بسته SYN-ACK انجام می شود. در مکانیزم پویش به روش نقض اصول پروتکل در اولین مرحله، بسته ای ارسال می شود که متعارف و معمول نیست. بسته ای که در شرایط طبیعی هیچ گاه ارسال نخواهد شد. در زیر برخی از این بسته های نا متعارف که اصول پروتکل TCP را نقض می کند معرفی شده اند:

·                     TCP FIN Scan : به طور متعارف بسته TCP FIN برای خاتمه دادن به یک ارتباط TCP ارسال می شود و هیچ گاه چنین بسته ای بدون مقدمه و پیش از برقراری یک ارتباط TCP ارسال نخواهد شد. در روش پویش TCP FIN Scan ، بدون مقدمه یک بسته FIN از طرف پویشگر به سمت یک شماره پورت از ماشین هدف ارسال می شود. اگر پورت مورد نظر بسته باشد بر طبق اصول پروتکل TCP باید یک بسته RESET برگردد ولی اگر پورت باز باشد، هیچ پاسخی دریافت نخواهد شد. پس برنامه پویشگر با دریافت بسته RESET از بسته بودن آن پورت اطمینان حاصل می کند ولی در صورتی که چیزی دریافت نکند احتمال باز بودن آن پورت بالاست.  بنابراین بر خلاف دو روش قبل برگشتن پاسخ در این روش به معنای بسته بودن پورت مربوطه است و لیکن عدم بازگشت بسته، به معنای بازبودن احتمالی آن پورت می باشد.

·                     Null Scan :  در این مکانیزم، برنامه پویشگر بدون آنکه ارتباط TCP با مقصد برقرار کرده باشد، یک بسته TCP با شماره پورت مشخص برای یک پورت خاص ارسال می کند. ویژگی این بسته آن است هیچ یک از بیتهای SYN  ، FIN و ACK در آن 1 نیست. این بسته طبق تعریف پروتکل TCP ،هیچ معنای خاصی ندارد و اگر پورت مربوطه باز باشد ، بسته حذف می شود و هیچ پاسخی برنخواهد گشت. در حالی که اگر پورت مربوطه بسته باشد در پاسخ بسته RESET برمی گردد. بنابراین عدم بازگشت بسته به معنای باز بودن پورت و برگشت بسته RESET نشان دهنده بسته بودن پورت می باشد.

·                     Xmas Tree : در این مکانیزم ، پویشگر بسته ای را به یک پورت در ماشین هدف ارسال می کند که در آن تمام بیت های FIN ، URG و PUSH با مقدار 1 تنظیم شده است. این بسته نیز هیچ معنای خاصی ندارد و در مقصد قطعاً حذف خواهد شد. بنابراین اگر پورت مربوطه باز باشد هیچ پاسخی باز نمی گردد. ولی اگر این بسته به سمت یک پورت بسته ارسال شود، در پاسخ بسته RESET ارسال می شود.

 

این سه مکانیزم به جز در ماشین های با سیستم عامل ویندوز، در سایر سیستم های عامل به خوبی کار می کند و جواب صحیحی خواهد داد ولیکن در سری سیستم های عامل ویندوز ، استفاده از این سه روش کارآئی ندارد. زیرا بر خلاف اصول پروتکل TCP ،در ویندوز هرگاه بسته ای غیر متعارف دریافت شود چه پورت باز باشد و چه بسته ، در جواب RESET باز خواهد گشت.

 

 پویش به روش TCP ACK Scan

همانند سه مکانیزم قبلی، در مکانیزم TCP ACK Scan برای پویش یک پورت از ارسال غیر متعارف بسته ACK به سمت یک هدف استفاده می شود. یعنی بدون مقدمه یک بسته SYN-ACK ، به سوی یک پورت در ماشین هدف ارسال می شود. به طور معمول و متعارف این بسته در پاسخ به بسته SYN فرستاده می شود. حال وقتی این بسته به یک پورت باز ارسال می شود، چون ماشین منتظر دریافت چنین بسته ای نبوده است، آن را حذف می کند . لذا عدم بازگشت پاسخ نشانگر آن است که احتمالاً آن پورت باز است . ولیکن اگر پورت مربوطه بسته باشد در پاسخ بسته RESET بر می گردد. پویش به روش TCP ACK Scan یک امتیاز بسیار مهم نسبت به بقیه روش ها دارد و آن هم امکان عبور چنین بسته ای از دیوار آتش یا مسیریاب های فیلتر کننده می باشد.

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

وقتی یک ماشین داخلی می خواهد به یک سایت وب دسترسی داشته باشد قاعدتاً یک شماره پورت بزرگتر از 1024 انتخاب کرده و اقدام به ارسال یک بسته SYN به سمت پورت 80 از سرویس دهنده می کند و منتظر بسته SYN-ACK می شود. بنابراین ورود بسته SYN-ACK از پورت 80 به سمت پورتی با شماره بالاتر از 1024 کاملاً طبیعی و مجاز است. با استفاده از همین مفهوم نفوذگر قادر است پورت های باز یک ماشین را پویش نماید.

·                     اگر در پاسخ به بستهSYN-ACK  پاسخ RESET برگردد نشان می دهد که آن پورت باز است. زیرا پروسه ای که به آن شماره پورت گوش می داده، انتظار دریافت بسته SYN-ACK نداشته است. لذا تعجب خود را از دریافت چنین بسته ای با ارسال بسته RESET اعلام می کند.

·                     اگر در پاسخ به بسته های SYN-ACK پاسخی برنگردد، نمی توان از بازبودن و بسته بودن پورت اطمینان حاصل کرد. به همین دلیل ابزارهای پویش پورت ( همانند Nmap )، اگر در یک مدت زمان معین، پاسخی دریافت نکنند ،آن پورت را فیلتر شدهدرنظر می گیرند. یعنی فرض می شود که آن بسته توسط مسیریاب یا دیوار آتش حذف شده است. مگر آن که به وسیله تکنیک های دیگر خلاف آن ثابت شود.

 

 پویش به روش FTP Bounce Scan

یک نفوذگر تمایل دارد که در حین پویش یک شبکه و جستجوی پورت های باز، هویتش ناشناس بماند و آدرس IP او کشف نشود. یکی از مکانیزم هائی که نفوذگر برای پویش مخفیانه به کار می گیرد قابلیتی است که سرویس دهنده های قدیمی FTP در اختیار کاربران می گذاشتند. بدین ترتیب که کاربران می توانستند ضمن برقراری ارتباط TCP با سرویس دهنده و ایجاد یک نشست ، تقاضا بدهند تا یک فایل از آن سرویس دهنده به یک ماشین ثالث منتقل شود. یعنی در حقیقت یک کاربر دارای خط انتقال کم ظرفیت می توانست از سرویس دهنده های سریع (دارای خطوط با پهنای بالا) بخواهد تا یک فایل را به ماشینی دیگر در شبکه منتقل نماید تا این انتقال با سرعت بیشتری انجام شود. این امکان اگر چه راحتی کاربران را فراهم می کند و لیکن به نفوذگر امکان می دهد تا پویش پورت های باز یک ماشین را از طریق سرویس دهنده FTP انجام بدهد.

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

به این قابلیت در سرویس دهنده FTP ، File-Forwarding گفته می شود که به دلیل همین نوع مشکلات، امروزه در اکثر سرویس دهنده های FTP از آن حمایت نمی شود.

 

بهره گیری از بسته های UDP

برخلاف پروتکل TCP ، در پروتکل UDP ، دست تکانی سه مرحله ای ، فیلد شماره ترتیب(Sequence Number )، و بیت های کنترلی ، وجود ندارد. بسته ها ممکن است اصلاً به مقصد نرسند یا خارج از ترتیب به مقصد برسند.  

به دلیل سادگی بیش از حد پروتکل UDP ، گزینه های بسیار کمی برای جستجوی پورت های باز UDP وجود دارد. وقتی از طریق TCP پویش پورت های باز انجام می شود، برگشت بسته ها ی مفیدی همانند SYN-ACK یا RESET می تواند تکلیف باز یا بسته بودن پورت را مشخص نماید. در حالی که در UDP چنین بسته هایی مبادله نخواهد شد.

برای پویش پورت های باز UDP ، نرم افزاری مثل Nmap دنباله ای از بسته های UDP را برای پورت های مختلف هدف ارسال می نماید. اگر در پاسخ به یک بسته UDP پیغام ICMP Port Unreachable برگردد، می توان اطمینان حاصل کرد که آن پورت یقیناً بسته است. در غیر این صورت هیچ چیزی را نمی توان در مورد آن پورت ثابت کرد. به همین دلیل نرم افزاری مثل Nmap فرض می کند آن پورت باز است. هر چند اطمینانی به باز بودن آن نیست.

بهترین مکانیزم برای پویش پورت های UDP آن است که از بین شماره پورت هایی که بسته بودن آن ها محرز نشده است، پورت های مشهوری مثل پورت 53 (مربوط به DNS ) را با ارسال بسته های تقاضا بررسی کرد. مثلا اگر نرم افزار Nmap پورت 7070  را به دلیل عدم دریافت پیغام بسته بودن، باز گزارش کرد، می توان حدس زد که این پورت مربوط به سرویس دهنده Real Audio & Video است. می توان با آن شماره پورت مبتنی بر پروتکل خاص آن سرویس دهنده، محاوره کرد تا از باز بودن آن اطمینان حاصل شود.

 

تعیین سیستم عامل ماشین هدف با TCP Stack Fingerprinting

به غیر از جستجوی پورت های باز روی ماشین هدف، نفوذگر تمایل دارد بداند سیستم عامل نصصب شده روی ماشین هدف چه نوعی است و توسط چه شرکتی طراحی شده است. این آگاهی به نفوذگر کمک می کند که حمله خود را بر اساس نقاط ضعف و آسیب پذیر آن سیستم عامل ، تنظیم نماید. مثلاً اگر نفوذگر تشخیص بدهد که سیستم عامل هدف Linux است، احتمالاً حمله SYN Flood را بر علیه آن اعمال نخواهد کرد چرا که تقریباً بی اثر است.

ابزارهایی مثل Nmap از یک مکانیزم زیرکانه برای تعیین نوع سیستم عامل ماشین هدف استفاده می کنند. اصول این مکانیزم به شرح زیر است:

گروه IETF که جزئیات پروتکل TCP/IP را در قالب مستندات RFC تبیین کرده است، تمام اتفاقات متعارف، معمول و مجاز را تعریف کرده و عملکرد TCP را برای هر اتفاق مجاز دقیقاً تعیین نموده است. در حالیکه هیچکدام از RFC ها تعیین نکرده اند که وقتی اتفاق نا معمولی مثل ارسال یک بسته FIN به یک پورت بسته ارسال می شود، TCP باید چه پاسخی بدهد. به دلیل فقدان یک استاندارد هماهنگ در مورد اتفاقات نامعمول در پروتکل TCP ، هر سیستم عامل در مواجهه با چنین اتفاقاتی روش خاص خودش را به کار می گیرد. مثلا در سیستم عامل ویندوز وقتی یک بسته ACK به یک پورت بسته ارسال می شود در پاسخ یک بسته RESET برمی گردد. در حالی که در یونیکس و سولاریس اینگونه نیست. ابزارهایی مثل Nmap یک بانک اطلاعاتی از عملکرد سیستم های عامل مختلف در مواجهه با اتفاقات غیرمعمول تهیه کرده اند.

برای پی بردن به نوع سیستم عامل ماشین هدف، بسته های نا متعارف زیر به سمت ماشین هدف ارسال می شوند:

·                     بسته SYN به سمت یک پورت باز ماشین

·                     بستهNull به سمت یک پورت باز

·                     بسته PSH | URG | FIN | SYN به سمت یک پورت باز

·                     بسته ACK به سمت یک پورت باز ماشین

·                     بستهSYN  به سمت یک پورت بسته

·                     بسته  PSH| URG | FIN به سمت یک پورت بسته

·                     بسته UDP به سمت یک پورت بسته

·                     بستهACK  به سمت یک پورت بسته

 

مشخصه پاسخ هایی که از ماشین هدف برمی گردد در بانک اطلاعاتی جستجو شده و بر اساس آن نوع سیستم عامل تعیین می شود. همچنین می توان با استفاده از فیلد Seq No=ISNB تنظیم شده در بسته SYN-ACK ماهیت سیستم عامل را کشف کرد. مثلاً وقتی چند بسته SYN به یک پورت باز ارسال می شود، چند بسته SYN-ACK با مقادیر متفاوت ISN، باز خواهد گشت.با تحلیل مقادیر ISN می توان به این نتیجه رسید که آیا شماره های ترتیب ISN ، طبق یک الگوی خاص تولید شده اند، یا آن که کاملاً تصادفی هستند. اگر شماره ها دارای الگوی خاصی باشند ، نشان دهنده آن است که احتمالاً در ماشین سمت هدف مقابل سیستم عامل لینوکس نصب شده و از مکانیزم کوکی ، استفاده می کند.

یک ابزار پویش و جستجوی پورت مثل Nmap ، برای تعیین نوع سیستم عامل ماشین هدف، یک  بانک اطلاعاتی از پاسخ سیستم های عامل در مواجهه با بسته های نامعمول و نامتعارف در اختیار دارد. سلسله ای از این بسته ها به سمت هدف ارسال شده و پاسخ های برگشتی با این بانک اطلاعاتی مقایسه و نوع سیستم عامل تعیین می شود. در ادبیات نفوذگران به این مکانیزم توصیف شده برای کشف سیستم عامل ، TCP Stack Fingerprinting گفته می شود.