# SSH Hijacking

## **📋 Índice**

1. [Conceitos Fundamentais](#-conceitos-fundamentais)
2. [Sequestro via ControlMaster](#-sequestro-via-controlmaster)
3. [Roubo de SSH Agent (Agent Forwarding)](#-roubo-de-ssh-agent-agent-forwarding)
4. [Técnicas de Exploração](#-técnicas-de-exploração)
5. [Cenários de Exploração Prática](#-cenários-de-exploração-prática)
6. [Detecção e Ferramentas](#-detecção-e-ferramentas)
7. [Mitigação e Prevenção](#-mitigação-e-prevenção)

***

## **🔍 Conceitos Fundamentais**

Diferente do sequestro TCP (camada 4), o **SSH Hijacking** geralmente ocorre quando um atacante compromete uma máquina onde uma sessão SSH já está estabelecida ou configurada para ser facilitada. O objetivo é "pegar carona" em uma conexão autenticada para acessar servidores remotos sem saber a senha ou ter a chave privada.

***

## **🔌 Sequestro via ControlMaster**

O recurso **ControlMaster** do OpenSSH permite o reuso de uma conexão TCP existente para múltiplas sessões SSH. Isso é útil para evitar o overhead de aperto de mão em scripts.

### **O Ataque**

Se um usuário habilitou o ControlMaster em sua máquina local ou em um servidor de salto (Jump Box), o SSH cria um **Unix Domain Socket** em `/tmp/` ou em outro diretório. Qualquer pessoa com permissão de leitura nesse socket (ou o usuário root) pode iniciar uma nova sessão SSH através deste socket **sem precisar de autenticação**.

***

## **🔑 Roubo de SSH Agent (Agent Forwarding)**

O **SSH Agent Forwarding** permite que você use suas chaves locais em servidores remotos sem copiá-las para lá.

### **O Perigo**

Ao habilitar o forwarding (`ssh -A`), o servidor remoto cria um socket que aponta de volta para o seu agente local. Se o administrador do servidor remoto (ou um atacante que ganhou acesso root lá) acessar esse socket, ele pode assinar requests de autenticação como se fosse você, permitindo que ele se conecte a **qualquer outro servidor** que aceite a sua chave.

***

## **🔧 Técnicas de Exploração**

### **1. Explorando Sockets do ControlMaster**

Se você encontrar sockets em diretórios temporários:

```bash
# Procurar por sockets abertos
find /tmp -type s -name "ssh-*" 2>/dev/null

# Usar o socket para abrir um novo shell
ssh -S /tmp/ssh-master-socket-path user@remote-host
```

### **2. Sequestrando o SSH Agent**

Se você for root em um servidor onde outros usuários estão logados com Agent Forwarding:

```bash
# Listar sockets do agente
ls -l /tmp/ssh-*/agent.*

# Definir a variável de ambiente para usar o socket de outra pessoa
export SSH_AUTH_SOCK=/tmp/ssh-XXXXX/agent.YYYY
ssh user@outro-servidor
```

***

## **🚀 Cenários de Exploração Prática**

### **Cenário A: Movimentação Lateral em Jump Boxes**

Um administrador loga em um "bastion host" para gerenciar 50 servidores. Ele usa ControlMaster para ser rápido. O atacante compromete o bastion host e, através dos sockets ativos, ganha acesso aos 50 servidores instantaneamente.

### **Cenário B: Sequestro de TTY (Logins Ativos)**

Se um atacante tem acesso root, ele pode usar ferramentas para "espiar" ou injetar comandos em um terminal SSH ativo de outro usuário.

***

## **🔍 Detecção e Ferramentas**

### **1. Monitoramento de Processos**

Verificar processos SSH rodando com as flags `-M` (Master) ou sockets ativos no sistema de arquivos.

```bash
netstat -xl | grep ssh
```

### **2. Auditoria de Configuração**

Verificar se o `AllowAgentForwarding` está habilitado globalmente no `/etc/ssh/sshd_config`.

***

## **🛡️ Mitigação e Prevenção**

### **1. Desabilitar Agent Forwarding (Se não for necessário)**

No cliente (`~/.ssh/config`):

```
Host *
    ForwardAgent no
```

No servidor (`/etc/ssh/sshd_config`):

```
AllowAgentForwarding no
```

### **2. Usar ProxyJump em vez de Forwarding**

O comando `ssh -J` (ProxyJump) é mais seguro que o forwarding clássico pois ele cria um túnel criptografado de ponta a ponta sem expor o socket do agente no servidor intermediário.

### **3. Proteção de Sockets**

Garantir que os sockets do ControlMaster sejam criados em diretórios com permissões estritas (ex: `ControlPath ~/.ssh/sockets/%r@%h:%p`).

### **4. Tokens de Hardware (FIDO2/Yubikey)**

Usar chaves que exigem toque físico para assinar cada requisição impede que um atacante remoto use seu agente silenciosamente.

***

> O sequestro de SSH é uma das formas mais rápidas de um atacante realizar movimentação lateral massiva em uma infraestrutura após o primeiro comprometimento. Nunca use Agent Forwarding em servidores nos quais você não confia plenamente no administrador root.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://0xmorte.gitbook.io/bibliadopentestbr/tecnicas/rede-and-infraestrutura/ssh/ssh-hijacking.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
