[Перевод] Конференция DEFCON 27. Buttplug: подлинное тестирование на проникновение. Часть 1

Аналитики полагают, что в настоящее время в мире существует порядка 10 миллиардов устройств из области «интернета вещей» (IoT). Иногда эти устройства завоевывают свое место на рынке, буквально взбираясь вверх по человеческим задницам. Как оказалось, дешевые и маломощные радиочипы не только отлично подходят для домашней автоматизации — они также меняют способ взаимодействия человека с секс-игрушками. В этом докладе мы погрузимся в мир теледильдоники, технологии секса на расстоянии, при которой осязательные, температурные и прочие ощущения передаются между партнёрами через двустороннюю линию связи. Докладчик расскажет, что безопасность радиоэлектронных анальных секc-игрушек Buttplug может противопоставить злоумышленнику, который находит и использует уязвимости на каждом уровне стека. В конечном счете это позволяет компрометировать и сами секстойз, и устройства, к которым они подключаются.

nll1ezgmcsvclqh9elelipkdfbe.jpeg

Хакер под ником smea, или Smealum, начал свою карьеру как разработчик видеоигр для таких игровых консолей, таких как Nintendo DS, попутно пытаясь их взломать. В какой-то момент консоли обзавелись серьезными системами безопасности, и Smea перешел от доморощенного ПО к разработке техник его взлома. Smea известен своей «работой» над Nintendo 3DS и Wii U, хотя также внес вклад в разработку эксплойтов для популярнейших веб-браузеров и стеков виртуализации. Вероятно, теперь он увлекся взломом «умных» анальных пробок.

Привет всем, я Смиа, и сегодня мы поговорим о том, как взломать баттплаг. Это предмет, который я держу в руке, не знаю, видели ли вы его раньше, лично я — нет. Но за последние 2 года я познакомился со многими интересными представителями индустрии IoT, так что теперь пришел черед этой штуки. Вам может быть интересно, как вообще можно взломать баттплаг, потому что это просто кусок силикона, который нужно куда-то вставить, и согласитесь, что для этого существует не так уж много мест.

z5yraruqzcjhhyd_pc_eym4a5ly.jpeg

На самом деле для этого не нужна никакая электроника. Но за последние несколько лет, или даже десятилетий, появилась новая отрасль электронных устройств под названием теледильдоника. Происхождение этого термина отображено на слайде: греческое слово «tele» означает «издалека», а английское «dildo» означает не что иное, как фаллоимитатор. Я пытался найти происхождение слова «дилдо», но никто не знает, откуда оно взялось. Но это вполне объяснимо, не так ли? Идея состоит в том, что вы хотите сделать секс-игрушки, которыми каким-то образом можно управлять на расстоянии.

Для этого существует несколько сценариев. Я просто хочу объяснить вам, как это работает, потому что не все знакомы с подобными устройствами. Итак, вы берете баттплаг, вставляете его куда надо и можете управлять им дистанционно откуда захотите — с телефона, ноутбука и т.д. Это первый сценарий под названием «сольная игра». Второй сценарий я назвал «локальный мультиплеер» — это когда вы передаете управление этой штукой кому-то другому. Это довольно реальная вещь, которую часто рекламируют — вы можете, например, пойти с ней в бар и никто не узнает, как это весело. Но технически это создает новый вектор атаки, потому что вы отдаете контроль над устройством постороннему человеку, и здесь действительно меняется модель угрозы.

Третий сценарий «удаленный мультиплеер» аналогичен второму, только теперь вы позволяете другому человеку управлять устройством через интернет. Следует учитывать, что этим человеком может стать незнакомец.

mnnbhrbihysuf1iengokudmgudm.jpeg

Для многих заниматься сексом на расстоянии выглядит довольно круто и весело, и я на не собираюсь над этим шутить. Некоторые используют теледильдонику, чтобы заработать себе на жизнь, и сценарий 3Б называется «удаленный платный мультиплеер». Поэтому то, что я пытаюсь взломать анальную пробку, не просто развлечение — это придает моим исследованиям на проникновение некую обоснованность.

gng0m40-kjudzygpgp6fkeczt_i.jpeg

Многие люди, не знаю, как их назвать — мальчики, девочки — предоставляют динамичные сексуальные развлечения по интернету, разрешая другим людям за деньги управлять их секс-игрушками. Компания, которая выпускает эти баттплаги, имеет патент на концепцию отчислений прибыли при использовании ее продукции для сексуальных игр по интернету. По такому сценарию за 5 долларов отчислений вы имеете право разместить ссылку, например, в Twitter, чтобы предоставить кому-то возможность управлять вашим баттплагом некое ограниченное время. Поскольку люди полагаются на эти игрушки как на инструменты для заработка, на мой взгляд, очень важно рассмотреть их безопасность.

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

gywb8gehwmsgsmf_5pra4m_lmr4.jpeg

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

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

8vcbhzhmae_kgh9ka8v37s2jg_8.jpeg

Третий сценарий носит обратный характер — злоумышленник сам использует баттплаг для того, чтобы захватить контроль над компьютером или телефоном и взломать устройства, расположенные на стороне того пользователя, который удаленно участвует в играх с баттплагом. Люди не понимают, что это реальный риск, но вы наверняка представляете себе, насколько коварными могут быть анальные пробки (смех в зале). Этот сценарий мы тоже исследуем.

vntvsrxrvefsyh_y7k48hqd7fiu.jpeg

Теперь, когда вы получили представление о мире теледильдоники, рассмотрим, как это выглядит на практике. На слайде вы видите модель дилдо под названием Lovense Hush, и позже я вам покажу вам демо с этой штукой в живом эфире. Это первая в мире модель дилдо-теледильдоника, анальной пробки, которой можно управлять с вашего телефона или компьютера. Для этого баттплага имеются приложения для IoS и Android, вы можете управлять им с компьютера под управлением Mac OS и Windows. Мобильные приложения поддерживают социальные функции, такие, как ведение чата, обмен текстом, картинками, видео и контроль игрушки друзьями или незнакомцами.

b-ryzqagf71doiiyxeoj_hzvzm8.jpeg

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

bvlgdlcsp4qckbaej8gps_szkua.jpeg

На следующем слайде показано мое видение атаки баттплага с помощью приложения для ПК. Между баттплагом и USB-ключом имеется соединение типа BLE (BlueTooth Low Energy), ключ подключен к компьютеру пользователя, который в свою очередь, подключен к интернету. Сценарий №1 применяется злоумышленником на участке баттплаг- USB-ключ, то есть атакуется соединение BLE. Фактически здесь нет никакой защиты, так что любой посторонний человек может перехватить управление этой игрушкой. В прошлом году состоялся серьезный разговор об инструменте под названием BTLE Jack, позволяющем успешно атаковать такое соединение.

l_ma24foabt77cti9__dmq7ufam.jpeg

Сценарий №2 состоит в атаке участка соединения компьютера пользователя с интернетом. Третий сценарий заключается в попытке взлома любого из трех участков: BLE, USB, Internet. Вполне вероятно, что существует открытый проект Buttplug…, можете смеяться, это была шутка. Итак, с чего мы начнем наше «настоящее тестирование на проникновение»?

cjov21ngohs6fh0gqaccbp2mdn0.jpeg

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

gytcl_o4cfm0iolamia3r6cfryo.jpeg

Я не люблю JavaScript, но что в нем хорошего, так это наличие кучи имен переменных и имен полей объектов, и все это отлично подвергается реверс-инжинирингу. Достаточно закинуть код в Beautifier и выяснить, как он работает. Как только вы это проделаете, можно начать разбираться в работе электронного ключа.

fpkm1shgzrwislgaj09vm2ileg8.jpeg

Выяснив, что это всего лишь последовательный порт для подключения через USB, я занялся сниффингом трафика между ключом и приложением. Обратите внимание на строки справа на слайде — в первую очередь я обратил внимание на то, что сообщения между донглом и приложением представляли собой текстовый формат JSON. Для кода на JavaScript это привычно, однако для USB-ключа, представляющего собой 32-х битный микроконтроллер, встраивание парсера JSON выглядит странно… Для нас это очень удобно, потому что парсеры JSON обычно содержат баги прошивки, которыми можно воспользоваться.

hj5rrk2imjq5byefebbencwwmsg.jpeg

Однако поиск багов без кода самого ключа утомительное занятие, но так как у меня был код приложения, я стал искать в нем механизм обновления прошивки USB-ключа и вскоре нашел, что хотел — URL узла обновления. Оказалось, что прошивка никак не зашифрована и не подписана, поэтому я просто скачал ее и получил бинарник для анализа.

xcq7vsjbakxsctt8th2gd_fwhni.jpeg

Дальше я занялся реверс-инжинирингом и обратил внимание на 2 вещи. Во-первых, здесь имеется 2 обработчика команд для серийного порта USB. Первый использует простые команды типа reset или device type, второй использует команды типа DFU для обновления прошивки устройства, так что у нас имеется возможность посылать эти команды и обновлять прошивку.

oyolb-kfxvjs8uq4ccxmvyrowdw.jpeg

Заглянув в парсер JSON, который представляет для нас наибольший интерес, я обнаружил ожидаемый баг — функцию parseJsonString. Она просто должна выделять в новый буфер копию исходной строки, а также работать с такими вещами, как escape-последовательности. При вычислении длины нового буфера возникает ее несоответствие фактически используемой длине.

pon7vwgs51_0b0xicll5adjy0km.jpeg

Эта функция работает так: она поддерживает escape-последовательность из 5 параметров U вместо того, чтобы, как ожидается, приравнять их 0. Благодаря этому мы можем избежать нуль-терминированной строки и сделать так, чтобы длина первой вычисленной строки была неправильной.

lgam4y0v4ijpkvue8j2snjfr7xm.jpeg

Эта небольшая анимация показывает, что здесь происходит. Обратный слэш перед U означает, что нужно отбросить 6 символов. Далее функция перепрыгивает через нуль-терминатор, что является проблемой. Затем процесс продолжается, все символы копируются и попадают в буфер длиной всего 6 байт. Здесь появляется вторая проблема — риск переполнения буфера. Это здорово, но мы все еще не знаем, как работает «железо» донгла.

wjeahlydyx11z5kl0e_entwcoiw.jpeg

Нам точно известно, что у него нет никакой рандомизации адресного пространства ASLR, нет стека кукиз, но возможно, у ключа имеется защита типа предотвращения выполнения данных DEP или защита XN, которая предотвращает выполнение кода в памяти, за исключением области .text.

Ключ снабжен микросхемой типа «система на кристалле» NRF51822 SoC с процессором Cortex M0, без защиты DEP, очень популярной для устройств BLE и оборудованной кучей отладочных контактов. Поэтому к этому ключу довольно просто подключиться, припаяв к нему пару вещей, и заняться отладкой через интерфейс для отладки и прошивки микросхем SWD, если он не отключен в заводских настройках. Подключившись по SWD, мы можем сбросить содержимое кучи.

Оказывается, что она используется только для парсера JSON, что не очень здорово, но зато куча содержит в себе метаданные. Так что же здесь можно испортить? Конечно, метаданные кучи! Таким образом мы создаем эксплойт для парсера JSON.

qw9ozhk_k6ixcm_iupcoyvun3xa.jpeg

Куча — это просто свободный список. Если взглянуть на этот код, видно, что для каждого распределения имеется своя длина и указатель. Если использовать переполнение буфера, можно испортить длину и положение следующего указателя, что позволит контролировать местоположение следующего распределения. Скопировав в него новую строку, можно с легкостью расположить произвольные данные в произвольном месте. Все это можно проделать, пока подключен отладчик.

tbhky7ub8kj5cbgpjhmrl-frong.jpeg

В правой части слайда вы видите стек, который сбрасывается и полностью перезаписывается всего лишь 8 символами. Это дает нам исполнение кода USB-ключа, что довольно круто.
Я вспомнил, что, к сожалению, этот донгл имеет аварийный режим обновления прошивки DFU. Я ожидал, что по аналогии со взломом игровых приставок, этот режим служит для того, чтобы аутентифицировать обновление любым возможным способом. Оказывается, что здесь DFU использует классический подсчет контрольной суммы CRC16, который, если вы смыслите в криптографии, не является аутентификацией какого-либо рода. Не думаю, что они действительно хотели использовать в этом случае аутентификацию, скорее всего, просто решили, что мало кого заинтересует выполнение кода USB-ключа для баттплага. Однако меня это заинтересовало.

iflgpyq2h1z6kusfwcpqf-x0vxy.jpeg

На данный момент у меня имелось 2 различных способа для исполнения кода на данном устройстве, но возня с парсером JSON, на которую я потратил много времени, оказалась не особо результативной из-за наличия режима DFU. Позже мы рассмотрим этот способ вместе с имеющейся уязвимостью парсера. Пока что меня больше интересовало, можно ли просто модифицировать файл main.bin, пересчитать его CRC16 и вшить его, используя программу, которая включена в приложение удаленного управления Lovense Remote. Оказалось, что можно.
В результате у нас появился USB-ключ, скомпрометированный с помощью приложения для ПК, и определенно, это была самая легкая часть взлома. Получив контроль над ключом, я принялся искать способ для выполнения кода на самом баттплаге.

vik2vmib-ohaqm0hlaaldyaqmgc.jpeg

Для этого я обратился к «железу» нашей секс-игрушки — вероятно, на ней тоже имелся отладчик, и на него стоило взглянуть. Разобрав баттплаг, я обнаружил более серьезную микросхему, с большим объемом флеш-памяти и RAM и более мощным процессором Cortex M4.

Я легко разобрался с тем, что отсутствует и что присутствует на борту баттплага. Здесь нет DEP, как на донгле, вверху расположены проводки, идущие к батарейке, далее находится порт зарядки, контакты моторчика вибратора, несколько контактных площадок для отладки и антенна Bluetooth. Таким образом, благодаря наличию SWD устройство можно легко перепрошить.

r8lnrdx8uis5lkt3f-gtdkpssr0.jpeg

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

Я подумал, что если режим обновления прошивки донгла был настолько небезопасным, то, возможно, что и здесь имеются уязвимости. Оказалось, так оно и есть. В результате поиска DFU я обнаружил 2 вещи: обычный обработчик команд DFU и строчку DfuTarg в загрузочном секторе. Этот DfuTarg используется так же, как и идентификатор баттплага LVS-Z00, то есть похож на загрузчик режима DFU для BLE. Поэтому в режиме DFU баттплаг распознается как устройство под именем DfuTarg, а этот уникальный идентификатор можно использовать для поиска устройства.
Итак, если отправить ему точно такую же команду DFU, которую мы отправили ключу, баттплаг перейдет в режим обновления встроенного ПО устройства. Для перепрошивки можно использовать фирменные инструменты производителя микросхемы Nordic Semiconductor — nRF Toolbox.

xbiyprlhoukirnf_su9htx71rqa.jpeg

При помощи аппаратного сниффера можно визуализировать BLE-пакеты в Wireshark.

xcea9of9tdquhsfcjnjglzcsj78.jpeg

Я отправил небольшое сообщение «hello from plug», и это означает, что можно выполнить код на батплаге без всякого взлома, и это не уязвимость, а просто своего рода дизайн разработчиков, который позволяет перепрошить устройство. Возможно, это решение понравилось бы open source сообществу. Суть заключена в том, что любой, кто может подключиться к вашему баттплагу, способен запустить на нем свой код, а это уже достаточно опасная вещь. При этом хакер должен находиться в зоне действия локального соединения, то есть находиться достаточно близко к секс-игрушке, чтобы получить над ней контроль через скомпрометированный донгл и BLE-канал. При этом можно использовать как сам донгл, так и любое другое BLE-устройство.

d_uouyokp1p8mdsyx2x0yehkl14.jpeg

Вопрос заключается в том, что реально можно сделать с баттплагом, получив возможность запускать на нем свой код? У меня имеется несколько идей. Первая — перехватив управление над этой штукой, можно создать баттплаг-вымогатель. Вы можете так модифицировать его прошивку, что пользователю не удастся включить режим DFU, пока вы не предоставите ему определенный ключ, или же вы просто отключите функцию вибрации и попросите 50 баксов за то, чтобы разблокировать это полезное устройство.

cljbobzlggrarkc30am8im-fe14.jpeg

Для многих это послужит своеобразной вакциной от использования таких игрушек. Вторая идея — это превращение баттплага в оружие. В нем имеется достаточно мощная батарея, питающая моторчик вибратора, можно сказать, что 80% содержимого баттплага — это аккумулятор. Вы наверняка помните, что происходило со смартфонами Samsung Galaxy Note — они просто взрывались (смех в зале), так что вполне вероятно, что подобное может произойти и с анальной пробкой. Не знаю, какова вероятность ее взрыва, но если у вас имеется много секс-игрушек с моторчиком, об этом стоит задуматься. Команды разработчиков утверждают, что эти штуки абсолютно безопасны, не смотря на наличие множества движущихся частей. Но если это так, то функция безопасности устройства закодирована в программном обеспечении, а не в аппаратной части. В таком случае выполнение вредоносного кода может иметь катастрофические последствия.

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

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

g_ov1vzowj7o8hifa6xhfoo5gmq.jpeg

Слева вы видите callback на JavaScript, а справа то, как он взаимодействует с приложением через серийный порт. Callback помещается в строку и затем обрабатывается кучей разных функций.

Первая функция — найти ключ, она обрабатывает сообщения об инициализации, поступающие от ключа. Вторая функция — это on («Data»), функция обработки, принимающая входящий пакет JSON, длина которого, кстати, не может превышать 32 символа. Далее выполняется парсинг и все остальное. На самом деле здесь нет никакой серьезной обработки — просто выполняется запрос статуса устройства, проверка заряда батареи и тому подобные служебные операции.

Гораздо интереснее последняя функция — я называю ее журналом отладки debug log, хотя на самом деле в реальном коде у нее нет названия. Эта функция регистрирует все, что поступает в устройство через серийный порт, и сбрасывает эти строки в консоль, которая при необходимости выдает сообщение об ошибке. Кроме того, эта функция создает новый DOM элемент как элемент HTML, и закидывает все содержимое, полученное через серийный порт, в этот самый HTML. Я не являюсь веб-разработчиком, но думаю, что это серьезная XSS-уязвимость.

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

22:00 мин

Продолжение будет совсем скоро…


Немного рекламы :)


Спасибо, что остаётесь с нами. Вам нравятся наши статьи? Хотите видеть больше интересных материалов? Поддержите нас, оформив заказ или порекомендовав знакомым, облачные VPS для разработчиков от $4.99, уникальный аналог entry-level серверов, который был придуман нами для Вас: Вся правда о VPS (KVM) E5–2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps от $19 или как правильно делить сервер? (доступны варианты с RAID1 и RAID10, до 24 ядер и до 40GB DDR4).

Dell R730xd в 2 раза дешевле в дата-центре Equinix Tier IV в Амстердаме? Только у нас 2 х Intel TetraDeca-Core Xeon 2x E5–2697v3 2.6GHz 14C 64GB DDR4 4×960GB SSD 1Gbps 100 ТВ от $199 в Нидерландах! Dell R420 — 2x E5–2430 2.2Ghz 6C 128GB DDR3 2×960GB SSD 1Gbps 100TB — от $99! Читайте о том Как построить инфраструктуру корп. класса c применением серверов Dell R730xd Е5–2650 v4 стоимостью 9000 евро за копейки?

© Habrahabr.ru