Ping of death

Ping смерті (англ. Ping of death) — це тип інформаційної атаки на комп'ютерну систему, що передбачає відправлення неправильного або шкідливого ping-трафіку на комп'ютер жертви.

Правильно сформований ping-пакет, як правило, містить 56 байтів або 64 байти у випадку використання заголовка протоколу Internet Protocol. Проте будь-який IPv4-пакет (включаючи ping) може містити 65535 байт. Деякі комп'ютерні системи ніколи не були розроблені для абсолютно правильної обробки ping пакета більшого, ніж максимальний розмір пакета взагалі, оскільки він порушує Інтернет-протокол, задокументований в стандарті RFC 791. Подібно до інших великих, але добре сформованих пакетів, перед передачею ping-пакети смерті фрагментуються у групи розміром 8 октетів. Проте, коли цільовий комп'ютер повторно об'єднує неправильну послідовність пакетів, може виникнути переповнення буфера, що призведе до аварійного завершення роботи системи і потенційно дозволить ввести шкідливий код.

Щоб виконати цей атаку, було достатньо однієї команди з Windows 95 або NT:

ping -l 65510 example.com

Більшість систем було виправлено в 1997—1998 роках, тому ця уразливість нині є історичною.

У попередніх реалізаціях TCP / IP ця помилка була проста у використанні і могла вплинути на безліч різних систем, включаючи Unix, Linux, Mac, Windows і периферійні пристрої. Оскільки системи почали фільтрувати дану атаку з допомогою брандмауерів та інших методів виявлення, пізніше з'явився інший тип ping-атаки, відомий як «ping затоплення», яке заливає жертву надзвичайно великою кількістю ping-пакетів, тому нормальний трафік не може досягти системи (основна відмова — атака на службу).

Детальна інформація

Як визначено в RFC 791, максимальна довжина IPv4-пакета, включаючи IP-заголовок, становить 65,535 (216 — 1) байт, обмеження, що виникає при використанні 16-розрядного широкого поля заголовка IP, що описує загальну довжину пакету.

Низький рівень зв'язку майже завжди встановлює межі пакета на максимальний розмір кадру (див. MTU). У Ethernet це, як правило, 1500 байт. У такому випадку великий пакет IP буде розділений на кілька IP-пакетів (також відомих як IP-фрагменти), так що кожен IP-фрагмент відповідає встановленому ліміту. Приймач IP-фрагментів збиратиме їх у повний IP-пакет і продовжуватиме обробляти його як завжди.

Коли виконується фрагментація, кожен IP-фрагмент повинен містити інформацію про те, яку частину оригінального пакету IP він містить. Ця інформація зберігається у полі «Зсув фрагмента» у заголовку IP. Поле має довжину 13 біт і містить зміщення даних у поточному фрагменті IP щодо вихідного IP-пакету. Зсув визначається в одиницях по 8 байт. Це дозволяє збільшити максимальне зміщення до 65 528 ((213-1) * 8) байт. Тоді при додаванні 20 байтів IP-заголовка максимум буде 65548 байт, що перевищує максимальний розмір кадру. Це означає, що фрагмент IP з максимальним зміщенням має мати дані не більше 7 байтів, або ж він перевищить межу максимальної довжини пакету. Шкідливий користувач може надіслати фрагмент IP з максимальним зміщенням і набагато більше даних, ніж 8 байт (настільки великий, наскільки фізичний рівень дозволяє йому).

Коли приймач збирає всі фрагменти IP, він закінчується IP-пакетом, що перевищує 65,535 байт. Це, можливо, переповнює буфер пам'яті, який приймач виділяється для пакета, і може викликати різні проблеми.

Як видно з наведеного вище опису, проблема не має нічого спільного з ICMP, який використовується лише як корисне навантаження, досить велике, щоб використати проблему. Це проблема в процесі повторної збірки фрагментів IP, які можуть містити будь-який тип протоколу (TCP, UDP, IGMP та ін.).

Виправлення проблеми полягає в тому, щоб додати чек у процесі повторної збірки. Перевірка кожного вхідного фрагмента IP гарантує, що в полях «Фрагмент офсет» та «Загальна тривалість» у заголовку IP кожного фрагмента IP менше 65,535. Якщо сума більша, то пакет недійсний, а фрагмент IP ігнорується. Цю перевірку виконують деякі брандмауери, щоб захистити комп'ютери, у яких немає помилки. Іншим виправленням для проблеми є використання буфера пам'яті, що перевищує 65,535 байт для повторної збірки пакета. (Це, по суті, є порушенням специфікації, оскільки він додає підтримку для пакетів, більших за дозволені.)

Ping смерті в IPv6

Докладніше: IPv6

У 2013 році в Microsoft Windows ця помилка була виявлена у ​​версії IPv6. Стек Windows TCP / IP не обробляв правильний розподіл пам'яті при обробці вхідних неправильних пакетів ICMPv6, що може спричинити віддалену відмову в обслуговуванні. Ця проблема була зафіксована в MS13-065 в серпні 2013 року. CVE-ID для цієї вразливості є CVE-2013-3183.

Ця стаття має кілька недоліків. Будь ласка, допоможіть удосконалити її або обговоріть ці проблеми на сторінці обговорення.
Цю статтю треба вікіфікувати для відповідності стандартам якості Вікіпедії. Будь ласка, допоможіть додаванням доречних внутрішніх посилань або вдосконаленням розмітки статті. (20 травня 2018)
Ця стаття не містить посилань на джерела. Ви можете допомогти поліпшити цю статтю, додавши посилання на надійні (авторитетні) джерела. Матеріал без джерел може бути піддано сумніву та вилучено. (20 травня 2018)
Ця стаття може містити оригінальне дослідження. Будь ласка, удоскональте її, перевіривши сумнівні твердження й додавши посилання на джерела. Твердження, які містять лише оригінальне дослідження, мають бути вилучені. (20 травня 2018)
На цю статтю не посилаються інші статті Вікіпедії.
Будь ласка розставте посилання відповідно до прийнятих рекомендацій.