Inspirado por un problema que suele ocurrir en ambientes legacy y en un artefacto que hallé hace muchos años tirado en la vereda, diseñaré una mitigación e intentaré implementar unos componentes, con la excusa de practicar qemu, networking, programar en C, cambiar el firmware de un router y finalmente FPGA.
En FTP las credenciales circulan en texto plano |
El problema
Tenemos dos equipos, quizás en distintos datacenters, que están usando para intercambiar información sensible un protocolo inseguro como http, ftp o telnet. Estos protocolos son muy fáciles de inspeccionar si podés ver el tráfico. No se pueden cambiar por X motivo, esa es la esencia del legacy.
Inspiración
Cifrador de X25 |
El componente de la fotito lo encontré en la calle y se mete en el medio de una conexión serial para cifrar el canal, uno en cada extremo. En cierto modo es como agregar una capa que normalmente es lógica de modo físico. Está en mi lista de deseos en algún momento lograr la máxima posesión del mismo.
No sé los detalles de lo que hace, pero me imagino que cifra todo el tráfico y que lo hace de modo transparente, los nodos que se comunican no se enteran de este proceso. La diferencia con mi proyecto es que se tratará sólo un tipo de tráfico y el resto circulará sin modificaciones.
Análisis de impacto
Hay varios inconvenientes: un atacante puede ver usuario y credencial si puede inspeccionar el tráfico de red. Luego, como puede ver todo el tráfico la información sensible que haya.
En términos de CVSS, como vulnerabilidad, si dejamos de lado la integridad el valor pasa de 6.5 a 4.6
Adyacente sin integridad |
Physical sin integridad |
Si consideramos la integridad, de 8.1 a 6.1
Adyacente con integridad |
Physical con integridad |
Esta mejoría se debe a que hace falta ir físicamente al datacenter y pinchar el cable o sacar componentes, no se puede atacar desde otra máquina conectada a la misma red.
Fijate que no cambie de Adyacente a Físico en la puntuación base, pues ese es el valor de vulnerabilidad en general, lo hice en la puntuación de entorno, es la aplicación concreta de las circunstancias a la base.
Mitigaciones
El cable cruzado
Networking
Si no se puede tirar un cable o agregar placas, se podría hacer a nivel del equipamiento de red, cosa que no sé hacer, no tengo equipamiento de red. Me imagino algo así como "si viene de tal IP y va a tal IP y es de tal Protocolo, enviar por algún modo tal que no sea muy visible, ya sea una vlan o mejor cifrado.
Componentes como el de la fotito
Puedo desarrollar un par de dispositivos que separen el tráfico, algo así:
+-----------------+ +----------------+
+-------+ | tráfico común | +-------+
|sistema|<--------------------------------------------------->|sistema|
+-------+ |+--------------+ | |+--------------+| +-------+
||tráfico legacy|<--cifrado-->||tráfico legacy||
|+--------------+ | |+--------------+|
+-----------------+ +----------------+
Si el tráfico no corresponde, pasarlo de una interfaz a la otra sin más trámite.
Si el tráfico corresponde, tratarlo de alguna manera y pasarlo al otro componente, que invierte el tratamiento y se lo dá al destino.
Modo de protección
Veo dos maneras de implementar la protección:
Tunneling
Este es el modo más sensato, usar la magia de iptables/fwbuilder y establecer una VPN para hacer circular el tráfico de interés por ahi.
Cifrado por paquete
No sé casi nada de criptografía, así que no tomés como referencia mi diseño ni implementación.
En terminos de latencia, lo mejor que podría hacer es un xor del tamaño del buffer, pero tendría que ir cambiando ese xor para cada paquete, pues si se repitiera se abriría la puerta a sencillos ataques.
Ponele que cifro con el mismo k varios mensajes:
a 01011011
k 01010101
A 00001110
b 00110011
k 01010101
B 01100110
Como atacante, tengo todos los A,B...
Supongamos que tengo un a, debido a que por lo general el primer mensaje suele ser igual debido a encabezados, por ejemplo una página web suele comenzar con
<!DOCTYPE html>
<html
Fijate como obtengo el mensaje b, o cualquier otro, teniendo un solo mensaje conocido:
A 00001110
B 01100110
xor 01101000
a 01011011
b ????????
xor 01101000
b 00110011
Y este es un ataque increiblemente sencillo, casi el único que estoy en condiciones de explicarte, no sos vos, soy yo. Después hay mil maneras sutiles de fallar. Repito, lo que haga es de juguete.
Cuando llegue el momento, veremos...
Implementaciones
Hay varias maneras que se me ocurren y pienso intentar implementar apuntando al máximo aprendizaje.
Virtualización
Puedo usar Qemu o VirtualBox
- Ventajas
- gratis
- homogéneo
- ambos modos
- Desventajas
- aburrido
- poco creible
Pese a lo aburrido y poco creible, va a ser lo primero que haga, usando ambos modos, como para comprobar que se puede hacer y estar atento a que no haya algún bloqueante que luego va a ser más difícil de identificar. Además usaré qemu pues tengo poca práctica últimamente
Computadoras
Dos viejas netbooks y un adaptador usb-ethernet
- Ventajas
- más creible
- homogéneo
- ambos modos
- Desventajas
- tengo que comprar otro adaptador usb-ethernet o mejor dos para que sean usb 3 y gigabit, unos u$s 40
- ocupa mucho lugar y consumo
- sigue siendo aburrido
Como no le veo mucha diferencia a virtualizar y me obliga a comprar el adaptador y principalmente sigue siendo aburridísimo, no lo voy a implementar.
Routers
Un router hogareño de más, otro que tiene sólo un ethernet, pero puedo usar el adaptador usb pues tiene usb
- Ventajas
- gratis
- divertido
- ambos modos
- por fin le doy uso a esos routers
- tengo que cambiar el firmware
- Desventajas
- heterogéneo
- son distintos
- tengo que cambiar el firmware
Esta implementación sólo la haré por que me obliga a cambiar el firmware, cosa que nunca he hecho. Probablemente me conforme con el modo tunneling.
FPGA
Usar dos FPGA con dos o cuatro pmods ethernet
- Ventajas
- máxima diversión
- máxima dificultad
- máximo aprendizaje
- heterogeno, tengo que usar dos placas distintas pues es lo que tengo
- Desventajas
- heterogeno, tengo que usar dos placas distintas pues es lo que tengo
- al menos u$s 80 mas impuestos y gastos de envío
- sólo cifrado
- quizás no me dé el cerebro para hacerlo
Resumiendo
Dame unos meses, pues ahora estoy medio complicado.
No hay comentarios:
Publicar un comentario