Explotando la seguridad física (carding for dummies )
Cuando uno piensa en el concepto de seguridad física, suele asociarlo a aquellas contramedidas de seguridad que nos permiten evitar accesos no autorizados en una infraestructura, como por ejemplo, la presencia de tornos de seguridad, la presencia de sofisticadas cerraduras electrónicas a prueba de las últimas técnicas de lockpicking (creo que Tarako no opinará lo mismo, verdad?), a la instalación de cámaras de videovigilancia,…
Extrapolando el concepto de seguridad de un sistema informático al de la seguridad física en el mundo real, podemos decir que una organización es tan segura como el eslabón mas débil de la cadena y, creedme, este eslabón es habitualmente, más débil de lo que os podéis imaginar.
Las nuevas tarjetas RFID o las de banda magnética (magstripe) , que serán objeto de este artículo, es una de esas soluciones mágicas que se ven implantadas por doquier puesto que su versatilidad nos permite utilizarlas para realizar tareas de control de acceso y de presencia, asociarlas con roles de usuarios con acceso a diferentes zonas (por ejemplo oficinas, CPD,..), cargar dinero en ellas para las máquinas de café, entrar en el metro, usarla como tarjeta de credito, entrar en la habitación de tu hotel,..
No voy a entrar en detalles técnicos sobre el funcionamiento de estas tarjetas, la información esta disponible para quien la quiera consultar en http://en.wikipedia.org/wiki/Magnetic_stripe, es la implementación de las tareas de control de acceso y/o validación la que es realizada habitualmente a través de un software de terceros, de forma transparente para las organizaciones, y es precisamente esta implementación lo que origina, en la gran mayoría de ocasiones, unos agujeros de seguridad muy grandes… veamos algunos ejemplos:
Os voy a contar el caso más común que me he encontrado hasta la fecha, armado con un MSE-630T bajo el brazo.
Pensemos en siguiente escenario, un usuario solicita una tarjeta de banda magnética digamos por ejemplo, al guardia de seguridad de alguna organización. Esta tarjeta almacena un código numérico en su banda magnética y en el ordenador del personal de seguridad se asocia esa tarjeta a una serie de lectores de tarjetas autorizados. Cualquier acceso a una sala, como por ejemplo un CPD o el despacho del director general, protegidas con un lector de tarjetas, no nos será permitido.
Hasta aquí todo correcto, sin embargo algo llama la atención, la tarjeta de acceso tiene impreso además del logotipo de la empresa lo siguiente VISITA 555031337, nuestra curiosidad nos hace conectar nuestro lector de tarjetas al ordenador y leemos la información.
Track1:
555031337
Track2:
Track3:
Ahí empiezan los problemas, aparentemente, se trata de un identificador secuencial y bastante predecible (me recuerda al bug de las openssl en debian), así que le decimos a nuestro grabador de tarjetas que nos grabe el ID 555031336, que curiosamente estaba asociado al personal de mantenimiento del CPD, y blink! blink! blink! estamos dentro. Ya podríamos tener acceso al sitio mas crítico de la organización, para saltarnos el uso del cifrado de comunicaciones y llevarnos físicamente los discos duros.
Como este caso existen varios muy parecidos que me he ido encontrando a lo largo del tiempo, aunque la diferencia puede residir en que el identificador numérico es siempre fijo es decir, es grabado una única vez cuando viene de fabrica, o el identificador es grabado, de forma incremental, cada vez que se solicita una tarjeta.
El Identificador secuencial, predecible o con combinaciones finitas es algo muy común en las implementaciones de control de acceso.. Para el desarrollador es mas fácil incrementar el contador de número de tarjeta que hacer una rutina de 3 lineas para la generación de códigos aleatorios, y pone en entredicho la seguridad de estos sistemas.
Existen muchas alternativas al uso y abuso de esta tecnología, os voy a dar un par de ellas que se me han ocurrido o he visto por ahí. Por supuesto, la finalidad de este artículo es educativa, y no deben llevarse a cabo salvo que conteis con la autorización previa.
1) Hoteles: Varias cadenas de hoteles usan un curioso método de control de acceso.. la tarjeta guarda únicamente el número de la habitación en su interior, de forma que la habitación 22 de la tercera planta se asocia al código 322. El software del hotel controla que esa habitación este asignada a un huésped y si lo está, puedes entrar con la tarjeta. Si grabas el código 321 podrás entrar en la habitación de al lado y, como todo tiene que tener una puerta trasera, también llamada feature, el código 300 o 399 será el código de la gente de limpieza para entrar en las habitaciones de la tercera planta, y 000 o 999 la tarjeta maestra para entrar en cualquier habitación. La cosa da miedo, a partir de ahora pediré siempre la llave del safetybox.
2) Promociones: A modo de curiosidad, algunas promociones en cadenas o establecimientos se basan en el ID secuencial de tu tarjeta. Por ejemplo, cuando vas a tu cine con tu tarjeta cinesa, se lee tu código de la tarjeta, y en base a las entradas que compres, la base de datos de cinesa guardará una serie de puntos. La chica de la taquilla te dirá si los puntos que tiene tu tarjeta de permiten sacar palomitas gratis. Un usuario sin escrúpulos (o al menos con alguno, porque podría bajarse la película de internet), podría ir al cine con cuatro amigos que tengan sus tarjetas cinesa, que contengan 4 identificadores diferentes recién grabados, y preguntar a la amable taquillera si tienen derecho a tus palomitas, y así ahorrarse unos 10 euros.
Si esto lo aplicamos a cosas mas serias, como posibles tarjetas regalo de otros establecimientos, la posibilidad de fraude es muy elevada, aunque es menos crítico que el riesgo de acceso físico en una organización.
Recomendación del día.
Proverbio chino: La seguridad informática es algo más que parchear nuestros sistemas. Si quieres estar seguro, contrata una auditoria de seguridad a los mejores (o en su defecto a los mas guapos) X-D
Nota: Algunos me han preguntado sobre la complejidad de este tipo de ataques o sobre lo difícil que puede llegar a ser trabajar con esto. La verdad es que se tardan pocos segundos en llevarlo a cabo. Existen herramientas para trabajar con esta tarjetas que, aunque en algunos casos no están documentadas, un sniffer rs232 nos puede dar información de todos los comandos.
hComPort = CreateFile("COM2",GENERIC_READ | GENERIC_WRITE,0,0,OPEN_EXISTING,0,0);
do {
ReadFile(hComPort, szBuffer , dwBufferSize, &dwBufferRead, NULL);
TCHAR szBuffer[1024]="\x02\x25\x00\x3F\3B\x00\x3F\x3B\x00\x3f\x03\x01"; //empty card..
WriteFile(...