Um pouco de fundo: Acabamos de invadir nosso sistema de PBX. O servidor em si parece seguro (sem acesso não autorizado ao console - SSH etc), mas de alguma forma os hackers conseguiram injetar um novo usuário administrador no software PBX (FreePBX, suportado pelo MySQL). Os logs do Apache sugerem que os hackers conseguiram adicionar o usuário sem usar a interface da web (ou qualquer exploração na interface da web).
Agora, eu descobri que o MySQL estava rodando sem uma senha root (!!) e abertamente ligado ao endereço IP externo (Obviamente, eu bloqueei isso agora). No entanto, o único usuário de nível raiz no MySQL era 'root'@'localhost'
e 'root'@'127.0.0.1'
, sendo que ambos deveriam estar acessíveis apenas localmente.
Então, minha pergunta é a seguinte:
Existe uma maneira de falsificar uma conexão com o MySQL para permitir a conexão com o usuário 'root' @ 'localhost' a partir de um endereço IP remoto, SEM executar qualquer outra exploração localmente?
Para referência, a caixa é Centos 5 (Linux 2.6.10) executando o Mysql 5.0.95.
Respostas:
Não.
O MySQL nunca fará logon em um usuário com a especificação
localhost
ou127.0.0.1
host se você não for do sistema local. Observe que isso também cobre a vulnerabilidade de desvio de autenticação, CVE 2012-2122; a comparação da senha pode ser enganada, mas a comparação do host não é.Você precisaria de algo no sistema para fazer proxy para "enganar" a verificação do host de origem. Algo como phpmyadmin, ou um balanceador de carga como o HAProxy, rodando em frente à porta TCP do MySQL, vem à mente.
fonte
O nome
root
é criado por padrão e é muito conhecido. A raiz do valor literal não tem nenhum significado no sistema de privilégios do MySQL. Portanto, não há requisitos para continuar com o nome de usuárioroot
.Você deve alterar
root
o nome do usuário para outra coisa, para que o mundo exterior não seja capaz de identificá-lo (palpite) facilmente, isso reduzirá as tentativas de invasão.Por exemplo: se você tem um usuário como
root
@,localhost
que é bastante conhecido por todos, os hackers tentarão conectá-lo, você deve alterá-lo para algo específico comoadmin_db_name
@localhost
para melhor segurança.Monitore uma variável de status chamada
Aborted_connects
periodicamente para saber aRefused
conexão com o servidor MySQL; ela deve ser 0 após oFlush status;
comando e não deve aumentar ainda mais.fonte
Será que "não registrado acesso não autorizado" incluem a falha de início de sessão tentativas? Caso contrário, pode ser o CVE 2012-2122 .
fonte