در این مقاله قصد داریم تکنیک هایی را جهت عبور بسته های ICMP از فایروال ها بررسی نماییم. درواقع عبور ping از دیوار آتشین نامی هست که برای این مقاله به همین دلیل برگزیدیم.
عبور ping از دیوار آتشین
در مقاله ابزار SCAPY با روش های متنوع مقدماتی درباره دستکاری بسته های شبکه آموختیم. همچنین در مقاله آیا باید ICMP را ببندم دلایلی که باید این پروتکل مهم را دوست داشته باشیم بررسی کردیم.
حال در بخش سوم این سری مقالات عبور ping از این دیوار آتشین را عملی می نماییم.
در ادامه ما در سه سناریو جداگانه سه راه حل متفاوت را اجرا می کنیم که با توجه به کانفیگ فایروال مورد نظر ممکن است نتیجه مناسب را داشته باشند.
در این مقاله از ابزار scapy استفاده شده است.
سناریو 1
اضافه کردن PAYLOAD
این سناریو را پیش از این در مقاله scapy بدون استفاده از RAW اجرا کردیم که در نتیجه تفاوتی با روش زیر ندارد.
اما نوشتن Raw(load="hi")
باعث میشود صراحتاً به Scapy بگید که این یه لایه Raw هست. این کار زمانی مهم میشود که میخواهید بستههای ترکیبی یا غیرمعمول بسازید.
درواقع از نظر عملکردی تفاوتی نداره، ولی وقتی Raw()
رو مشخص کنی، کنترل بیشتری روی بسته داری.
اما در روش زیر ما با اضافه کردن payload قصد داریم فایروال را فریب دهیم. هرچند تعداد زیادی از فایروال ها با این روش فریب نمی خورند.
اما بعضی فایروالها فقط ICMP Echo Request خالی رو فیلتر میکنن، چون اکثر پینگهای عادی اینطوری هستن. اما اگه یه Payload سفارشی اضافه کنیم، فایروال ممکنه فکر کنه این یه نوع ICMP دیگه است و ردش کنه:
from scapy.all import * o
packet = IP(dst="192.168.1.33") / ICMP() / Raw(load="I am ICMP with Payload!!")
send(packet)
سناریو 2
فایروال به ICMP
گیر میده، ولی به IP Fragmentation
نه
بعضی فایروالها پکتهای کامل ICMP رو میشناسن و بلاک میکنن، اما تکههای شکستهشده رو نه!
ما میتونیم از IP(fragment=1)
استفاده کنیم تا بسته ICMP به چند تکه تقسیم بشه و شاید از فایروال رد بشه:
وقتی هدر frag را پر میکنیم بسته فرگمنت بندی می شود.
from scapy.all import * o
packet1 = IP(dst="192.168.1.33", frag=0) / ICMP() / Raw(load="I am ICMP with Payload!!")
packet2 = IP(dst="192.168.1.33", frag=1) / ICMP() / Raw(load="I am ICMP with Payload!!")
send(packet1)
send(packet2)
سناریو 3
تغییر Type و Code برای فریب فایروال
بعضی فایروالها فقط ICMP نوع ۸ (Echo Request) رو بلاک میکنن ولی سایر ICMP ها رو رد میکنن.
ما میتونیم Type رو تغییر بدیم و شاید فایروال پکت رو رد کنه:
from scapy.all import * o
packet = IP(dst="192.168.1.33") / ICMP(type=13) / Raw(load="Hello!!")
send(packet)
در اینجا به جای Echo Request که نوع 8 است از Timestamp Request که نوع 13 است استفاده کردیم. بعضی از فایروال ها این نوع را نمیشناسن و رد میکنن اما مقصد نهایی همچنان جواب خواهد داد.
دیدگاهتان را بنویسید