پروتكل ICMP چيست؟
روتكل Internet Control Message Protocol (ICMP) يك پروتكل لايه (3) شبكه است كه توسط تجهيزات شبكه براي تشخيص مشكلات ارتباط شبكه استفاده مي شود. ICMP عمدتاً براي تعيين اينكه آيا داده ها به موقع به مقصد مورد نظر خود مي رسند يا نه استفاده مي شود. معمولاً پروتكل ICMP در دستگاه هاي شبكه مانند روترها استفاده مي شود. ICMP براي گزارش و آزمايش خطا بسيار مهم است، اما ميتواند در حملات انكار سرويس توزيع شده (DDoS) نيز استفاده شود.
ICMP براي چه مواردي استفاده مي شود؟
هدف اصلي ICMP گزارش خطا است. هنگامي كه دو دستگاه از طريق اينترنت به يكديگر متصل مي شوند، ICMP خطاهايي ايجاد مي كند تا در صورتي كه هر يك از داده ها به مقصد مورد نظر خود نرسيده باشد، با دستگاه فرستنده به اشتراك بگذارد. به عنوان مثال، اگر يك بسته داده براي يك روتر خيلي بزرگ باشد، روتر بسته را رها مي كند و يك پيام ICMP براي داده ها به منبع اصلي ارسال مي كند.
استفاده ثانويه از پروتكل ICMP براي انجام تشخيص شبكه است. ابزارهاي ترمينال رايج مانند traceroute و ping هر دو با استفاده از ICMP كار مي كنند.
ابزار traceroute براي نمايش مسير مسيريابي بين دو دستگاه اينترنتي استفاده مي شود. اين مسير، مسير فيزيكي واقعي روترهاي متصل است كه درخواست بايد قبل از رسيدن به مقصد از آن عبور كند. مسير بين يك روتر و روتر ديگر به عنوان “hop” شناخته مي شود و يك traceroute همچنين زمان مورد نياز براي هر hop در طول مسير را گزارش مي دهد. اين مي تواند براي تعيين منابع تاخير شبكه مفيد باشد.
ابزار ping يك نسخه ساده شده از traceroute است. يك ping سرعت اتصال بين دو دستگاه را آزمايش مي كند و دقيقاً گزارش مي دهد كه چقدر طول مي كشد يك بسته داده به مقصد برسد و به دستگاه فرستنده بازگردد. اگرچه ping اطلاعاتي در مورد مسيريابي يا hop ارائه نمي دهد، اما هنوز يك معيار بسيار مفيد براي اندازه گيري تأخير بين دو دستگاه است. پيام هاي ICMP echo-request و echo-reply معمولاً براي انجام ping استفاده مي شوند.
متأسفانه حملات شبكه مي توانند از اين فرآيند سوء استفاده كنند و ابزارهايي براي ايجاد اختلال مانند ICMP flood attack و حمله ping of death attack ايجاد كنند.
ICMP چگونه كار مي كند؟
برخلاف پروتكل اينترنت (IP)، ICMP با پروتكل لايه transport (انتقال) مانند TCP يا UDP مرتبط نيست. اين باعث مي شود ICMP يك پروتكل بدون اتصال (connectionless) باشد: يك دستگاه نيازي به باز كردن اتصال با دستگاه ديگر قبل از ارسال پيام ICMP ندارد. ترافيك IP معمولي با استفاده از TCP ارسال مي شود، به اين معني كه هر دو دستگاهي كه داده ها را مبادله مي كنند، ابتدا TCP handshake انجام مي دهند تا اطمينان حاصل شود كه هر دو دستگاه براي دريافت داده آماده هستند.
ICMP يك اتصال را به اين روش باز نمي كند. پروتكل ICMP همچنين اجازه هدف قرار دادن يك پورت خاص روي يك دستگاه را نمي دهد.
چگونه از ICMP در حملات DDoS استفاده مي شود؟
ـ ICMP flood attack:
ping flood يا ICMP flood زماني است كه مهاجم سعي ميكند يك دستگاه هدف را با بستههاي echo-request ICMP در هم بشكند. هدف، بايد هر بسته را پردازش كرده و به آن پاسخ دهد و منابع محاسباتي آن را مصرف كند تا زماني كه كاربران قانوني نتوانند سرويس را دريافت كنند.
ـ Ping of death attack:
اين حمله زماني است كه مهاجم پينگي بزرگتر از حداكثر اندازه مجاز براي يك بسته را به يك ماشين هدف ارسال مي كند و باعث خراب شدن دستگاه مي شود. بسته در راه رسيدن به هدف خود تكه تكه مي شود، اما زماني كه هدف، بسته را به حداكثر اندازه اصلي خود جمع مي كند، اندازه بسته باعث سرريز بافر مي شود.اين نوع حمله در حال حاضر خيلي كم اتفاق مي افتد، با اين حال تجهيزات شبكه قديميتر هنوز هم ميتوانند در معرض آن باشند.
ـ Smurf attack:
در حمله Smurf، مهاجم يك بسته ICMP را با يك آدرس IP مبدا جعلي ارسال مي كند. تجهيزات شبكه به بسته پاسخ مي دهد، پاسخ ها را به IP جعلي ارسال مي كند و قرباني را با بسته هاي ICMP ناخواسته پر مي كند. مانند ” Ping of death”، امروز حمله اسمورف فقط با تجهيزات قديمي امكان پذير است.
ICMP تنها پروتكل لايه شبكه مورد استفاده در حملات DDoS لايه 3 نيست. به عنوان مثال، مهاجمان در گذشته از بسته هاي GRE نيز استفاده كرده اند.
به طور معمول، حملات DDoS لايه شبكه، تجهيزات و زيرساخت شبكه را هدف قرار مي دهند، در مقابل حملات DDoS لايه برنامه، كه ويژگي هاي وب را هدف قرار مي دهند.
پارامترهاي ICMP:
پارامترهاي ICMP در هدر بسته وجود دارند و به شناسايي خطاهاي بسته IP كه مربوط به آن هستند كمك مي كنند. پارامترها مانند يك برچسب حمل و نقل روي يك بسته هستند. آنها اطلاعات شناسايي بسته و داده هاي موجود در آن را ارائه مي دهند. به اين ترتيب، پروتكل ها و ابزارهاي شبكه كه پيام ICMP را دريافت مي كنند، مي دانند كه چگونه بسته را مديريت كنند.
32 بيت اول هدر بسته هر پيام ICMP شامل سه فيلد اطلاعاتي يا پارامتر است. اين سه پارامتر به شرح زير است:
- Type: 8 بيت اول پيام Type هستند. برخي از انواع رايج ان شامل موارد زير است:
Type 0: Echo reply
Type 3 : Destination unreachable
Type 8 : Echo
Type 5 : Redirect
Type توضيح مختصري در مورد اينكه پيام براي چيست ارائه مي دهد تا دستگاه شبكه دريافت كننده بداند چرا پيام را دريافت مي كند و چگونه با آن رفتار كند. به عنوان مثال، يك Echo درخواستي است كه ميزبان ارسال مي كند تا ببيند آيا يك سيستم مقصد بالقوه در دسترس است يا خير. به محض دريافت پيام Echo ، دستگاه دريافت كننده ممكن است يك پاسخ Echo reply (0Type) ارسال كند كه نشان مي دهد در دسترس است.
- Code: 8 بيت بعدي نشان دهنده نوع Code پيام است كه اطلاعات بيشتري در مورد نوع خطا ارائه مي دهد.
- Checksum: 16 بيت آخر يك بررسي يكپارچگي پيام را ارائه مي دهد. Checksum تعداد بيتها را در كل پيام نشان ميدهد و ابزار ICMP را قادر ميسازد تا سازگاري با هدر پيام ICMP را بررسي كند تا مطمئن شود دامنه كامل داده تحويل داده شده است.
- قسمت بعدي هدر ICMP، pointer است. اين شامل 32 بيت داده است كه مشكل را در پيام IP اصلي نشان مي دهد. به طور خاص، pointer مكان بايت را در پيام IP اصلي كه باعث ايجاد پيام مشكل شده است، شناسايي مي كند. دستگاه دريافت كننده به اين قسمت از هدر نگاه مي كند تا مشكل را مشخص كند.
- بخش آخر بسته ICMP ، datagram اصلي است. اين شامل حداكثر 576 بايت در IPv4 و 1280 بايت در IPv6 است و شامل يك كپي از پيام IP اصلي حاوي خطا است.
منبع : پروتكل ICMP