"Monitoreo social". Puntuación 1: 0 a nuestro favor

Introducción


La aplicación salió → vio un horror silencioso → comenzó a escribir comentarios negativos → ordenados por los estantes → la aplicación fue eliminada (enviada para su revisión).

Hola a todos, en este artículo, cuando todo haya pasado, quiero contarles sobre las dos etapas clave de lo anterior.

Qué tipo de aplicación se puede leer aquí .
Y sobre las excusas y el envío de revisión aquí .

Debajo del corte, veremos con usted lo que vimos al comienzo del análisis de la aplicación y repasaremos todos los puntos interesantes del código. Disfrutaremos de la aplicación con fugas y no aceptaremos "mira cuánto tiempo lo hicimos".

Antecedentes


Todo comenzó para mí en el canal de Telegram " IT and COPM ". No vi de inmediato una publicación con un enlace a la aplicación en Play Market y las apk a continuación. Solo después de aproximadamente 30 minutos, desde la cantidad de publicaciones en este canal, decidí leer. En ese momento, los chicos ya habían descompilado la aplicación y observaban activamente dónde se enviaban los datos. Sacaron algunos puntos finales, hosts, un token, comenzaron a publicar capturas de pantalla de fragmentos de código. Habiendo aplicado apk, le pidieron a alguien que publicara el código descompilado en GitHub , después de una hora y media se publicó . Entonces me conecté ...

Parte principal


Soporte


Al principio, quiero decir que dentro de la aplicación había un token para trabajar con la API del servicio de reconocimiento facial Identix.one . Estos chicos trabajan para que al principio necesiten cargar la base de datos de usuarios con fotos y datos, y solo entonces pueden enviar fotos para su reconocimiento.

El token estaba en la aplicación, trabajando con la API de este servicio a través del cliente, y no con su servidor. Por lo tanto, cualquier usuario, después de haber extraído un token, podría comenzar a subir fotos de ciudadanos de la Federación de Rusia y recibir información sobre ellos. Suena maravilloso.

Después de mirar las tarifas de este servicio, me di cuenta de que esto es generalmente para cámaras de CCTV. Por cada cámara tiene que pagar una buena cantidad y se sorprendió de cuánto tuvieron que pagar los desarrolladores de la aplicación.

Al entrar en la sección de documentación de la API , me pareció interesante obtener una base de usuarios cargada y otras cosas. Así que decidí cumplir con la solicitud y verificar el token. Afortunadamente o desafortunadamente, el token fue deshabilitado, lo que informé de inmediato al propietario del canal de TI y COPM a través de Twitter .

Comencé mi estudio con una espalda, porque estaba planeando encontrar algo interesante allí ( sql inj , por ejemplo). Ya teníamos hosts y un enlace para ingresar al panel de administración. En el área de administración y se fue. Mirando las consultas de inmediato, quedó claro que este es algún tipo de Marco de Atmósfera. Cuando vi el culo salvaje en las solicitudes, cómo marca qué botón se presionó, qué bandera en el formulario se configuró, me deprimí. No quería profundizar en esto e hice lo máximo que hice: conduje "Atmosphere Framework CVE" a Google. Mirando rápidamente los titulares, no vi nada interesante excepto XSS y fui más allá. Y luego fui a otros puntos finales que conocemos.

Estos puntos finales fueron bolígrafos para comenzar y finalizar su trabajo. Lo cual caracterizaría el rango de tiempo que pasa en el trabajo. Ya había un código. Abrí el proyecto, limpié el lugar correcto y comencé a estudiar los parámetros. Entre ellos estaban deviceEUI , idxid , latitud y longitud. Si con los dos últimos queda inmediatamente claro, entonces con el primero - no. Habiendo gastado N el número de minutos para completar con éxito la solicitud, me decidí por el acceso denegado .

Luego, para comprender el objeto de estudio, decidí descargar la aplicación yo mismo. Lo descargué, pero ya no podía iniciar sesión ... En ese momento habían puesto la copia de seguridad (pero aún no lo sabía).

Después de abrir el código del proyecto no en GitHub , sino en ideas, comencé a buscar nuevos puntos finales. ¡Encontró! Nombre apropiado: / api / covid / Device ...

Empecé a investigar ya en estos corrales. Durante mucho tiempo no entendí cómo va la autorización, dónde está el encabezado con un token u otra cosa. Y luego caí en la cuenta ... ¡Se fue! Después de asegurarme de esto, después de analizar el procesamiento y la generación de solicitudes, llegué a una conclusión en el backend y lo envié nuevamente a Twitter .

Conclusión sobre la parte del backend : el registro se realiza enviando información sobre su dispositivo (teléfono). Esto incluye la dirección, número de teléfono, nombre, etc. Inmediatamente después del registro, requieren una foto suya y la suben a su perfil. De hecho, para indicar de quién es esta foto, se indica un parámetro adicional en la solicitud: IMEI . Está ubicado en el campo deviceId del modelo de dispositivoque enviamos en el primer paso de registro. No hay validación de que IMEI te pertenece. Vale la pena enviar la de otra persona, y usted completa con éxito la solicitud, supuestamente desde otro dispositivo. Cabe señalar que entre los puntos finales hay / api / covid / Device / password , sin embargo, el procesamiento de la respuesta es el siguiente:



después de registrar el dispositivo, la API devuelve authCode , pero, desafortunadamente, este código se almacena en el campo de objeto y se encuentra allí, acumulando polvo. No participa en la formación de otras solicitudes.

Por lo tanto, sin tener autenticación, cualquier usuario conoce IMEIuna persona (o recogerlo / ordenarlo) podría enviar una ubicación geográfica falsa, cargar una foto, enviar el estado sobre el comienzo de la jornada laboral, etc.

Me encantaría jugar con una implementación tan divertida, pero, por desgracia, todo estaba apagado.

Desde ese momento, comencé a encontrarme completamente con el código y describir lo que veo en mi canal de Telegram . Resultó una completa tontería sin ninguna conexión entre los párrafos, pero después de esta publicación encontré la fuerza (ya era de 2 a 3 noches) para reescribirlo y hacerlo legible.

Análisis de aplicaciones


Vale la pena señalar de inmediato que la aplicación en este momento ya no funcionaba. Por lo tanto, no tenía idea de que podría ser visual. ¡Estudió todo a ciegas y por código, que estaba lejos de todo! Todos sabemos qué es la descompilación, pero lo que sucedió fue suficiente para sacar ciertas conclusiones.

La aplicación almacena información sobre su dispositivo, nombre, número de teléfono, dirección. Hay campos oscuros, como los comentarios . Y hay otros interesantes: un médico.

Para identificar caras, se utiliza el servicio identix (el mismo parámetro de la parte posterior). Le permite devolver la edad, el sexo y otra información de la foto cargada. Hay un identificador único de una persona que se utiliza dentro de la aplicación.

Se utilizan dos tipos de dispositivos para la navegación: bluetooth, wifi. Ambos tienen un nombre y RSSI (calidad de señal, hablando de la distancia a un punto).

Su geolocalización se consigue gracias al módulo Google y GPS .

Entre los diversos tipos de información almacenada hay una ubicación. Sorprendentemente, tiene una gran cantidad de campos. Incluyendo el nivel de batería, el número de pasos (a pesar del modelo separado para esto) y más.

En la configuración, puede establecer el intervalo de telemetría. Tanto de recogida como de envío. No estoy seguro acerca de la capacidad de cambiar estos parámetros.

Hay tres tipos diferentes de identificadores únicos:

  • Dispositivos IMEI.
  • ID del dispositivo (no estudiado).
  • Dirección MAC de WiFi.

Por lo tanto, lo que escribí anteriormente sobre la transferencia y selección de IMEI es una simplificación , para comprender. Este es en realidad uno de los tres identificadores.

Su ID depende de la versión del SDK que tenga . En pocas palabras, ¿es posible obtener uno u otro tipo de identificador único? Los propios desarrolladores de aplicaciones están confundidos en ellos y no pueden converger en un nombre.

El único lugar donde puse el código en el artículo.

if (Build.VERSION.SDK_INT >= 29) {
    return getMac(context);
}
return getImei(context);

Y dentro de getImei, aquí hay un if:

if (Build.VERSION.SDK_INT >= 26) {
    str = telephonyManager.getImei();
} else {
    str = telephonyManager.getDeviceId();
}

La aplicación también puede obtener un número de tarjeta SIM, pero solo en casos difíciles. Hay una oportunidad - voluntad.

Se genera un código QR con la ID de texto , que puede ser de tres tipos. Este tema, así como con el servicio de reconocimiento facial, ha sido debatido por cualquiera. No me concentro .

Una característica interesante de la aplicación son las notificaciones push en el dispositivo. Los desarrolladores pueden enviar comandos de forma remota y usted los ejecutará. Uno de los equipos se llama OPEN_CAMERA . Otro, SERVER_ADDRESS_KEY , aquí, muy probablemente, por analogía con Telegram . Cuando se bloqueó, envió nuevas direcciones IP a todos los usuariosdirecciones y seguimos usando el messenger. Además, pueden establecer de forma remota el intervalo para enviar y recopilar telemetría. Aquí sobre posibles notificaciones push .

Por supuesto, aún puede hablar sobre el avatar, cómo se puede rotar, cómo lo guardan localmente, cómo lo normalizan. Puede hablar sobre el deseo de realizar una actualización automática de la aplicación, pero no tuvo tiempo, sobre la capacidad de ir al marcador por número, mantener una lista de contactos (la libreta de direcciones más primitiva es el nombre y el número), sobre el hecho de que interactúan con la cantidad de puntos de archivo activos alrededor Pero todo está aburrido.

Conclusión


Sabes, no diré qué tan malos son, no diré qué tan buenos son. Todos llegarán a una conclusión por sí mismos. Defectos críticos, vulnerabilidades y cosas de espionaje que te he esbozado. Solo puedo decir que, a pesar de los plazos, en ningún caso se debe permitir el desarrollo de una aplicación obviamente vulnerable.

No puedo dejar de notar la cohesión de la gente. Todos comenzaron a compartir sus hallazgos, a ser activos y a quién no podía hacer esto: poner 1 en las revisiones. Grabé 4207 unidades lo más posible y la ausencia (en mi opinión) de otras clasificaciones.

El mismo mensaje delirante con borradores y la conclusión original sobre el respaldo están en mi canal de Telegram , y se encuentra entre los enlaces del perfil.

Lo último que quiero mostrarle es que esta es una función de "ilegal" obtener la dirección MAC de su código y lo mismo en stackoverflow (gracias ntoskrnl):

Y como siempre, ¡gracias por leer hasta aquí!

PD: Cualquiera puede cometer un error y no soy la excepción. Tal vez algo estaba mal, tal vez no entendía del todo la implementación. Ahora vendrán y dirán que durante el registro se recuerda la IP y es imposible ejecutar solicitudes a otra persona, ¿eh? Y responderé que no tiene sentido y luego el propietario perderá el acceso cuando se vuelva a conectar a la red móvil ... En general, ¡entiendes, los comentarios están abiertos!

All Articles