2020/11/13

Lidiando con protocolos legacy

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
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
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
Adyacente sin integridad


Physical sin integridad
Physical sin integridad


Si consideramos la integridad, de 8.16.1  


Adyacente con integridad
Adyacente con integridad


 

Physical 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


Una solución sencilla si estuvieran juntos y se pudiese agregar una placa de red en cada equipo es usar un 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

 


TunnelingCifradoLo haré?
Virtualessisiambos
CompussisiNo
Routerssinotunneling
FPGAsnosicifrado


Dame unos meses, pues ahora estoy medio complicado.





No hay comentarios:

Publicar un comentario