Me parece que muchos tipos, especialmente a una edad temprana, querían ser hackers geniales. Hackear sitios, teléfonos, sistemas de acceso. Así que tengo un poco de este entusiasmo juvenil. Por lo tanto, periódicamente hurgando en varios programas y no encontré nada que valiera la pena. Pero un día, la suerte apareció para mí, ¡e incluso qué! ACS, lleno de vulnerabilidades que permiten el acceso para administrar todo el sistema (abrir / cerrar puertas, agregar su tarjeta de acceso, etc.).
Interesante? Entonces bienvenido a Kat!
Todo lo que se describe a continuación se llevó a cabo en un banco de pruebas. El artículo fue escrito únicamente con fines educativos y, en general, todo esto es una invención del autor.
SKUD - sistema de control y gestión de acceso
Dio la casualidad de que una vez trabajé en una empresa de construcción y carreteras, donde escribí un conjunto de programas para emitir pases, emitir alimentos para estos pases e informar. Necesitaba integrar todo esto con un ACS bastante popular. Los desarrolladores respondieron a las solicitudes de documentación durante mucho tiempo y los plazos se agotaron. Tenía que entender su software yo mismo.

Esquema aproximado de operación de ACS
Empecé a aprender de la base de datos. El servidor ACS funciona con la base de datos firebird 2.5. El inicio de sesión y la contraseña resultaron ser estándar, lo que ya es muy alarmante, pero la contraseña se puede configurar en la configuración del programa. Las contraseñas en la base de datos para las cuentas son hash, pero sin sal, lo cual es malo, pero nuevamente no es crítico. Almacena todas las zonas de paso, usuarios, sus números de tarjeta, accesos y direcciones de controlador.

Db
A continuación, tomamos un programa para detectar tráfico (tomé "SmatrSniff", el primero que puede ver el tráfico localhost) y ver qué envía el cliente al servidor. Todos los datos pasan por TCP y algunos por UDP en forma no cifrada. Y aquí comienza la diversión. El servidor primero envía la contraseña clara de la base de datos, su ubicación y solo luego verifica el nombre de usuario y la contraseña.

Contraseña de la base de datos masterkey
Resulta que, sin conocer el nombre de usuario y la contraseña, podemos obtener acceso completo a la base de datos, lo que nos brinda posibilidades casi ilimitadas. Podemos darnos una tarjeta con acceso a cualquier objeto. Prescriba su tarjeta a otro usuario e ingrese su nombre. Pero para que estos datos se carguen en los controladores, debe dar un comando al servidor desde el cliente. Aunque podemos llevar la contraseña al cliente desde la base de datos, use las bases de datos MD5 abiertas e intente encontrar la contraseña para el hash (le recordaré que las contraseñas en la base de datos no contienen sal), pero si la contraseña es complicada, lo más probable es que nada funcione. Tendremos que esperar a que alguien haga clic en el botón de carga completa.
Luego miré, y la autorización afecta cualquier cosa. Para hacer esto, intenté repetir las solicitudes al servidor usando "TCP / IP Builder". Y sí, las solicitudes posteriores al servidor no funcionan sin autorización (envía un rechazo en respuesta). Aquí estoy un poco deprimido, porque para la integración tendré que implementar una repetición de toda la cadena de autorización y solo entonces enviar un paquete para cargar datos en el controlador.
Finalmente, decidí repetir la solicitud de transferir la puerta al modo abierto. El servidor respondió "ok" y la puerta estaba sonando. Sin ninguna autorización Repetí lo mismo desde otra computadora en la red local y funcionó también.

Tipo aproximado de paquete
Esto significa que podemos abrir / cerrar cualquier puerta desde cualquier computadora en la red local. Prescriba una tarjeta para usted e inmediatamente descargue estos datos a los controladores. Luego, con calma, revise los objetos y elimine todos los registros de nuestra visita.
Maté un par de horas para aprender el protocolo de comunicación entre el controlador y el servidor para finalmente romperlo, pero no pude entender completamente el formato de datos. Pero estoy seguro de que no hay protección. Los paquetes definitivamente tienen las direcciones mac del controlador y el servidor / puerta de enlace (el enlace al servidor va a la dirección mac, no hay claves de cifrado y similares en la base de datos, por lo que es muy probable que pretendas ser el servidor del controlador que conoce el servidor mac). Lamentablemente, no hay vertederos ni acceso al equipo, por lo que no puedo mostrarlo.
Como resultado, tenemos vulnerabilidades de control de acceso total, que nos dan acceso ilimitado a los pasajes a los objetos. Debido al bajo costo de los componentes y el software libre, este ACS es muy común. Ella se encuentra en muchas escuelas en Moscú, y la vi en otros sitios. La compañía se enorgullece de los premios en varios eventos. No nombro específicamente a la organización, ni les escribo sobre ella. Porque creo que tales vulnerabilidades a nivel de arquitectura no pueden repararse sin reescribir todo el software desde cero y actualizar todo el equipo de las personas que compraron este sistema (hay varios agujeros más graves a nivel de arquitectura, pero su descripción habría triplicado el artículo). Para aquellos que han aprendido de la pantalla ACS y está instalada en usted, les aconsejo que aíslen por completo la red (que se considera "mejores prácticas"), en la que se encuentran todos los componentes del sistema, y el acceso a la base de datos para agregar empleados se realiza solo a través de una VPN. La configuración de enrutamiento adecuada también puede ayudar.