Что такое bad usb
СПОСОБЫ РЕАЛИЗАЦИИ АТАК НА USB УСТРОЙСТВА
История превращения накопителей с интерфейсом USB в хакерский инструмент получила продолжение. Обратная разработка прошивки популярного контроллера переводит методику на новый уровень доступности. Теперь атаку под названием Bad USB может провести любой желающий, не обладая при этом достаточными познаниями для самостоятельного написания микрокода.
Все операции с памятью на USB-Flash обрабатываются контроллером, управляющий микрокод которого хранится в служебной области адресного пространства. У пользователя нет доступа к ней штатными средствами, а некоторые модели и вовсе требуют использования аппаратного программатора. Сегодня для упрощения процедуры записи и обновления прошивки многие производители выполняют эту операцию непосредственно через интерфейс USB. Обычная прошивка – это закрытый (проприетарный) код, поэтому считается, что изменить его может только сам разработчик.
На проходившей в штате Кентукки ежегодной конференции DerbyCon Адам Коудил (Adam Caudill) и Брэндон Уилсон (Brandon Wilson) в совместном докладе рассказали об успешной обратной разработке прошивки для контроллера Phison 2303 (2251-03) и показали практические варианты реализации атаки Bad USB.
Универсальный контроллер Phison 2251-03
Такой двухканальный контроллер USB 3.0 со встроенным восьмиразрядным микропроцессором архитектуры Intel 8051 встречается во многих съёмных носителях. Для демонстрации авторами был выбран сменный носитель Patriot Supersonic Xpress ёмкостью 8 ГБ.
Изначально Phison 2303 поддерживает создание нескольких дисковых разделов. Он может ограничивать доступ к одному из них паролем, скрывая присутствие других логических дисков. Последнее обстоятельство используется в некоторых вариантах атаки Bad USB. Во-первых, на скрытом разделе удобно хранить «боевую нагрузку». Во-вторых, так можно подсунуть «сейф без задней стенки»: пользователь будет продолжать считать скрытый раздел своего USB-Flash носителя защищённым, в то время как контроллер с изменённой прошивкой откроет его при вводе любого пароля.
Также Phison 2303 позволяет изменять идентификаторы производителя, продукта и серийный номер, что удобно для имитации других устройств. Однако этот контроллер был выбран прежде всего потому, что его прошивку можно обновлять непосредственно по USB и безо всякой проверки подлинности. Соответственно, её можно заменить не просто на новую официальную версию, а записать вместо неё свою, содержащую любые изменения и дополнительный функционал.
Перевод USB-Flash в служебный режим замыканием контактов
Обратная разработка и модификация подразумевает получение копии исходной прошивки. Для этого USB-Flash накопитель надо перевести в служебный режим с помощью инженерной утилиты, или просто закоротив определённые контакты в момент подключения.
Оригинальная прошивка занимает не весь отведённый для неё объём, поэтому увеличение размера микрокода после добавления новых функций не стало проблемой.
По результатам реверс-инжиниринга была создана альтернативная прошивка с открытым исходным кодом ( https://github.com/adamcaudill/Psychson ).
Её можно записать на любой USB-Flash носитель с соответствующим контроллером, превратив его в хакерский инструмент.
При подключении к компьютеру такая флэшка (от flash, а не flesh) с модифицированной прошивкой может опознаваться как другое устройство и скрыто выполнять функции, предусмотренные атакующей стороной.
В приводимой на DerbyCon презентации флэшка опознаётся как клавиатура и отправляет команды от имени вошедшего в систему пользователя.
В большинстве случаев им окажется администратор, а если и нет – существуют способы повышения привилегий, основанные на различных эксплоитах.
В примере флэшка запускает «Блокнот» и пишет в нём текст с ASCII графикой, но это могут быть совершенно любые действия. Как вариант – загрузка трояна через Wget или скрытая отправка приватных данных.
Автоматическое создание текстового документа с ASCII-графикой с помощью BadUSB (изображение: DerbyCon 4.0)
Вероятность успеха такой сложной тактики в неизвестном системном окружении считается низкой, однако она ненулевая. Действительно, для слепой атаки этот метод подходит мало: трудно предугадать конфигурацию компьютера, к которому подключат хакнутую флэшку, и перечень незакрытых на нём уязвимостей. Скорее, метод упрощает проведение целенаправленной атаки на компьютер конкретного пользователя, чьи данные требуется получить или от чьего имени совершить какую-то операцию.
Сходным образом реализована атака Bad USB группой Offensive Security в специализированном дистрибутиве Kali Linux NetHunter ( https://www.kali.org/kali-linux-nethunter/ ). Это дальнейшее развитие проекта BackTrack, предназначенного для выполнения тестов на проникновение с использованием мобильных устройств. Его можно установить на современные смартфоны и планшеты серии Nexus. Поддерживаются Asus Nexus 7 (версии 2012 и 2013 года), Samsung Nexus 10 и LG Nexus 5. Любой из этих гаджетов NetHunter превращает в мощный инструмент для выполнения аудита безопасности.
NetHunter — реализация Bad USB на гаджетах серии Nexus
В режиме Bad USB на Nexus с NetHunter выполняется вариант атаки посредника (MITM). Смартфон или планшет подключается к компьютеру по USB под предлогом зарядки или копирования файлов. Далее гаджет подменяет сетевую карту, выполняя перенаправление трафика.
Фрагмент файла \kali_linux_nethunter_nexus7_2012.zip\system\xbin\start-badusb
Появление подробных инструкций и готовых программных инструментов для реализации Bad USB с использованием различных серийно выпускаемых устройств свидетельствует о широком интересе к данному виду атаки. Не надо быть аналитиком, чтобы спрогнозировать резкое повышение частоты её применения в ближайшее время.
В ОС Windows можно вручную ограничить подключение по USB, разрешив его только для определённых устройств. Для этого необходимо изменить https://www.sql.ru/forum/847468/podkluchenie-konkretnogo-usb-ustroystva права доступа к соответствующим ключам реестра в разделе [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR].
Вероятно, разработчики антивирусных решений скоро добавят отдельные модули для более гибкого дополнительного контроля над подключаемыми по USB устройствами. Ограничивать доступ к сменным носителям и разрешать активацию согласно «белому списку» уже сейчас умеют ESET Endpoint Antivirus, Kaspersky Endpoint Security, компонент «Родительский контроль» у Dr.Web AV-Desk и другие современные средства комплексной защиты. Другое дело, что в случае Bad USB таких мер может оказаться недостаточно. Скорее всего, пользователь сам разрешит подключение опасного устройства, опрометчиво считая его неспособным навредить.
Реализация Bad USB с использованием серийно выпускаемых устройств
Особо подчеркну, что Bad USB – это не какая-то недавно открытая проблема на уровне самого интерфейса. Речь идёт лишь о том, что благодаря работе нескольких гиков пользователю без соответствующей квалификации стало значительно проще вмешаться в работу контроллеров некоторых устройств, допускающих обновление прошивки без использования специализированной техники.
Если раньше желающие подсунуть под видом флэшки виртуальную клавиатуру или сетевой контроллер использовали штучные экземпляры таких устройств, то сейчас их можно штамповать в домашних условиях. Малоизвестные методы, которые были прерогативой спецслужб и продвинутых хакерских групп, стали более доступны – только и всего.
В самой возможности сделать это мне трудно усмотреть что-то негативное. Часть пользователей получит более глубокие представления о работе современных устройств и ещё один стимул быть осторожнее. Просто теперь флэшку нельзя считать безопасной, даже если её дисковый раздел совершенно чист.
Что такое bad usb
Эксперты Максим Горячий и Марк Ермолов в своем докладе отметили, что зачастую подобные аппаратные механизмы используются как вполне легальные инструменты, которые внедряются еще на стадии производства − например, специальные отладочные возможности, оставленные разработчиками для настройки аппаратуры и других «благих целей». Однако сейчас такие механизмы оказываются доступны и для злоумышленников, причем цена вопроса настолько низка, что для организации подобных атак уже не нужно быть государственной спецслужбой и иметь специальное оборудование.
Один из таких механизмов был подробно проанализирован и показан в исследовании. В качестве опасной возможности, оставленной производителем, здесь фигурирует отладочный интерфейс JTAG (Joint Test Action Group), доступ к которому теперь открыт через USB-интерфейс. Данный способ доступа к процессору работает «ниже» всего программного обеспечения, позволяя осуществлять аппаратную отладку гипервизоров, ядра ОС и драйверов. Однако тот же механизм может использоваться и для несанкционированных вторжений.
В старых процессорах Intel доступ к JTAG требовал подключения специализированного устройства через отладочный разъем на некоторых системных платах (ITP-XDP). Это усложняло доступ к данной технологии, в том числе, и для злоумышленников.
Однако, начиная с процессоров семейства Skylake, запущенных в производство в 2015 году, компания Intel внедрила технологию Direct Connect Interface (DCI), которая предоставляет доступ к JTAG через популярный порт USB 3.0. При этом на целевом компьютере не требуется каких-либо программных или аппаратных агентов − необходимо лишь, чтобы интерфейс DCI был активирован. Как выяснили исследователи, это можно сделать несколькими способами, и на множестве современных компьютеров этот функционал оказался доступен буквально «из коробки» − то есть по умолчанию возможность активации DCI не заблокирована.
В докладе также был представлен видеоролик, показывающий, насколько легко злоумышленники могут получить полный доступ к процессору с помощью такого механизма. По мнению исследователей, данный механизм в процессорах Intel может привести к целому классу новых атак типа «Bad USB» – но уровень проникновения будет гораздо глубже.
Используем смартфон как BadUSB
Вы наверное уже слышали про BadUSB. Раньше, когда речь шла о BadUSB на ум приходили исключительно устройства вроде флеш-накопителей. Но возможно ли использовать в качестве хакерской флешки BadUSB, смартфон на Андроид? Оказывается можно — используя Kali NetHunter, мобильной платформы для пентестеров. Сегодня я покажу, как превратить обычный смартфон в полноценный аналог «хакерской флешки».
Как работает BadUSB
О BadUSB мы рассказывали много раз. Как вы знаете, данный тип атаки позволяет за маленький промежуток времени выполнить действия на целевом компьютере.
Происходит это так: в разъем USB вставляется заранее подготовленная флешка или обычный кабель USB со встроенным микроконтроллером и с специальной прошивкой. Эти устройства определяются операционной системой как HID (Human Interface Device), например как обычная клавиатура. После этого по заранее написанному сценарию эмулируется ввод команд, как если бы их вводил обычный живой человек, сидящий за компом.
Это удобно если вы пентестер. Плюсы подобных хакерских девайсов очевидны.
Атака с автоматическим вводом текста посредством USB-флешки появилась раньше, чем сам термин BadUSB. В далеком 2010 году хакеры Hak5 представили небольшой гаджет в ввиде флешки — Rubber Ducky (резиновый утенок). Кстати, мы писали, как сделать Rubber Ducky своими руками.
Широко известный в узких кругах девайс Rubber Ducky
Это было специальное устройство, которое напрямую никак не связано с темой BadUSB. Создатели Rubber Ducky создали специальный скриптовый язык, на котором можно было писать сценарии. Позже был создан создан сайт, на котором пользователи делились своими скриптами.
Ресурс, на который пользователи выкладывали собственные скрипты
О других хакерских гаджетах, которые можно купить, вы можете прочитать в статье «Лучшие хакерские девайсы».
Как правило, применение Rubber Ducky и самодельных BadUSB сводится к получению удаленного доступа или получению паролей из системы. Школьниками используется избитая схема: залить на файлопомойку вредонос и запрограммировать BadUSB на его скачивание и выполнение.
В моем случае знакомство с BadUSB произошло при других обстоятельствах. Когда-то я установил на телефон Kali NetHunter. Среди богатого функционала NetHunter в ней также есть возможность выпопнять скрипты при подключении телефона к компу. Все это хорошо, но вариант с заливкой файлов куда‑то вовне мне не нравится, и я попробал усовершенствовать алгоритм атаки.
Используем смартфон как BadUSB
Для начала разберемся с ducky-скриптами. В NetHunter для этого существует целый раздел, но пользы от него не очень. Давайте, мы наладим самостоятельно запуск скриптов.
Русифицируем уточку. Как заставить BadUSB работать с разными раскладками клавиатуры
Содержание статьи
Существуют две основные категории устройств типа BadUSB: флешка с контроллером Phison 2251-03 (для него была разработана специальная прошивка, эмулирующая клавиатуру) и устройства на микроконтроллере ATmega (например, Rubber Ducky).
BadUSB придумали относительно недавно, в 2014 году. Поэтому еще есть шанс найти новые трюки и решить по дороге разные нетривиальные задачи. Для тех, кто живет в странах, где, помимо латинского алфавита, используется какой-то другой, одна из таких задач — это переключение ввода на нужную раскладку клавиатуры. Если в операционной системе выставлена русская раскладка, а твой скрипт скармливает ей нажатия на клавиши в английской, то из этого, конечно же, ничего не выйдет.
Пример работы BadUSB на русской раскладке
Как обойти эту проблему? Например, можно попытаться учесть изменение раскладки в скриптах, но для этого придется узнавать, какие именно языки используются в системе, сколько их, в каком порядке они стоят и каким сочетанием клавиш переключаются. Это явно не самый рациональный метод.
Я предлагаю использовать другой вариант — вводить все символы при помощи Alt-кодов. Этот способ в Windows иногда используется для ввода символов, которые отсутствуют на клавиатуре. Например, зажимаешь Alt, удерживая, набираешь на цифровом блоке 9731, и получается снеговик. Здорово? Нам это тоже очень поможет, поскольку таким образом можно вводить и обычные символы, причем независимо от текущей раскладки.
Для своих экспериментов я использовал Rubber Ducky на основе ATmega32U4. В первую очередь нужно научить ее воспроизводить команды — это делается на специальном языке, который называется Ducky Script. Однако, изучив материалы, я не нашел никаких сведений о возможности эмуляции клавиш цифрового блока. Поэтому сначала нужно было модифицировать прошивку BadUSB.
Новая прошивка BadUSB
За основу берем библиотеку keyboard. У меня получился вот такой код.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
BadUSB Rubber Ducky своими руками
Не для кого не секрет, что хакеры используют для атак небольшие устройства, внешне очень похожие на внешний USB-накопитель (флешку) называемые BadUSB. Чтобы заполучить удаленный контроль нужно всего навсего подключить такое устройство к серверу (компьютеру). Для начала все очень похоже на Rubber Ducky, за одним большим исключением, Rubber Ducky — это разовая акция, последствия которой весьма предсказуемы. Мы же хотим рассказать о гораздо более универсальной модификации BadUSB.
Лучше, чем Rubber Ducky
Наверняка вы уже слышали про Rubber Ducky. Это устройство из разряда BadUSB для HID-атаки. Подобного рода девайсы умеют эмулировать клавиатуру и позволяют отправить любые команды, словно их набрал текущий пользователь.
В этих устройствах есть простой микроконтроллер и память, в которую записывается скетч (код для Arduino и подобных отладочных плат). Он содержит функцию эмуляции нужного устройства и набор выполняемых им действий. Как показывает практика, обычно это клавиатура и последовательность «нажимаемых» на ней клавиш.
Конечно, у этих девайсов есть и свои недостатки. Во-первых, нужно тщательно разведать полную конфигурацию компьютера-жертвы. Во-вторых, перед реальной атакой нужно проверить, как она будет выполняться на максимально подобной тестовой системе, и внести необходимые правки — в частности, подобрать оптимальные задержки. В реальных условиях, скорее всего, будет проблематично второй раз приблизиться к атакуемому компьютеру, а если хоть один скан-код клавиши будет отправлен не вовремя, то все окажется напрасным. В-третьих, можно использовать только один скетч. Нельзя дописать какую-то функцию на лету или прервать и перезапустить набор действий. В этой статье я покажу как создать устройство, лишенное этих недостатков.
Создание WiFi Ducky
Практически это будет тот же самый Rubber Ducky, только с модулем WiFi. Суть в том, что при его подключении к компьютеру скетч не выполняется сразу при подаче питания на плату (хотя такая функция тоже есть). В этот момент создается точка доступа, которая ждет подключения. Соединиться с ней можно как со смартфона, так и с ноутбука и уже оттуда в любой удобный момент совершать необходимые действия.
За основу можно взять Arduino MKR1000 с WiFi-модулем Atmel ATSAMW25 на борту, добавить библиотеку WiFi101 и готовый код отсюда. Однако обойдется это в 35 долларов. Также есть готовый проект Cactus WHID. Он стоит уже 14 долларов и выглядит как флешка, но доработать его будет сложнее.
Я предлагаю собрать более дешевый (меньше десяти долларов) и функциональный девайс под называнием WiFi Ducky. Его автор — Stefan Kremser с ником «Космокурица», а железо для его крутых самоделок продается в отдельном магазине на AliExpress. Там можно купить готовые DIY-модули, скачать код с гитхаба и повторить все шаг за шагом, однако мы пойдем немного другим путем.
Возьмем два устройства:
WeMos D1 mini с микроконтроллером ESP-8266EX и WiFi-модулем стандарта 802.11b/g/n на борту.
Нам необходимо будет соединить их, но вначале — прошить.
Прошивка Arduino Micro Pro
Начнем с платы Arduino. Скачиваем и устанавливаем Arduino IDE. При установке этого программного обеспечения заодно установятся все драйверы для этого устройства, так что дополнительно ничего не надо будет устанавливать. Чтобы подключить ее к компьютеру, необходимо запастить OTG-адаптером или кабелем с надлежащими выходами, так как на плате расположен разъем mini-USB.
После установки программного обеспечения запускаем его и подключаем Arduino к компьютеру. В меню «Инструменты» в разделе «Плата» выбираем Arduino/Genuino Micro. Далее в том же меню выбираем COM-порт, на котором определено устройство. На этом настройка программного обеспечения завершена.
Следующим шагом идем по ссылке, где расположен скетч. На него достаточно взглянуть, чтобы понять, что он делает: преобразует команды типа STRING в поддерживаемый Arduino синтаксис типа Keyboard.print(“”), и активирует нужные контакты. Копируем его и вставляем в Arduino IDE. Нажимаем кнопку «Загрузка» и через две-три минуты получаем сообщение о том, что скетч успешно загружен. Теперь при подаче питания на плату контроллер активирует контакты TX, RX, GND и RAM, после чего переходит в режим ожидания команд.
Прошивка WeMos D1 mini
Добрались до следующего компонента нашего BadUSB на стероидах. В этот раз нам потребуется перейти с micro-USB на USB Type-А. При первом подключении к компьютеру Windows ругнется на неопределенное устройство, поэтому необходимо скачать драйвер CH341 c официального сайта.
Тут ничего сложного: извлекаем из архива EXE-файл, запускаем его с правами администратора и нажимаем INSTALL. После этих нехитрых манипуляций в диспетчере устройств эта плата должна определиться как USB-SERIAL СР340. Поделюсь горьким опытом: если установить неверный драйвер, то устройство определится, но название будет другое, и ничего не заработает. Будьте предельно внимательны!
Правильное определение WeMos D1 mini
Теперь устройство готово к прошивке, и нам нужен прошивальщик. Я воспользуюсь NodeMCU firmware programmer. Заходим на GitHub и скачиваем его в соответствии с версией вашей ОС. У меня это Win64. Еще необходимо скачать саму прошивку. Их будет несколько вариаций, я скачивал esp8266_wifi_duck_4mb.bin, как наиболее увесистый и функциональный вариант.
После этого запускаем и настраиваем прошивальщик. В поле COM Port выбираем тот порт, на котором определилась плата. Обычно программа сама его «видит» и подставляет необходимое значение. Далее переходим во вкладку Config, где в первой строке нажимаем на шестеренку и указываем путь до прошивки, которую скачали. Значение остается 0x00000. Во вкладке Advanced советую выставить параметр Baudrate на 115200. У меня прошивка записалась на такой скорости, а если у вас возникнет ошибка, то просто уменьшите ее. Остальное оставляем без изменения. В итоге должно получиться как на скриншоте.
Значения программы NODEMCU FIRMWARE PROGRAMMER на вкладке Advanced
Когда все нехитрые манипуляции будут выполнены, возвращаемся на вкладку Operation и нажимаем Flash. Ниже кнопки расположен индикатор, который покажет приблизительное время загрузки прошивки в память, а зеленая галочка с надписью NODEMCU TEAM даст знать, что прошивка закончилась.
Работа паяльником
После того как обе платы подготовлены и прошиты, необходимо соединить их в одного «Франкенштейна». Для этого подключаем проводами контакты в соответствии с таблицей: