Cómo hackear un timbre

Grupo de emprendedores hackeó el timbre de su oficina usando Slack, MessageBird y Now

Mollie es una empresa de tecnología dedicada al procesamiento de pagos, actualmente atienden a más de 50 mil clientes y cada día cuentan con más empleados. Cuando la empresa alcanzó los 80 empleados en abril, se trasladaron algunas de sus actividades a un nuevo espacio justo frente a su sede principal.

En lugar de los sistemas tradicionales de timbre, el propietario de Mollie instaló uno que funciona con una tarjeta SIM. Cada vez que un visitante toca el timbre de la empresa, se realiza una llamada a un teléfono celular que se encuentra en algún lugar de la oficina. Luego, cualquiera de los empleados de Mollie puede contestar el teléfono y presionar “3” en el teclado para abrir la puerta de la oficina. Aún así, debido al uso de auriculares con aislamiento de ruido, la mayoría de los empleados nunca escucha el timbre sonar.

Los empleados de Mollie comenzaron a pensar en una alternativa: ¿no sería increíble poder abrir la puerta usando su propio bot de Slack?

Los encargados de la ciberseguridad de Mollie descubrieron que MessageBird, servicio de comunicaciones, acaba de lanzar un nuevo producto: Flow Builder. Esto permitió crear un diagrama de flujo para las llamadas entrantes a través del número de teléfono comprado a través de MessageBird.

Para el equipo de ciberseguridad de Mollie fue bastante fácil establecer un flujo básico para:

  • Saludar a los visitantes con la frase “Bienvenido a Mollie Studios. Por favor, espere mientras encontramos a alguien que le abra la puerta”.
  • Enviar una solicitud HTTP al servidor web de Mollie.

O bien, si el timbre sonaba fuera del horario de oficina:

  • Decir al visitante: “Mollie Studios está cerrado por ahora. Comuníquese con un empleado de Mollie para asuntos urgentes” y finalizar la llamada.

Para lograr esto, el equipo de Mollie configuró un servidor web Node.js básico usando Express que envía un mensaje a un determinado canal de Slack cada vez que se realiza una llamada.

MessageBird envía un par de parámetros adicionales con cada solicitud, incluido un callID. Cuando entra una nueva solicitud, se realiza una llamada API a MessageBird para verificar si esta llamada de voz realmente sucedió y si sucedió en los últimos 2 minutos. También se utilizan los parámetros de consulta destino y fuente de la llamada entrante y se comparan con los datos de MessageBird. Esto aseguraría que sólo las llamadas “reales” al timbre desencadenarán notificaciones de Slack.

Si la llamada es legítima, se genera un token aleatorio que será almacenado en la memoria.

El siguiente paso fue adjuntar botones interactivos a la notificación de Slack. Se agregó la acción de “Abrir puerta” a cada mensaje enviado por el bot. Cada vez que alguien presiona ese botón, Slack realiza una llamada al servidor web Node de Mollie y verifica los tokens que se han pasado a la URL de devolución de llamada con el token que almacenado en la memoria durante el paso anterior.

Para poder abrir la puerta (después de que un empleado de Mollie haya presionado el botón adjunto a la notificación de Slack) se debe solicitar a MessageBird que presione el botón “3” en el teclado del teléfono durante la llamada. Desafortunadamente, esto no es algo que MessageBird puede hacer, ya que todas las comunicaciones se realizan a través de API, por lo que los encargados de ciberseguridad de Mollie tuvieron que encontrar una solución más creativa.

La buena noticia es que MessageBird permite agregar un paso al diagrama de flujo de llamadas que captará un flujo de llamadas dinámico desde una URL externa. Esto puede ser usado para que el timbre interprete que una persona presionó “3” en el teclado del teléfono. Para comprender cómo se puede enviar la señal de “abrir” al timbre usando un flujo de llamada dinámico, es importante conocer los conceptos básicos de la señalización de telecomunicaciones.

En telecomunicaciones, los trabajos de señalización utilizan la tecnología de señalización multifrecuencia de doble tono (DTMF). Eso significa que cuando se presiona un botón en el teclado del teléfono, el sonido enviado tiene una frecuencia alta y una frecuencia baja. En otras palabras, si emite un sonido con una frecuencia alta y baja relacionada, se puede interpretar el número relacionado con esa frecuencia.

Los encargados de ciberseguridad en Mollie grabaron el sonido que su teléfono celular hacía cuando se presionaba el “3” y se almacenó como un archivo .wav estático en su servidor web. Sólo faltaba conseguir que MessageBird reconociera el sonido y la puerta se abriría.

Para lograr esto, se agregaron algunos pasos más al diagrama de flujo de llamadas de MessageBird. Cada vez que MessageBird realiza la llamada, el servidor de Mollie verifica si alguien autorizó abrir la puerta durante los últimos 10 segundos. De no ser así (lo cual significa que nadie presionó el botón “Abrir puerta” en Slack), devolverá un código de respuesta 200 OK. MessageBird esperará durante 1 segundo e intentará recuperar el flujo de llamadas establecido de nuevo.

Si alguien presionó el botón de acción “Abrir puerta” y los tokens de autorización coinciden, se devolverá el siguiente flujo:

mollie1.png

MessageBird reproducirá el mismo sonido que escucharía cuando se presiona “3” en el teclado del teléfono, y el timbre abrirá la puerta.

Despliegue en tiempo real

Una vez que el servidor web estuvo listo, en Mollie tuvieron que implementarlo en alguna parte. Como se trataba de un pequeño proyecto paralelo, los encargados de ciberseguridad de la empresa usaron el servicio de alojamiento de ZEIT llamado Now. Esto les permitiría desplegar el Node.js en segundos, simplemente ejecutando el comando “Now”.

Cada vez que se realiza un cambio, se tienen que ejecutar dos comandos y todo se implementó en la nube en un minuto.

mollie2

En Mollie se trabaja constantemente para solucionar problemas utilizando los desarrollos tecnológicos más recientes de diversas empresas, lo que ha permitido a la compañía alcanzar un crecimiento constante en el mercado del procesamiento de pagos.