
Простой инструмент для инъекции нажатий клавиш под Windows и Linux, который извлекает сохранённые данные Wi-Fi (SSID и пароль).

Вы когда-нибудь видели фильм, где хакер подключает, казалось бы, обычную USB-флешку к компьютеру и мгновенно похищает данные? Сегодня вы создадите устройство, которое делает именно это.
⚠️ Отказ от ответственности:
Весь контент в этом проекте предназначен исключительно для целей исследований в области безопасности.
Летом 2022 года я решил создать устройство, способное извлекать данные с целевого компьютера. Но как именно развернуть вредоносное ПО и эксфильтровать информацию? В следующих разделах я расскажу об основных шагах, лежащих в основе концепциях и технических нюансах, связанных с созданием собственного инструмента для инъекции нажатий клавиш. Хотя этот проект нацелен конкретно на учётные данные WiFi, полезную нагрузку можно легко модифицировать для более продвинутых или вредоносных целей — единственными ограничениями являются ваша креативность и технические знания.
Со временем проект разросся и включает в себя множество скриптов и инструментов. Изначально он был создан для демонстрации возможностей Rubber Ducky — в частности, бюджетной версии на базе Raspberry Pi Pico (RPi Pico). В настоящее время основными компонентами проекта являются:
Физический доступ к разблокированному компьютеру жертвы.
Компьютер должен иметь доступ в Интернет для отправки украденных данных с помощью SMTP для эксфильтрации по сети.
Знание пароля компьютера жертвы для эксплойта под Linux.
После создания pico-ducky вам остаётся только скопировать модифицированную полезную нагрузку (с вашими SMTP-данными для эксплойта Windows и/или с паролем Linux и именем USB-накопителя) на RPi Pico.
[!NOTE]
Можно собрать этот инструмент с помощью Rubber Ducky, но учтите, что RPi Pico стоит около $4.00, а Rubber Ducky — $80.00.
Однако, хотя pico-ducky — хорошее и бюджетное решение, Rubber Ducky предлагает такие вещи, как скрытность и использование последней версии DuckyScript.
Чтобы использовать Ducky Script для записи полезной нагрузки на RPi Pico, сначала нужно преобразовать его в pico-ducky. Следуйте этим простым шагам для создания pico-ducky.
Инструмент инъекции нажатий клавиш, после подключения к хост-машине, выполняет вредоносные команды, имитируя нажатия клавиш пользователем. Внешне он выглядит как USB-накопитель, но действует как клавиатура, вводящая заранее запрограммированную полезную нагрузку. Такие инструменты, как Rubber Ducky, могут печатать более 1000 слов в минуту. После создания любой, кто имеет физический доступ, может легко развернуть эту нагрузку.
Полезная нагрузка использует команду STRING для обработки инъекций нажатий клавиш. Она принимает один или несколько буквенно-цифровых/знаков препинания и будет вводить остаток строки в точности так, как написано, в целевую машину. ENTER/SPACE будут имитировать нажатие соответствующих клавиш клавиатуры.
Мы используем команду DELAY для временной приостановки выполнения полезной нагрузки. Это полезно, когда нагрузке нужно дождаться загрузки элемента, например, командной строки. Задержка полезна в самом начале, когда новое USB-устройство подключается к целевому компьютеру. Изначально компьютер должен выполнить ряд действий, прежде чем сможет принимать команды ввода. В случае HID время настройки очень мало. В большинстве случаев это занимает долю секунды, так как драйверы встроены. Однако в некоторых случаях более медленный ПК может дольше распознавать pico-ducky. Общая рекомендация — настроить время задержки в соответствии с вашей целью.
Эксфильтрация данных — это несанкционированная передача данных с компьютера/устройства. После сбора данных злоумышленник может упаковать их, чтобы избежать обнаружения при отправке по сети, используя шифрование или сжатие. Два наиболее распространённых способа эксфильтрации:
Этот подход использовался для эксплойта под Windows. Полную полезную нагрузку можно увидеть здесь.
Этот подход использовался для эксплойта под Linux. Полную полезную нагрузку можно увидеть здесь.
Для использования полезной нагрузки Windows (payload1.dd) не нужно подключать перемычку между выводами.
После экспорта паролей в файл .txt, полезная нагрузка отправит данные на указанный адрес электронной почты через Yahoo SMTP. Для получения более подробных инструкций перейдите по этой ссылке. Также шаблон полезной нагрузки необходимо обновить с вашими SMTP-данными, то есть нужно обновить RECEIVER_EMAIL, SENDER_EMAIL и пароль от вашей электронной почты PASSWORD. Кроме того, вы можете изменить тело и тему письма.
[!NOTE]
После отправки данных по электронной почте файл
.txtудаляется.Вы также можете использовать SMTP от другого почтового провайдера, но следует учитывать сервер SMTP и номера портов, которые вы укажете в полезной нагрузке.
Имейте в виду, что некоторые сети могут блокировать использование неизвестного SMTP на брандмауэре.
Для использования полезной нагрузки Linux (payload2.dd) необходимо подключить перемычку между GND и GPIO5, чтобы соответствовать коду в code.py на вашем RPi Pico. Для получения дополнительной информации о настройке нескольких полезных нагрузок на RPi Pico посетите эту ссылку.
Рис. 1: Эксплойт на Linux
После экспорта паролей с компьютера данные будут сохранены на назначенную USB-флешку. Чтобы эта полезная нагрузка работала правильно, её необходимо обновить с правильным именем вашего USB-накопителя, то есть вам нужно заменить USBSTICK на имя вашего USB-накопителя в двух местах.
Кроме того, вам также нужно будет обновить пароль Linux PASSWORD в полезной нагрузке в трёх местах. Как указано выше, для успешного выполнения этого эксплойта вам потребуется знать пароль машины жертвы под Linux, что делает эту атаку менее вероятной.
Чтобы запустить скрипт wifi_passwords_print.sh, нужно обновить скрипт с правильным именем вашей USB-флешки, после чего вы можете ввести в терминале следующую команду:
echo PASSWORD | sudo -S sh wifi_passwords_print.sh USBSTICK
где PASSWORD — это пароль вашей учётной записи, а USBSTICK — имя вашего USB-устройства.
NetworkManager основан на концепции профилей соединений и использует плагины для чтения/записи данных. Он использует формат файлов ключей .ini-style и хранит профили конфигурации сети. Плагин keyfile поддерживает все типы соединений и возможности, которые есть в NetworkManager. Файлы находятся в /etc/NetworkManager/system-connections/. Основываясь на формате keyfile, полезная нагрузка использует команду grep с регулярным выражением для извлечения интересующих данных. Для фильтрации файлов использовалась модифицированная положительная ретроспективная проверка ((?<=keyword)). В то время как положительная ретроспективная проверка сопоставляет определённую позицию в строке, sc. сразу после keyword, не включая сам текст в совпадение, регулярное выражение (?<=keyword).* будет соответствовать любому тексту после keyword. Это позволяет полезной нагрузке извлекать значения после ключевых слов SSID и psk (предварительный общий ключ).
Для получения дополнительной информации о NetworkManager вот несколько полезных ссылок:
Ниже приведён пример эксфильтрованных и отформатированных данных с машины жертвы в файле .txt.
Одно из преимуществ Rubber Ducky перед RPi Pico заключается в том, что он не отображается как USB-накопитель при подключении. Когда он подключён к компьютеру, машина видит его только как USB-клавиатуру. Это не является поведением по умолчанию для RPi Pico. Если вы хотите предотвратить отображение RPi Pico как USB-накопителя при подключении, вам необходимо соединить перемычкой вывод 18 (GND) и вывод 20 (GPIO15). Для получения более подробной информации посетите эту ссылку.
💡 Совет:
- Загрузите полезную нагрузку на RPi Pico до соединения выводов.
- Не припаивайте выводы, так как, вероятно, в какой-то момент вы захотите изменить/обновить полезную нагрузку.
При создании рабочего файла полезной нагрузки вы можете использовать скрипт writer.py или вручную изменить файл шаблона. Для успешного запуска скрипта вам необходимо передать, помимо имени файла скрипта, имя ОС (windows или linux) и имя файла полезной нагрузки (например, payload1.dd). Ниже приведён пример запуска скрипта writer при создании полезной нагрузки под Windows.
python3 writer.py windows payload1.dd
С некоторыми незначительными изменениями ранее использованные скрипты можно адаптировать для работы на Bash Bunny. Bash Bunny работает, эмулируя доверенное USB-устройство [1]. Для этого проекта мы настроим его на эмуляцию флеш-накопителя с помощью следующей команды [1, 2]:
ATTACKMODE HID STORAGE
Используя команду DuckyScript ATTACKMODE, мы можем определить, какой тип устройства должен эмулировать Bash Bunny [1]. Каждый режим атаки регистрируется в системе с помощью уникальных идентификаторов USB Vendor ID (VID) и Product ID (PID) [1]. Также можно комбинировать несколько режимов атаки, объединяя их в цепочку.
Рис. 2: Bash Bunny Mark I, подключённый к ПК
Bash Bunny поддерживает оригинальные команды DuckyScript, поэтому я смог повторно использовать скрипт из раздела Rubber Ducky. Чтобы использовать эти команды встроенными, необходимо добавить префикс QUACK [1]. Например, вместо WINDOWS r пишем Q WINDOWS r.
Для загрузки полезных нагрузок на Bash Bunny устройство должно быть переведено в режим вооружения (положение переключателя 3 — ближайшее к USB-разъёму) [1]. После подключения скопируйте payload.txt и exfil.txt в payloads\switch1. Полезные нагрузки должны быть названы payload.txt [1,2], а вспомогательные файлы, на которые ссылается нагрузка, можно называть произвольно.
Для справки, структура каталогов массового хранения Bash Bunny выглядит следующим образом [2]:
BashBunny/
├── loot/
│ └── (эксфильтрованные данные из полезных нагрузок сохраняются здесь)
└── payloads/
├── library/
│ └── (переиспользуемые скрипты или модули)
├── switch1/
│ ├── payload.txt
│ └── (дополнительные файлы, например, exfil.txt, скрипты и т.д.)
└── switch2/
├── payload.txt
└── (дополнительные файлы)
Рис. 3: Структура каталогов массового хранения Bash Bunny
После завершения выполнения скрипта результаты будут сохранены в loot\wifi_pass.txt. Если на целевом компьютере нет сохранённых паролей WiFi, файл будет пустым.
[!NOTE]
Поскольку атака Bash Bunny использует скрипт PowerShell (
exfil.txt), она может быть использована только в системах Windows. Чтобы использовать аналогичный подход в Linux, необходимо изменить полезную нагрузку, заменив скрипт PowerShell на скрипт Bash, описанный в разделе Linux выше.
Этот pico-ducky в настоящее время работает только в ОС Windows.
Для успешного развёртывания этой атаки требуется физический доступ к разблокированному устройству.
Эксплойт под Linux имеет гораздо меньше шансов на успех, поскольку для этого требуется не только физический доступ к разблокированному устройству, но и знание пароля администратора на машине Linux.
Брандмауэр машины или сети может препятствовать отправке украденных данных по сети.
Задержки полезной нагрузки могут быть недостаточными из-за различной скорости разных компьютеров, используемых для атаки.
Устройство pico-ducky не является скрытным, наоборот, оно довольно громоздкое, особенно если припаять выводы.
Кроме того, устройство pico-ducky заметно медленнее по сравнению с Rubber Ducky при выполнении того же скрипта.
Если включен Caps Lock, часть кода полезной нагрузки не будет выполнена, и эксплойт завершится неудачей.
Если на компьютере установлена неанглийская среда, этот эксплойт не будет успешным.
В настоящее время pico-ducky не поддерживает DuckyScript 3.0, можно использовать только DuckyScript 1.0. Если вам нужна версия 3.0, придётся использовать Rubber Ducky. Для этого эксплойта версия 3.0 не нужна!