وبلاگ

آموزش جلوگیری از حملات icmp در لینوکس با iptables

یکی از حملات مرسوم بر روی سرورها ICMP Flood Attack است که هکر با ارسال میلیون ها یا هزارن بسته icmp بر روی سرور های شما حمله را آغاز می کند و تا زمان از بین رفتن سرویس شما ادامه می دهد ، قبل از ارائه راه حل جلوگیری باید ابتدا در مورد icmp اطلاعات کافی را کسب کنید .

 

icmp چیست؟

icmp مخفف Internet Control Message Protocol است که در شبکه بیشتر جهت خطایابی استفاده می شود . برای مثال یک بسته ICMP ارسال می شود سمت یک سرور و برگشت آن به ما حالت های مختلفی را بیان می کند که این حالت ها در خطایابی ما بسیار مهم هستند .

 

‎ ICMP Flood Attackچیست؟

این حمله یکی از انواع حملات منع سرویس (DoS) است. به این معنی که حمله‌کننده پیام‌های فراوانی به قربانی ارسال می‌کند تا سرور را از کار بیندازد. توجه کنید که اگر این پیام‌ها از مبداهای متفاوتی ارسال شوند، به آن حمله منع سرویس توزیع شده (DDoS)  گفته می‌شود.

در ICMP Flood Attack پیام‌ها، از نوع ping یعنی یکی از معروف‌ترین انواع پیام‌های پروتکل ICMP، هستند. به همین دلیل به این حمله Ping Flood Attack نیز گفته می‌شود.

 

پیام‌ Ping

برای بررسی برقرار بودن ارتباط بین دو دستگاه و هم‌چنین محاسبه‌ی زمان رفت و برگشت یک بسته (packet) بین دو دستگاه، از این پیام استفاده می‌شود. برای نمونه دستگاه A  که در آدرس IP=12.34.56.78  قرار دارد، برای بررسی ارتباط با دستگاه B که در آدرس IP = 10.11.12.13 قراردارد، یک پیام ping که مبدا و مقصد آن آدرس‌های بیان شده هستند، تولید و ارسال می‌کند (ICMP-echo-request). دستگاه B با دریافت این پیام (اگر ارتباط بین دو دستگاه برقرار باشد)، آن را پردازش و یک پیام ping با مبدا و مقصدی برعکس آن‌چه از پیام ping دریافت کرده است، تولید می‌کند و آن را برای دستگاه A می‌فرستد (ICMP-echo-reply). بدین ترتیب اگر A پاسخ B  را دریافت کند، از صحت ارتباط خود با او مطمین و زمان رفت و برگشت پیام را نیز متوجه می‌شود.

 

ICMP Flood Attack چگونه انجام می‌شود؟

از آن‌جایی که هر دستگاه ظرفیت مشخصی برای پاسخ به یک پیام دارد، در ICMP Flood Attack تعداد زیادی از این نوع پیام به طرف قربانی ارسال می‌شود تا ظرفیت پردازش و هم‌چنین پهنای باند او تکمیل شود و نتواند به پیام‌های واقعی و ضروری خود پاسخ گوید.

 

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

 

  • در ساده‌ترین و ابتدایی‌ترین روش، حمله کننده با دستگاه خود پیام ping را به قربانی ارسال می‌کند.

 

این روش محدود به ظرفیت پردازشی و پهنای باند دستگاه حمله‌کننده است و از طرفی ظرفیت خود دستگاه نیز تلف می‌شود.

 

  • روش دیگر، استفاده از تعدادی دستگاه (کامپیوتر) دیگر است که تحت فرمان و کنترل حمله‌کننده هستند (موسوم به botnet army). در این نوع حمله، حمله‌کننده به این دستگاه‌ها دستور می‌دهد تا به یک آدرس مشخص، پیام ping ارسال کنند. به این ترتیب بدون درنظر گرفتن محدودیت‎‌های یک دستگاه، می‌توان با افزایش تعداد این دستگاه‌ها، حجم بالایی از پیام را به قربانی ارسال کرد. توجه کنید که در این جا آدرس حمله‌کننده مخفی می‌ماند و به‌راحتی قابل شناسایی نیست.

 

  • روش سوم پیاده‌سازی ICMP Flood Attack، حمله‌ای با نام Smurf attack است. در این روش، حمله‌کننده بدون آن‌که هزینه‌ای برای در اختیار گرفتن تعدادی دستگاه بکند، از دستگاه‌های یک شبکه برای پیاده کردن حمله‌ی خود (به‌شکل رایگان) استفاده می‌کند.

 

تصویر زیر را در نظر بگیرید. در این تصویر حمله‌کننده پیام ping را به آدرس gateway یک شبکه‌ی دلخواه به‌شکل broadcast ارسال می‌کند. در این حالت پیام او به‌وسیله‌ی gateway به تمامی دستگاه‌های موجود در شبکه ارسال می‌شود. حمله کننده، IP ارسال کننده‌ی ping را IP قربانی موردنظر خود قرار می‌دهد تا  دستگاه‌های موجود در شبکه به جای آن‌که پاسخ ping را به خود حمله کننده ارسال کنند، پاسخ را با توجه به IP پیام ping دریافتی، به قربانی ارسال کنند.
بنابراین با ارسال تعداد مشخصی پیام ping به شبکه، چندین برابر آن تعداد، پیام به قربانی ارسال می‌شود و حمله‌کننده می‌تواند این کار را بدون صرف هزینه برای به دست آوردن دستگاه‌های واسطه انجام دهد.

 

ساختار icmp (هدر icmp)

بسته icmp دارای سه فیلد اصلی است به نام های :

Type :  مشخص کننده نوع پیام

Code : کد subtype یا کد زیر نوع (هر TYPE به خودی خود یک subtype  مشخص دارد و جهت مشخص شدن نوع رخداد استفاده می شود)

CheckSum : جهت بررسی اعتبار و درستی بسته های ICMP

با دیوار آتش iptables در لینوکس می توان نوع های ICMP را کنترل کرد ، در واقع به دیوار آتش بگوییم فقط به یک نوع مشخص اجازه ورود و خروج را بده ، بر اساس این گفته های از دستورات زیر استفاده کنید تا iptables شما به سادگی بتواند حملات icmp را کنترل کند

iptables -A INPUT -p icmp -m icmp --icmp-type 8 -m limit --limit 1/second -j ACCEPT
iptables -A INPUT -p icmp -j DROP

در خط اول بسته های ورودی icmp با نرخ یک بسته بر ثانیه فقط خط ورود را دارند و نوع آن فقط از نوع ۸ یعنی  echo request ping است . بنابراین شما می توانید سرور خود را ping کنید و در شبکه بودن آن را بررسی کنید و هم توانسته اید جلوی بسته های اضافی و حملات فوق الذکر را بگیرید .

در خط دوم تمامی انواع دیگر بلاک شده اند .

TypeCodeStatusDescription
0 – Echo Reply0 Echo reply (used to ping)
1 and 2 unassignedReserved
3 – Destination Unreachable0 Destination network unreachable
1 Destination host unreachable
2 Destination protocol unreachable
3 Destination port unreachable
4 Fragmentation required, and DF flag set
5 Source route failed
6 Destination network unknown
7 Destination host unknown
8 Source host isolated
9 Network administratively prohibited
10 Host administratively prohibited
11 Network unreachable for ToS
12 Host unreachable for ToS
13 Communication administratively prohibited
14 Host Precedence Violation
15 Precedence cutoff in effect
4 – Source Quench0 Source quench (congestion control)
5 – Redirect Message0 Redirect Datagram for the Network
1 Redirect Datagram for the Host
2 Redirect Datagram for the ToS & network
3 Redirect Datagram for the ToS & host
6  Alternate Host Address
7 unassignedReserved
8 – Echo Request0 Echo request (used to ping)
9 – Router Advertisement0 Router Advertisement
10 – Router Solicitation0 Router discovery/selection/solicitation
11 – Time Exceeded0 TTL expired in transit
1 Fragment reassembly time exceeded
12 – Parameter Problem: Bad IP header0 Pointer indicates the error
1 Missing a required option
2 Bad length
13 – Timestamp0 Timestamp
14 – Timestamp Reply0 Timestamp reply
15 – Information Request0 Information Request
16 – Information Reply0 Information Reply
17 – Address Mask Request0 Address Mask Request
18 – Address Mask Reply0 Address Mask Reply
19 reservedReserved for security
20 through 29 reservedReserved for robustness experiment
30 – Traceroute0 Information Request
31  Datagram Conversion Error
32  Mobile Host Redirect
33  Where-Are-You (originally meant for IPv6)
34  Here-I-Am (originally meant for IPv6)
35  Mobile Registration Request
36  Mobile Registration Reply
37  Domain Name Request
38  Domain Name Reply
39  SKIP Algorithm Discovery Protocol, Simple Key-Management for Internet Protocol
40  Photuris, Security failures
41 ExperimentalICMP for experimental mobility protocols such as Seamoby [RFC4065]
42 – Extended Echo Request[9]0 Request Extended Echo (XPing – see Extended Ping (Xping))
43 – Extended Echo Reply[9]0 No Error
1 Malformed Query
2 No Such Interface
3 No Such Table Entry
4 Multiple Interfaces Satisfy Query
44 through 252 unassignedReserved
253 ExperimentalRFC3692-style Experiment 1 (RFC 4727)
254 ExperimentalRFC3692-style Experiment 2 (RFC 4727)
255 reservedReserved
اشتراک گذاری:

مطالب زیر را حتما مطالعه کنید

دیدگاهتان را بنویسید