Лю­бой компь­ютер име­ет огромную уяз­вимость — пор­ты, к которым мож­но под­клю­чать устрой­ства вво­да. Это откры­вает прос­транс­тво для атак типа 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
SIM800L
Arduino Pro Mirco
Arduino Pro Mirco
USB — microUSB
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 в ОС 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 как про­читан­ное.

Итак, прис­тупим к соз­данию кода. Логичес­ки его мож­но раз­делить на две час­ти. Пер­вая — обра­бот­ка дан­ных, получа­емых от модуля SIM800L, и «выужи­вание» полез­ной наг­рузки из SMS. Вто­рая — эму­ляция модулем Arduino нажатий кла­виш, отправ­ляемых через USB-порт компь­юте­ру. Осно­ву вто­рой час­ти сос­тавил код, написан­ный Spacehuhn и перера­ботан­ный мной.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Оставить мнение