ساخت ابزار تشخیص حمله ی DOS علیه مودم وایرلس در پایتون :: Mr Python | مستر پایتون

ساخت ابزار تشخیص حمله ی DOS علیه مودم وایرلس در پایتون

  • ۱۲۶۴

ساخت ابزار تشخیص حمله ی DOS علیه مودم وایرلس در پایتون

 

درود به همه !

 

همونطور که میدونید حملات DOS (Denial Of Service) ، حملاتی هستند که طی اون هکر میاد ترافیک یک سرویس خاص یا دستگاه یا ...  را به حدی شلوغ میکند تا اینه اون دستگاه دیگه توان تحمل این ترافیک رو نداره و از کار میافته (اصطلاحا Down میشه .) . یکی از جدی ترین حملات DOS ، حملات علیه مودم های وایرلس است . یکی از محبوب ترین حملات DOS در سطح وایرلس ، حمله ی Deauthentication است که هکر میاد یه سری بسته های جعلی Deauthentication به سمت کلاینت ها ارسال میکنه که نهایتا این باعث میشه کلاینت ها به طور خودکار و ناخواسته از مودم وایرلس قطع بشن . امروز میخوایم ابزاری در پایتون بسازیم که  سیگنال ها و پکت های ارسالی در محیط رو رصد کنه و به محض اینکه یه نفر حمله ی Deauthentication انجام داد متوجه بشه .

 

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

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

 

حالا همونطور که میدونید میخوایم یه ابزار بسازیم که محیط رو شنود کنه و بسته هایی که توی محیط ارسال میشه رو رصد کنه . به محض اینکه بسته ی Deauthentication ارسال شد خبر بده . اینجوری میتونیم احتمال بدیم یه نفر داره توی محیط این بسته ها رو ارسال میکنه .

 

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

 

اما این حالت مانیتور که میگیم چیه ؟ کارت های شبکه وایرلس روی چنتا حالت میتونن کار کنن . حالت پیشفرضشون رو میگن حالت Managed  . در این حالت میتونه محیط رو اسکن کنه و اکسس پوینت های محیط رو شناسایی کنه و نهایتا بهشون وصل بشه . در این روش هم عمل ارسال اطلاعات انجام میشه و هم عمل دریافت .

 

یکی دیگه از حالت های کارت شبکه ، حالت مانیتور (monitor) است . وقتی یه کارت شبکه میره روی حالت مانیتور قابلیت این رو پیدا میکنه که تمام ترافیک وایرلسی که توی محیط رد و بدل میشه رو شنود کنه . حالا اگه کارت شبکه ی ما قابلیت مانیتور رو داشته باشه میتونیم با یه روش هایی از حالت managed ببریمش روی حالت monitor . اسکریپتی که امروز مینویسیم نیاز به یک کارت شبکه وایرلس با حالت مانیتور داره چون قراره محیط رو شنود کنه و ببینه چه زمانی بسته های deauthentication ارسال میشه .

 

برای پروژه ی امروز بهتر است از یه سیستم عامل لینوکسی استفاده کنید . بهترین حالت kali linux هستش چون کالی لینوکس به صورت پیشفرض ابزاری به اسم aircrack-ng داره که میتونیم باهاش کارت شبکه مون رو بزاریم روی حالت مانیتور .

 

اگر از لینوکس های دیگر استفاده میکنید میتونید با پکیج اینستالر اون لینوکس ابزار aircrack-ng را نصب کنید . برای مثال در اوبونتو با دستور زیر میتونیم اینکارو بکنیم :

MrPython@debian:~$ sudo apt install aircrack-ng

 

پس از نصب ابزار بالا ،   ابزار دیگری به اسم airmon-ng که زیر مجموعه ی aircrack-ng است روی سیستم ما نصب میشود که از آن برای قرار دادن کارت شبکه روی حالت مانیتور استفاده میکنیم .

برای قرار دادن کارت شبکه روی حالت مانیتور ابتدا باید اسم کارت شبکه رو بدونیم .برای اینکار دستور iwconfig رو وارد میکنیم تا لیست کارت های شبکه وایرلس به ما نشون داده بشه . برای مثال در تصویر زیر همونطور که میبینید کارت شبکه ی من با نام wlp3s0 ثبت شده .

 

 

با دستور زیر کارت شبکه رو روی حالت مانیتور قرار میدیم :

MrPython@debian:~$ sudo airmon-ng start wlp3s0

به جای wlp3s0 باید اسم کارت شبکه ی خودتون رو بزارید .

حالا کارت شبکه ی ما رفته روی حالت مانیتور . ولی اسمش عوض شده در اکثر مواقع یه mon به آخرش اضافه شده که مخفف monitor هستش . برای فهمیدن اسم جدیدش کافیه دوباره دستور iwconfig رو وارد کنیم و همینطور که در دستور زیر میبینیم کارت شبکه ی ما رفته روی حالت مانیتور و اسمش عوض شده :

 

 

در تصویر میبینید که اسم کارت شبکه ی من به wlp3s0mon تغییر کرده .

 

پس از اینکار دیگه ما میتونید از ابزارمون استفاده کنیم .

 

میریم سراغ نوشتن سورس .

برای ساخت این ابزار از کتابخونه ی scapy استفاده میکنیم . برای نصب اسکپی از ابزار pip استفاده میکنیم .

نصب scapy در لینوکس :

MrPython@debian:~$ sudo pip3 install scapy

نصب scapy در ویندوز :

C:\> pip install scapy

 

سورس ابزار :

from scapy.all import *

iface = input("Wireless CARD : ")

def handler(pkt):
    if pkt.haslayer(Dot11Deauth):
        source = pkt.addr2
        destination = pkt.addr1
        print("1 Deauthentication Packet Found : from > {} : to > {}".format(source, destination))
        

while True:
    sniff(count = 10 , iface = iface , prn=handler )

همینطور که میبینید سورسی که نوشتیم بسیار کوتاه و سادس .

توضیح سورس کد :

در ابتدا  از کتابخونه ی scapy ماژول های لازم رو ایمپورت کردیم .

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

سپس یه تابع به نام handler تعریف کردیم که در واقع هر بار هر پکتی شنود میشه این تابع فراخونی میشه و اون پکتی که شنود شده به عنوان ورودی داده میشه به تابع . داخل تابع اومدیم چک کردیم اگر پکت دارای لایه ی Dot11Deauth بود یعنی این پکت یه پکت deauthentication هستش و باید دستور های مربوطه اجرا بشه.  دوتا متغییر تعریف کردیم که در اولی مک آدرس مبدا قرار میگیره (همیشه برابر آدرس  مودم وایرلسه چون هکر اینو جعل کرده تا کلاینت فک کنه مبدا این بسته خود مودم بوده) . و همچنین در متغییر destination  هم مک آدرس  مقصد یعنی کلاینت قرار میگیره .  بعد اومدیم چاپ کردیم که یه بسته ی deauthetication یافت شد و مبدا و مقصدشم مشخص کردیم .

 

بیرون از تابع و در خطوط بعدی سورس (در ابتدای شروع کار برنامه) یه حلقه ی while بی نهایت تعریف کردیم و داخل حلقه  برای شنود بسته از تابع sniff استفاده کردیم. به عبارتی در هر بار اجرای حلقه برنامه با استفاده از تابع sniff شروع به شنود بسته های محیط میکنه . این تابع یه سری ورودی داره . ورودی اول یعنی count مشخص میکنه چنتا بسته شنود کنه که ما گفتیم ۱۰ تا یعنی در هر بار که حلقه ی  while اجرا میشه ۱۰ تا بسته از محیط شنود میشه . ورودی بعدی یعنی iface همون اسم کارت وایرلسی هستش که روی حالت مانیتوره که برابر همون اسمی هست که کاربر داده بود. و نهایتا در آرگومان prn مشخص کردیم که در هر بار شنود چه تابعی فراخونی بشه و چه عملیاتی باید روی بسته انجام بشه (در اینجا گفتیم همون تابع handler  که تعریف کردیم اجرا شه).

 

بریم سراغ تست سورس . این سورس باید با سطح دسترسی root اجرا بشه چون داره از کارت های شبکه استفاده میکنه .

طبق مراحلی که توضیح دادیم ابتدا کارت شبکه رو با روشی که در بالاتر ذکر شد روی حالت مانیتور قرار میدیم و با دستور زیر سورس رو اجرا میکنیم :

 

MrPython@debian:~$ sudo python3 source.py

به جای source.py اسم سورسمون رو که ذخیره کردیم قرار میدیم . پس از اجرای سورس از ما نام کارت شبکه ی مانیتور رو میپرسه که بهش میدیم . اگه یادتون باشه از من بود wlp3s0mon . وقتی این نام رو بهش دادیم شروع به شنود میکنه . در تصویر زیر میبینید که من با ابزار aireplay-ng یک حمله ی deauthentication  اجرا کردم و ابزاری که نوشتیم ،  سریعا اونو تشخیص داده :

 

 

 

امیدوارم لذت برده باشید .

یا حق !

Telegram Channel : @mrpythonblog

نظرات: (۰) هیچ نظری هنوز ثبت نشده است
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی