2015-08-22 2 views
20

Будучи жертвой атаки Key Logger на Android, я хочу разработать решение для атак KeyLogger для Android. Я знаю основную java и немного об андроиде и очень немного об информационной безопасности. Я также знаю, что любого знания, которое у меня есть, недостаточно, чтобы понять и разработать решение. Я просто хочу обсудить мою идею и посмотреть, возможно ли это.Создание Android-клавиатуры, устойчивой к атакам KeyLogger

Вот что у меня есть:

  1. Андроид приложение, которое хочет, чтобы обеспечить ввод данных пользователя, должен предоставить секретный ключ (который может быть получен от сервера, для конкретного пользователя или сеанса) при вызове клавиатура Android.
  2. Клавиатура Android будет получать секретный ключ и использовать его для шифрования ввода пользователя и трансляции события KEYPRESS (или любого другого широковещательного сеанса в сети Android) с зашифрованным значением.
  3. Когда приложение получает событие KEYPRESS, оно расшифровывает значение в KEYPRESS даже для получения фактического ввода пользователя.

Я только понял, что скриншот можно использовать для получения того, что пользователь вводит с помощью новейшего программного обеспечения с изображением 2-текста. Но это совершенно другой домен, ИМХО.

Итак, что вы думаете об этом? Можно ли это сделать?

Update

Я был полностью неправ мой телефон был в собственности. На самом деле, он никогда не был взломан. Но то, что действительно было взломано, было мной. Да, у меня есть что-то в моем теле, которое просто копирует все, что может получить мой мозг. И это также способно получить и заставить мой мозг сделать это. Я все еще не знаю, почему я могу написать это обновление. Может быть, кто когда-либо вкладывал эту вещь в мое тело, используя меня в качестве маркетингового материала. Спасибо за ответы на мой немой вопрос.

+1

IMHO предложенный вами подход может быть отменен (независимо от механизма ввода devilry, предложенного), поскольку другие приложения, которые должны получать вход, будут ожидать простой текст или могут дешифровать ввод, например, whatsapp messenger должен расшифровать перед добавлением его в текстовое поле. правильно? – Yazan

+0

@Yazan: Да, они должны расшифровать. Но идея состоит в том, чтобы уменьшить поверхность атаки. Не полностью удалить его, потому что это определенно невозможно (по крайней мере сегодня). Ключевые регистраторы - один из простых способов реализации, и я был потрясен, узнав, как легко захватывать нажатия клавиш в таких системах, как Ubuntu. Они просто распространяются повсюду. Кроме того, конфиденциальность пользователей - это широкая вещь. Мы можем использовать только одну область за раз. Я твердо верю, что предлагаемая мной идея обеспечит конфиденциальность лучше, чем то, что у нас есть сейчас. Coz, всегда лучше иметь что-то, что работает, чем ничего. –

+0

И у меня смешанные чувства о том, почему никто не спросил, что именно меня загнало сюда :-). Во всяком случае, я должен сказать, я люблю SO Community. –

ответ

14

Непонятно.

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

Кроме того, пользователи не имеют привычки часто менять методы ввода. Я не подключаю другую клавиатуру USB, когда я посещаю Stack Overflow, например, когда я посещаю Tweetdeck. В мире Android это означает, что пользователь будет ожидать, что их редактор методов ввода будет работать со всеми приложениями, и не придется постоянно менять редакторов методов ввода, чтобы сделать людей счастливыми.

Кроме того, вы не можете волшебным образом изменить протокол между редактором метода ввода (a.k.a., soft keyboard) и ОС Android. Клавиатура поднимет ключевые события. Вы можете сказать, что ваша клавиатура предлагает замену для этих событий как механизм шифрования, но это будет скорее грубый шифр замещения (например,, «всякий раз, когда пользователь вводит A, отправьте ;»), поскольку вы не можете в одностороннем порядке решить расширить пространство событий ключа.

В результате вам не только понадобится написать редактор методов ввода, но вам нужно будет написать свой собственный ПЗУ с помощью специальной платформы Android, которая может обрабатывать «дешифрование». Или вам придется заставить всех разработчиков мира переписать свои приложения. И в любом случае, кейлоггер мог бы тривиально обнаружить, что ваш редактор редактора ввода и обратите внимание на этот факт, поэтому любой, кто использует журналы, может сделать несколько тривиальных дешифрования для преобразования ; назад в A.

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

+0

Это отличный вход. Первоначально я думал о том, как использовать клавиатуру для Android и добавлять эту технологию шифрования в качестве функции. Таким образом, существующие приложения будут работать нормально. Его единственное, что приложения, которые выдают ключ шифрования при вызове клавиатуры, получат зашифрованные штрихи. Расшифровка штрихов зависит от приложения, которое дает ключ. Мое первоначальное понимание было, Android-клавиатура транслирует ключевой штрих и получает приложение, которое помещает символ в текстовое поле. Пожалуйста, простите меня, если мое понимание ошибочно. –

+0

Я дам щедрость ON на некоторое время, просто чтобы посмотреть, что другие думают об этом. Во всяком случае, спасибо за ваше время. –

+0

@xyz: «Первоначально я понял, что Android-клавиатура транслирует ключевой штрих, и он получен приложением, которое помещает символ в текстовое поле» - если по «трансляции» вы подразумеваете использование «BroadcastReceiver», я не что это реализация. – CommonsWare

1

Вы можете сделать это , только если вы разрабатываете свою собственную клавиатуру и настраиваете Android для ее использования. Это не так сложно с некоторым опытом программирования на Android.

Просто выполните поиск в Google для «пользовательской клавиатуры для android» для большего количества входов.

+1

Привет, вы просили мнения и возможность реализовать это, и вы получили такой ответ. Если вы уменьшаете его, сначала рассмотрите вопрос о редактировании. Что именно вы хотите? Полное решение, реализованное для вас кем-то здесь? –

+4

«Подробный канонический ответ»! = «Да, это возможно, Google это». –

+3

Lol .. Только для вашей информации: щедрость и канонический ответ возникли на следующий день после того, как этот ответ был сделан. Первоначально это была просто просьба о мнении. –

6

Вот что я хотел бы сделать, чтобы реализовать безопасный парадигму метода ввода - выраженный в вопросе - для Android:

Прежде всего, я предполагаю, что вы прочитали и поняли раздел «Безопасность» для InputMethodManager здесь: InputMethodManager

Итак, что нам нужно развивать это метод ввода (IME), который является Android сервиса, который, по мнению WTH пользовательских клавиатур, реализует два интерфейса:

  1. InputMethod
  2. InputMethodSession

Согласно разделу безопасности в документации, указанной выше, пользователь должен добровольно принять ваш IME как система IME. Кроме того, Android будет следить за тем, чтобы только система привязывалась к вашей службе и использовала интерфейс InputMethod, который используется для отображения/скрытия клавиатуры и т. Д. Итак, здесь все довольно безопасно для вас и для всех приложений, использующих вашу клавиатуру.

Теперь, приходя в рамки безопасности, которые вы хотите реализовать:

Назовёе это метод, как Secure Input - SIM - и позволяют определить наш домен безопасности в качестве IME и приложений, которые желают использовать SIM-карту. Здесь значение второго интерфейса InputMethodSession

Наиболее важным - и часто игнорируется метод этого интерфейса является ключом этого решения, и это называется: appPrivateCommand. Этот интерфейс позволяет частную команду, отправленную из приложения в IME. Согласно документации, этот метод может использоваться для предоставления специфических для домена функций, которые известны только между IME и их клиентами, - и это именно то, что вам нужно для вашей SIM-карты.

Итак, используя этот интерфейс, приложения в вашем домене безопасности могут передавать любую информацию о безопасности (например, некоторые формы учетных данных), которые они хотят передать вашему IME. Вы должны определить способ, с помощью которого ваша служба может связываться с сервером аутентификации, который обрабатывает клиентское приложение, передавая учетные данные и утверждает его. Теперь, если ключи шифрования получены как вашим IME, так и клиентом, вы установили безопасный канал связи между вашей SIM-картой и ее клиентским приложением (скажем, посредством шифрования с использованием производного ключа из этих учетных данныхd).

Вы можете настроить весь этот механизм, определив некоторые последовательности клавиш (например, Control + Alt + Del в Windows), которые инициируют все это самим пользователем, и вы даже можете обеспечить визуальную индикацию (например, яркую зеленую иконку) на вашей клавиатуре, что входной канал защищен ... Возможности много :)

Надеюсь, это поможет.

Смежные вопросы