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

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

Всему виной USB HID – Human Interface Device, устройства для взаимодействия с человеком. Примерами таких устройств являются клавиатура, мышь, игровые контроллеры и т.д. Так вот, наше подозрительное устройство, которое мы подключили смогло перехитрить операционную систему, представившись клавиатурой, хотя на самом деле оно таковой не является. Далее код, зашитый в это устройство начинает “набирать” на машине пользователя различные команды. Таким образом реализуется простейшая USB HID атака.

Хорошо забытое старое

На самом деле HID атаки известны уже более 10 лет. Еще в 2012 году пентестер проводил тестирование одной крупной компании. У него никак не получалось проникнуть во внутренний контур. Тогда он собрал специальное устройство, выглядящее как флеш карта, но по факту являющейся как-раз такой поддельной «клавиатурой». Изготовив несколько таких «флешек» он подбросил на парковке перед офисом тестируемой компании. В результате он сначала получил доступ на компьютеры охраны, а к вечеру уже смог успешно закрепиться во внутренней сети.

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

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

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

Железная основа

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

На известной китайской площадке продаются несколько версий платы Teensy. Для большинства прошивок представленных в статьях достаточно будет версии Teensy 2.0, но для общего понимания приведем сравнение имеющихся версий макетной платы:

Помимо представленных в таблице, также есть варианты макетных плат с MicroSD адаптером для подключения соответствующих карт памяти. 

Макетная плата имеет меньший размер и более скромные характеристики.

  • Память программ (FLASH) — 8КБ, из них около 2КБ занимает загрузчик

  • ОЗУ (SRAM) — 512 байт

  • Энергонезависимая память (EEPROM) — 512 байт

  • Тактовая частота 16МГц/16,5МГц (существуют и другие версии)

Резиновые уточки и другие железки

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

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

Также эта “флешка” умеет кодировать пароли в двоичный формат и передавать их по трёхбитному каналу морганием светодиодов CapsLock, NumLock и ScrollLock на клавиатуре.

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

Готовим софт

В различных статьях, посвященных работе с HID USB приводятся разные варианты рабочих сред для создания прошивок для макетных плат. Но мы пойдем по классической схеме с использованием Arduino IDE. Для начала необходимо скачать и установить эту среду разработки (https://support.arduino.cc/hc/en-us/articles/360019833020-Download-and-install-Arduino-IDE).

В результате успешной установки получаем следующее рабочее окно:

Дальше конечно очень хочется сразу подключить плату, но пока это делать не стоит. Нам еще необходимо установить драйвер для макетной платы и плагины для среды Arduino IDE, так как сейчас она не знакома ни с Teensy, ни c Digispark.

Первое драйвер – его можно скачать например вот отсюда https://iarduino.ru/file/230.html. Несмотря на то, что в описании не указана Windows 10, по факту эта ОС тоже поддерживается.

Далее нам необходимо подружить Arduino IDE с нашими макетными платами. Для этого необходимо подгрузить файлы JSON. В среде Arduino IDE идем в вкладку File -> Preferences и в поле Additional boards manager URLs указываем путь https://www.pjrc.com/teensy/package_teensy_index.json и нажимаем OK.

Для Digispark указываем следующий путь http://digistump.com/package_digistump_index.json.

Теперь собственно можно подключить плату. После подключения в Arduino IDE в поле Board указываем нужную плату, а в поле порт указываем тот порт, по которому плата определилась (например, COM8).

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

int count = 0;
void setup() {
  Serial.begin(9600);
  delay(1000);
} 

void loop() {
  Keyboard.print("Hello World "); 
  Serial.println(count);
  count = count + 1;
  delay(5000);
}

При работе с Teensy перед запуском необходимо перейти в режим клавиатуры (Tools -> USB Type -> Keyboard).

В процессе компиляции скетча советую переключить фокус из среды Arduino IDE в какой-нибудь другой редактор, например в Notepad, так как в случае успешной компиляции и записи скетча на плату, начнется его выполнение. То есть у нас каждые пять секунд будет “набираться” строка Hello World и будет не очень хорошо, если она будет записываться в окне Arduino IDE.

Для платы Digispark можно также найти примеры для проверки ее работы (File -> Examples -> Digispark).

Заключение

Итак, мы подготовили рабочую среду для наших дальнейших экспериментов с HID USB устройствами. Сейчас у нас все готово к написанию практически полезных скетчей. В следующей статье мы рассмотрим написание скетчей, которые могут пригодиться при проведении пентестов.

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

Комментарии (2)


  1. Tsvetik
    25.08.2023 14:03
    +1

    Когда-то давно делал такое устройство в формате флешки на stm32. При втыкании оно запускало cmd и выполняло парочку команд
    Большая проблема в этом всем, что у флешки нет обратной связи от хоста. Она может послать Hello world вникуда, винда может тормозить и не успеть открыть cmd или определить устройство. Раскладка клавиатуры может быть китайской=)


    1. ATmegAdriVeR
      25.08.2023 14:03
      +2

      Первая проблема легко решается отправкой клавиш CAPSLOCK, NUMLOCK, SCROLLOCK - хост, если он в состоянии готовности, в ответ на нажатие присылает пакет, чтобы переключить соответствующий светодиод. Вторая проблема обходится вводом символов по их кодам Unicode (alt + 4-значный код).