# SSH Brute Force

## **📋 Índice**

1. [Conceitos Fundamentais](#-conceitos-fundamentais)
2. [O que é Brute Force em SSH?](#-o-que-é-brute-force-em-ssh)
3. [Tipos de Ataque (Manual vs Automatizado)](#-tipos-de-ataque-manual-vs-automatizado)
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 Monitoramento](#-detecção-e-monitoramento)
7. [Mitigação e Hardening](#-mitigação-e-hardening)

***

## **🔍 Conceitos Fundamentais**

O ataque de **Força Bruta (Brute Force)** em SSH consiste na tentativa massiva de descobrir pares de usuário e senha para obter acesso remoto ao servidor. É um dos ataques mais comuns e automatizados da internet, com botnets escaneando constantemente a porta 22 em busca de credenciais fracas.

***

## **🏗️ O que é Brute Force em SSH?**

Diferente de ataques de vulnerabilidade de código, aqui o foco é a **falha humana**: uso de senhas curtas, óbvias ou padrão.

* **Brute Force Puro:** Tenta todas as combinações possíveis de caracteres (ex: aaa1, aaa2...). Extremamente lento.
* **Dictionary Attack:** Usa listas pré-definidas de senhas comuns (ex: `password`, `123456`, `admin`). Muito mais rápido e eficaz.
* **Credential Stuffing:** Usa listas de usuários e senhas vazados de outros sites.

***

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

### **1. Hydra (A ferramenta mais versátil)**

O `hydra` é capaz de realizar ataques em paralelo contra o serviço SSH.

```bash
# Ataque com lista de usuários e lista de senhas
hydra -L users.txt -P passwords.txt ssh://192.168.1.10 -t 4
```

* `-L`: Arquivo com usuários.
* `-P`: Arquivo com senhas.
* `-t 4`: Número de threads (conexões simultâneas).

### **2. Medusa**

Alternativa rápida ao Hydra, focado em estabilidade de conexão.

```bash
medusa -h 192.168.1.10 -u admin -P wordlist.txt -M ssh
```

### **3. Nmap (SSH Brute Script)**

O Nmap também possui scripts para automação básica:

```bash
nmap -p 22 --script ssh-brute --script-args userdb=users.txt,passdb=pwds.txt <IP>
```

***

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

### **Cenário A: Identificação de Usuários Válidos**

Em versões antigas do OpenSSH (pré-7.7), era possível realizar a **Username Enumeration**. O atacante observa o tempo de resposta do servidor: se o usuário existe, o servidor leva um tempo diferente para processar a falha do que se o usuário não existisse.

### **Cenário B: Senha em Branco ou Padrão**

Muitos dispositivos IoT (roteadores, câmeras) vêm com SSH habilitado por padrão com credenciais como `ubnt/ubnt` ou `root/root`.

***

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

### **1. Falhas de Login nos Logs**

No Linux, as tentativas de login ficam registradas em `/var/log/auth.log` ou `/var/log/secure`.

```bash
grep "Failed password" /var/log/auth.log | tail -n 20
```

### **2. Auditoria de Sessões Ativas**

O comando `last` mostra os últimos logins bem-sucedidos. Se você vir logins de IPs desconhecidos, você foi comprometido.

***

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

### **1. Desabilitar Autenticação por Senha (Solução Definitiva)**

A maneira mais segura de usar SSH é permitindo apenas chaves públicas (**Public Key Authentication**). No arquivo `/etc/ssh/sshd_config`:

```
PasswordAuthentication no
PubkeyAuthentication yes
```

### **2. Fail2Ban (Inteligência de Bloqueio)**

Instale o `fail2ban` para bloquear automaticamente IPs que falharem o login X vezes em Y minutos.

```bash
# Bloqueio automático após 5 falhas
sudo apt install fail2ban
```

### **3. Alterar a Porta Padrão**

Mudar a porta de 22 para algo como 2222 ou 49152 reduz drasticamente o ruído de bots automatizados (embora não impeça ataques direcionados).

### **4. Desabilitar Login de Root**

Nunca permita que o usuário `root` logue diretamente via SSH. Força o uso de um usuário comum e depois `sudo`.

```
PermitRootLogin no
```

***

> A força bruta é um ataque de persistência. Se o seu servidor está exposto à internet, ele **está** sendo atacado neste momento. O uso de chaves SSH não é apenas uma recomendação, é uma necessidade básica de segurança.


---

# 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-brute-force.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.
