La historia de cómo no necesita autorización, especialmente en áreas importantes para la vida y la propiedad, como, por ejemplo, administrar un sistema de alarma de seguridad a través de la aplicación desde el teléfono.

Breve introducción
Todo comenzó con el hecho de que construí una casa, y una casa sin alarma antirrobo ciertamente puede existir en nuestras realidades, pero nada más o menos valioso puede quedar allí (casos tristes de vecinos lo confirman). Mientras terminaba por dentro y por fuera, configurar y desarmar la llave no causó ningún inconveniente.
La casa tiene un garaje, las puertas se abren desde el control remoto y, en consecuencia, el automóvil se coloca allí. Si la casa está bajo vigilancia, la apertura desde el control remoto activa una "alarma" en la puerta y después de 2-3 minutos la llegada de personas serias. Para evitar esto, primero debe quitar la protección (abra el vestíbulo, coloque la llave, cierre el vestíbulo, vuelva a entrar en el automóvil) y luego abra la puerta. Y de alguna manera este procedimiento es un poco molesto, especialmente en invierno, y en general toda la "magia" se pierde de alguna manera.
Por supuesto, puedes asegurarte de que la apertura de la puerta elimina la alarma, pero aún no he llegado a este punto.
Pero descubrí que nuestra agencia de seguridad tiene una aplicación milagrosa "Phoenix Mobile Keyboard". La aplicación no son solo ellos, sino que funcionan con ella. Con él, puede controlar la alarma desde el teléfono, lo que más o menos devuelve la alegría de usar todo esto.
Y ahora la historia misma
Para conectar la administración de seguridad desde la aplicación, debe ir a la oficina de la agencia de seguridad, encontrar el ingeniero que necesita, pagar 400 rublos por la "configuración" en el cajero y se le dará una cuenta que se dirige a la configuración en el teléfono y listo, puede dirigir la seguridad como desee, recibir notificaciones push y no saber pena.
Todo estaría bien, pero cuando se registra, se le da un inicio de sesión en forma de tres letras, por ejemplo, abb (iniciales), y la contraseña está formada por los últimos cuatro dígitos del número de teléfono (como dijo el ingeniero, para que no se olviden), es decir, por ejemplo, 0808. Un poco desconcertado por lo que escuchó, preguntaron si la contraseña se puede configurar de manera diferente, dijeron que es posible, pero solo números. Bueno, ok, me puse la contraseña correcta y salí a probar cómo funciona todo.

Mientras tanto, una idea había madurado en mi cabeza, pero debería intentar ...
Tomamos un iPhone, lo conectamos a la amapola, rvictl -s iPhone_UDID
: rvictl -s iPhone_UDID
, nos aferramos a la nueva interfaz a través de Wireshark y vemos cómo funciona nuestra aplicación y qué envía. Puedes llevar otros dispositivos / herramientas, pero yo tengo uno.

Funciona, resulta que, a través del protocolo wamp, este es esencialmente el mismo socket web. Naturalmente, nada está encriptado y puede ver exactamente cómo se envían las solicitudes y realmente repetirlas.
Ahora intentamos reproducir las solicitudes recibidas. Todo esto para la velocidad de las pruebas, puede poner la extensión para el tipo de Chrome "Web Socket Client" e intentarlo allí.

Después de asegurarnos de que todo funciona exactamente como se esperaba, escribimos rápidamente el cliente, por ejemplo, en el nodo.
Observamos que la API responde con diferentes mensajes cuando no se encuentra al usuario y la contraseña es incorrecta. Esto acelerará el proceso.
Nuestro cliente será bastante tonto, pero igualmente efectivo. El cliente enumera todos los inicios de sesión que constan de 3 letras. Si el nombre de usuario existe, comienza a enumerar la contraseña; de lo contrario, procedemos a la siguiente. La contraseña se ordena en el rango de 0000 a 9999.
Comenzamos todo esto y esperamos. Los inicios de sesión se realizaron con bastante rapidez (10 minutos), resultaron unas 150 piezas (el servicio no se usa tanto). La contraseña para cada inicio de sesión es en aproximadamente 8 minutos. No hay restricciones para la verificación en el IPA. Y puedes ahuecar multiproceso.
Las contraseñas fueron seleccionadas en el 100% de los casos. Al seleccionar con éxito la contraseña, la API escupe información como: nombre del propietario, dirección (puede haber muchos objetos), algunos tokens (aparentemente para enviar notificaciones), id de sesión, etc.
Después de iniciar sesión, puede desarmar todo el objeto. Los objetos mismos se encontraron bastante distantes de la ciudad. Si esta información cayera en manos de los "tipos malos", entonces la autopsia de un objeto protegido habría pasado sin ningún problema, y entonces habría sido posible armar de manera segura y nadie se habría dado cuenta.
Al darme cuenta de que yo mismo soy cliente de esta oficina, me sentí un poco incómodo.
Una cosa es buena, aparentemente la compañía todavía tiene algún tipo de monitoreo, o puede haber sido notado accidentalmente, pero después de un tiempo la aplicación dejó de aceptar contraseñas y se ofreció a contactar a la oficina.
Como resultado, todos cambiaron sus nombres de usuario y crearon contraseñas normales. Sin embargo, el protocolo, como no estaba encriptado, seguía siendo el mismo, pero al menos algo.
¿Por qué es todo esto? Quizás alguien después de esto quiera hacer que su sistema sea un poco más seguro, y alguien que use un servicio similar con contraseñas similares lo mirará desde el otro lado y pedirá acción. Con acciones tan simples, el nivel de seguridad aumentará ligeramente.
Específicamente, no doy nombres aquí y, en la medida de lo posible, despersonalicé todos los datos, de modo que el que se reconoce saca conclusiones :)
PD: Este artículo es solo para fines informativos, los problemas descritos aquí en el momento de la publicación ya no son relevantes: la empresa ha tomado medidas.