Перехват нажатий клавиш смартфона при помощи акселерометра

http://www.extremetech.com/mobile/92946-a-wiggly-approach-to-smartphone-keylogging
  • Перевод
Двое исследователей из Калифорнийского университета в Дэвисе (UC Davis), Хао Чэнь (Hao Chen) и Лянь Цай (Lian Cai) нашли способ определять, какие клавиши были нажаты на экранной клавиатуре ОС Android путем измерения смещений, покачиваний и вибрации устройства, измеренных встроенным акселерометром [Прим. перев.: и гироскопом]. Это важно, поскольку данные от акселерометров не рассматривались как потенциальный вектор атаки, и, таким образом, свободно доступны любому приложению на любом смартфоне или планшете.

Перехват нажатий клавиш на настольном компьютере или ноутбуке под Windows или Мас невероятно прост: установите соответствующую программу (или троян это сделает за вас), настройте, куда она должна сохранять или отправлять украденные коды клавиш, и всё! Когда речь идет о смартфонах, однако, сложные системы ограничения прав доступа делают этот подход практически невозможным, если только не использовать так называемые побочные каналы. Строго говоря, побочным каналом называется открытый источник информации, который помогает атакующему взломать криптографическую систему. В более широком смысле, побочным каналом может быть лампочка на маршрутизаторе, мигающая в такт передаваемым данным, или звуки нажатия клавиш физической клавиатуры. [Прим. перев.: упомянуты не гипотетические возможности, а реально осуществленные разновидности атак. Буду благодарен тому, кто поможет найти ссылки. Пруф, #3.2.2, #4.2.1] Другими словами, побочные каналы — это характеристики системы, потенциальная опасность которых упускается из виду.

В данном случае двое исследователей использовали данные пространственной ориентации устройства на базе Android — набор из трех углов, задающих ориентацию телефона в пространстве XYZ — чтобы определить, в каком месте пользователь нажал на экран. В принципе, каждая клавиша имеет уникальную картину изменений углов по трем осям, которые могут быть идентифицированы (см. ниже). Точность зависит от модели телефона: HTC Evo 4G обновляет данные об ориентации каждые 30 мс, а Motorola Droid — каждые 110 мс. В целом, исследователям удалось достичь 71,5% точности для 10-кнопочной клавиатуры. Оставшиеся 28,5% составляют ошибки из-за близкого расположения клавиш. Программа (кстати, названная TouchLogger) может, в общем случае, правильно определить столбец или строку для каждого нажатия, но иногда ей не хватает данных для того, чтобы распознать конкретную клавишу.


Полная QWERTY-клавиатура, естественно, более сложна для распознавания нажатий, чем 10-кнопочная цифровая, но перед нами только демонстрация принципа, а точности в 70% более, чем достаточно, чтобы нарушить конфиденциальность любых данных, вводимых в телефон. Кроме того, в работе далее отмечается, что на более крупных устройствах, такие как планшеты, должно быть легче контролировать клавиатуру; а также можно использовать гироскопы совместно с камерой для увеличения разрешения и точности TouchLogger.

Наконец, важно отметить, что этот побочный канал — не просто дыра в безопасности Android: данные акселерометра и гироскопа доступны через API DeviceOrientation, который реализован в Android 3.0, IOS 4.2, а также во всех современными браузерах. Другими словами, этот эксплоит будет требовать установки TouchLogger на телефон Android, но в теории, кто-то может взять работу Чэнь и Цай, реализовать в JavaScript, а затем использовать, чтобы украсть ваши пароли и информацию о кредитных картах когда вы путешествуете в интернете.

Статья в журнале New Scientist, статья о TouchLogger [PDF]
Поделиться публикацией

Комментарии 70

    +9
    Низкая точность. Представляете пароль из 10 символов пробовать распознать? Точность каждой буквы 71.5%, точность правильного определения 10 нажатий — 3%. А это ещё и наверняка проценты, которые были рассчитаны на создателях! Весьма вероятно, что фигура получающейся кривой во многом отличается для каждого человека (не поверю, что у всех одинаковая рука с одинаковой силой нажатия и одинаковой массой). А это значит ещё нужна подпрограмма обучения (её будет не так уж и просто написать).
    Ну и да, часто ли вы видите отсутствие QWERTY в современных нормальных смартфонах?

    Хотя, конечно, в качестве забавного проекта чтобы скрасит пару вечеров эта тема тащит. Новая идея и новый подход. Всегда интересно смотреть как достаточно старые технологии применяются для чего-то нового.
      +11
      Если это оформить в виде трояна, пароль может быть перехвачен несколько раз. Больше статистических данных = больше точность. Можно, наверное, и самообучение организовать.
      А вообще, сказано же — это только демонстрация.
        +1
        Отношение сигнал/шум для 70% правильного и 30% ошибочного распознавания равен 2.5. Это менее 3х σ. Вы знаете насколько мощный алгоритм там должен быть, чтобы отфильтровать и получить пароль? Я не говорю, что это статистически невозможно. Но это очень сложно.
        и это для 10кнопочной клавы…
          +5
          Ошибки нельзя назвать случайными. Безошибочно определяется или строка, или столбец, а то и другое одновременно — с вероятностью 70%. Если за 3 попытки, скажем, первая цифра определилась, как 4,5 и 8, значит, правильный ответ — 5.
            0
            Опять же, это для 10 кнопок!!! Вы много знаете смартфонов, которые 10 кнопок имеют?

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

            Это возможно сделать в полуавтоматическом режиме, да. Но полностью автомат?.. Есть куда более простые способы что-то украсть или заработать.
              +3
              Никто про полностью автомат и не говорит, на поток пока тоже не поставили. Это лишь демонстрация возможности (proof of concept). Если удастся повысить точность, можно и с QWERTY-клавиатурой совладать.
                0
                Ну, то что концепт хороший и интересный — я и не отрицаю! Акселерометры это всегда интересно!
                А повышение точности несколько непонятно за счёт чего там делать… Разве что ждать следующего поколения смартфонов.
                  0
                  Они же написали: планируется задействовать еще и камеру. Видимо, по дерганью картинки тоже будут смещение определять.
                    0
                    Вы знаете какую производительность требуют алгоритмы, обрабатывающие виеопоток чтобы найти сдвиги?) Тем более если писать с нуля. Можно использовать OpenCV (есть версия под андройд), но всё-равно это дикие тормоза будут и дикий расход питания. Да и к тому же «троянчик» получиться размером мегобайт 5 минимум.
                      0
                      Основным препятствием станет даже не это, а низкая частота кадров с камеры и недостаточная чувствительность матрицы, при плохом освещении все сдвиги смажутся.
                        0
                        В текущих условиях можно на коленке написать брутфорс, который будет прекрасно и быстро работать.
                +1
                >Безошибочно определяется или строка, или столбец, а то и другое одновременно — с вероятностью 70%.

                Извините, но так не бывает. Вернее, бывает, но процесс должен быть квантовым :).
                  +1
                  Хорошо, я слишком сильно упрощаю. Вот таблица (из полного отчета о работе) с вероятностями всех видов ошибок:
                  Видно, что при ошибке программа чаще «съезжает» или по столбцу, или по строке. Гораздо реже ошибка идет по обеим координатам.
            +1
            Тут на помощь приходит статистика. Если пароль вводится пару раз в день, а программа следит за ним целый месяц — это 60 вариантов, пусть и частично ошибочных.
            А дальше смотрим посимвольно, какие знаки чаще встречаются на каждой позиции. Можно даже «вручную», человеком.
            Гарантий, конечно, нет, но вполне реально.
              +1
              Во-первых, мы не знаем, когда вводится пароль. А если проcто смотреть по похожим словам, то в первую очередь будут вытягиваться слова «Привет», «Как дела?» и «kiss my shiny metal ass». В ручную, безусловно, это возможно сделать. Но написать алгоритм, который будет в автоматическом режиме выделять пароли и отправлять их, это на мой взгляд ужасно нетривиально. Есть куда боле простые способы.
                0
                а если еще на близость к словарю проверять, то получатся вполне рабочие веера
                +1
                Но необязательно ведь красть пароль.
                Думаю, многие используют смартфоны для работы с рабочей (извините за тавтологию) почтой. А там и важная закрытая инфа может быть. А понять о чем текст, в котором 70% информации точно, не составит труда. (Я на английском так читаю :) Не обязательно знать значения 100% слов).
                  0
                  Хм. Для текстов да, нормально будет. Но любую точную инфу всё же очень сложно вытягивать.
                +1
                > Хао Чен (Hao Chen) и Лян Кай (Lian Cai)

                Фамилия второго транскрибируется как Цхай — поправьте, пожалуйста:)
                  +1
                  Спасибо, исправил.
                    +1
                    Это не совсем так. Для этих целей повсеместно используется система Палладия, где транскрипция для слога caiцай. Другое дело, что по звучанию это больше похоже на «цхай», а не «цай».

                    В любом случае, в большинстве официальных документов используется "цай". Источник: "Транскрипционная система Палладия"
                      0
                      Чёрт, точно! Давно в палладицу не заглядывал:) просто по чтению назвал.

                      By bad
                        0
                        Тогда, получается, они Хао Чэнь и Лянь Цай? Восток — дело тонкое…
                    +7
                    Необыкновенно остроумно и опасно.
                      +21
                      Сразу представил игрушку на простые арифметические действия (а-ля сколько будет 2+2*2 и т.д.), где пользователь играет, обучая нейросеть…
                        +5
                        Вспомнился фрагмент из Индиана Джонс, когда огромный амбал виртуозно играет мечами перед носом Индианы, а тот просто достал пистолет и выстрелил.
                        Зачем так сложно, игрушку, обучение? Делаем клавиатуру замену стандартной, и все дела.
                          0
                          Для этого придется встраиваться в другое приложение.
                            –1
                            Я Вашу мысль не совсем понял, но наверняка существует еще множество более простых решений, чем этот китайский труд (в прямом смысле).
                              +4
                              Поясню. Вот у нас есть приложение (скажем, клиент интернет-банка) с экранной клавиатурой, на которой юзер вводит пароль. Пароль нужно, естественно, украсть. Вы предлагаете нарисовать фальшивую клавиатуру поверх настоящей и считать с нее. Подозреваю, политика безопасности андроида не даст это сделать. А собирать в фоне данные с гироскопов никто не запрещает. Последний штрих: чтобы обучить систему характеристикам данного юзера, делаем игрушку, в которую он играет в свободное от ввода паролей время. Теперь мы знаем, каким ускорениям соответствует какая нажатая цифра, расшифровываем данные, полученные на шаге 1, вуаля — пароль у нас, хотя в работу защищенного приложения никто не вмешивался.
                                –2
                                Во-первых, не поверх, а вместо предустановленной. Их уже много.
                                Во-вторых, можно написать сервис просто отслеживающий нажатия на экран. И никаких гироскопов.
                                  +1
                                  >не поверх, а вместо предустановленной.
                                  Осталось убедить пользователя установить именно эту дополнительную клавиатуру. Троян же, собирающий данные с гироскопов, можно замаскировать подо что угодно.

                                  >можно написать сервис просто отслеживающий нажатия на экран.
                                  Можно ли? Мне всегда казалось, что такую тупую дыру никто не оставил. Приложение может собирать данные о нажатиях только в пределах своего окна. Господа android-программисты, поправьте меня, если я ошибаюсь.
                                    0
                                    Можно.
                                    Где-то валялось приложение, которое создавалу виртуальную кнопку «Назад» поверх всего.
                                      0
                                      Печалька. Тогда действительно, проще написать обычный кейлоггер с фальшивой невидимой клавиатурой «поверх всего».
                                        +6
                                        Пруф, пожалуйста. И что б без рута.
                                          0
                                          А почемуй-то сразу без рута? Много народу долго думает, прежде чем дать суперюзерские права?
                                            +1
                                            Если целенаправленно не плясать с бубном, в Android у пользователя нет root-прав. Те, кто рутит свои телефоны, обычно все-таки думают, кому дать права, а кому — нет.
                                              0
                                              Хм, я не плясал, у меня из коробки был. Если это тот рут, о котором говорите вы. (Superuser, uid 0, запросы на права superuser'a.) Так не везде?
                                                0
                                                Я говорю вот об этой операции. Описание на русском — здесь.

                                                > у меня из коробки был.
                                                А что у вас за устройство?
                                                  +1
                                                  Так, почитал подробнее про рута под Андроидом. Рут именно тот, какого я и ожидал от линукс-бэйзд системы, но, как выяснилось, я пользуюсь не базовым функционалом, а набором софта, установленного поверх(я-то думал, что это стандартный системный софт). Видимо, все связано с тем, что я покупал его с уже установленным апдейтом до 2.2. (Значит, я сделал правильный выбор, покупая телефон, на котором все эти махинации заранее совершены, и нежелая заниматься этим самому.)

                                                  Orange San Francisco, так же известный как ZTE Blade. (Оно вообще слабохиленькое, покупалось как замена эмулятору, но времени покопаться в Андроиде все нет, и оно перекочевало в мой карман и активно исопльзуется для чтения почты теперь.)
                          +3
                          Чем сложнее и функциональнее устройство — тем больше потенциально доступных уязвимостей в нем.

                          Вообще, конечно, остроумно.
                            +3
                            А тем временем Альфа-банк разрешает делать пароли мобильного клиента только цифровыми, и при их вводе на экране появляется цифровая клавиатура вместо QWERTY.
                              –1
                              Да там через него мало что можно сделать — посмотреть и шаблоны заюзать… что совсем не опасно…
                                +2
                                Все равно не понимаю, зачем именно в сервисе, имеющем дело с деньгами, секьюрность паролей сделали меньшей, чем в 95% менее значимых сервисов.
                                  0
                                  Может быть, потому что в этом сервисе восстановление пароля — больший геморрой, чем, скажем, в почте или соцсетях. А чем сложнее пароль, тем чаще его забывают пользователи.
                                    +8
                                    Так полностью цифровые пароли, при их меньшей секьюрности, обычному человеку тоже сложно запомнить. В общем, все как у классика:

                                    0
                                    потому что там нет ничего. Все, что сможет сделать злоумышленник — пополнить владельцу счета телефон или оплатить ему интернет. Очень и очень это опасно! Самое то, что бы делать очень сложные пароли.
                                      0
                                      Насколько знаю, мобильник можно оплачивать не по шаблонам, то есть телефон злоумышленник сможет пополнить и себе, и кому угодно. Любопытно, в пределах какого лимита.
                                +3
                                Отлично, осталось ещё только микрофон задействовать и фронтальную камеру — за глазами владельца телефона следить. )
                                  +3
                                  Тайминг-атаку еще можно призвать в помощь: между разными кнопками палец движется разное время.
                                    +5
                                    Вдогонку:

                                    R: Это очень специфическая штука… Например, по каким признакам понять, что именно сейчас набирается пароль?

                                    Я: Ну, x128 говорит, что надо фронтальную камеру таки использовать: если рожа приняла хитрое выражение (анализ эмоций), значит пациент вводит пароль! >__>
                                      +1
                                      А некоторые еще губами пароль проговаривают, даешь чтение по губам.
                                      +3
                                      ага, ведь в глазах владельца отражаются нажимаемые им кнопки =)
                                        +2
                                        Смех смехом, а подобная атака тоже была кем-то продемонстрирована. Используя телескоп и камеру, удалось собрать картинку с монитора по отражениям в различных блестящих предметах, которые есть в любой комнате (вроде чайников, дверных ручек, плафонов ламп и т.п.) Скоро и до глаз пользователя дойдет. А если он носит очки, можно, наверное, и камерой смартфона подглядеть.
                                      0
                                      Интересно, а для левшей процент определения тот же? Мне кажется, что «человек с нестандартной ориентацией рук» при нажатии наклоняет телефон по-другому, и тут для распознавания не достаточно просто инвертировать показатели по горизонтальной оси…
                                        0
                                        Подозреваю, для каждого нового пользователя (не важно, правша — левша), программу нужно сначала обучить. Показания гироскопов при нажатии — это как почерк, у каждого свои.
                                      • НЛО прилетело и опубликовало эту надпись здесь
                                          0
                                          Экранная клавиатура не щелкает :)
                                          +11
                                          Параноики, внимание! Теперь пароли к банк-клиенту нужно набирать, фиксируя смартфон на столе!
                                            +7
                                            Или наоборот, размахивая им как бешеный :)
                                            0
                                            Люди с пальцами-сосисками будут иметь лучший встроенный антивирус. Количество промахов сведет с ума любой кейлогер
                                              0
                                              Гм. А почему тогда на снимке айфон?
                                                +2
                                                Это китайский айфон, на Андроиде :)
                                                А если серьезно — картинку взял из оригинальной статьи, все вопросы к ним.
                                                +1
                                                в теории, кто-то может взять работу Чэнь и Цай, реализовать в JavaScript, а затем использовать, чтобы украсть ваши пароли и информацию о кредитных картах когда вы путешествуете в интернете

                                                Интересно стало, а скрипт насколько часто получает обновления от акселерометра? Я про rate, а то может и недостаточно будет ему? Одно дело частота для ui, другая — максимальная.
                                                  0
                                                  А как скрипт будет узнавать что пользователь вводит данные а не только клацает элементы навигационные?
                                                  А ещё учесть варианты раскладок, большие, маленькие буквы и зачки — тоесть отлсеживать нажатие кнопок меняющих раскладку, а угадывание попадания в такую кнопку на qwerty, где кнопок раза в 3-4 больше, будет куда меньше, тоесть надо и брать вариант и с переключением режима и без.
                                                  После таких данных брутфорсу всё равно придётся пордяком поработать.
                                                  Похоже что идея больше из области фантастики, чем реальности.
                                                    +2
                                                    В качестве примера побочного канала утечки информации можно рассмотреть канал ПЭМИН-канал побочных электромагнитных излучений и наводок. Его суть в том, что все электронные устройства создают при функционировании побочные электромагнитные поля, которые замечательно воспринимаются чувствительной приемной аппаратурой на приличных расстояниях. В этом случае злоумышленник довольно легко может ее восстановить. Руководящие документы ФСТЭК четко требуют перекрытия канала ПЭМИН при обработке государственной, коммерческой тайн, ПД и пр.
                                                    Однако, чисто теоретически, и с помощью этого канала можно перехватить нажатия клавиш.
                                                    А про прямое чтение с видеотракта я вообще молчу.
                                                    А в целом статья интересная и полезная, да.
                                                    Спасибо автору.
                                                      +3
                                                      Канал ПЭМИН отличная штука, но для его использования нужна дополнительная аппаратура, часто очень сложная. Здесь использован встроенный гироскоп, вся обработка данных программная, а внедрить программную закладку на порядок легче, чем аппаратный жучок.
                                                      А спасибо не мне, а тем двум китайцам, которые до такого додумались. Это перевод.
                                                      +1
                                                      > Буду благодарен тому, кто поможет найти ссылки.

                                                      Лампочки, п 3.2.2 из www.ma.rhul.ac.uk/static/techrep/2011/RHUL-MA-2011-07.pdf
                                                      п 4.2.1 о звуке с клавиатур.

                                                      Микрофон: гуглить Keyboard Acoustic Emanations, часть работ есть на Keyboard-emanations.org

                                                      Модификация с лазерным микрофоном (работает сквозь стекло) www.schneier.com/blog/archives/2009/03/sniffing_keyboa.html

                                                        +1
                                                        Огромное спасибо! Добавил в статью.
                                                        Сегодня утром вспомнил, что впервые встретил упоминания об этих атаках у Бёрда Киви (книга «Гигабайты власти»).
                                                        0
                                                        Если вместе с данными акселерометра получить хеш пароля, то в теории длительность его подбора брутфорсом можно сильно сократить.

                                                        Обычный брутфорс (без словаря) проводится в предположении, что символы в пароле равновероятны. Продвинутый — может учитывать статистику появления букв в словах языка (если предположить, что пароль «произносимый»).

                                                        А теперь — ещё стали доступны предположения о символах пароля + вероятностные оценки. То есть ненамного, но можно сократить количество перебираемых вариантов для каждого символа.

                                                        А если учесть положение предполагаемых символов на цифровой клавиатуре — некоторые расположены ближе к краю и у них меньше «соседей», с которыми их можно «спутать» при анализе — количество вариантов для перебора ещё больше сокращается.
                                                          0
                                                          Swype уже будет нереально опознать, да и не найдет эта технология широкого применения из-за большой погрешности.
                                                          А так уязвимостей найти можно много. Например самая распространенная уязвимость-аппарат не привязан к определенному человеку, любой получивший доступ к аппарату может узнать много данных (если не стоят пароли, чего у большинства нет)

                                                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                          Самое читаемое