Algumas informações básicas antes de começarmos:
Fonte:Center for Internet Security (CIS) Oracle MySQL Community Server 5.7
Sistema operacional: Windows 10
Onde executar: linha de comando
mysql -u USERNAME -p
Aplicativo de destino: Oracle MySQL Community Server 5.7
Auditoria e registro de sistemas de informação
Os logs desempenham um papel crucial para a segurança quando há uma suspeita de ataque cibernético. Uma revisão manual dos logs é trabalhosa para a equipe de segurança, e eles devem usar ferramentas de revisão de log para extrair informações e analisá-las. Os logs devem usar uma tecnologia de armazenamento e criptografia WORM (gravar uma vez, ler muitos) para evitar corrupção e perda de dados de log. Além disso, os logs devem ter um formato padronizado para facilitar a manutenção, acesso e comparação.
Certifique-se de que "log_error" não está vazio
comando:
SHOW variables LIKE ‘log_error’;
Logs de erros contém dados sobre eventos quando o mysqld inicia ou para. Também mostra quando uma mesa precisa ser avaliada ou reparada. Deve gerar um “valor”. A razão para habilitar o log de erros é que ajuda a aumentar a capacidade de detectar tentativas maliciosas contra o MySQL e outras mensagens vitais.
Certifique-se de que os arquivos de log sejam armazenados em uma partição que não seja do sistema
comando:
SELECT @@global.log_bin_basename;
Os arquivos de log do MySQL podem ser armazenados em qualquer lugar no sistema de arquivos e definidos usando a configuração do MySQL. Além disso, é uma prática recomendada garantir que os logs no sistema de arquivos não fiquem confusos com outros logs, como logs de aplicativos. Você deve garantir que o valor retornado não indique que está na raiz “(‘/’)”, “/var” ou “/usr”. A razão para isso é que o particionamento diminuirá a probabilidade de negação de serviço se o espaço em disco disponível para o sistema operacional estiver esgotado.
Certifique-se de que "log_error_verbosity" não está definido como "1"
comando:
SHOW GLOBAL VARIABLES LIKE ‘log_error_verbosity’;
Esta verificação fornece informações adicionais sobre quais funcionalidades o log do MySQL possui ou habilitou nas mensagens de erro. Um valor de 1 permite o registro de mensagens de erro. Um valor de 2 permite o registro de mensagens de erro e de aviso. Um valor de 3 permite o registro de mensagens de erro, aviso e nota. Isso ajuda a detectar comportamento malicioso registrando erros de comunicação e conexões abortadas.
Verifique se o registro de auditoria está ativado
A ativação do log de auditoria é crucial para o ambiente de produção para sessões interativas de usuários e sessões de aplicativos. Com o registro de auditoria, ele ajuda a identificar quem mudou o quê e quando. Também pode ajudar a identificar o que um invasor fez e pode até ser usado como evidência em investigações.
comando:
SELECT NAME FROM performance_schema.setup_instruments WHERE NAME LIKE ‘%/alog/%’;
comando:
SET GLOBAL general_log = ‘ON’ ;
comando: CRIAR USUÁRIO 'user1'@'localhost' IDENTIFICADO POR SENHA 'not-so-secret';
O caminho do log no Windows 10 pode ser encontrado usando o aplicativo Services, verificando se o MySQL está em execução e clicando com o botão direito do mouse nas propriedades.
O log no sistema do autor estava localizado em:C:\ProgramData\MySQL\MySQL Server 5.7\Data\DJ-JASON-CLARK.log
Autenticação para sistema de informação
A autenticação garante que as credenciais fornecidas pelo usuário ou máquina correspondam ao banco de dados de usuários autorizados em um sistema operacional local ou em um servidor de autenticação. A autenticação é seguida pela autorização, que é concedida por um administrador a usuários ou máquinas. Uma autenticação que é comumente usada em redes públicas e privadas é a autenticação baseada em senha.
Certifique-se de que as senhas não sejam armazenadas na configuração global
A seção [cliente] de um arquivo de configuração do MySQL permite a criação de um usuário e senha. A verificação é importante porque permitir um usuário e senha no arquivo de configuração impacta negativamente na confidencialidade da senha do usuário.
Para auditar, abra o arquivo de configuração do MySQL e examine a seção [cliente] — ela não deve ter nenhuma senha armazenada. Nenhuma senha foi definida no sistema do autor (veja a figura abaixo). Se uma senha foi definida no arquivo de configuração, use mysql_config_editor para armazenar senhas no formato criptografado em .mylogin.cnf.
Certifique-se de que 'sql_mode' contém 'NO_AUTO_CREATE_USER'
O “no_auto_create_user” é uma opção para evitar a criação automática de usuário quando as informações de autenticação não são fornecidas.
comando:
SELECT @@global.sql_mode;
comando:
SELECT @@session.sql_mode;
Certifique-se de que as senhas estejam definidas para todas as contas MySQL
Um usuário pode criar uma senha em branco. Ter uma senha em branco é arriscado, pois qualquer pessoa pode simplesmente assumir a identidade do usuário, inserir o loginID do usuário e conectar-se ao servidor. Isso ignora a autenticação, o que é ruim.
comando:
SELECT User,host FROM mysql.user WHERE authentication_string=’’;
Certifique-se de que 'default_password_lifetime' seja menor ou igual a '90'
Alterar a vida útil da senha para 90 dias diminui o tempo disponível para o invasor comprometer a senha e, portanto, diminui a probabilidade de ser atacado.
comando:
SHOW VARIABLES LIKE ‘default_password_lifetime’;
comando:
SET GLOBAL default_password_lifetime=90;
Certifique-se de que a complexidade da senha esteja em vigor
A complexidade da senha aumenta a segurança das autenticações e inclui adicionar ou aumentar o comprimento, maiúsculas e minúsculas, números e caracteres especiais. Quanto mais complexa a senha, mais difícil para os invasores usarem força bruta para obter a senha. Senhas fracas são facilmente obtidas em um dicionário de senhas.
comando:
SHOW VARIABLES LIKE ‘validate_password%’;
Certifique-se de que nenhum usuário tenha nomes de host curinga
Os usuários com nomes de host curinga (%) recebem permissão para qualquer local. É melhor evitar criar nomes de host curinga. Em vez disso, crie usuários e forneça a eles locais específicos a partir dos quais um determinado usuário pode se conectar e interagir com o banco de dados.
comando:
SELECT user, host FROM mysql.user WHERE host = ‘%’;
Certifique-se de que não existam contas anônimas
Os usuários podem ter um nome de usuário anônimo (vazio ou em branco). Esses nomes de usuário anônimos não têm senhas e qualquer outro usuário pode usar esse nome de usuário anônimo para se conectar ao servidor MySQL. A remoção dessas contas anônimas garante que apenas usuários identificados e confiáveis possam acessar o servidor MySQL.
comando:
SELECT user,host FROM mysql.user WHERE user = ‘’;
Conexão de rede com o servidor MySQL
A conexão de rede desempenha um papel importante para a comunicação entre o usuário e o servidor MySQL. Conexões de rede inseguras são muito vulneráveis a ataques. A seguir estão as verificações da segurança da conexão de rede.
Certifique-se de que 'have_ssl' está definido como 'YES'
Para evitar que invasores maliciosos espiem dentro do seu sistema, é melhor usar SLL/TLS para todo o tráfego de rede ao usar redes não confiáveis.
comando:
WHERE variable_name = ‘have_ssl’;
Certifique-se de que 'ssl_type' está definido como 'ANY', 'X509', ou 'ESPECIFICADO' para todos os usuários remotos
SSL/TLS deve ser configurado por usuário. Isso evita ainda mais a espionagem de invasores mal-intencionados.
comando:
SELECT user, host, ssl_type FROM mysql.user WHERE NOT HOST IN (‘::1’, ‘127.0.0.1’, ‘localhost’);
Replicação
A verificação do status de replicação permite monitorar o desempenho e as vulnerabilidades de segurança. O Microsoft SQL Server Management Studio tem as seguintes ferramentas para monitorar a replicação:
- ver o status do agente de instantâneos,
- visualize o status do agente do leitor de registros e
- veja o status da sincronização.
Garantir que o tráfego de replicação esteja protegido
Replicação o tráfego entre os servidores deve ser protegido. Durante as transferências de replicação, as senhas podem vazar.
Para auditar, verifique se eles estão usando:uma rede privada, uma VPN, SSL/TLS ou um túnel SSH. Espero que o sistema do autor esteja usando uma rede privada. Corrija caso contrário e proteja usando a rede privada, uma VPN, SSL/TLS ou um túnel SSH.
Certifique-se de que 'MASTER_SSL_VERIFY_SERVER_CERT' está definido como 'YES' ou '1'
‘MASTER_SSL_VERIFY_SERVER_CERT’ verifica se a réplica deve verificar o certificado do primário ou não. A réplica deve verificar o certificado do primário para autenticar o primário antes de continuar a conexão.
comando:
SELECT ssl_verify_server_cert FROM mysql.slave_master_info;
Certifique-se de que 'master_info_repository' está definido como 'TABLE'
O ‘master_info_repository’ determina onde a réplica registra o status do primário e as informações de conexão. A senha é armazenada no repositório de informações primário que é um arquivo de texto simples. Armazenar a senha na TABLE master_info é mais seguro.
comando:
SHOW GLOBAL VARIABLES LIKE ‘master_info_repository’;
Certifique-se de que 'super_priv' não esteja definido como 'Y' para usuários de replicação
O O privilégio “SUPER” ('super_priv') localizado na tabela “mysql.user” possui funções como “CHANGE”, “MASTER TO”, “KILL”, “mysqladmin kill”, “PURGE BINARY LOGS”, “SET GLOBAL”, “mysqladmin debug” e outros controles de log. Dar a um usuário o privilégio “SUPER” permite que o usuário visualize e encerre as instruções SQL atualmente em execução, mesmo para gerenciamento de senha. Se o invasor explorar e ganhar o privilégio “SUPER”, ele poderá desabilitar, alterar ou destruir dados de log.
comando:
SELECT user, host FROM mysql.user WHERE user=’repl’ and Super_priv = ‘Y’;
Certifique-se de que nenhum usuário de replicação tenha nomes de host curinga
O MySQL permite que você conceda permissões para nomes de host curinga. Nomes de host curinga devem ser evitados e você deve criar ou modificar usuários e fornecer a eles locais específicos a partir dos quais um determinado usuário pode se conectar e interagir com o banco de dados.
Conclusão
As verificações a seguir são feitas para um único ambiente de trabalho usando MySQL como sistema de informação tanto no lado do aplicativo quanto no lado do usuário.
A avaliação é imprescindível para verificar o log padrão do MySQL e habilitar funções de log adicionais (também permite a verificação de vulnerabilidades de autenticação). As verificações de rede são importantes para evitar que outros usuários mal-intencionados espiem em sua rede. Sempre implemente SSL/TLS para criptografar. É necessário garantir a transferência unidirecional. Proteger o tráfego de replicação adiciona uma camada defensiva.
O resultado da avaliação pode informar se o sistema é capaz de operar em um nível de confiança.
Obrigado por ler meu blog! Agora você iniciou o caminho para proteger seu banco de dados MySQL.=)