В декабре 2014 года мы обнаружили очень интересную уязвимость в ядре XNU операционной системы Darwin (Darwin – операционная система с открытым кодом, на которой строятся OS X и iOS от компании Apple). Эта уязвимость может удалено эксплуатироваться злоумышленником, что позволяет ему, отослав всего лишь один специально подготовленный сетевой пакет, реализовать атаку типа DoS (отказ в обслуживании). Нами было установлено, что данной уязвимости подвержены операционные системы OS X 10.10 и iOS8.
Уязвимости в ядре XNU Darwin подвержены операционные системы OS X 10.10 и iOS 8
Tweet
Уязвимость кроется в некорректной обработке IP-пакета определенного размера с неверными IP-опциями. В результате некорректной обработки пакета операционная система завершает свою работу в аварийном режиме.
Аварийное завершение работы OS X 10.10
Впервые мы обнаружили это на системах OS X 10.10. В ходе дальнейших исследований, мы пришли к выводу, что эта уязвимость присутствует на устройствах с 64 битными процессорами и установленной на них iOS8:
- iPhone 5s и новее
- iPad Air и новее
- iPad mini 2 и новее
Для того чтобы понять, на какой стадии в процессе обработки IP пакета происходит сбой, достаточно проанализировать дамп падения.
Отладочный вывод ядра
Как видно из отладочного вывода, сбой происходит в функции icmp_error(). Задача данной функции – создать и отослать ICMP сообщение об ошибке (некорректный пакет). Как видно на скриншоте выше, данная функция была вызвана после функции, которая отвечает за разбор IP-опций в пакете.
Аварийное завершение работы системы вызывает следующий код:
Условие, которое приводит к падению системы
Когда прописанное в коде условие выполняется, вызывается функция panic, и система выключается в аварийном режиме. Это происходит из-за того, что поменялись внутренние структуры ядра, вследствие чего нового размера буфера не достаточно для хранения вновь созданного ICMP пакета.
Для того чтобы условие было выполнено, необходимо, чтобы IP-пакет удовлетворял следующим условиям:
- Размер IP-заголовка должен быть равен 60 байтам
- Размер дополнительных данных IP должен быть больше или равен 65 байтам
- IP-опции должны быть ошибочными (неверный размер, класс опций и т.д.)
Пример пакета, который приводит к аварийному завершению работы системы
На первый взгляд кажется, что очень сложно придумать сценарий для эксплуатации данной уязвимости злоумышленниками. Но профессионал в области сетевой безопасности, создав подходящий пакет, с легкостью сможет удаленно завершить работу пользовательского устройства или даже приостановить работу корпоративной сети.
Уязвимость в ядре XNU Darwin позволяет злоумышленнику реализовать DoS-атаку, отослав всего лишь один сетевой пакет
Tweet
Некоторые роутеры или файерволы не пропускают IP-пакеты с неверными IP-опциями. Однако нам удалось сгенерировать сетевой пакет, который в ходе тестирования с легкостью прошел через обычные роутеры и проэксплуатировал эту уязвимость.
Данная уязвимость устранена в следующих релизах операционных систем: OS X 10.10.3 и iOS8.3.
Пользователи продуктов «Лаборатории Касперского» защищены от этой уязвимости в OS X 10.10 с помощью компонента «защита от сетевых атак». Данный компонент работает в том числе в Kaspersky Internet Security for Mac 15.0.
Мы детектируем данную сетевую атаку со следующим вердиктом –DoS.OSX.Yosemite.ICMP.Error.exploit.
Darwin Nuke