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

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

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

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

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

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

 

یکی از ابزارهای مفید برای پویش پورت ها نرم افزار 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 گفته می شود.

 

نظرات 3 + ارسال نظر
[ بدون نام ] شنبه 10 آذر‌ماه سال 1386 ساعت 10:03 ق.ظ http://hasanazar.blogsky.com

سلام
وبلاگ زیبایی دارید.
یه سری هم به بلاگ من بزنید.
ممنونم

فرهاد شنبه 8 دی‌ماه سال 1386 ساعت 09:48 ب.ظ

سلام
ببینم تو شریف درس خوندی ورودیه چه سالی هستی؟
من ورودی 81 ام اسمت چیه شاید آشنا باشی!

مسعود چهارشنبه 3 آذر‌ماه سال 1389 ساعت 06:43 ب.ظ

سلام
ببخشید میشه این مطلب رو برام روشن کنید
ترتیب سگمنت های فرستاده شده در udp چگونه صورت میگیرد؟
چگونه داده هایی مثل صوت یا تصویر مثلا در چت کردن که با udp انجام میشود پشت سرهم ارسال میشود؟
اگر الگوریتم خاصی هست لطفا بیان کنید
ممنون

برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد