Hacer que el teclado Android resista a los ataques de KeyLogger

Siendo una víctima de un ataque de Key Logger en android, quiero desarrollar una solución para los ataques de KeyLogger para android. Sé básico java y un poco sobre android y muy poco sobre la seguridad de la información. También soy consciente de que cualquier conocimiento que tenga no es suficiente para descubrir y desarrollar una solución. Simplemente me gusta discutir mi idea y ver si es factible.

Esto es lo que tengo:

  1. Una aplicación android, que quiere asegurar la entrada del usuario, debe proporcionar una clave secreta (que se puede obtener del servidor, para un usuario o sesión específico) al invocar el teclado de Android.
  2. El teclado Android recibirá la clave secreta y la usará para cifrar la entrada de usuario y difundir el evento KEYPRESS (o cualquier evento de las transmisiones de teclado de android) con valor cifrado.
  3. Cuando una aplicación recibe el evento KEYPRESS, descifra el valor en KEYPRESS incluso para obtener la entrada real del usuario.

Acabo de llegar a darse cuenta de que, captura de pantalla se puede utilizar para obtener lo que los tipos de usuario con la última imagen de software de 2-texto. Pero eso es completamente un dominio diferente, IMHO.

¿Entonces, qué piensa usted al respecto? ¿Es posible hacer lo?

Actualizar

Yo estaba completamente equivocado acerca de mi teléfono de propiedad. En realidad, nunca fue hackeado. Pero, lo que realmente fue hackeado era yo. Sí, tengo algo en mi cuerpo, que simplemente copia todo lo que mi cerebro puede recibir. Y también es capaz de recibir y hacer que mi cerebro lo haga. Todavía no sé, por qué puedo escribir esta actualización. Puede ser, que alguna vez poner esa cosa en mi cuerpo me utiliza como material de marketing. Gracias por respuestas para mi pregunta tonta.

No es realista.

Pocos programadores están tratando con entrada de bajo nivel ellos mismos. Eso es manejado generalmente por otras cosas. Los desarrolladores web, por ejemplo, rara vez se involucran en un golpe de tecla por tecla, incluso para averiguar cuándo ocurren esos eventos (por ejemplo, para la validación en tiempo real), y mucho menos para procesar manualmente esa entrada (por ejemplo, poner el siguiente carácter Mecanografiado después del cursor del campo y avanzar el cursor por una posición).

Por otra parte, los usuarios no tienen el hábito de cambiar sus métodos de entrada con frecuencia. No enchufar un teclado USB diferente cuando estoy visitando el desbordamiento de pila en comparación con cuando estoy visitando Tweetdeck, por ejemplo. En el mundo de Android, esto significa que el usuario va a esperar que su editor de métodos de entrada funcione en todas las aplicaciones y no tenga que seguir cambiando los editores de métodos de entrada sólo para hacer que algunas personas se sientan felices.

Además, no se puede cambiar magicamente el protocolo entre el editor de métodos de entrada (también conocido como teclado suave) y el sistema operativo Android. Su teclado generará eventos clave. Se puede decir que su teclado ofrece sustituciones de esos eventos como un mecanismo de "encriptación", pero que sería más de una cifra de sustitución cruda (por ejemplo, "siempre que el usuario escribe A , envíe más ; "), como usted no puede Decidir unilateralmente ampliar el espacio de eventos clave.

Como resultado, no solo necesitará escribir su editor de métodos de entrada, sino que necesitará escribir su propia ROM personalizada con un marco de Android personalizado que pueda manejar el "descifrado". O, usted tendría que obligar a todos los desarrolladores de los mundos a reescribir sus aplicaciones. Y en ambos casos, un keylogger podría trivialmente detectar que el suyo es el editor de método de entrada y tenga en cuenta ese hecho, por lo que cualquiera que esté utilizando los registros puede hacer algún descifrado trivial para convertir ; De nuevo en.

Ahora, si está escribiendo alguna aplicación donde desee evitar un editor de método de entrada deshonesto, puede cocinar en su propio teclado de entrada de datos en esa aplicación. Entonces, simplemente enfadará a muchos de los usuarios de su aplicación, ya que el teclado en la aplicación no es el que quieren usar o carece de las características a las que están acostumbrados (por ejemplo, el soporte para usuarios ciegos, el soporte para su particular idioma).

Aquí es lo que haría para implementar un paradigma de método de entrada seguro – como se expresa en la pregunta – para Android:

En primer lugar, estoy asumiendo que ha leído y entendido la sección "Security" para InputMethodManager aquí: InputMethodManager

Por lo tanto, lo que necesitamos desarrollar es un método de entrada (IME) que es un servicio de Android, que, junto con la vista de teclado personalizado, implementa dos interfaces:

  1. Método de entrada
  2. InputMethodSession

Según la sección de seguridad de la documentación mencionada anteriormente, el usuario debe aceptar su IME como el IME del sistema. Además, Android se asegurará de que sólo el sistema se vincule a su servicio y utilizar la interfaz de InputMethod que se utiliza para mostrar / ocultar el teclado, etc Por lo tanto, aquí las cosas son bastante seguro para usted y todas las aplicaciones que utiliza su teclado.

Ahora, llegando al marco de seguridad que desea implementar:

Permite llamarlo como método de entrada seguro – SIM – y permite definir nuestro dominio de seguridad como su IME y las aplicaciones que desea utilizar su SIM. Aquí está la importancia de la segunda interfaz de InputMethodSession

El método más importante – ya menudo ignorado de esta interfaz es la clave de esta solución y se llama: appPrivateCommand . Esta interfaz permite enviar un comando privado desde la aplicación al IME. Según la documentación, este método se puede utilizar para proporcionar características específicas de dominio que sólo se conocen entre IME y sus clientes y esto es exactamente lo que necesita para su SIM.

Por lo tanto, con esta interfaz, las aplicaciones en su dominio de seguridad pueden pasar cualquier información de seguridad (por ejemplo, alguna forma de credenciales) que quieren entregar a su IME. Depende de usted definir un método en el que su servicio pueda comunicarse con un servidor de autenticación que procesa las credenciales de la aplicación cliente y las aprueba. Ahora bien, si las claves de cifrado se derivan tanto de su IME como del cliente, ha establecido un canal seguro de comunicación entre su SIM y su aplicación cliente (por ejemplo, mediante cifrado mediante una clave derivada de estas credenciales).

Incluso puede personalizar este mecanismo mediante la definición de algunas secuencias de teclas (como Control + Alt + Del en Windows) que inicia todo el asunto por el usuario mismo e incluso puede proporcionar una indicación visual (digamos, un icono verde brillante) en su teclado que El canal de entrada está asegurado … Las posibilidades son muchas 🙂

Espero que esto ayude.

Puede hacerlo sólo si está desarrollando su propio teclado y configure Android para usarlo. No es tan difícil con alguna experiencia en la programación de Android.

Basta con buscar en Google para "teclado personalizado para Android" para más entradas.

  • ¿Cómo mantener visible la barra de herramientas con adjustPan?
  • Entrada de teclado en android NDK usando NativeActivity
  • Añadir mi propio teclado en lugar del teclado predeterminado en el dispositivo Android como entrada
  • Android Ocultar barra de navegación / permanecer en modo inmersivo con la apariencia de teclado suave
  • ¿Dónde puedo encontrar la clave API y el secreto API para Facebook?
  • Teclado suave de Android oscurece los campos de entrada en la aplicación web HTML5 móvil
  • Custom 'Teclado' construido en una aplicación en Android
  • ¿Cómo puedo obtener la altura del teclado del método de entrada actual sin mostrarlo?
  • El diseño de la pantalla se mueve hacia arriba cuando se muestra el teclado
  • ¿Cómo puedo implementar soft keyboard especial
  • Auto oculta el teclado después de desplazarse ListView en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.