آموزش جلوگیری از حملات 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 با نرخ یک بسته بر ثانیه فقط خط ورود را دارند و نوع آن فقط از نوع 8 یعنی echo request ping است . بنابراین شما می توانید سرور خود را ping کنید و در شبکه بودن آن را بررسی کنید و هم توانسته اید جلوی بسته های اضافی و حملات فوق الذکر را بگیرید .
در خط دوم تمامی انواع دیگر بلاک شده اند .
Type | Code | Status | Description |
0 – Echo Reply | 0 | Echo reply (used to ping) | |
1 and 2 | unassigned | Reserved | |
3 – Destination Unreachable | 0 | 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 Quench | 0 | Source quench (congestion control) | |
5 – Redirect Message | 0 | 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 | unassigned | Reserved | |
8 – Echo Request | 0 | Echo request (used to ping) | |
9 – Router Advertisement | 0 | Router Advertisement | |
10 – Router Solicitation | 0 | Router discovery/selection/solicitation | |
11 – Time Exceeded | 0 | TTL expired in transit | |
1 | Fragment reassembly time exceeded | ||
12 – Parameter Problem: Bad IP header | 0 | Pointer indicates the error | |
1 | Missing a required option | ||
2 | Bad length | ||
13 – Timestamp | 0 | Timestamp | |
14 – Timestamp Reply | 0 | Timestamp reply | |
15 – Information Request | 0 | Information Request | |
16 – Information Reply | 0 | Information Reply | |
17 – Address Mask Request | 0 | Address Mask Request | |
18 – Address Mask Reply | 0 | Address Mask Reply | |
19 | reserved | Reserved for security | |
20 through 29 | reserved | Reserved for robustness experiment | |
30 – Traceroute | 0 | 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 | Experimental | ICMP 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 | unassigned | Reserved | |
253 | Experimental | RFC3692-style Experiment 1 (RFC 4727) | |
254 | Experimental | RFC3692-style Experiment 2 (RFC 4727) | |
255 | reserved | Reserved |
مطالب زیر را حتما مطالعه کنید
Prompt Injection چیست؟
چارچوب (framework) امنیت سایبری چیست؟ و انواع آن
10 افزونه برتر Burp Suite برای تست نفوذ
DNS Rebinding چیست و چگونه کار می کند؟
دور زدن ( JailBreak ) هوش مصنوعی Chatgpt
بررسی گواهی ssl/tls با ابزار TLSx در باگ بانتی
1 Comment
Join the discussion and tell us your opinion.
Thanks for your blog, nice to read. Do not stop.