Вектор атаки BlueBorne может потенциально повлиять на все устройства с Bluetooth, количество которых сегодня оценивается более чем в 8,2 миллиарда. Bluetooth является ведущим и наиболее распространенным протоколом для ближней связи и используется всеми устройствами — от обычных компьютеров и мобильных до IoT-устройств, таких как телевизоры, часы, автомобили и медицинские приборы.
Итак, в чём проблема? Bluetooth сложный. Эта чрезмерная сложность является прямым следствием огромной работы, которая была проведена при создании спецификации Bluetooth. Чтобы проиллюстрировать это отметим, что, в то время как спецификация WiFi (802.11) умещается на 450 страницах, объём спецификации Bluetooth достигает 2822 страниц. Результатом непрозрачности является большое количество уязвимостей, о части из которых мы расскажем в этой статье.
Спецификация Bluetooth имеет не менее 4 разных уровней фрагментации, как показано на диаграмме, взятой из спецификации:
Обзор BlueBorne
Вектор атаки BlueBorne состоит из нескольких этапов. Во-первых, злоумышленник обнаруживает активные соединения Bluetooth вокруг. Устройства могут быть идентифицированы, даже не находясь в режиме «обнаружения». Затем злоумышленник получает MAC-адреса уязвимых устройств. «Прощупав» устройство, злоумышленник определяет, какую операционную систему использует его жертва, и настраивает соответствующим образом эксплойт. Затем используя уязвимость в реализации протокола Bluetooth на соответствующей платформе, злоумышленник получает доступ, необходимый для достижения его злонамеренной цели. На этом этапе хакер может выбрать атаку «Man-in-The-Middle», «прослушивать» устройство или получить полный контроль с целью использования его в широком круге кибер-атак, таких как ботнет WireX.
Атака BlueBorne на Android
Как только злоумышленник определил, что его цель использует операционную систему Android, он может использовать четыре уязвимости, обнаруженные для этих устройств, или атаку Man-in-The-Middle.
Ниже приведена краткая демонстрация того, как с помощью BlueBorne злоумышленник может взять под свой контроль Android-устройство:
Уязвимость в Android, которая может привести к утечке информации (CVE-2017-0785
Первая уязвимость в Android раскрывает ценную информацию, которая помогает злоумышленнику использовать одну из уязвимостей удаленного выполнения кода, описанную далее. Уязвимость обнаружена в реализации SDP (Service Discovery Protocol), который позволяет устройству идентифицировать другие Bluetooth-девайсы вокруг него. Недостаток позволяет злоумышленнику отправлять набор запросов на сервер, заставляя его раскрывать бит памяти в ответ. Эта информация впоследствии может использоваться злоумышленником для преодоления мер безопасности и захвата контроля над устройством. Это также позволяет злоумышленнику получить ключи шифрования с целевого устройства и подслушивать Bluetooth-сообщения.
Уязвимость удаленного выполнения кода №1 (CVE-2017-0781)
Эта уязвимость находится в службе Bluetooth Network Encapsulation Protocol (BNEP). BNEP позволяет использовать Интернет через Bluetooth, превращая мобильный телефон с модемом в маршрутизатор, точку доступа в Интернет. Из-за недостатка в службе BNEP хакер может вызвать нарушение целостности информации в памяти, что позволит ему запускать код на устройстве. Из-за отсутствия надлежащей проверки авторизации запуск этой уязвимости не требует какого-либо взаимодействия с пользователем, поэтому он не узнает об атаке.
Уязвимость удаленного выполнения кода №2 (CVE-2017-0782)
Эта уязвимость похожа на предыдущую, но находится на более высоком уровне службы BNEP — профиле персональной сети (Personal Area Networking, PAN), который отвечает за установление сетевого соединения на основе IP между двумя устройствами. При этой атаке нарушение целостности информации в памяти также может быть использовано злоумышленником для получения полного контроля над зараженным устройством.
Man-in-The-Middle (CVE-2017-0783)
Атаки Man-in-The-Middle (MiTM) позволяют злоумышленнику перехватывать и изменять данные, поступающие на целевое устройство или с него. Чтобы реализовать атаку MiTM с использованием Wi-Fi, злоумышленнику потребуется специальное оборудование и запрос соединения целевого устройства с открытой WiFi-сетью. Уязвимость существует в PAN-профиле Bluetooth-стека и позволяет злоумышленнику создавать вредоносный сетевой интерфейс на устройстве жертвы, перенастраивать IP-маршрутизацию и принудительно передавать все сообщения через вредоносный сетевой интерфейс. Атака в очередной раз не требует взаимодействия с пользователем или какой-либо аутентификации, что делает её практически незаметной.
Атака BlueBorne на Windows
Мы обнаружили уязвимость в Windows, которая позволяет злоумышленнику провести атаку Man-in-The-Middle. Ниже краткая демонстрация этого:
Man-in-The-Middle №2 (CVE-2017-8628)
Эта уязвимость идентична той, которая обнаружена в операционной системе Android, и влияет на обе системы, поскольку они используют одни и те же принципы в реализации некоторых протоколов Bluetooth.
Атака BlueBorne на Linux
Armis раскрыла две уязвимости в операционной системе Linux, которые позволяют злоумышленникам полностью контролировать зараженные устройства. Первая из них — утечка информации, которая может помочь злоумышленнику определить точную версию, используемую целевым устройством, и соответствующим образом настроить его эксплойт. Вторая — переполнение стека, которое может привести к полному контролю над устройством.
Вот краткое описание того, как с помощью BlueBorne хакер может взять под контроль Linux-устройство:
Утечка информации (CVE-2017-1000250)
Подобно уязвимости утечки информации в Android, эта уязвимость находится на сервере SDP, который отвечает за одну из важнейших особенностей Bluetooth — автоматическое подключение Bluetooth-устройств к службам, предоставляемым другими устройствами. Недостаток в SDP позволяет злоумышленнику отправлять набор запросов на сервер, заставляя его раскрывать бит памяти в ответ. Это может использоваться злоумышленником для получения конфиденциальных данных из процедур Bluetooth, которые могут содержать ключи шифрования.
Переполнение стека в BlueZ (CVE-2017-1000251)
Эта уязвимость была обнаружена в стеке Bluetooth Linux-ядра. Внутренний дефект в L2CAP (Logical link control and adaptation protocol), который используется для соединения между двумя устройствами, вызывает повреждение памяти, позволяющее выполнить код атакующего.
Атака BlueBorne на iOS
Armis раскрыл Apple сведения об этой атаке. Эксплойт был устранён в версии IOS 10 и версии Apple TV выше 7.2.2, однако эта уязвимость по-прежнему представляет большой риск для любого iOS-устройства до версии 10. Уязвимость может быть использована злоумышленником для выполнения кода с повышенными привилегиями.
Удаленное выполнение кода с помощью протокола Apple Low Energy Audio
Эта уязвимость была обнаружена в новом протоколе LEAP (Low energy audio protocol), разработанном Apple и работающим поверх Bluetooth. Протокол предназначен для потоковой передачи звука на периферийные устройства, например, гарнитуры или Siri Remote. Поскольку аудио-команды, отправленные с помощью LEAP, проверены не должным образом, злоумышленник может использовать повреждение памяти, чтобы получить полный контроль над устройством.
Как защититься от BlueBorne?
Уязвимости, которые могут распространяться по воздуху и между устройствами, представляют огромную угрозу для любой организации или отдельного лица. Существующие меры безопасности, включая защиту конечных точек, брандмауэры и решение сетевой безопасности, не предназначены для идентификации таких типов атак и связанных с ними уязвимостей. Их основная задача — блокировать атаки, которые могут распространяться через IP-соединения.
В ядре Linux проблема присутствует в коде функции l2cap_parse_conf_rsp, присутствующей начиная с ядра 3.3 (октябрь 2011 г.). Проблема была устранена 9 сентября. В ядрах Linux со включенной защитой от переполнения стека (CONFIG_CC_STACKPROTECTOR=y) уязвимость приводит только к краху ядра. Подобная защита по умолчанию включена в ядрах RHEL, CentOS, Fedora, Ubuntu и большинства стационарных дистрибутивов Linux. Поэтому в обычных дистрибутивах возможен лишь вызов краха, а основная опасность угрожает мобильным Linux-платформам, таким как Tizen.
Пользователи Android должны дождаться исправлений безопасности для своих устройств, так как это зависит от производителя конкретного устройства. Пока можно установить приложение «BlueBorne Vulnerability Scanner» (созданное командой Armis) из Google Play Store, чтобы проверить, уязвимы ли ваши устройства для атаки BlueBorne или нет.
«Компания Microsoft выпустила обновления для системы безопасности в июле. Клиенты, у которых включен Центр обновления Windows и применены обновления безопасности, были защищены автоматически. Мы выпустили обновление как можно скорее, но как ответственный отраслевой партнер, не раскрывали информацию, пока другие производители не разработали патчи», — отметил представитель Microsoft.
Всем пользователям до установки обновлений рекомендуется отключить по умолчанию Bluetooth и включать его только при необходимости.
Полные технические подробности с анализом кода можно узнать из Technical White Paper on BlueBorne.
TrusTT
Ну и как мне теперь слушать Bluetooth-наушники в метро?
Cloud4Y Автор
TrusTT
gkir
При полностью выключенном (а не скрытом от всех) блютусе программа говорит, что устройство уязвимо. Отличнo.
Germanets
Каким конкретно способом программа проверяет устройство найти, увы, не удалось… Вполне вероятно, что для проверки текущего устройства включенный блютуз и не нужен, не будет же устройство само к себе подключатся) Вполне возможно, что достаточно просто выполнить несколько функций из загруженных библиотек, или же подключиться к уязвимым сервисам локально. А вот для тестирования удалённых устройств — блютуз вполне себе включается самой программой.
sasha1024
Ну да. Наверно, программа проверяет, установлено ли ПО с уязвимостями, а не включено ли оно. А то кто знает — вдруг в момент проверки что-то выключено, ты скажешь человеку «всё ок», а он потом запустит прогу — и привет.
na_net_i_suda_net
Все намного проще, для устройства на котором приложение установлено, просто проверяется Build.VERSION.SECURITY_PATCH, если он до 1 августа, тогда уязвим.
Вообще все приложение — красивые анимашки, а в код посморишь, там 1 класс на всю логику(com.armis.blueborne_detector.VulnerabilityUtils).
Для проверки устройств по близости, приложение по маку устанавливает производителя, ось и название устройства, на основе этих данных градирует устройста на 3 категории.
wholeman
Ага, дождёшься их, как же. У меня сейчас Samsung S4 и он меня вполне устраивает. Там есть такие прикольные штуки, как термометр и гигрометр. Но я сильно сомневаюсь, что Samsung выпустит патч для аппарата, отстающего на четыре поколения.
Такой вопрос: а если «Режим модема» у меня выключен в настройках, BNEP и PAN же должны быть отключены, и RCE невозможно, только менее опасные уязвимости. Или всё-таки нет?
pnetmon
Ну и какая утечка через наушники(на которые не будет обновлений)? Замена передаваемого трафика на свой: сигнал на динамики, сигнал с микрофона?
TrusTT
Процитирую Википедию
diversenok
Нормальные люди не запускают бинарные файлы, которые пришли по блютусу с наушников.
TimsTims
Вчитайтесь в статью. Там идёт эксплуатация уязвимости, чтение памяти побитово, и похищение ключей. Всё остальное — дело техники. Посмотрите ролик, там даже музыка не включена, не то что «запуск принимаемых файлов»… похоже вы вообще не поняли всю серьезность проблемы.
diversenok
С моей стороны это был сарказм.
mokhin-denis
У меня часы, уже вторые, с функцией смарт. Соединяются по BT с телефоном. Получается, включать BT нужно дома… (только если нет злоумышленника за стеной ))) Тогда все смартфункции часов идут лесом… Мдя…
sim-dev
Как только авторучку вы подключите к интернету, тут же у юристов прибавится работы с легитимностью подписей и утечкой кофиденциальной рукописной информации. Выход один — не подключать авторучку к интернету, но разве маркетологи на это пойдут?!
Решение уязвимости блютуза прибавит еще тысчонку страниц в его спецификации, и все на голубом глазу будут думать, что это уменьшит уязвимость…
Только идиоты делают одно и то же, всякий раз надеясь на другой результат. Если не ошибаюсь, слова приписывают Эйнштейну. Могучий старик.
geher
Человек набирает один и тот же номер и получает короткие гудки.
Идиот! Там всегда будет занято.
Я, конечно, понимаю, что имелось ввиду, но что сказано (или написано), то и имеем.
И это общая проблема подобных громких абсолютных фраз
areht
Во-первых,
> Безумие — это точное повторение одного и того же действия. Раз за разом, в надежде на изменение. Это есть безумие.
Во-вторых, не важно всегда ли будет занято. Лучше найти другой номер.
geher
Полагаю, достаточно стандартной является ситуация ожидания события, когда понять факт наступления события позволяет только выполнение некоторой процедуры проверки.
Ожидание освобождения абонента путем периодического набора его номера — только один из вариантов этой ситуации (я знаю о существовании телефонов с автоматическим дозвоном, но случаи бывают разные).
areht
Раз уж вы в формализм хотите уйти… у вас в тексте «ожидание», а в цитате «надежда». Ну и «периодически» и «раз за разом» — тоже разные вещи.
geher
Надежда — это про всего лишь про отсутствие гарантий ожидаемого.
В примере с дозвоном пациент каждый раз надеется, что именно в этот раз поведение системы наконец изменится. При этом необходимость дозвониться до данного конкретного абонента заставляет набирать номер раз за разом несмотря на ненулевую вероятность полной невозможности дозвониться (например, абонент забыл положить трубку и неизвестно, когда заметит этот факт и заметит ли вообще).
"Периодически" и "раз за разом" на самом деле не так уж и далеко друг от друга.
Если совсем уж формально, то "периодически" — это "раз за разом с некоторым интервалом между событиями". Но в реальной жизни слово "периодически" не всегда означает наличие определенного периода, а потому можно считать, что смысл достаточно близок.
areht
> Надежда — это про всего лишь про отсутствие гарантий ожидаемого.
Надежда — это при отсутствии объективных причин ожидать «ожидаемого».
> заставляет набирать номер раз за разом несмотря на ненулевую вероятность полной невозможности дозвониться
Мне кажется тут уместен только один вопрос: на которой итерации забирать в психушку?
geher
При отсутствии объективных причин (за объективную причину вполне проходит отличная от нуля вероятность) мы имеем безнадежную ситуацию.
А насчет психушки после некоторого числа итераций (количество допустимых итераций определяется ситуацией) согласен. Раз за разом не означает бесконечное число попыток, а потому не вижу противоречий со своей позицией.
dmitry_dvm
Эйнштейн просто компы не застал. 90% проблем так и чинятся.
sasha1024
:).
AVX
Что насчёт симбиана, байду и прочих? Для них нет рабочих эксплоитов?
Каким образом хакер перенаправит трафик через «злонамеренный интерфейс», если в устройстве, например, просто нет возможности расшарить интернет по BT? Или вовсе не реализовано PAN.
Dima_pb
Естественно, что наибольшему риску взлома подлежат наиболее интересные с точки зрения хакера устройства, а не все подряд. Вряд ли кто будет специально ковырять байду ради сферической возможности взломать байду. Главное, что принципиально показан метод, а уж степень риска каждый определяет для себя сам.
Protactinium236
У владельцев iOS устройств как я понял проблем уже нет
batyrmastyr
Судя по статье, уязвимость LEAP не закрыта.
Protactinium236
то есть это нельзя понимать однозначно?
batyrmastyr
Похоже, невнимательно прочёл.
AntonAlekseevich
С iOS 10 нет. Более старые версии подвержены.
Protactinium236
по поводу LEAP не беспокоюсь это для владельцев AirPods и AppleTV
willyd
Как я понимаю iPhone как раз уязвим. Только из описания непонятно должен ли быть атакущий аутентифицирован.
Protactinium236
На следующей неделе выйдет иос11 и я уверен что там уже заплатка будет
navion
Уже исправлено в iOS 10, а для старья (2011 года выпуска) обещают патч на 9.3.5.
Fedcomp
> Итак, в чём проблема? Bluetooth сложный.
Проблема с тем же buffer overflow это несовершенство инструментов, а не просто сложность спецификации. Какой бы сложной спецификация не была, программа не должна позволять buffer overflow. Для этого есть rust например. Но йожики будут продолжать писать на C/C++ ведь на C/C++ пишут все. Как впрочем никто не будет ломать обратную совместимость чтобы сделать язык более статически анализируемым.
flatscode
То, что BT сложный заметно на практике, т.к. перебирая разные комбинации телефонов и BT-гарнитур у меня ни одна из них не работала на 100% без проблем. То здесь, то там всплывали разные косяки. То долгое подключение, то заикания звука, то какие-то странные подвисания.
calg0n
Видимо дело в смартфоне. Имею 6S и сколько гарнитур/наушников перепробовал, всё хорошо было. Из последнего даже дешманский китайский блютус адаптер в машине работал. Когда был Nexus во владении, тоже никаких косяков не было. Так что проблема явно не с гарнитурами.
a1ien_n3t
Проблема не в языке. Как уже не раз обсуждали в тойже теме heartbleed, что rust не панацея.
Небезопасный код можно написать на любом языке.
ASC7_Uni
Может кто-нибудь подсказать конкретные номера обновлений?
navion
Так и называется «июльский пакет обновления», но его уже заменил октябрьский.
dark_snow
а для 7 и хр?
navion
Я поспешил с месяцем, во вторник вышел сентбярьский пакет для 7 и выше.
dark_snow
еще бы для хр ибо есть пара устройств с ней (выше никак по ресурсам ибо проц т7200 и 2гб озу)
Jogger
Спасибо что предупредили, а то я как раз задумался о покупки bluetooth гарнитуры. Теперь не стану покупать.
sasha1024
Есть ещё такая статья, старше на 9 минут.
justaguest
MS получили детали 9 Апреля, и чинили 3 месяца, Linux получили детали 5 Сентября, и пофиксили за 4 дня (патч: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e860d2c904d1a9f38a24eb44c9f34b8f915a6ea3)
technic93
Там ошибка с переполнением происходит в момент сериализации каких то блютузных структур в буфер для отправки. Так вот размер буфера выделяется где то вначале процедуры сериализации либо 64 либо 128 байт (как я глянул в коде) потом происходит его наполнение разными данными, которые являются разными структурами, через if/else и switch/case, соответсвенно заранее спрогнозировать нужный размер буфера не возможно и получаем потенциальную возможность выхода за пределы массива.
В патче теперь добавили проверку при каждой записи в этот буфер на переполнение и соответсвенно теперь по всему коду передается не только указатель но дополнительным аргуметом размер. Это является самым удобным представлением массива по мнению сишников.
Вполне возможно стандарт синего зуба предполагает фиксированный размер пакета, но доказать то что любая комбинация тех самых if/else и switch/case выдает на выходе меньше чем N байт никто не удосужился, потому что цитата "протокол bluetooth сложный". А оказывается что ребята из armis придумали как подобрать такие параметры запроса чтобы "инвариант" нарушился.
P.S. я не специальист по ядру и тем более блютузу так что все выше изложенное сказано на правах дилетанта
KarasikovSergey
Если я правильно понял описание атаки, то для ее инициации надо знать bluetooth адрес атакуемого устройства. Если оно не находится в режиме обнаружения — то узнать его может быть не так уж и просто. Хорошо, если он совпадает с WiFi MAC адресом (так бывает), тогда будучи в одной сети можно получить его методом сканиварония. Если же нет — то потребуется специализированное устройство Ubertooth. То есть опасаться, что телефоны сами будут друг друга заражать наверное все же не стоит.
Далее, для меня атака делится на две интересных части:
1. Это ассоциация с bluetooth жертвы без участия жертвы, что само по себе уже круто (и без дальнейшего взлома можно так подключить устройство вывода аудио, или устройство ввода)
2. Собственно shell-доступ с привилегированным пользователем (я так понял из демки, что пользователь bluetooth имеет очень широкие возможности доступа к памяти устройства)
Очень хотелось бы взглянуть на PoC