- PVSM.RU - http://www.pvsm.ru -

«Пакет смерти» для сетевых карт Intel

Сетевой инженер Кристиан Кильхофнер (Kristian Kielhofner), купив новые серверы для обработки VoIP-трафика, столкнулся с неприятной проблемой [1]. Серверы периодически падали без видимой причины. Но самое странное, что на серверах иногда отключался Ethernet-контроллер. Отключался в прямом смысле: система некоторое время работала нормально, но после обработки определённого количества трафика интерфейс выдавал аппаратную ошибку и обрывал связь, а восстановление работы было возможно только после холодной перезагрузки.

Кристиан провёл небольшое исследование и нашёл ряд сообщений [2] о том, что у других пользователей тоже бывают проблемы с контроллерами Intel 82574L, говорили, что у них баги в EEPROM, ASPM и т.д. Кристиан с коллегами потратил несколько месяцев на поиск причин, почему в их случае контроллеры выдавали ошибку. В конце концов, им удалось докопаться до сути.

Инженер начал исследовать с помощью Wireshark содержимое пакетов, которые проходили через сетевую карту непосредственно перед отключением интерфейса — и обнаружил некоторую закономерность. Последний пакет всегда был ответом 100 Trying [3] по протоколу SIP, он всегда был определённой длины и всегда поступал после запроса INVITE [4] конкретного производителя IP-телефонов.

Кристиан говорит, что в пятницу вечером поднял на уши спецов из компании, продавшей ему телефоны этой марки. Он предоставил им доказательства и потребовал ответа. Они собрались все вместе, чтобы проверить баг, сделали тестовую конфигурацию на разных серверах и разных моделях телефонов — и смогли воспроизвести его! Правда, баг проявлялся не на всех моделях серверов и телефонов. После долгого анализа, в конце концов, всё-таки удалось выявить конкретный пакет, из-за которого падал интерфейс Ethernet. Это оказался полученный INVITE, а не 100 Trying.

Для проверки взяли программу tcpreplay [5], изолировали INVITE от телефона — и отправили этот пакет на сетевую карту. Трюк сработал.

Каждый может проверить работу «пакета смерти» на своей сетевой карте Intel, установив виртуальную машину и отправив оттуда пакет с помощью tcpreplay, или можно это сделать с другого компьютера по локальной сети. «Пакет смерти» срабатывает под любыми ОС, независимо от настроек файрвола, если только файрвол не блокирует на уровне OSI 2/3.

Содержимое пакета [6]

Кстати, Кристиан довёл анализ до логического завершения и выяснил, какие конкретно байты превращают любой пакет в «пакет смерти» для Ethernet-карты Intel.

Отключение интерфейса происходит, если по адресу 0x47f находится значение 2 или 3.

Байт 0x47f = 32 HEX (2 ASCII)
Байт 0x47f = 33 HEX (3 ASCII)

«Пакет смерти» для сетевых карт Intel

Если там 4, то всё OK.

«Пакет смерти» для сетевых карт Intel

Подходит любой пакет: HTTP POST, ICMP echo-request и проч. например, на веб-сервере можно сконфигурировать ответ 200 таким образом, что он будет «убивать» сетевые интерфейсы на клиентских машинах.

Кристиан Кильхофнер говорит, что занимается сетями 15 лет и никогда не видел ничего подобного. Он уже связался с инженерами Intel, и они подтвердили, что действительно, это баг в прошивке EEPROM на контроллерах 82574L.

Автор: alizar

Источник [7]


Сайт-источник PVSM.RU: http://www.pvsm.ru

Путь до страницы источника: http://www.pvsm.ru/ethernet/26579

Ссылки в тексте:

[1] столкнулся с неприятной проблемой: http://blog.krisk.org/2013/02/packets-of-death.html

[2] нашёл ряд сообщений: https://www.google.com/#hl=en&output=search&sclient=psy-ab&q=82574l+e1000e&oq=82574l+e1000e&gs_l=hp.3...1193.4410.0.4568.13.13.0.0.0.0.80.872.13.13.0.les%3B..0.0...1c.1.jku0hV5K7oU&pbx=1&bav=on.2,or.r_gc.r_pw.r_cp.r_qf.&fp=4abeb2e72661de26&biw=1855&bih=994

[3] 100 Trying: http://www.rfc-ref.org/RFC-TEXTS/3261/chapter21.html

[4] INVITE: http://www.rfc-ref.org/RFC-TEXTS/3261/kw-invite.html

[5] tcpreplay: http://tcpreplay.synfin.net/

[6] Содержимое пакета: http://www.kriskinc.com/intel-pod

[7] Источник: http://habrahabr.ru/post/168607/