lunes, enero 18, 2021

Cómo "Klingonizar" un iPhone y tenerlo troyanizado con Control de Voz (3 de 6)

En la parte anterior de este artículo vimos cuáles eran las utilidades del sistema que podríamos utilizar para hacer scripts. Ahora hay que ver cómo se puede hacer una batería de scripts que puedan construir la base de comandos para controlar el terminal. Para ello, tenemos que automatizar algunas opciones, como son, como crear scripts de exfiltración con los Accesos Directos por Voz usando Grabación de Comandos de Voz o con los Gestos Personalizados utilizando Plantillas de Programación y el pseudolenguaje de codificación VOWEL que definimos para esta prueba de concepto. 

Figura 21: Cómo "Klingonizar" un iPhone y tenerlo troyanizado con Control de Voz (3 de 6)

Este último tenía un reto bastante complejo en su uso, ya que permite hacer cualquier cosa sobre la pantalla que hagas con tus dedos en el uso normal del dispositivo iPhone, pero el número de acciones por gesto es muy pequeño y, además, tienes que grabarlos a ciegas. Para el ejemplo de teclear el PIN de desbloqueo se puede hacer más o menos bien, y más o menos rápidamente, pero es un autentico reto si se quiere hacer, por ejemplo, para algo más complicado como escribir en el teclado una palabra - aunque sea un Atajo de Teclado - para poner una dirección de correo electrónico. Vamos a ver qué opciones tenemos para codificar los comandos y cuándo es mejor usar una u otra.

Grabación de Comandos de Voz

Lo primero que vamos a hacer es centrarnos en los Accesos Directos por voz. Como hemos visto en la parte anterior, se pueden hacer muchas cosas ellos. Desde mostrar una cuadrícula y pulsar en un icono con la voz, hasta abrir una app sin saber dónde se encuentra esta. Por ello van a ser muy útiles en su uso. Pensad que queremos abrir WhatsApp y no sabemos donde está en la pantalla del iPhone del objetivo. Pues ahí, lo mejor es utilizar un Acceso Directo de los comandos por voz que vienen en el sistema.

Figura 22: Accesos Directos disponibles por defecto en iOS

Para poder enlazar varios comandos por voz, se puede utilizar la opción de grabar el script con una grabación de comandos de voz. Para hacerlo, tenemos que tener activado el Control de Voz en el terminal iPhone (sale el icono del micrófono azul), y luego decir el comando de voz "Start Recording Commands". En ese momento se pondrá el icono en color azul y podremos hacer acciones en el terminal iPhone con la voz, que se irán grabando. Aquí tenemos un ejemplo.

Figura 23: Grabación de Comandos por Voz

Es importante entender que solo se pueden hacer cosas con la voz. Si tocas la pantalla con el dedo para hacer un Scroll-up o un "Swipe up", o cualquier otro gesto que no esté preparado para voz, no será grabado. Solo se graban comandos con la voz. Además, verás que controlar la zona de pantalla tendrás que ir haciendo uso de "Show Numbers", "Show Grid" o "Show Names" continuamente.

Figura 24: Show Numbers te numera dónde puedes hacer "tap"

Al principio es un poco engorroso, pero si te acostumbras a saber que debes utilizar "Show grid" cuando sean interfaces grandes y con pocos sitios donde tocar, a usar "Show names" en la zona de apps y "Show numbers" cuando quieras seleccionar un control dentro de una app cuando haya muchos o sean pequeños. Irás haciéndote con él. Además, teclear no es necesario ya que puedes usar la voz para decir textos cuando estés en cuadro de entrada de texto e incluso puedes decir direcciones de e-mail con la voz y deletreando "c-h-e-m-a-at-gmail-dot-com" en inglés.

Figura 25: Cuando grabes el comando de voz, se le pone un nombre para invocarlo

Cuando terminemos de hacer todas las acciones, bastará con decir "Stop Recording Commands" y poner como palabra para invocar ese gesto uno de nuestros queridos nombres en Klingon, para que quede ya programado ese script dentro de la lista de comandos disponibles a utilizar. Así, cuando hayas definido una acción, la debes codificar como la lista de acciones que debe utilizarse, poniendo algo como:

Command (Comando-Klingon)
- Start Recording Command
- Open WhatsApp
- Show Grip
- Seven
- Show Numbers
- Eighteen
- Show Numbers
- Thirteen
- m-y-e-m-a-i-l-at-myserver-dot-com
- ...
- Stop Recording Command

De esa forma dejarás grabado un script en Klingon grabado con comandos de voz que podrás utilizar en el resto de acciones de exfiltración que vamos a crear. 

Plantillas de Programación de Gestos Personalizados

Los gestos personalizados nos van a permitir hacer acciones que no están disponibles en los Accesos Directos ni en los scripts disponibles de los Atajos (Shortcuts). Son para cosas puntuales, pero al igual que con la Grabación de Comandos de Voz, vamos a poder crear un sistema para codificar acciones con los Gestos Personalizados, haciéndolo a ciegas, que es como se hace la grabación de estos gestos.

Cuando comenzamos con este trabajo, si queríamos poder "programar" scripts con Gestos Personalizados a ciegas, de manera eficiente, necesitábamos resolver este problema, así que construimos una serie de Plantillas de Programación de gestos en papel cebolla para que pudiéramos saber exactamente en qué lugar tocábamos, y cuál era el gesto que había que realizar, y la solución fue bastante sencilla. Necesitábamos crear un sistema de coordenadas para la pantalla de un terminal iPhone al que referirnos. Es decir, como los nombres de las casillas en un tablero de ajedrez al que referirnos.

Figura 26: Construyendo las Plantillas de Programación de iPhone

Estas plantillas nos permitían ir anotando en un cuaderno los comandos, como si fuera la lista de movimientos de una partida de ajedrez, que nos ayudarían después, a la hora de la creación de los Gestos Personalizados, a hacerlo con eficacia sobre una pantalla ciega en la que podríamos replicar los movimientos con exactitud, usando la Plantilla de Programación de gestos.

Figura 27: Usando las Plantillas de Programación de Gestos
para codificar los movimientos y acciones sobre un iPhone

Tras usarlas un poco, nos dimos cuenta rápidamente que la granularidad que necesitábamos para hacer determinadas acciones, como por ejemplo pulsar la letra "a" del teclado, no era la misma que para abrir una aplicación haciendo clic en el icono de la app en la pantalla principal, así que nos dimos cuenta de que la mejor solución era crear plantillas personalizadas para determinadas apps o necesidades, como esta que tenéis aquí que es para codificar posiciones en el teclado.

Con estas pantallas, codificar los gestos que hay que grabar en Gestos Personalizados es tan sencillo como ir apuntando el punto de aplicación del gesto, el gesto en sí, y el punto final del gesto, si fuera necesario. Tienes un mapa, al estilo de la codificación de las jugadas de una partida de ajedrez, para anotar los movimientos.

Figura 28: Uso de diferentes Plantillas de Programación

Por supuesto, al igual que se sucede a los diseñadores de experiencias de usuario en las pantallas de un terminal iPhone, los modelos y versiones del sistema operativo hacen que la codificación de las acciones sea distinta, y es necesario realizar Pantallas de Programación de gestos adaptadas a las características detalladas de cada terminal iPhone y de cada versión iOS con cambios relevantes. 

Con todo estos elementos, es decir, los Atajos de Teclado, los Accesos Directos por Voz, la Grabación de comandos de Voz, los Gestos Personalizados y los Atajos de Workflow, ya tenemos suficientes elementos para programar scripts de exfiltración de datos  en el terminal iPhone que necesite una R.A.T. (Remote Administration Tool) para ser invocada por uno o varios Comandos de Voz en Klingon. Es decir, vamos a poder dejar totalmente troyanizado un iPhone para controlarlo usando el Klingon. Por supuesto, siempre en los escenarios que describimos en la primera parte del artículo.

VOWEL (Voice Orders for Weaponizing Exfiltration Language)

Para poder dejar codificados los scripts de control remoto para la exfiltración de datos - que fue el cometido inicial de nuestro trabajo -, comenzamos anotar lo que había que ir haciendo en una lista de acciones donde definimos qué hay que grabar en el terminal. Esa lista de acciones está basada en el uso de unas primitivas de un pseudolenguaje de programación que llamamos VOWEL

Es decir,  una lista de actividades que se deben hacer para conseguir que un script concreto de control remote quede activado y disponible para su uso en el terminal que se quiere configurar. Nuestro propio lenguaje. Las primitivas que utilizamos para la lista de scripts que creamos fueron las siguientes, que son las vamos a ver en cada uno de los ejemplos.
  • Command  (cadena): Es el comando de voz que se ha definido para ejecutar esta acción. Aquí es donde utilizaremos, para los scripts finales, el lenguaje Klingon (que deberá estar instalado en terminal como se explicó en la primera parte de este artículo). Es igual que en el caso anterior donde utilizamos Grabación de Comandos de Voz basada en AccesosDirectos, pero con otra lista de acciones automáticas.
  • Template(X): Para Gestos Personalizados será la plantilla, de las que tenemos creadas, que hemos utilizado. Esta podrá ser la de la Pantalla Principal, la Pantalla de Teclado, la Pantalla de una App concreta, etcétera.
  • KeyboardShortcut ("xy","cadena"): Para Atajos de Teclado indica qué atajo debe ser creado en el sistema. "xy" serán las teclas que se pulsarán, y la "cadena" la palabra, URL, dirección de e-mail etcétera, por que será sustituida.
  • Tap (Secuencia de posiciones): Lista de posiciones donde se deberá hacer Tap - inicialmente pusimos Touch pero lo hemos cambiado a Tap - en la plantilla para grabar una secuencia de clics. Hay que tener en cuenta que entre cada Tap o Clic se debe dejar un tempo razonable para que de tiempo a que el terminal iPhone o la App respondan a ello. 
No utilizamos ninguna codificación especial para nuestros scripts, pero hay que tenerlo en cuenta a la hora de hacer la anotación. Nosotros dejábamos 1 segundo entre cada Tap, pero si hubiera que dejar más se podría dejar notado como:  
 
Tap (A1, B2[2], C1, A1[2],C3)  
 
donde estaríamos indicando que después de hacer Tap en la posición B2 de la plantilla que estamos utilizando hay que dejar una pausa de 2 segundos, y después de la posición A1 hay que dejar 3 segundos.
  • Scroll(Posición,Forma,Fuerza): En este caso identificamos el punto de inicio del gesto en la plantilla que se está utilizando, el movimiento de scroll a realizar, que puede ser algo como Up, Down, Upright, Upleft, DownRight, Downleft, Right, Left, etcétera, y la Fuerza es la cantidad de cuadrículas en la plantilla a desplazarse. 
Por supuesto, existen situaciones y gestos concretos en los que la codificación con este comando no es lo suficientemente ajustada, pero para las primeras versiones no sirvió sin necesidad de realizar primitivas más complejas.
  • Atajos(Script de Shortcut- workflow -): La última primitiva sería el uso de un automatismo hecho por un script de "Atajos" o "Shorcuts" que es como ha renombrado Apple al sistema de Workflow que viene en el sistema. No entramos a definir los Workflow, ya que ellos tiene su propia forma de codificar acciones en scripts que se puede compartir entre distintos terminales. En nuestro trabajo no hicimos uso de ningún script de Atajos para los ejemplos que vamos a ver en este artículo.
Lo bueno de esto es que, la codificación de un Atajo de Teclado también se puede hacer con una Grabación de Comandos de Voz, y una vez que tengamos un Gesto Personalizado grabado con sus Plantillas de Programación de gestos también podremos invocarlo con un comando de voz. Así que una vez que tengamos todos los elementos podremos hacer un script de acciones enorme que sea invocado con un único Comando Klingon hecho con Grabación de Comandos de Voz. Pero vamos a ver las pruebas que hicimos en la siguiente parte de este artículo.

Saludos Malignos!

*********************************************************************
*********************************************************************

Autor:

No hay comentarios:

Entrada destacada

10 maneras de sacarle el jugo a tu cuenta de @MyPublicInbox si eres un Perfil Público

Cuando doy una charla a algún amigo, conocido, o a un grupo de personas que quieren conocer MyPublicInbox , siempre se acaban sorprendiendo ...

Entradas populares