Os testadores de penetração iniciantes, em particular, colocam menos ênfase na segurança do banco de dados em geral. Uma aplicação sem configuração de banco de dados e testes de segurança não pode ser segura. Você já pode estar usando o software MySQL, um sistema de gerenciamento de banco de dados, então como torná-lo mais seguro? Aqui estão sete passos que você precisa seguir.
1. Use o túnel SSH em vez da conexão remota
O serviço MySQL é executado na porta 3306 por padrão. Ao instalar o MySQL, você verá que a porta 3306 está em modo de escuta para todas as conexões. Tal como está, a porta do MySQL está aberta para o mundo exterior. É por isso que você deve configurar o serviço MySQL para ouvir apenas o endereço local.
Como os servidores geralmente são executados em uma distribuição Linux, os exemplos abaixo são baseados em uma distribuição Debian. O arquivo que você precisa usar para tunelamento SSH em vez de conexão remota e para fechar a porta padrão para o mundo exterior é
/etc/mysql/my.cnf. Neste arquivo, você precisa abrir um campo chamado [mysqld] e escreva o seguinte comando:[mysqld]
vincular-endereço=127.0.0.1
Após este processo, não esqueça de salvar este arquivo e reiniciar o serviço com o seguinte comando:
sudo systemctl reiniciar mysqld
# ou
sudosystemctlreiniciarmariadb.serviço
Com isso, o serviço MySQL irá escutar apenas o endereço local.
Se você estiver usando o MariaDB, também pode examinar /etc/mysql/mariadb.conf.d/50-server.cnf e verifique se existe uma definição para endereço de ligação.
Agora que você tem o endereço de ligação definido como 127.0.0.1, que é localhost, você pode executar uma varredura do Nmap e verificar a saída:
Você pode ver a porta MySQL como 127.0.0.1 representa o localhost que você vê. Você pode tentar alterar o endereço de ligação novamente para garantir que isso funcione:
[mysqld]
vincular-endereço=127.5.5.1
Em seguida, salve o /etc/mysql/my.cnf arquivo e reinicie o serviço MySQL. Se você realizar uma varredura do Nmap novamente neste estágio, você não deve ver este endereço de ligação no localhost.
Depois de saber que isso funciona, volte para as configurações da primeira etapa e defina o endereço de ligação de volta para 127.0.0.1 e salve novamente.
2. Configurar uma barreira de acesso a arquivos locais
O MySQL pode se comunicar com o sistema de arquivos local. Com consultas, você pode ver o conteúdo de um texto no sistema de arquivos local ou gravar o resultado da consulta em um disco. Para impedir que invasores mal-intencionados usem esse recurso, você deve impedir que o MySQL se comunique com o sistema de arquivos local.
Você pode usar uma função chamada local-infile para tomar precauções. Por exemplo, imagine que você tenha um arquivo chamado "/etc/secretfile.txt" e tenha uma senha neste arquivo. Se o valor da função local-infile em seu arquivo /etc/mysql/my.cnf for 1, então o acesso está aberto. Então você pode acessar o arquivo secretfile.txt.
O valor da função local-infile é 1. Reinicie o banco de dados MySQL para que as alterações ocorram. Agora, conecte-se ao MySQL com o seguinte comando e verifique se você pode ver o arquivo secretfile.txt:
SELECIONELOAD_FILE("/etc/secretfile.txt");
Não é difícil capturar as informações em qualquer arquivo em seu computador.
Para resolver esse problema, altere o valor local-infile em seu arquivo /etc/mysql/my.cnf da seguinte maneira:
[mysqld]
local-infile=0
Reinicie o serviço MySQL. Reconecte-se ao MySQL e repita o passo anterior; você não poderá mais ver o conteúdo do arquivo.
Se os usuários ainda não tiverem permissões de leitura e gravação em arquivos locais, eles não poderão ver esse arquivo. No entanto, ainda é algo que você deve verificar nos testes de penetração e na segurança do banco de dados.
3. Definir usuários e senhas do aplicativo
O usuário de gerenciamento de banco de dados e o usuário MySQL que acessa o banco de dados devem ser diferentes um do outro. Em outras palavras, conectar aplicativos ao MySQL com usuários root é extremamente perigoso. Se possível, defina os usuários de aplicativos que não executam Operações UPDATE ou INSERT separadamente.
Outra coisa a considerar neste ponto são as senhas dos usuários. Como em quase todos os campos, as senhas para usuários do MySQL precisam ser complexas e imprevisíveis. Se precisar de ajuda com isso, existem ótimos sistemas geradores de senhas que você pode usar.
4. Excluir usuários anônimos
Quando você instala o MySQL por padrão, alguns usuários anônimos ocorrem. Você precisa excluí-los e bloquear seu acesso. Para um servidor MySQL seguro, você não deve obter nenhuma resposta como resultado da seguinte consulta:
SELECIONE * DE mysql.user ONDEDO UTILIZADOR="";
# Saída de Exemplo
Vazio definir (0,001 seg)
Se houver algum resultado, você deve excluir esses usuários anônimos. Por exemplo, se houvesse uma conta anônima chamada "anonuser" em um ambiente chamado "localhost", você teria que usar um comando como o seguinte para excluir essa conta:
ABANDONAR USUÁRIO 'um não-usuário'@'host local';
5. Verifique as permissões de arquivo local do MySQL
Imagine que você é um administrador de banco de dados e deseja retornar aos dados de uma semana atrás. Nesse caso, pode ser necessário conectar-se ao servidor de banco de dados via SSH e alterar os arquivos MySQL desejados. Ao fazer isso, você pode ter usado os privilégios de usuário root do Linux; ou seja, a propriedade e as permissões dos arquivos de dados podem mudar. Você não quer isso.
Veja o diretório /var/lib/mysql para verificar as permissões concedidas. O que você precisa verificar aqui é se o proprietário de todos os arquivos é o usuário do MySQL. O seguinte comando fará o truque:
sudo ls -al /var/lib/mysql
As permissões de leitura e gravação dos arquivos devem ser apenas para o usuário do MySQL. Nenhum outro usuário deve ter permissões.
6. Usar MySQL SSL
Pensar em um exemplo concreto é a melhor maneira de entender o uso de MySQL e SSL. Imagine que um dos servidores da região do ABC, onde existem muitos servidores diferentes, seja invadido por hackers mal-intencionados. Os hackers farão uma varredura interna na região do ABC. Dessa forma, eles coletam informações sobre os servidores.
Se eles detectarem um servidor MySQL durante este processo, eles podem executar um Ataque Man-in-the-Middle (MitM) no servidor de destino, o que significa que eles podem roubar as informações de sessão de aplicativos e usuários que se conectam a este servidor. Uma das melhores maneiras de evitar isso é ativar SSL no servidor MySQL.
7. Arquivos de registro e histórico
Você usa os logs do MySQL para analisar e encontrar erros. Você pode editar onde esses logs são mantidos inserindo my.cnf da seguinte maneira:
# /etc/mysql/my.cnf
[mysqld]
registro =/var/registro/mylogfiles
Você pode alterar o nome ou local de mylogfiles como desejar. Há mais um arquivo que você precisa verificar. Quando você se conecta ao servidor MySQL em um terminal Linux e digita vários comandos, essas consultas são salvas no arquivo mysql_history. Se você executar o seguinte comando, poderá ver as consultas que está usando no terminal MySQL:
gato ~/.mysql_history
Você precisa excluir o conteúdo deste arquivo se não quiser fornecer informações sobre que tipo de consultas você está fazendo dentro do servidor. Use o seguinte comando para excluir o conteúdo do arquivo:
sudo eco "limpo"> ~/.mysql_history
Você pode então verificar o conteúdo do arquivo novamente.
Quem possui o banco de dados possui o sistema
Não importa em qual setor você trabalha, seu banco de dados sempre contém informações importantes. Podem ser seus clientes, contas bancárias e senhas. Os invasores mal-intencionados sabem a importância e o valor deles. Os desenvolvedores e administradores de banco de dados precisam saber pelo menos o básico que encontrarão nos testes de penetração para vencer os hackers.