Исходный код эксплойта для «неустранимой» уязвимости в USB-устройствах опубликован на GitHub

Думаю, пару месяцев назад многие слышали из новостей про уязвимость в USB-контроллерах, которая может превратить любое периферийное устройство, подключаемое по usb, в инструмент кибершпионажа. В англоязычной компьютерной прессе эта проблема получила название «BadUSB». Первым о ней сообщил Карстен Нол (Karsten Nohl), секьюрити-эксперт и исследователь из берлинской компании SR Labs на конференции BlackHat USA. Из-за серьезности проблемы и опасений, что уязвимость сложно устранить, Нол не стал публиковать эксплойт, пытаясь дать время вендорам на ее устранение.

С тех пор прошло 2 месяца и все уже напрочь забыли о «плохом юэсби», пока неделю назад, уже на другой хакерской конфе — Derbycon — не выступили еще двое исследователей: Адам Кадилл и Брэндон Уилсон (Adam Caudill, Brandon Wilson).



Не буду полностью пересказывать их выступление, просто посмотрите видео, объясняют парни вполне доступно.

Основная идея в том, что нужно отказаться от мысли о любом usb-драйве как о простом носителе информации и начать рассматривать его как полноценный компьютер, который может быть запрограммирован на выполнение любых команд.

Всё становится еще серьезнее, если принять во внимание, что вредоносный код, записанный в модифицированную прошивку usb-драйва, полностью скрыт, не детектится антивирусами и не может быть удалён при форматировании устройства. Вспоминается Stuxnet — история с заражением компьютеров иранского ядерного центра — тоже с использованием инфицированных usb-девайсов.

В отличие от первооткрывателя «BadUSB», Адам и Брэндон еще и выложили код своего proof-of-concept на GitHub, мотивируя это отсутствием уверенности в том, что вендоры не закрыли глаза на проблему и считая, что только публикация общедоступного эксплойта заставит компании-производители USB-контроллеров начать работать над патчем. Так что, хоть эксплойт и не универсален и написан для определенного USB-контроллера одного из Тайваньских производителей (Phison 2251-03), появление других модификаций теперь только вопрос времени.

Использованные материалы


srlabs.de/badusb
github.com/adamcaudill/Psychson
boingboing.net/2014/10/03/sourcecode-for-unpatchable.html
mashable.com/2014/10/03/bad-usb
www.wired.com/2014/10/code-published-for-unfixable-usb-attack
Share post

Similar posts

Comments 63

    +1
    Раньше пользователи просто таскали флешки с вирусами… Эх…
    Вообще, вряд ли нас ждёт массовое распространение «заражённых» флешек. Скорее уж будут на всяких мероприятиях раздавать USB-драйвы с «вшитой» командой на скачивание разного ПО вроде Guard.Mail.ru =)
      +7
      Мне кажется это слишком оптимистичное предположение.
      0
      Правильно ли я понял, что под шпионажем здесь подразумевается перехват трафика с других устройств, висящих на этой же шине USB, а для защиты достаточно втыкать «заразную» флэшку в изолированный контроллер?
        0
        Нет. Штука вот в чём: чел втыкает флешку, флешка, например, притворяется usb-клавиатурой. И эмулирует нажатие разнообразных клавиш. Например, на GNU/Linux'е флешка эмулирует нажатие «rm -rf /* » и сносит юзеру все файлы
          0
          Это правда при условии, что запущен и активен терминал от рута.
            0
            Я всего лишь пример сказал. Разумеется, на практике флешка должна сперва специальной комбинацией клавиш открыть терминал (в KDE [и в Gnome, вроде, тоже] это делается с помощью Alt-F2) и потом набрать команду. Если команда будет запущена от юзера, она снесёт лишь юзерские файлы, что тоже не так уж и хорошо. Наконец, флешка может сэмулировать Ctrl-Alt-Sysrq-O (Sysrq — это PrintScreen) и резко вырубить юзеру комп с потерей всех данных, что тоже плохо (впрочем, не знаю, работает ли это на USB-клаве, на PS/2-клаве работает)
              0
              Да я и не говорю, что ничего плохого такой девайс не сделает, я просто про то, что все конечно плохо, но не настолько, ИМХО.
              Самое обидное, что он может дождаться момента, когда я уже забуду про воткнутую флешку (а то и вообще отойду от компа) и вот тогда-то и начать свои злодеяния
        –9
        То есть весь эксплоит заключается в том, что для определённых флешек можно перепрошить контроллер? Так это ещё надо умудриться его перепрошить.
          +5
          Господа минусующие, объясните суть именно уязвимости, ведь для того чтобы перепрошить хорошую флешку, нужно выполнить код на уровне администратора системы, а уж из под этого уровня если захотеть можно все что угодно сделать, даже спалить вам железо.
          А то, что под видом промо дают шпионящие флешки, так мало ли что там имеет доступ к чипам памяти, может там встроенный юникс с модемом и камерой.
          PS. Заголовок слишком желтый.
            +4
            Уязвимость, например, в том, что взял у соседа флешку на 10 минут файл перекинуть, а вместо этого перепрошил её и вернул. Он воткнет её себе куда-то, а она определится какой-нибудь клавиатурой, которая сама нажмет Win-R, cmd, enter и накопирует куда-то файлов или еще чего интересного сделает.

            Ну то есть этого по сути и раньше можно было добиться, но на несколько порядков сложней.А тут просто прошивку обновить, если контроллер 'поддерживается'.
              +1
              Снимаемся с ручника и внимательно читаем пост.
              Прошивать флешку, или что там еще найдется, надо на своем компе, где есть все что надо, а вот эксплуатировать ее надо на компе жертвы. И вот там как раз ничего прошивать не надо. Просто воткнуть в USB. И все.
                +1
                Тут разжёвано максимально доходчиво: olegart.ru/wordpress/2014/10/04/4467/

                Bottomline: нашли уязвимость в прошивке контроллера одного из производителей, что позволило перепрограммировать его из mass storage device в клавиатуру. Т.е. пользователь может подумать, что втыкает свою проверенную флешку, а она ему виртуально кнопок понажимать может. Естественно, всё выполнится от текущего юзера. Если набранными командами и удастся открыть браузер иссылку на эксплоит, то тут должны подключиться антивирус и файрволл.

                Надо полагать, что в следующей версии антивирусов уже появится проверка на неожиданное появление новых USB-HID девайсов («чувак, ты только что воткнул вторую клавиатуру, не?»), на том и успокоится.
                  0
                  Вот спасибо за разъяснение!
                  Очевидно, что не так уж страшен эксплоит, как его малюют, так как далеко не для всех флешек можно перепрошить контроллер, и далеко не все контроллеры которые можно перепрошить, можно перепрошить как клавиатуру которая будет ещё что-то вредоносное делать.
                    +1
                    Ещё как страшен. Даже если не все флешки можно перепрошить, то можно взять именно ту, которую перепрошить можно, и, собственно, перепрошить её. Или даже изготовить флешку самостоятельно, с заранее нужным внешним видом
              +58
              Всегда ржал с фильмов о хакерах, когда спецагенту давали флешку с указаниями «просто вставь её в USB того компьютера, дальше она всё сделает сама». А ведь теперь действительно сделает.
                +12
                Да, многие голливудские клише о хакерах уже не кажутся таковыми после откровений Сноудена об АНБ.
                  +5
                  Это если ей позволит устройство, в которое её втыкают.
                • UFO just landed and posted this here
                    0
                    В открытой сети есть компы с USB.
                    В плохозакрытой сети обычно стоят компы с отключенным USB
                    В закрытой сети пользователь сидит за терминалом — монитор, мышь, клавиатура.

                    Впрочем, подождите, куда ж они втыкают мышки, которые наверняка USB? =)
                    Шутка, никуда не втыкают.
                    Хотя…
                  0
                  Флешка которая автоэкзекает вирус на себе прикидываясь в нужный момент клавиатурой это сильно. Но насколько я понимаю (судя по посту arkanoid.livejournal.com/413810.html) проблема будет полностью решена, если usb устройства перестанут подключать не спрашивая перед этим пользователя надо ли оно ему.
                    +14
                    Нажмите пробел если вы действительно хотите использовать эту клавиатуру?
                      +1
                      Имхо подключение нового устройства можно подтверждать только с уже подключенного устройства, и ни в коем случае с самого подключаемого устройства.
                        +3
                        Вы собрали новый компьютер, как подключите к нему клавиатуру? На всякий случай, вирус может находиться не только в контроллере флешки, но и в контроллере любого usb устройства…
                          +11
                          Ждем на рынке «100% Virus free keyboard»
                            0
                            В условиях вашей задачи можно использовать ps/2 клавиатуру или кнопку на материнке. Но тут встает вопрос, а что будет если в самом процессоре есть закладки.
                              0
                              и также остается вопрос, как потребителю быть уверенным в отсутствии закладок в его устройствах? иначе он будет нажимать “доверять” или всегда, или никогда, что нивелирует такой тип защиты.
                                +2
                                Тобишь покупать сразу 2 клавиатуры? Первую для нажатия одной кнопки один раз, а вторую для работы.
                                  +3
                                  Настоящий параноик не покупает клавиатуры, а полностью их сам изготавливает, как и всё всё всё остальное
                                +7
                                Очень просто: устройства, с которыми ОС была установлена, считаются доверенными. Новые устройства требуют подтверждения с любого из существующих устройств. Если ни одного устройства нет, пользователя просят ввести строку (даже не каптчу, просто случайные несколько символов), что подтверждает, что тот, кто печатает, видит содержимое экрана, то есть присутствует за пределами usb-контроллера.
                              0
                              Примерно так я спаривал синезубую Apple-клавиатуру: пин набирался на ней, а Enter надо было нажать на уже имеющейся клавиатуре.
                                0
                                а как быть, если вы купили, скажем, iMac только с bluetooth клавиатурой, в таком случае?
                                  +1
                                  Это либо причуда Windows была, либо того адаптера. На openSUSE с тем же адаптером спаривание не требовало другой клавы, но было другое волшебство. Сейчас другой адаптер и другая версия openSUSE — спаривается без проблем.
                                  0
                                  При этом ничто не мешало нажать Enter на новой клавиатуре, как того и требовала инструкция.
                                    0
                                    Можно было хоть занажиматься на новой клаве, но такой очевидный способ не работал. Драйвер сообщал что устройство не подтвердило пин и отваливалось по таймауту.
                                      0
                                      Ну я не раз подключал беспроводную клаву к маку, не всегда всё проходило с первого раза, но никогда не возникало необходимости в изврате с другой клавой одновременно. В конце концов, есть виртуальная клавиатура, если включить отображение «клавиатуры и символов в строке меню» в системных настройках клавиатуры.
                                        0
                                        Вообще я удивлён что на Маке возникают какие-то проблемы с родной клавиатурой. До виртуальной клавы я не догадался, было б интересно попробовать — у меня вторая клавиатура основная и всегда подключена, а яблочная использовалась только как пульт ДУ. Тогда не один вечер был убит, чтоб только убедиться что она работает. Вот, к примеру, похожая инструкция (я пин точно только один раз набирал) и минимум на два (а скорее всего на три) года младше моей проблемы. После неё я, кста, засомневался на какой надо было нажимать Enter, а на какой набирать пин. Наверно, всё-таки на яблочной Enter нажимался.
                                  0
                                  Можно «Введите код 723954 с подключенной клавиатуры чтобы продолжить её использование». Если то, что вводится с «клавиатуры» не совпадает со случайно сгенерированным кодом — устройство отключается.Насколько я понимаю, получить доступ к надписям на экране поддельная клавиатура не сможет.

                                  Это, конечно, не спасает от настоящей клавиатуры с вредоносным кодом внутри, но уже чуть лучше
                                    +2
                                    А если устройство прикинется ещё и монитором? %-)
                                      0
                                      азбукой морзе через пс-хрипер попросить в слепую надавить х раз пробел на клаве, для подключения которой нужно ввести код с монитора :)
                                    0
                                    Чорт, я буду обновлять комментарии…
                                    Мышку — сделайте круг и кликните правой 3 раза.
                                    +18
                                    Еще два года назад получил в рекламных целях такую флешку:
                                    image
                                    При втыкании в компютер ставится в систему как HID keyboard device, нажимает win-r, эффектно набирает адрес промо-странички asml, где написано что-то в духе:
                                    «К сожалению, флешки на 8тб пока не существует, но мы работаем над этим. Отправьте нам свое резюме!»
                                    0
                                    Ждём появления механизма проверки подлинности прошивки.
                                    Ну а пока заклеиваем usb порты скотчем.
                                      –2
                                      и выключаем Plug&Play сервис
                                      +1
                                      Как я понял, проблема в том, что флешка может оказаться совсем не флешкой, а другим USB девайсом, который сделает Вам плохо. Но разве от этого можно как-то защититься, кроме, разве что [полу]-ручного разрешения подключенному устройству тех или иных функций?

                                      Честно говоря странно, что только сейчас об этом вспомнили, помню даже в каком-то из компьютерных журналов была статья, как из Arduino сделать клавиатурный шпион, притворяясь клавиатурой (или как-то так). Хотя осознание того, что любое USB-устройство может оказаться вредоносным расстраивает.
                                      +11
                                      Очередной салат из теоретической уязвимости протокола USB и страшилок СМИ про «инструмент кибершпионажа». Уязвимость сильно теоретическая по следующим причинам:
                                      1. Подавляющий процент контроллеров на рынке не могут быть перепрограммированы.
                                      2. Главная уязвимость заключается в мимикрии под HID device (клавиатуру), которая никак не «полностью скрыта», а очень даже видима мало-мальски опытному пользователю.
                                      3. Странное поведение (HID -> reset -> Mass Storage) на раз может детектиться антивирусами, пусть и постфактум. Хотя для параноиков вполне можно придумать технику защиты от псевдо-клавиаутры, например, ввести случайный пинкод в модальном окне).
                                      4. Существующие дыры в ПО гораздо дешевле ненадежной и дорогой раздачи злоавредных флешек. А для производителей есть бескрайний простор внедрения в материнскую плату, биос и тупо(!) в настоящую клавиатуру. Так что USB сам по себе не открыл никакой новой главы в книге «несертифицированное железо».

                                      Почему-то никто не спешил заклеивать USB скотчем во времена печально известного «автозапуска», хотя простейший autorun.inf позаражал мегатонны компьютеров без всякого перепрограммирования контроллеров. Ах да, тогда доклады с хакерских конференций не шли напрямую в народ…
                                        +3
                                        Чтобы продемонстрировать, что это не чисто теоретическая уязвимость:
                                        В оригинальном докладе про BadUSB иллюстрировали живой пример с подключением телефона android с целью “просто зарядитсья от компьютера”, при этом он добавлял виртуальный ethernet со своими настройками DNS (направляющими на сайт злоумышленника). После этого попытка попасть на сайт paypal.com приводила к тому, что вы оказывались совсем не на том сайте, и введенные вами логин и пароль утекали…
                                          +7
                                          Это весьма синтетический пример, который, конечно же, хорош в виде «proof of concept», но совершенно необязательно жизнеспособен в реальном мире. Виртуальный Ethernet невозможно добавить «со своими DNS настройками», т.к. plug-n-play событие для устройства и его конфигурация — это две разные сущности. Также вызывает сомнение возможность подмены NS настоящей сетевой карты компьютера. Вот если заранее воткнуть USB Ethernet, сконфигурировать его с фиксированным зловредным NS, И отключить его, И отключить сетевую карту компьютера, И подлкючить плохой телефон снова, И чтобы у телефона был рабочий data plan, И чтобы пользователь не заметил подключения новой сетевой карты и вопросов системы к какой сети (Дом-Работа) относится новая карта, И… И… И… тогда, наверное, сработает.

                                          Я не пытаюсь оспорить конкретную демонстрацию, я лишь обеими руками против того, чтобы специализированные исследования и эксперименты специалистов по безопасности не транслировались в истошные медийные крики «А-а-а-а!, Найдена Страшная ДЫРА!!! Мы все умрем!!». Я вам процитирую заголовок заметки с The Verge: «USB has a huge security problem that could take years to fix». Господи, какая желтизна. Лучше бы еще раз тупо для хомячков написали: Paypal не зелененький? Не вводите ничего! Глядишь, и еще б пару душ спасли от фишинга.
                                            +1
                                            появляется ethernet с настройкой параметров по DHCP… А далее сам телефон выступает в роли DHCP сервера. Он определяет свои dns сервера, но не переопределяет gateway. На демонстрации это было продемонстрировано вживую.

                                            P.S. с тем, что заголовок очень скандальный — согласен. Но и пренебрегать подобными опасностями тоже не стоит.
                                              +2
                                              Еще раз: для этого в компьютере не должно быть СВОЕЙ, уже сконфигурированной сетевой карты, или она должна быть отключена. Телефон не может незаметно забрать lease у существующего адреса.
                                              И вообще, злоумышленник что, будет дарить жертве смартфоны с рабочим интернетом, вместо того, чтобы сесть MiTM у входа в дом или у провайдера? :) Зелёненький paypal спасет землян даже со зловредными телефонами.
                                                +1
                                                Прошу прощения, но мы, похоже, не понимаем друг друга. Каждый сетевой адаптер с dhcp настраивается независимо, не надо отбирать lease у существующего. Мы не перенастраиваем существующую сеть, мы добавляем новую, которая заполняется по dhcp с телефона. И в набор серверов dns добавляется еще один, который может быть использован системой. И для этого интернет на телефоне не обязательно должен быть включен. И если у человека уязвимость на андроиде, то это может быть его собственный телефон. И с утекающими сертификатами безопасности в Индии и другими подобными случаями, у некоторых банков или почтовых серверов вполне может светиться зелененький https… Так что проблема может быть слегка более серьезной, чем вы утверждаете. Хотя и не настолько, как хотят показать журналисты.
                                                  +1
                                                  Мы не перенастраиваем существующую сеть, мы добавляем новую, которая заполняется по dhcp с телефона.

                                                  И каким же все-таки образом компрометируется существующая сеть? У меня есть претензия к вашему:
                                                  И в набор серверов dns добавляется еще один

                                                  т.к. у DHCP нет такой команды «добавить NS к существующему». Существующая сетевая карта как работала с законными good1.ns.com и good2.ns.com, так и продолжает работать! Для успешной атаки надо бы отключить сетевую карту и включить ее снова в надежде, что фальшивый DHCP сервер анонсирует себя первым и сможет раздать IP (угадав с диапазоном и бесконфликтностью; не забывайте, что настоящей сети у виртуальой карты нет и прослушать ничего нельзя) с настоящим гейтом (угадав его IP, по-видимому, станадртный 192.168.1.1) и фальшивыми NS. Мне такая атака видится чрезвычайно непрактичной. Для демо — возможно. Для жизни — не получится.
                                                  Вариант с каким-нибудь волшебным перенаправлением существующих соединений на откуда ни возьмись новую сетевую карту я даже не рассматриваю: для этого на компьютере жертвы уже должен сидеть зловред.

                                                  Теперь о сертификатах. Мне неизвестны случаи компрометации EV сертификатов, но если и когда это случится, сообщество придумает что-нибудь другое. Например, оранжевенький адрес paypal. Проблема установления подлинности и уязвимость в USB — разного вообще рода задачи.
                                                    –1
                                                    Из документации MS:

                                                    Specifying DNS Servers
                                                    When a name is submitted to the DNS resolver (client) for name resolution, the Windows XP Professional resolver first checks the local cache. If the requested data is in the cache, the data is returned to the user. If the data is not in the cache, the resolver queries the DNS servers that are listed in the TCP/IP properties for each adapter.
                                                    The resolver can query through all the computer’s network connections, including remote access connections. In Windows NT 4.0, the resolver queries all servers through all adapters. In Windows 2000, Windows Server 2003, and Windows XP Professional, however, you can specify a list of DNS servers to query for each adapter.

                                                    P.S. Возможно, в более современных системах ситуация другая.
                                                      +1
                                                      Еще до проверки более современных систем скажу, что paypal.com. будет успешно зарезолвлен настоящим NS настоящей сетевой карты. Не будет ни единой причины обращаться к фальшивому NS для фишинга
                                        0
                                        hotplug для usb отключается в пол-пинка.
                                          0
                                          По моему KES может запретить/разрешить определённый тип устройств плюс по pid vid селекция. Да и без админских прав данное устройство тоже ограничено в возможностях. А так лучше конкурентам заменить клаву где юсб хаб а там 3гмодем флешка и перепрограммируеммый контроллер, тут вам и снифинг паролей и удалленное управление и слив инфы. В общем мне видится что нужно у своих устройствойств менять vid pid чтобы по модели нельзя было подобрать. Где грань паранои, каждый решает сам, но пока о прецидентах не скажут в новостях по ТВ, дирекция будет считать это все параноей, и ведь есть резкий аргумент «да кому мы нужны».
                                            0
                                            Ну ещё можно пк в ящик на замок с сигнализацией. Но тогда я бы пришёл пол видом ремонтника и заменил принтер на шитый. кстати народу на заметку суйте туда флешки или диски плюс геркон. Зобрали комп маски шоу а инфы там нет, а если не при вас осмотр можно взять кружку с водой где на дне магнит и все диск отключится ;)
                                            • UFO just landed and posted this here
                                                +1
                                                Я писал про Kaspersky Endpoint.
                                                Если будет былый список, разве такое устройство сможет работать? Если конечно оно не научится перебирать. Vid Pid до победного. Ну и должна быть проверка vid pid по типу устройства. А то можно взять значения от принтеров. Имхо нужно блочить и физически. Имея физический доступ можно многое, если не все
                                                Ну разрешишь hid, а ночью «моя» клава запустит cmd / explorer и начнёт делать свои дела
                                                0
                                                выложили код своего proof-of-concept на GitHub, мотивируя это отсутствием уверенности в том, что вендоры не закрыли глаза на проблему и считая, что только публикация общедоступного эксплойта заставит компании-производители USB-контроллеров начать работать над патчем

                                                Некоторые организации только так и можно мотивировать. Так, например, CMS MODX зачастую закрывала глаза на мои багрепорты по поводу уязвимостей. Но только после того, как примеры слопитов попадали на gist.GitHub или в мой блог — они начинали часаться. Так что все правильно сделал, пусть это и доставило некий дискомфорт пользователям/компаниям.
                                                  0
                                                  Новость 2013-го года под заголовком «На саммите G20 Россия дарила дипломатам флешки с «закладками»» после такой информации воспринимается уже иначе.
                                                    0
                                                    В принципе завод производитель может прошивать свои флешки вредоносной прошивкой в злых целях. Особенно какой-нибудь нонейм из Китая.

                                                    Only users with full accounts can post comments. Log in, please.