Conta MySQL 'root' @ localhost 'não segura acessada remotamente?

8

Uma pequena experiência: Acabamos de invadir nosso sistema de PBX. O servidor em si parece seguro (sem acesso ao console não autorizado - SSH etc), mas de alguma forma os hackers conseguiram injetar um novo usuário admin no software PBX (FreePBX, apoiado pelo MySQL). Os logs do Apache indicam que os hackers conseguiram adicionar o usuário sem usar a interface da web (ou qualquer exploração na interface da web).

Agora, descobri que o MySQL estava rodando sem uma senha root (!!) e abertamente ligado ao endereço IP externo (Obviamente, eu o fechei agora). No entanto, o único usuário do nível de raiz no MySQL era 'root'@'localhost' e 'root'@'127.0.0.1' , ambos deveriam ter sido acessados localmente.

Então, minha pergunta é esta:

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 outro exploit localmente?

Para referência, a caixa é Centos 5 (Linux 2.6.10) executando o Mysql 5.0.95.

    
por TFk 18.07.2012 / 12:28

3 respostas

1

Não.

O MySQL nunca entrará em um usuário com a especificação de host localhost ou 127.0.0.1 se você não estiver vindo do sistema local. Observe que isso também cobre a vulnerabilidade de desvio de autenticação, CVE 2012-2122; a comparação de senha pode ser enganada, mas a comparação de host não é.

Você precisaria de algo no sistema para fazer proxy para "enganar" a verificação do host de origem. Algo como o phpmyadmin, ou um balanceador de carga como o HAProxy rodando na frente da porta TCP do MySQL, vem à mente.

    
por 19.07.2012 / 07:51
2

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á necessidade de continuar com o nome de usuário root .

Você deve alterar root nome de usuário para outra coisa, para que o mundo exterior não seja capaz de identificar (adivinhar) facilmente, isso reduzirá as tentativas de invasão.

Por exemplo: se você tiver um usuário como root @ localhost , o que é bem conhecido de todos, por isso os hackers tentarão conectá-lo, você deve alterá-lo para algo específico como admin_db_name @ localhost para melhor segurança.

Monitore uma variável de status chamada Aborted_connects periodicamente para saber que Refused está conectada ao seu servidor MySQL, ela deve ser 0 após o comando Flush status; e não deve aumentar ainda mais.

show status like 'Aborted_connects';

    
por 18.07.2012 / 13:14
2

O "nenhum acesso não autorizado registrado" inclui tentativas de login com falha? Caso contrário, pode ser CVE 2012-2122 .

[...] when running in certain environments with certain implementations of the memcmp function, (MySQL) allows remote attackers to bypass authentication by repeatedly authenticating with the same incorrect password, which eventually causes a token comparison to succeed due to an improperly-checked return value.

    
por 18.07.2012 / 13:22