Como eu tenho deixado meu desktop boa parte do tempo desligado, eu abri uma porta ssh pro raspberrypi. Por quê? Por nenhum motivo.
Eu nunca realmente usei esse acesso ssh, que externamente estava numa porta alta 22XY, sendo X e Y meio que aleatórios.
E claro que esqueci disso. E hoje fui dar uma olhada. E vários ataques. Ou tentativas desses.
pi@raspberrypi3 ~> journalctl -u ssh | grep rhost | sed 's/.*ruser= //' | sort -n | uniq -c
4 rhost=101.182.50.204
2 rhost=101.182.50.204 user=root
294 rhost=103.187.164.70
1 rhost=103.187.164.70 user=backup
1 rhost=103.187.164.70 user=daemon
21 rhost=103.187.164.70 user=root
12031 rhost=106.12.118.63
1 rhost=106.12.118.63 user=avahi
13 rhost=106.12.118.63 user=backup
9 rhost=106.12.118.63 user=bin
1 rhost=106.12.118.63 user=dnsmasq
3 rhost=106.12.118.63 user=games
1 rhost=106.12.118.63 user=irc
1 rhost=106.12.118.63 user=list
1 rhost=106.12.118.63 user=mail
1 rhost=106.12.118.63 user=messagebus
2 rhost=106.12.118.63 user=pi
1379 rhost=106.12.118.63 user=root
2 rhost=106.12.118.63 user=rtkit
1 rhost=106.12.118.63 user=saned
1 rhost=106.12.118.63 user=sshd
1 rhost=106.12.118.63 user=sys
15 rhost=106.12.118.63 user=www-data
104 rhost=106.244.154.170
37 rhost=106.244.154.170 user=root
6 rhost=110.83.205.126
9 rhost=110.83.205.126 user=root
414 rhost=112.54.121.23
2 rhost=112.54.121.23 user=backup
1 rhost=112.54.121.23 user=bin
1 rhost=112.54.121.23 user=daemon
200 rhost=112.54.121.23 user=root
3 rhost=112.96.138.97
1 rhost=112.96.138.97 user=root
1 rhost=112.97.211.56 user=root
1 rhost=112.97.219.144
1 rhost=112.97.219.144 user=root
1 rhost=112.97.241.205 user=root
1 rhost=112.97.63.81 user=root
147 rhost=113.116.156.72
1 rhost=113.116.156.72 user=bin
1 rhost=113.116.156.72 user=games
2 rhost=113.116.156.72 user=man
1 rhost=113.116.156.72 user=pi
1 rhost=113.116.156.72 user=root
1 rhost=113.116.156.72 user=sshd
1 rhost=113.116.156.72 user=sync
2 rhost=113.116.156.72 user=sys
645 rhost=113.161.59.72
45 rhost=113.161.59.72 user=root
3 rhost=113.194.225.182
1 rhost=113.194.225.182 user=root
10679 rhost=115.68.114.145
5 rhost=115.68.114.145 user=backup
2 rhost=115.68.114.145 user=bin
2 rhost=115.68.114.145 user=daemon
2 rhost=115.68.114.145 user=dnsmasq
1 rhost=115.68.114.145 user=geoclue
1 rhost=115.68.114.145 user=gnats
1 rhost=115.68.114.145 user=list
1 rhost=115.68.114.145 user=lp
2 rhost=115.68.114.145 user=mail
2 rhost=115.68.114.145 user=pi
2181 rhost=115.68.114.145 user=root
3 rhost=115.68.114.145 user=sshd
1 rhost=115.68.114.145 user=sys
1 rhost=115.68.114.145 user=systemd-coredump
2 rhost=115.68.114.145 user=tss
24 rhost=115.68.114.145 user=uucp
9 rhost=115.68.114.145 user=www-data
1994 rhost=115.68.193.229
4 rhost=115.68.193.229 user=backup
4 rhost=115.68.193.229 user=bin
3 rhost=115.68.193.229 user=daemon
2 rhost=115.68.193.229 user=pi
863 rhost=115.68.193.229 user=root
3 rhost=115.68.193.229 user=www-data
171 rhost=115.73.212.140
70 rhost=115.73.212.140 user=root
1 rhost=115.73.212.140 user=www-data
240 rhost=115.73.222.121
27 rhost=115.73.222.121 user=root
117 rhost=115.79.138.57
28 rhost=115.79.138.57 user=root
1 rhost=115.79.138.57 user=uucp
41 rhost=117.132.195.92
13 rhost=117.132.195.92 user=root
1 rhost=117.132.195.92 user=uucp
597 rhost=119.204.234.220
1 rhost=119.204.234.220 user=lp
1 rhost=119.204.234.220 user=news
176 rhost=119.204.234.220 user=root
2 rhost=119.204.234.220 user=sshd
7 rhost=121.170.243.115
2 rhost=121.170.243.115 user=root
5 rhost=121.207.184.52
1 rhost=121.207.184.52 user=root
320 rhost=121.237.47.72
16 rhost=121.237.47.72 user=root
1 rhost=123.226.234.157 user=root
3 rhost=138.68.65.85
6 rhost=138.68.65.85 user=root
822 rhost=153.99.251.110
2 rhost=153.99.251.110 user=backup
2 rhost=153.99.251.110 user=bin
1 rhost=153.99.251.110 user=daemon
2 rhost=153.99.251.110 user=pi
366 rhost=153.99.251.110 user=root
1 rhost=153.99.251.110 user=www-data
52 rhost=171.125.189.103
2 rhost=171.125.189.103 user=root
4349 rhost=175.126.146.151
1 rhost=175.126.146.151 user=avahi
1 rhost=175.126.146.151 user=backup
1 rhost=175.126.146.151 user=bin
1 rhost=175.126.146.151 user=daemon
1 rhost=175.126.146.151 user=dnsmasq
1 rhost=175.126.146.151 user=games
1 rhost=175.126.146.151 user=gnats
1 rhost=175.126.146.151 user=irc
1 rhost=175.126.146.151 user=list
1 rhost=175.126.146.151 user=messagebus
1 rhost=175.126.146.151 user=nobody
1 rhost=175.126.146.151 user=pi
511 rhost=175.126.146.151 user=root
1 rhost=175.126.146.151 user=sshd
1 rhost=175.126.146.151 user=sync
1 rhost=175.126.146.151 user=sys
1 rhost=175.126.146.151 user=systemd-coredump
1 rhost=175.126.146.151 user=uucp
1 rhost=175.126.146.151 user=www-data
2376 rhost=175.126.146.170
2 rhost=175.126.146.170 user=backup
8 rhost=175.126.146.170 user=bin
2 rhost=175.126.146.170 user=daemon
3 rhost=175.126.146.170 user=lp
1 rhost=175.126.146.170 user=news
4 rhost=175.126.146.170 user=nobody
1601 rhost=175.126.146.170 user=root
1 rhost=175.126.146.170 user=saned
3 rhost=175.126.146.170 user=sshd
100 rhost=176.232.199.34
9 rhost=176.232.199.34 user=root
2 rhost=180.102.215.191
2 rhost=180.102.215.191 user=root
50 rhost=180.214.179.130
1 rhost=180.214.179.130 user=nobody
12 rhost=180.214.179.130 user=root
104 rhost=182.161.158.243
1 rhost=182.161.158.243 user=bin
36 rhost=182.161.158.243 user=root
64 rhost=182.92.205.87 user=root
168 rhost=183.239.61.5
36 rhost=183.239.61.5 user=root
1 rhost=183.239.61.5 user=uucp
802 rhost=183.6.114.32
9 rhost=183.6.114.32 user=bin
5 rhost=183.6.114.32 user=daemon
2 rhost=183.6.114.32 user=nobody
370 rhost=183.6.114.32 user=root
31 rhost=185.11.61.234
2 rhost=185.11.61.234 user=backup
6 rhost=185.11.61.234 user=root
127 rhost=185.11.61.88
18 rhost=185.11.61.88 user=root
1 rhost=185.11.61.88 user=uucp
1 rhost=185.11.61.88 user=www-data
640 rhost=188.92.243.94
5 rhost=188.92.243.94 user=backup
2 rhost=188.92.243.94 user=bin
1 rhost=188.92.243.94 user=daemon
1 rhost=188.92.243.94 user=news
1 rhost=188.92.243.94 user=proxy
381 rhost=188.92.243.94 user=root
1 rhost=188.92.243.94 user=sync
1 rhost=188.92.243.94 user=www-data
10 rhost=190.108.93.158
18 rhost=190.108.93.158 user=root
1217 rhost=190.2.143.54
13 rhost=190.2.143.54 user=bin
7 rhost=190.2.143.54 user=daemon
4 rhost=190.2.143.54 user=nobody
561 rhost=190.2.143.54 user=root
15 rhost=190.238.35.29
1 rhost=190.238.35.29 user=pi
1 rhost=190.238.35.29 user=root
12006 rhost=190.89.76.29
7 rhost=190.89.76.29 user=pi
389 rhost=190.89.76.29 user=root
19 rhost=195.122.229.82
1 rhost=195.122.229.82 user=root
1 rhost=2.53.171.103 user=root
803 rhost=212.186.185.171
10 rhost=212.186.185.171 user=bin
5 rhost=212.186.185.171 user=daemon
2 rhost=212.186.185.171 user=nobody
370 rhost=212.186.185.171 user=root
234 rhost=213.63.233.87
1 rhost=213.63.233.87 user=backup
1 rhost=213.63.233.87 user=bin
2 rhost=213.63.233.87 user=lp
181 rhost=213.63.233.87 user=root
1 rhost=213.63.233.87 user=sys
1 rhost=213.63.233.87 user=usbmux
28 rhost=218.101.201.179
1 rhost=218.101.201.179 user=root
7 rhost=218.81.76.84
10 rhost=218.81.76.84 user=root
822 rhost=220.249.111.98
2 rhost=220.249.111.98 user=backup
2 rhost=220.249.111.98 user=bin
1 rhost=220.249.111.98 user=daemon
2 rhost=220.249.111.98 user=pi
366 rhost=220.249.111.98 user=root
1 rhost=220.249.111.98 user=www-data
289 rhost=222.107.116.47
92 rhost=222.107.116.47 user=root
159 rhost=222.208.47.30
1 rhost=222.208.47.30 user=pulse
50 rhost=222.208.47.30 user=root
23 rhost=39.118.171.84
24 rhost=39.118.171.84 user=root
4 rhost=39.144.46.7
2 rhost=39.144.46.7 user=root
63 rhost=39.144.46.82
2 rhost=39.144.46.82 user=root
996 rhost=39.162.8.99
1 rhost=39.162.8.99 user=list
1 rhost=39.162.8.99 user=proxy
77 rhost=39.162.8.99 user=root
1 rhost=39.162.8.99 user=sys
1 rhost=39.162.8.99 user=www-data
6 rhost=42.49.109.197
3 rhost=42.49.109.197 user=root
758 rhost=46.7.73.67
1 rhost=46.7.73.67 user=bin
1 rhost=46.7.73.67 user=nobody
240 rhost=46.7.73.67 user=root
1672 rhost=51.81.245.139
2 rhost=51.81.245.139 user=backup
8 rhost=51.81.245.139 user=root
27 rhost=51.81.245.139 user=uucp
5 rhost=51.81.245.139 user=www-data
254 rhost=58.218.252.82
1 rhost=58.218.252.82 user=proxy
47 rhost=58.218.252.82 user=root
316 rhost=59.58.102.162
1 rhost=59.58.102.162 user=backup
97 rhost=59.58.102.162 user=root
1 rhost=59.58.102.162 user=sync
12 rhost=61.149.209.194
4 rhost=61.149.209.194 user=root
134 rhost=62.122.184.252
10 rhost=62.122.184.252 user=root
2 rhost=62.122.184.252 user=sshd
2 rhost=67.205.142.48
3 rhost=75.119.144.68 user=root
55 rhost=81.14.168.152
25 rhost=81.14.168.152 user=root
1 rhost=81.14.168.152 user=saned
29 rhost=85.209.11.226
1 rhost=85.209.11.226 user=pi
5 rhost=85.209.11.226 user=root
1 rhost=85.209.11.226 user=sshd
1809 rhost=85.24.245.46
8 rhost=85.24.245.46 user=backup
1 rhost=85.24.245.46 user=bin
1 rhost=85.24.245.46 user=lp
1 rhost=85.24.245.46 user=mail
2 rhost=85.24.245.46 user=news
4 rhost=85.24.245.46 user=nobody
1 rhost=85.24.245.46 user=proxy
1229 rhost=85.24.245.46 user=root
1 rhost=85.24.245.46 user=uucp
413 rhost=85.246.237.232
1 rhost=85.246.237.232 user=games
1 rhost=85.246.237.232 user=nobody
293 rhost=85.246.237.232 user=root
1 rhost=85.246.237.232 user=saned
1 rhost=85.246.237.232 user=sshd
1 rhost=85.246.237.232 user=uucp
1 rhost=86.227.110.209
37 rhost=86.236.26.148
12 rhost=86.236.26.148 user=root
1 rhost=90.134.40.219 user=root
306 rhost=90.40.72.74
1 rhost=90.40.72.74 user=root
7 rhost=90.40.72.74 user=uucp
1 rhost=90.40.72.74 user=www-data
129 rhost=94.208.120.232
1 rhost=94.208.120.232 user=daemon
13 rhost=94.208.120.232 user=root
Desativei a porta.
O raspberrypi precisa de senha pra sudo, coisa que aprendi depois do ataque bem sucedido do Maycon que ficou eternizado dentro do código do stallmanbot.py:
def Hacked(obj, cmd):
try:
obj.reply_to(cmd, u"This is the gallery of metions from those who dared to hack, and just made it true.")
obj.reply_to(cmd, u"Helio is my master but Maycon is my hacker <3 (Hack N' Roll)")
gif = "https://media.giphy.com/media/26ufcVAp3AiJJsrIs/giphy.gif"
obj.send_document(cmd.chat.id, gif)
except Exception as e:
obj.reply_to(cmd, f"Deu merda: {e}")
Então acredito que mesmo um ataque bem sucedido de ssh não tenha causado grandes danos. Mas nunca é certeza :)
Outro ponto interessante é que todos os ataques vieram por IPv4. Nenhum, absolutamente nenhum, por IPv6. Até nesse ponto IPv6 é mais seguro.
Terror da Internet, os ataques de DDoS ficaram em evidência ultimamente por causa dos grupos AnonOps e LuzSec, que atacaram vários sites usando essa técnica.
DDoS nada mais é que um ataque do tipo "estouro de boiada". Utilizando máquinas contaminadas, usa-se um programa "administrador" que envia o agendamento do ataque, com data e horário, para uma máquina de destino. No caso esse destino foi num dos servidores que administro. Por acaso onde está o serviço do http://eri.cx entre outros.
O ataque não foi dirigido diretamente à mim, mas um dos sites hospedados lá (não, não foi pro eri.cx). Durante um ataque DDoS, isso não importa muito pois tudo que está hospedado no servidor é afetado juntamente. Ou os serviços tornam-se indisponíveis ou a máquina pode travar, o que não deveria acontecer. Mas um ataque DDoS não abre brechas pra invasão ou algo do gênero.
Felizmente conseguimos mitigar o ataque e minizar seus efeitos com algumas medidas bem simples, que são descritos aqui.
Comecei a suspeitar que algo estava errado quando recebi a mensagem abaixo, da lista de discussão que é mantida nesse servidor.
From: Mail Delivery System <This email address is being protected from spambots. You need JavaScript enabled to view it. >
Date: 2011/7/1
Subject: Undelivered Mail Returned to Sender
To: This email address is being protected from spambots. You need JavaScript enabled to view it.
This is the mail system at host domain.server.com.
I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.
For further assistance, please send mail to postmaster.
If you do so, please include this problem report. You can
delete your own text from the attached returned message.
The mail system
<This email address is being protected from spambots. You need JavaScript enabled to view it. >: Command time limit exceeded: "/var/lib/mailman/mail/mailman
post list"
Imediatamente tentei conectar no servidor e... nada. Página web igualmente fora do ar. Achei que poderia ser algum problema de hardware ou mesmo da máquina virtual. Entrei em contato com a pessoa que tinha o acesso console na máquina e pedi para verificar o que estava acontecendo.
Momentos depois recebi o contato da pessoa avisando que a máquina estava travada e não conseguia dar boot: ela voltava a travar instantes depois. Nesse momento imaginei que podia ser um ataque.
Pedi então para dar boot em "single mode" e desabilitar acesso ao apache e mysql e tentar o boot normalmente. Felizmente deu certo, pois ataques DDoS são fortes em volume, mas não muito inteligentes e refinados.
Utilizando o tcpdump, demos uma olhada no tipo de tráfego que chega e vimos que o ataque era direcionado prioritariamente à porta 80 (web):
17:57:01.220234 IP 115.214.63.123.2844 > server.80: Flags [.], ack 1863118067, win 65306, length 0
17:57:01.237522 IP 115.214.63.123.2844 > server.80: Flags [F.], seq 0, ack 1, win 65306, length 0
17:57:01.237582 IP server.80 > 115.214.63.123.2844: Flags [.], ack 1, win 6432, length 0
17:57:01.241481 IP 86.96.227.91.39237 > server.80: Flags [.], ack 1882163284, win 65535, length 0
17:57:01.241527 IP 86.96.227.91.39237 > server.80: Flags [P.], seq 0:285, ack 1, win 65535, length 285
17:57:01.241573 IP server.80 > 86.96.227.91.39237: Flags [.], ack 285, win 6432, length 0
17:57:01.269729 IP server.80 > 86.96.227.91.39237: Flags [.], seq 1:1461, ack 285, win 6432, length 1460
17:57:01.269774 IP server.80 > 86.96.227.91.39237: Flags [P.], seq 1461:2802, ack 285, win 6432, length 1341
Vários pedidos de início de conexão, sem resposta.
O efeito do ataque pode ser visto nesse gráfico, entre as semanas 26 e 27:
Olhando nos logs do apache, pudemos identificar qual o domínio que estava sob ataque. Confirmamos com tcpdump também que boa parte do ataque buscava tal domínio pelo DNS, verificando o tráfego na porta 53. Então tomei a primeira providência para mitigar o ataque: troquei os IPs do domínio no DNS para 127.0.0.1 (loopback).
Como anúncios de DNS demoram um pouco para serem propagados, essa solução começou a mostrar um pouco mais de eficiência somente depois de 1 hora. Mas isso reduziu o ataque na ordem de 60%, ou até mais.
O DNS seria suficiente, mas o ataque poderia voltar buscando somente o IP e esse truque não iria ajudar muito. Então comecei a olhar como estava configurado o servidor Apache, pois um servidor Unix (ou Linux no caso) não pode travar por conta de um ataque desses, a menos que tenha alguma configuração incorreta.
Como o gráfico mostra, o servidor Apache com suas configurações padrão não foi afetado pelo ataque. Vários processos foram criados, mas finalizados em seguida.
Tentei então verificar como estava o sistema durante o ataque, para tentar identificar o que o ataque tinha ocasionado para travar.
Como os gráficos mostram, o ataque não causou nenhum uso excessivo de CPU ou do sistema. Nada que pudesse levar a máquina ao travamento. Mas o servidor travava com o serviço do Apache ligado. Então resolvi olhar os parâmetros TCP do sistema.
Essa imagem me deu a noção clara que os recursos de redes estavam sendo usados em excesso. Mas mesmo isso não deveria causar o travamento de servidor.
Então resolvi olhar como estava o firewall.
A imagem que ajudou a entender o problema foi a de ipconntrack. Como o netfilter (iptables) utiliza um modo "stateful", cada pacote que entra no sistema ocupa uma posição de memória, para poder identificar (e liberar) as conexões restantes vindas dessa origem. Como o sistema estava sob ataque, a posição era alocada, mas ficava parada aguardando o fim da conexão, que não acontecia. Pra piorar a situação, o firewall alocava memória e recursos do sistema em kernel level, motivo pelo qual o sistema travava.
Para mitigar esse problema, alteramos os parâmetros de kernel com sysctl da seguinte forma:
net.netfilter.nf_conntrack_generic_timeout=5
net.netfilter.nf_conntrack_tcp_timeout_syn_sent=120
net.netfilter.nf_conntrack_tcp_timeout_syn_recv=10
net.netfilter.nf_conntrack_tcp_timeout_established=10
net.netfilter.nf_conntrack_tcp_timeout_fin_wait=5
net.netfilter.nf_conntrack_tcp_timeout_close_wait=3
net.netfilter.nf_conntrack_tcp_timeout_last_ack=10
net.netfilter.nf_conntrack_tcp_timeout_time_wait=5
net.netfilter.nf_conntrack_tcp_timeout_close=10
net.netfilter.nf_conntrack_tcp_timeout_max_retrans=300
net.netfilter.nf_conntrack_tcp_timeout_unacknowledged=300
net.netfilter.nf_conntrack_tcp_loose=1
net.netfilter.nf_conntrack_tcp_be_liberal=0
net.netfilter.nf_conntrack_tcp_max_retrans=3
net.netfilter.nf_conntrack_udp_timeout=30
net.netfilter.nf_conntrack_udp_timeout_stream=180
net.netfilter.nf_conntrack_icmp_timeout=30
net.netfilter.nf_conntrack_icmpv6_timeout=30
net.netfilter.nf_conntrack_frag6_timeout=60
net.netfilter.nf_conntrack_frag6_low_thresh=196608
net.netfilter.nf_conntrack_frag6_high_thresh=262144
net.netfilter.nf_conntrack_acct=1
net.netfilter.nf_conntrack_events=1
net.netfilter.nf_conntrack_events_retry_timeout=15
net.netfilter.nf_conntrack_max=15876
net.netfilter.nf_conntrack_count=254
net.netfilter.nf_conntrack_buckets=4096
net.netfilter.nf_conntrack_checksum=1
net.netfilter.nf_conntrack_log_invalid=0
net.netfilter.nf_conntrack_expect_max=64
net.core.somaxconn=128
net.ipv4.netfilter.ip_conntrack_generic_timeout=5
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_sent=120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_sent2=120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_recv=20
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=10
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait=5
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait=3
net.ipv4.netfilter.ip_conntrack_tcp_timeout_last_ack=10
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait=5
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close=10
net.ipv4.netfilter.ip_conntrack_tcp_timeout_max_retrans=300
net.ipv4.netfilter.ip_conntrack_tcp_loose=1
net.ipv4.netfilter.ip_conntrack_tcp_be_liberal=0
net.ipv4.netfilter.ip_conntrack_tcp_max_retrans=3
net.ipv4.netfilter.ip_conntrack_udp_timeout=30
net.ipv4.netfilter.ip_conntrack_udp_timeout_stream=180
net.ipv4.netfilter.ip_conntrack_icmp_timeout=30
net.ipv4.netfilter.ip_conntrack_max=15876
net.ipv4.netfilter.ip_conntrack_count=254
net.ipv4.netfilter.ip_conntrack_buckets=4096
net.ipv4.netfilter.ip_conntrack_checksum=1
net.ipv4.netfilter.ip_conntrack_log_invalid=0
net.nf_conntrack_max=15876
O padrão de timeout para TCP é de 2 horas. Alterei para alguns segundos. Com isso pudemos reiniciar todos os serviços e mitigar totalmente o ataque, tendo a certeza que o servidor não travaria novamente.
Vírus, spammers, cavalos de tróia, etc. Os caminhos da Internet são cheios de bestas mitológicas, tão devastadores quanto os das epopéias gregas. Arrasando tudo a sua frente, sem dó, sem misericórdia.
E finalmente chegou meu dia de saborear tal destino. Conseguiram invadir esse site e fazer um "defacement", ou em bom português, desfigurar o site.
Como já dizia o dito popular: "em casa de ferreiro, o espeto é de pau". O site é baseado no CMS Mambo Server, de onde o Joomla surgiu. Como uso o Mambo desde 2005 (o primeiro post tem data de "Apr 27, 2005 at 12:06 PM"), por sugestão do meu caro amigo Eduardo Maçan que também o utilizava na época, nunca me incomodei em atualizar muito ou migrar pra outra plataforma. Comecei com a versão 4.5.0, mas tinha atualizado para 4.5.1, quando fiz a "cara" verdinha do site. A mudança foi justamente por motivo de segurança.
E agora, finalmente, fui atacado com sucesso. O ataque foi através do uso de um script chamado Fx29PHPBot. Não achei muita informação sobre o mesmo, mas deve estar baseado em algum sql injection ou coisa do tipo. Isso deixou alguns arquivos extras no servidor:
fx29id2.txt fx29bot.txt fx.php
além do próprio index.php, que foi sobrescrito.
Como o sistema é hospedado e não tenho acesso aos logs... só me restou buscar um backup do site, e carregar em read-only, até descobrir como o ataque ocorreu e, o mais importante, como impedir. Agora posso voltar a postar, utilizando a última versão do Mambo server, 4.6.2. O upgrade foi meio traumático, mas aparentemente com sucesso.
Aparentemente a Telefonica mudou de opinião sobre a politica de bloqueio das portas dentro do range dos "well know services". Recentemente realizei um teste por acaso e descobri minha porta 80, 443 e outras completamente disponíveis na rede. Verificando os logs via webalizer, vi que a quantidade de acessos aumento significante. Olhando cuidadosamente os logs, verifiquei que os ataques também. Mas entre os ataques e a portas liberadas, eu prefiro a segunda alternativa.
Um link interessante sobre WPA2 e AES para autenticação com sistema de chaves assimétricas e geração de chaves aleatórias. Substitui com muito mais segurança o factível WEP. Infelizmente sua implementação não é tão fácil assim e nem todos equipamentos funcionam a contento. Mas aqui fica a referência.