Seguridad de ssh anidado

3

En primer lugar, por ssh anidado , me refiero a la siguiente forma de usar ssh:

ssh usera@Bob 'ssh usera@C'

Supongamos que A quiere iniciar sesión en el servidor C , pero por alguna razón, C no está disponible directamente para A (por ejemplo, C 's detrás de cierto FW o NAT o algo así). Afortunadamente, el amigo de A , Bob tiene conexión directa a C y A también puede conectarse a Bob . Entonces, para iniciar sesión en C , A realmente haría lo mencionado anteriormente.

Mi pregunta aquí es, ¿podrá Bob ver la comunicación entre A y C en claro , dado que Bob es el administrador de su servidor? Supongo que sí, pero no estoy tan seguro de mi comprensión de los aspectos internos de SSH.

La razón por la que creo que Bob puede ver el texto sin formato es: hay dos claves de sesión: kab y kac , para el comando externo y anidado ssh respectivamente. Idealmente, Bob desconoce kac . (¿Es eso cierto cuando Bob es el usuario root?). De todos modos, cuando un mensaje llega a Bob, debe ser descifrado con kab , luego encriptado con kac y enviado a C . Entonces, entre el cifrado y el descifrado, el texto plano está en algún lugar de la memoria. Bob debería poder verlo, aunque no de manera directa.

¿Alguna idea?

    
pregunta qweruiop 26.06.2015 - 18:35
fuente

2 respuestas

4

Sí, como ha explicado Deviantfan, si lo haces de esa manera, Bob puede ver tu tráfico.

Una forma más segura de lograr su objetivo es utilizar las funciones de proxy integradas en SSH. La forma más sencilla, si tiene OpenSSH 7.3 o posterior:

ssh -J usera@Bob usera@C

Para versiones anteriores de OpenSSH, si tiene al menos OpenSSH 5.4, puede agregar lo siguiente a su ~ / .ssh / config:

Host C
ProxyCommand ssh -W %h:%p usera@Bob

Con versiones aún más antiguas de OpenSSH, necesitarás usar netcat (asumiendo que Bob lo tiene instalado):

Host C
ProxyCommand ssh usera@Bob nc %h %p

Ahora, cuando te conectes a C, ssh primero se conectará a Bob y iniciará un proxy (ya sea uno integrado o el netcat de Bob). La conexión de su máquina local a C se reenvía a través de este proxy. La conexión está encriptada de extremo a extremo con su cliente ssh local en un extremo y el servidor C remoto en el otro. La clave de sesión se negocia entre usted y C; Bob nunca lo ve.

Por supuesto, Bob como su proxy todavía puede hacerse pasar por C; pero siempre que haya verificado previamente la huella dactilar de la clave de host de C, puede detectar esto fácilmente de la forma habitual.

    
respondido por el John Morahan 26.06.2015 - 21:10
fuente
3

Sí, Bob puede ver la comunicación si quiere.

Esencialmente, la segunda llamada ssh se ejecuta en un shell en la computadora de Bob, similar a alguien sentado allí y escribiendo en el teclado real. La computadora de Bob debe tenerla (y cada entrada) sin cifrar. Y la salida del destino vuelve a Bob, se "muestra" en el shell de usera, y debido a eso, el servidor SSH de Bob lo envía a A.

Bob ni siquiera necesita molestarse con el acceso a la memoria sin formato ni nada de eso. Hay programas (como script ) para registrar cada entrada y salida de un shell en los archivos. Bob puede cambiar el shell de inicio de sesión de cada usuario registrado en su computadora, así que ...

    
respondido por el deviantfan 26.06.2015 - 19:09
fuente

Lea otras preguntas en las etiquetas