مبحث یکم : مقدمه و تاریخچه
مبحث دوم: مراحل نفوذ کردن / جلوگیری از نفوذ
مبحث سوم: حملات شبکه ای
مبحث چهارم - کار عملی
مبحث پنجم - DHCP
مبحث ششم - وب و حملات مطرح در آن
مبحث هفتم - حملات DoS
مبحث هشتم - سیستم عامل
مبحث نهم - مهندسی اجتماعی
مبحث دهم - Vulnerability (آسیب پذیری)

پروتکل TCP/IP

به طور کلی برای افزایش کارایی و بهتر کار کردن فعالیت های شبکه ای ، می توان گفت لایه بندی انجام گرفته است هر لایه ، اطلاعات خود را به بسته اضافه می کند . تفکیک وظایف نیز منجر به لایه بندی شد . همانطور که گفته شد ، TCP/IP یک استانداردی ، defacto بود . تمام مسائل و جوانب در پروتکل TCP/IP بررسی نشده اند که این مسأله منجر به وجود داشتن نقص هایی در پروتکل شده است . مثلا اینکه عدم قابلیت احراز پیام فراگیر (broadcast authentication) و … . کاری که انجام شد این بود که یک سری patchها و Updateها بر روی پروتکل انجام گرفت و یک سری راهکارهایی در لایه های دیگر ارائه کردند . مثلا TCP/IP یک Checksum ضعیف دارد و یا ممکن است بسته آن جعل شود ، اما می توان در برنامه و Application خودمان یک سری سدهای دفاعی بگذاریم (دفاع در عمق )

ما با ساختار پروتکل TCP/IP کار می کنیم و در تمام این لایه ها که عبارت اند از:

(Network Interface , Internet , transport, application) می توان کارهایی انجام داد . hacking یعنی چه ؟ پیدا کردن راه های استفاده از قوانین ، راه هایی که ممکن است مخفی باشد و به چشم نیاید. از جمله فیلدهای TCP header ، پورت مبدا و پورت مقصد است . فیلد Sequence Number  که یک عدد صحیح است و در ابتدای هر Session ، هر کدام از طرفین برای خود در نظر می گیرند . این شماره اولین بایت داده یک سگمنت را مشخص می کند . همانطور که گفته شد ، TCP/IP ، Packet switchingاست و داده به صورت packet به packet فرستاده می شود .بسته ها ممکن است از مسیرهای مختلف برسند یا اصلا یک بسته نرسد ، چیدمان این بسته ها در مقصد به کمک فیلد Sequence Number انجام می شود . در ابتدای هر نشست TCP ، دست تکانی سه مرحله­ای انجام می شود . من به عنوان کسی که متقاضی ارتباط هستم یک درخواست به شما می دهم ، شما یک جواب به من بدهید و من دوباره به شما یک پاسخ را برمی گردانم و ارتباط ما آغاز می شود . در مرحله اول من ادعا می کنم که می خواهم ارتباط را شروع کنم ، Sequence Number خود را هم تعیین می کنم . می خواهیم با همدیگر Synchronize شویم . می خواهیم با هم هماهنگ شویم .

  • در TCP چند flag داریم . flagهای SYN ، FIN ، ACK ،  RST، PSH و …
  • یکی دیگر از اثراتی که هر سیستم عامل تقریبا در آن منحصر به فرد است ، بازخوردش نسبت به بسته های غیر عادی است .

طراحی TCP/IP ، خیلی از نکات امنیتی را رعایت نکرده است . مثلا کسی که پروتکل TCP/IP را طراحی کرد این قاعده را قرار داد که اگر می خواهید یک ارتباط برقرار کنید ، ابتدا یک بسته SYN بفرستید ، طرف درخواست می دهد (SIN ACK می دهد ) شما دوباره SIN ACK را بفرستید و ارتباط شروع میشود . اما آن جا در نظر گرفته نشده بود که اگر یک نفر قبل از اینکه بسته SYN را بفرستد ، بسته FIN را بفرستد و یا بسته RST بفرستد و … چه اتفاقی بیفتید . در نتیجه پیاده سازی های مختلف که از این پروتکل انجام شد نیز در ورژن های اولیه، این نکات را در خود لحاظ نکردند . در پیاده سازی ورژن های ابتدایی پروتکل TCP/IP  مشکلی وجود داشت ، که اگر شما یک Ping با سایز بزرگ به سیستم هدف می فرستادید ، سیستم Crash می کرد . علت آن این بود که در طراحی پروتکل ICMP ، سایز داده بزرگتر از یک مقدار خاص در نظر گرفته نشده بود و در نتیجه در پیاده سازی آن در سیستم های عامل هم در نظر گرفته نشده بود . بدین ترتیب است که یک سیستم ممکن است سال ها درست کار کند اما وقتی پای یک نفوذگر به میان می آید در طی چند دقیقه سیستم crash کند . چرا ؟ چون نفوذگر سعی می کند مسائل پیش بینی نشده را بررسی کند مثلا به جای فیلد name می آید و 5000 تا کاراکترa  می فرستد ، به جای family ، عدد وارد می کند ، به جای وارد کردن عبارت مورد جستجو چند تا کوتیشن وارد می کند . راه مقابله آن این است که بتوانیم موارد پیش بینی نشده را شناسایی بکنیم و بعد راه حل ارائه دهیم .

Fragmentation: packet ممکن است خیلی بزرگ باشد ، Packet شکسته می شود و به آن یک fragment offset داده می شود . در همین مورد نیز می توان حملاتی انجام داد .

در لایه فیزیکی نیز بحث hacking را داریم . ICهایی وجود دارد که Loop back می خورد و دمای آن بالا می رود و منجر به از کار افتادن device می­شود.

توجه : مقاله Conclusion of TCP/IP riskiest point  را می توانید مطالعه کنید.

Nc  یا net cat برای سیستم های لینوکس نوشته شده و پیاده سازی آن در آینده بر روی ویندوز ها قرار داده شده است و محدود به یک سیستم عامل خاص نیست . کار آن ارتباطات شبکه ای است . listen کند ، وصل شود . از nc ، می توان برای تکنیک  banner grabbing استفاده کرد به پورت های مختلف وصل شد و دید که چه چیزی برگردانده می­شود.

تمرین : با استفاده از دستور nc –vvvlp 3434 به پورت 3434 گوش می دهیم (شکل 1)

شکل 1

ممکن است antivirus ، netcat را به عنوان یک ابزار malicious ( بدافزار ) بشناسد و آن را block کند . اگر پیغامی مبنی بر بلاک کردن آن آمد در اینجا چون نمی خواهیم استفاده خطرناک از آن بکنیم ، آن را block نکنید .

همانطور که گفته شد netcat روی یک پورت گوش می کند ، پورت را در حالت open قرار می دهد و بقیه می توانند به آن پورت وصل شوند . حال از کامپیوتری دیگر به کامپیوتری که آن را در حالت listen گذاشته اید وصل شوید . حال برای وصل شدن یک cmd جدید باز کنید و دستور

nc –vvv IP

را وارد کنید( مثلا 192.168.100.229       nc –VVV) ( شکل 2).

شکل 2

و حال اگر یک نفر به شکل 1 وصل شود پیامی مانند شکل 3 نمایش داده می شود .

شکل 3

برای برقراری ارتباط TCP دست تکانی سه مرحله ای انجام می شود و در همین دست تکانی سه مرحله یک سری اتفاقاتی می افتد که به کار ما می آید . نرم افزار wireshark را که قبلا بازکرده اید نگاه کنید . در wireshark می توان یک سری فیلتر ایجاد کرد ( شکل 4) . مثلا فیلتری قرار دهید که در بین تمام بسته هایی که می آید ، آنهایی را ضبط کند که دارای آدرس مقصد x هستند و یا دارای آدرس مبداء y هستند ، پورت آن ها p است پروتکلشان TCP است .

درقسمت بالای پنجره در کنار فیلد filter دکمه کشویی وجود دارد که با کلیک بر روی آن می­توان فیلترهایی که قبلا ایجاد کرده ایم را ببینیم . همچنین در کنار آن گزینه Expression وجود دارد که با استفاده از آن می توان یک فیلتر درست کرد .

شکل 4

مثلا در قسمت TCP آن می رویم روی علامت + آن کلیک کنید ( شکل 5)

شکل 5

همانطور که می بینیم یک سری فیلتر مثل tcp.srcport که برای تعیین  source , Port است و غیره. هدف این است که ارتباطاتی که به پورتی که listen گذاشته اید را شناسایی بکنیم و بعد هم ارتباطاتی که شما برقرار کرده اید را شناسایی کنیم.

شکل 6

می توانیم چنین فیلتری قرار دهیم . بر روی گزینه tcp.dstport کلیک کرده و سپس از قسمت Relation رابطه == را انتخاب می کنیم و در قسمت value مقدار 3434 را وارد میکنیم ( شکل 6) و سپس بر روی دکمه OK   کلیک می کنیم و سپس بر روی دکمه Apply کلیک می کنیم ( شکل 7) حال می بینیم بسته هایی با این ویژگی نمایش داده می شوند .

شکل 7

سوال ترافیک کدام hostها را من دارم می بینیم ( زمانی که فیلتر را پاک می کنم ) ؟ این همه packet در حال آمدن به سیستم من است ؟ بسته هایی که درشبکه هستند را نیز شامل می شود . کل بسته ها که مقصدش کامپیوتر من نیست . کاری که ما در حال انجام آن هستیم sniff به صورت passive است . وقتی یک بسته به کارت شبکه من می رسد نگاه می کند که آیا مقصد آن کامپیوتر من است یاخیر . ممکن است بسته ای که x می خواهد به y بفرستد، بسته به ساختار و توپولوژی شبکه ، این بسته به سیستم من هم برسد اما بسته های که مقصد آن سیستم من نباشد ، ignore میشوند ( توجه کنید اگر drop شود x با y نمی تواند ارتباط برقرار کند ) اما ابزارهایی که برای sniff غالبا استفاده می شوند کارت شبکه ما را در مورد بی قید می برند . یعنی کاری ندارند که مقصد بسته چیست . هرچی بسته می آید نشان می دهند برای آن که بتواند آنالیز انجام شود و البته یک سری از بسته ها هستند که آدرس مقصد آن 255.255.258.255 است که بسته های فراگیر (broadcast) است .

یادآوری : IPها در کلاس هایی طبقه بندی شده بودند . IP از دوبخش تشکیل شده است . Host Id و Net id مثلا IP من برابر 192.168.100.x . از مقدار Subnet mask می توان قسمت net id و host id را تشخیص داد . مثلا subnet mask برای IP بالا در کامپیوتری برابر با 255.255.255.0 قرار داده شده است .

کلاسی که به صورت 255.255.255.0 است ، به کلاس C معروف است . از AND کردن subnet mask و IP ، Net ID به دست می آید . حال برای آدرس آی پی 192.168.100.x با آدرس زیرشبکه (subnet) 255.255.255.0، 192.168.100.0 آدرس شبکه است . همانطور که گفتیم مود کارت شبکه ، بی قید است وقتی کارت شبکه یک بسته را دریافت می کند . حال اگر آدرس مقصد آن برای خودش بود آن را تحویل لایه های بالاتر می دهد . منتهی ممکن است یک بسته از سیستم شما بخواهد به Google برود کاری کا انجام می دهد با استفاده از الگوی زیرشبکه است . یعنی می آید الگوی زیرشبکه (subnet mask) بسته شما را نگاه می کند آن را با IP اش AND می کند بعد بررسی می کند که آن مقداری که باقی مانده است آیا با net ID خودش یکسان است یا نه . ( به طور خلاصه : یعنی net ID بسته با net ID شبکه من یکسان نیست . در این شرایط بسته را به default Gateway ارسال می کند . اما آیا این packet شما که می خواهد به default gateway برود به سیستم من می رسد ؟ یعنی آیا سیستم من بسته شما را می بیند یا نه ؟ بستگی دارد اگر بار اول باشد که mac مربوط به default gateway را نداشته باشد می بیند ولی دفعه بعد خیر ( بستگی به ساختار شبکه دارد).

توجه : یکی از کلاس هایی که وجود دارد کلاس broadcast است. (255.255.255.255) تقریبا ابزارهای شبکه ای ، بسته های broadcast را drop  می کنند ، چون سیستم خیلی شلوغ می شود ( منظور از ابزار سوئیچ ، روتر و … است).

توجه : بسته های دیگر مربوط به multicast هستند . مثل 192.168.100.255 یعنی در شبکه 192.168.100.0 به همه ارسال شود .

توجه : بسته هایی که سیستم من دریافت می کند شامل بسته های broadcast ، multicast و نوع دیگری از بسته هاست که به سیستم من redirect شده اند. یک سری حالت های دیگر که به خاطر قرار داشتن در مود بی قید، بسته هایی دریافت می شوند  (مثلا روتر خراب کار کند ، هاب داشته باشیم . شبکه Bus داشته باشیم).

اسکرول به بالا