Más funcionalidades para tu red corporativa: un enfoque basado en técnicas hacking (II)


Seguridad Seguridad Web Desarrollo Web Seguridad de la Información Tecnología Router Hardware Redes Ingeniería

Esta es la segunda parte del proceso iniciado en el artículo publicado con anterioridad. En la primera parte presentamos el problema del cliente, las posibles soluciones y el enfoque tan original que ofrecimos. Además, dimos los primeros pasos analizando el router y su gestor web, los protocolos e incluso automatizando la inyección de código sobre las tramas capturadas.

analizando y automatizando el panel de acceso

Analizando el panel frontal de inicio de sesión y sus dificultades para la manipulación automática. Ejemplo de interacción con el campo contraseña: múltiples campos ocultos superpuestos y dinámicos.

El proceso de automatización tiene tanto la componente funcional (protocolo y datos de intercambio) como visual. La primera ha sido realizada con todo el proceso descrito anteriormente, por lo que la generación de código para la manipulación automática no es más que un proceso "mecánico" en base a las pruebas previas. La componente visual requiere de un análisis de toda la arquitectura y diseño frontend. Como es una aplicación con grandes contenidos dinámicos, el propio diseño fluctúa, haciendo algo más complejo el análisis en aquellos lugares que hacen gran uso de las peticiones asíncronas y regeneración de interfaces (estados internos del router y propagación de cambios).

analizando la actualización y eliminación de componentes en tiempo real

Análisis de solicitudes continuas (POST) donde se realiza limpieza de memoria y actualización de regiones de interfaz basados en estadísticas (rendimiento). A la derecha, stack de ejecución hasta realizar la petición.

Algunas de las partes más complicadas de este proceso han sido los mecanismos para identificar la finalización de renderizaciones del interfaz, la preservación de datos útiles en memoria o la manipulación del panel de inicio de sesión. Una técnica muy habitual es esperar a que no existan más peticiones de red (paquetes) para determinar que una página haya finalizado. Otra es esperar a que determinado componente gráfico se encuentre cargado o representado. El problema con el diseño frontend de los paneles de manipulación del router es que tienen tal componente dinámica que las peticiones son prácticamente constantes, los valores de memoria son limpiados automáticamente y las identificaciones de componentes gráficos no son estáticos (varían en multitud de ocasiones). De esta forma, se requirieron unas cuantas horas de análisis debido a los mecanismos los suficientemente sofisticados como para complicar su automatización.

analizando los mecanismos de cifrado después del inicio de sesión

Dentro del panel de gestión del router. A la derecha, análisis del almacenamiento y de los mecanismos de cifrado posteriores al inicio de sesión (regeneración periódica).

Una vez dentro del sistema de forma automática, concluimos la tarea desarrollando un crawler sobre el sistema desarrollado. Todo el proceso ha ido en esa dirección, pero es en este punto donde finalmente realizamos los pasos típicos para un procesador y parseador html (y de trazas de red y javascript). Empaquetamos el software como un servicio y exponemos una API sencillita para poder consultar al router el estado de la red bajo una credenciales independientes al router. Hemos optado por ofrecer un servicio a modo de demonio del sistema operativo (systemd) pues facilita su portabilidad en cuanto queramos usarlo en otro nodo o dispositivo de gestor.

$ curl -H @headers_token $MNGR_HOST/api/v1/router/status/clients?range=2h&join=stats
{
  "datetime": "2021-05-18T13:29:38.512Z",
  "version": "1.0",
  "query": "/router/status/clients?range=2h&join=stats",
  "quantity": { "wlan": 2, "wired": 4 },
  "clients": [
    { "ip": "192.168.1.106", "mac": "<HIDDEN>", "name": "srv3", "conn": "wlan" },
    { "ip": "192.168.1.107", "mac": "<HIDDEN>", "name": "estebanlj", "conn": "wired" },
    { "ip": "192.168.1.116", "mac": "<HIDDEN>", "name": "srv1", "conn": "wired" },
    { "ip": "192.168.1.132", "mac": "<HIDDEN>", "name": "srv1", "conn": "wired" },
    { "ip": "192.168.1.148", "mac": "<HIDDEN>", "name": "mar13", "conn": "wlan" },
    { "ip": "192.168.2.1", "mac": "<HIDDEN>", "name": "gate1link", "conn": "wired", "net": "DMZ" }
  ],
  "statistics": {
    "max": { "quantity": 5, "datetime": "2021-05-18T12:41:21.788Z" },
    "min": { "quantity": 3, "datetime": "2021-05-18T11:29:38.512Z" },
    "bouncing": {
      "reconnection": { "quantity": 3, "route": "DMZ-link2", "datetime_last": "2021-05-18T12:18:20.284Z" }
    },
    "alerts": [
      { "type": "warn", "message": "<HIDDEN>" }
    ]
  }
}

Ejemplo de consulta realizada al servicio construido y expuesto en la red interna.

Un punto clave de todo este trabajo es que ahora se posibilita la construcción de otros servicios o aplicaciones que consuman esta API. De esta manera, se pueden componer servicios y soluciones en donde conocer o manipular el estado de la red sea una ventaja sustancial (o incluso indispensable para poder ofrecer servicio).

Por último, unas breves palabras relativas al proceso de hacking y la experiencia con este router. En esta ocasión han dado un salto significativo en cuanto a la calidad de la construcción del frontend del gestor del router para el usuario. No solo han mejorado la calidad, sino la complejidad, la ofuscación y las buenas prácticas de desarrollo. Ha sido relativamente interesante realizar esta exploración y proporcionar esta solución ad-hoc. Lo más destacable es que hemos refrescado conocimientos en un área no muy habitual dentro de los trabajos que nos solicitan, a la vez que hemos podido demostrar toda nuestra experiencia en el desarrollo web y las comunicaciones, ofreciendo una solución que les ha hecho ahorrar tiempo y dinero. Al fin y al cabo, como ingenieros, se trata de ofrecer una solución eficiente, aplicable y escalable. Y lo que marca la diferencia entre unas y otras empresas es la capacidad para poder ofrecer soluciones donde otros no las ven.

Solo esperamos que los fabricantes de hardware se pongan las pilas y sean capaces de entender las necesidades de los consumidores. Si los desarrolladores e ingenieros de soluciones hubieran ofrecido una API o interfaz de gestión automatizable, no habría sido necesario la mayor parte de este esfuerzo. No es una solicitud muy ambiciosa, pues hablamos de dispositivos de un considerable precio para el mercado no profesional, pero que al fin y al cabo muchas PYME y profesionales autónomos utilizan por su comodidad.

Ofrecer este tipo de soluciones no es tarea sencilla, pues involucra tanto creatividad en la resolución de problemas como un amplio abanico de conocimientos técnicos. Algunas de las técnicas aplicadas trascienden los proyectos y tipos de soluciones que solemos ofrecer, pero si algo nos dice la experiencia es que cuanto mayor sea el espectro técnico que se domine, mejores respuestas se pueden ofrecer. De entre los cursos que actualmente impartimos a empresas, destacaríamos los de Tecnologías Web Frontend y Arquitectura de Aplicaciones Web por ser los más cercanos a toda la experiencia resaltada en ambos artículos.

Este sitio web emplea cookies propias y de terceros para analizar el tráfico y ofrecerle una mejor experiencia. Al navegar o utilizar nuestros servicios el usuario está aceptando su uso.Más información.