Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Любой компьютер имеет огромную уязвимость — порты, к которым можно подключать устройства ввода. Это открывает пространство для атак типа BadUSB. Обычно это девайс, похожий на флешку, который имитирует клавиатуру и тайком вводит команды скрипта. Атакующий при этом находится неподалеку, но это накладывает ряд ограничений. В этой статье я покажу, как своими руками собрать BadUSB с модулем GSM и SIM-картой, чтобы удалиться можно было хоть в другую часть земного шара!
warning
Вся информация предоставлена исключительно в ознакомительных целях. Ни редакция, ни автор не несут ответственности за любой возможный вред, причиненный с использованием информации из данной статьи.
В основе BadUSB лежит микроконтроллер и память, необходимая для хранения кода. Код — это обычно скетч, написанный, например, на языке Arduino. В статье мы будем использовать именно его. Одна из причин его популярности — это широкий выбор библиотек. Они позволяют заметно сэкономить время при написании скетча.
Статьи «Злой HID» и «Злая утка с дистанционным управлением» дают исчерпывающее руководство, как собрать и запрограммировать BadUSB и модифицировать его, добавив ESP8266. Модуль Wi-Fi предоставляет нам огромное преимущество в виде удаленного управления устройством и создания скриптов на лету. Бесспорно, управление через веб‑интерфейс — это крутая модификация. Но за удобство нужно платить, в этом случае скрытностью. Созданная устройством точка доступа может выдать факт работы устройства, а бетонные стены и малый радиус зоны Wi-Fi не дадут пользователю удалиться на расстояние больше ста метров от девайса (это в лучшем случае). В сегодняшней статье мы раздвинем физические границы использования BadUSB.
Что, если оборудовать Arduino модулем не ESP8266, а SIM800L? Конечно, суть BadUSB останется неизменной: устройство подключается к порту USB компьютера для выполнения команд скрипта. Однако отличие от простого BadUSB заключается в том, что после присоединения скрипт не выполнится. Его необходимо будет послать в виде SMS. Это даст преимущество не только в дистанции, c которой можно управлять устройством удаленно, но и в используемом оборудовании: хватит кнопочного телефона с SIM-картой. Чтобы еще немного снизить себестоимость устройства, можно заказать все необходимые детали с AliExpress.
Нам понадобятся следующие вещи:
SIM800L
Arduino Pro Mirco
USB — microUSB
Теперь давай приступим к сборке самого устройства.
Схема соединения контактов двух плат проводами выглядит следующим образом:
ARDUINO <----> SIM800L
RAW <-----> VCC
GND <-----> GND
15 <-----> TXD
14 <-----> RXD
Антенна из комплекта SIM800L подойдет любая. Если это антенна‑спираль, то ее необходимо припаять к контакту NET модема. Чтобы сэкономить место, я выберу плоскую антенну и прикреплю ее к контакту IPX.
info
Питание модуля SIM800L очень капризно. Разрешенное напряжение составляет от 3,4 до 4,4 В. Поэтому, если ты используешь не Arduino Pro Micro или выходное напряжение не попадает в промежуток значений, указанный выше, советую ознакомиться со статьей Robotchip. В ней подробно описано, как корректно подвести питание к модулю SIM800L.
Собранное устройство
Останавливаться на сборке подробно я не буду. Уверенно орудуя паяльником, цепляем провода к обеим платам по схеме. Скажу лишь одно: если ты дальше собираешься продолжать свои эксперименты с BadUSB, то лучше воспользоваться макетной платой. Тогда сборка устройства превратится в игру с конструктором Lego. Достаточно будет припаять ножки к используемым контактам Arduino и SIM800L, установить девайсы на макетную плату и соединить их между собой проводами.
Linux или Windows? Решать тебе! Arduino IDE есть под обе операционные системы. В моем случае при подключении Arduino определилось как SparkFun LilyPad USB.
Определение Arduino в ОС Linux
Далее скачиваем Arduino IDE с официального сайта под свою ОС (в моем случае это Kali Linux). После установки необходимо выбрать устройство, которое мы будем программировать, и порт, к которому оно подключено. Сразу скажу, что, если ты используешь Linux, загрузить код на плату с первого раза может и не получиться. Тогда необходимо прописать в командной строке Linux следующее (где username
— имя пользователя):
$ sudo usermod -a -G dialout username
Выбор платы для правильной компиляции кода
Выбор порта, к которому подключено устройство
После подключения устройства к USB-порту модем ищет ближайшую базовую станцию оператора SIM-карты, которую ты используешь в SIM800L (в верхнем углу модуля SIM800L находится светодиод, который показывает состояние сотовой сети). Есть три состояния индикатора: мигает раз в 1 с — модуль работает, но еще не подключился к сотовой сети; мигает раз в 2 с — запрошенное соединение для передачи данных GPRS активно; мигает раз в 3 с — модуль установил связь с сотовой сетью и может отправлять или получать голосовые сообщения и SMS.
В отличие от девайса с модулем Wi-Fi, в нашей версии BadUSB будет программироваться только модуль Arduino. SIM800L выступит как часть канала передачи, которая обрабатывает получаемые от базовой станции сигналы GSM. Результатом работы (в зависимости от отправленной модулю SIM800L команды) будет текстовая информация, выведенная в COM-порт. Рассмотрим основные команды библиотеки этого модуля, с которыми будем работать.
Общаться с модулем SIM800L можно через COM-порт с помощью текстовых команд. Их перечень огромен, поэтому приведу в качестве примера только те, которые будут задействованы.
AT
— настройка скорости обмена данными;AT+CMGDA="DEL ALL"
— удаление всех SMS из памяти симки;AT+CMGDA="DEL READ"
— удаление всех прочитанных SMS;AT+CLIP=1
— включение AOH;AT+DDET=1
— включение возможности использования тонального набора;AT+CMGF=1;&W
— включение текстового режима SMS с сохранением значения;AT+CMGL="REC UNREAD",1
— запрос на чтение непрочитанных SMS;AT+CMGR="index",1
— получение текста SMS по индексу (index);AT+CMGR="index"
— отметить по индексу SMS как прочитанное.info
Datasheet по SIM800L
Итак, приступим к созданию кода. Логически его можно разделить на две части. Первая — обработка данных, получаемых от модуля SIM800L, и «выуживание» полезной нагрузки из SMS. Вторая — эмуляция модулем Arduino нажатий клавиш, отправляемых через USB-порт компьютеру. Основу второй части составил код, написанный Spacehuhn и переработанный мной.
Источник: xakep.ru