Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Segurança de banco de dados 101:segurança em bancos de dados de código aberto

A segurança dos dados é um dos aspectos mais significativos da administração de um banco de dados. Dependendo da estrutura organizacional, se você estiver gerenciando o banco de dados de produção, deverá monitorar acesso e uso não autorizados. Isso também se aplica ao host subjacente. Neste blog vamos explicar a segurança em bancos de dados de código aberto.

Segurança geral

Depois de instalar o software de banco de dados, precisamos fazer algumas pré-verificações para evitar os erros de segurança mais comuns.

As diretrizes gerais são as seguintes:

  • Nunca dê a ninguém acesso root/admin a outros! Isso é crítico.

  • Saiba como funciona o sistema de privilégios de acesso ao banco de dados. Não conceda mais privilégios do que o necessário. Nunca conceda privilégios a todos os hosts.

  • Não armazene senhas de texto simples em seu banco de dados. Em vez de usar SHA2() ou alguma outra função de hash unidirecional e armazenar o valor de hash.

  • Não use portas padrão e certifique-se de que a porta escolhida não seja acessível de um host não confiável.

  • Coloque o banco de dados de código aberto atrás de um firewall. Isso protege você de pelo menos 50% de todos os tipos de exploits em qualquer software.

Controle de acesso e gerenciamento de contas

Uma das principais funções do banco de dados é autenticar um usuário que se conecta de um determinado host e associar esse usuário a privilégios em um banco de dados. Para controlar quais usuários podem se conectar, cada conta pode receber credenciais de autenticação, como uma senha.



Funções do usuário 

Uma função de banco de dados é uma coleção de qualquer número de privilégios que podem ser atribuídos a um ou mais usuários. Em bancos de dados de código aberto modernos, a maioria dos usuários vem com funções predefinidas.

Gerenciamento de senhas 

Acessar o banco de dados requer que seus usuários se autentiquem com um nome de usuário e senha. O banco de dados aplica a mesma função de hash na senha que o usuário digitou e a compara com o hash armazenado no banco de dados. Se ambos corresponderem, a permissão será concedida. A expiração da senha é necessária para que todos os usuários do banco de dados alterem as senhas periodicamente. E a geração de senha aleatória é necessária para senhas literais explícitas especificadas pelo administrador. Uma coisa importante a ser monitorada é o rastreamento de falha de senha/autenticação incorreta, é recomendável habilitar o bloqueio temporário de conta após muitas falhas consecutivas de login com senha incorreta.

Tratamento de senhas expiradas

Uma vez que a senha expirou, o servidor de banco de dados desconecta uma conexão de cliente de senha expirada.

Exemplo 
[[email protected] vagrant]# mysql -u severalnies -p
Password: ******
ERROR 1862 (HY000): Your password has expired. To log in you must
change it using a client that supports expired passwords.


Limitação dos recursos 

Restringir o uso de recursos do servidor de banco de dados por um cliente, limitando o número de conexões simultâneas que podem ser feitas por qualquer conta de usuário. Por exemplo, podemos restringir o número de consultas que um usuário pode executar por hora ou o número de vezes que um usuário pode se conectar ao servidor por hora.

Conexões criptografadas 

Bancos de dados geralmente suportam conexões criptografadas entre clientes e o servidor usando alguns protocolos de segurança. Usando SSL, ele criptografará as conexões entre os clientes e o servidor. Isso transforma os dados em um formato ilegível na camada de rede e evita a espionagem da rede. Depois que habilitamos o SSL no banco de dados, ele começa a oferecer suporte a conexões criptografadas e não permite conexões não criptografadas.



Componentes e plug-ins de segurança

Os componentes de segurança são facilmente integrados ao banco de dados. Por exemplo, o mysql inclui vários componentes e plugins que implementam recursos de segurança.

Plugins de Autenticação - Esses plug-ins são tentativas de autenticação dos clientes de se conectar ao MySQL Server. Podemos integrar facilmente com nosso servidor de banco de dados.

Plugin de senha - Este plug-in verifica se a senha atual é forte e rejeita quaisquer senhas consideradas fracas.

Plugin de chaveiro - Este plug-in criptografa tablespaces. Essa técnica de criptografia funciona com base na rotação de arquivos de chave. Aqui está um exemplo de como criptografar o MySQL 8.0.

Registro de auditoria - A auditoria é o processo de monitoramento e registro da atividade que ocorre no servidor de banco de dados. É usado para registrar quem está fazendo o quê, por exemplo. operações de banco de dados por usuários, conexões ou tentativas de login com falha. Se você estiver usando um balanceador de carga para acessar o banco de dados, precisará monitorar isso também. Por padrão, os arquivos de log de auditoria são armazenados no diretório de dados do mysql.

Registros de amostra 
20210306 02:30:06,centos14,root,localhost,519,1832,QUERY,,'select sleep(5)',0
20210306 02:30:08,centos14,s9smysqlchk,localhost,571,0,DISCONNECT,,,0
20210306 02:30:09,centos14,root,localhost,519,1867,QUERY,,'show schemas',0

Se você quiser armazenar os arquivos de log de auditoria em locais diferentes, você pode adicionar este parâmetro em seu arquivo de configuração “server_audit_file_path”.

Monitoramento de log - O monitoramento de log fornece à equipe de operações maior nível de visibilidade do ambiente de banco de dados, que compõe as instâncias de banco de dados, mas também os balanceadores de carga. Ajuda a identificar anomalias, quando essas anomalias ocorrem e a frequência com que ocorrem.

Plugin de validação de senha

A senha é como palavras, números e sequência de caracteres. No lado do banco de dados e do servidor, o nome de usuário e a senha eram necessários para determinados acessos. Por exemplo, se a senha fornecida como um valor de texto não criptografado, o plugin validate_password verifica a senha em relação à política de senha atual e rejeita a senha se for fraca.

A validate_password_policy tem três valores LOW, MEDIUM ou STRONG. O valor de LOW verifica apenas o comprimento da senha, a política MEDIUM adiciona algumas condições e a política STRONG adiciona a condição de que substrings de senha que consistem em 4 ou mais caracteres não devem corresponder a palavras em um arquivo de dicionário que pode ser especificado modificando a variável validate_password_dictionary_file.

Plugin LDAP

O plug-in LDAP permite que o servidor de banco de dados aceite conexões de usuários definidos nos diretórios LDAP. Na autenticação LDAP, os plug-ins do lado do cliente e do lado do servidor comunicam a senha como texto não criptografado. Uma conexão segura entre o cliente e o servidor é recomendada para evitar a exposição da senha. Se o nome de usuário do cliente e o nome do host não corresponderem, o banco de dados rejeitará a conexão.

 A configuração do LDAP é muito simples no ClusterControl. Neste post explicamos as etapas de configuração usando o ClusterControl.

Protegendo backups de banco de dados 

Os backups de dados são importantes quando se trata de proteger seus dados. É ainda mais importante garantir que seus backups sejam mantidos seguros e disponíveis para uma recuperação mais rápida. O ClusterControl oferece suporte abrangente para o processo de gerenciamento de backup, incluindo a criptografia dos arquivos de backup usando o algoritmo de criptografia AES-256 antes de enviá-los para outro local.


Acesso VPN à rede do host de salto 

Para acessar o banco de dados de código aberto da rede privada local, o melhor método é usar VPN. A VPN fornece privacidade e segurança aos usuários para criar uma conexão de rede privada em uma rede pública. Um host de salto é um host intermediário ou um gateway SSH para acessar servidores de rede remotos. O servidor de salto atua como um intermediário para conectar as duas extremidades, tornando-o um host "salto" para acessar o outro lado. Esta é uma das formas populares de proteger o servidor do mundo exterior. Podemos usar o tunelamento SSH para acessar uma rede remota de maneira segura, com menos esforço do que configurar um servidor VPN.

Gerenciamento de acesso ao banco de dados via host de salto

Para acessar servidores de banco de dados de produção de forma mais segura, é necessário um servidor de salto dedicado. Este servidor de salto dedicado fornece acesso a uma rede privada a partir de uma rede externa ou pública, como a Internet. Ele fornece uma abordagem em camadas para qualquer usuário acessar sua rede privada, minimizando as chances de um possível ataque ao servidor.

Como podemos conseguir isso?

A prática recomendada é configurar um servidor de salto para se conectar a seus bancos de dados a partir de uma máquina Linux, mesmo que a instância de banco de dados esteja em uma rede privada. Depois de criar o host Jump, siga as diretrizes abaixo,

  • Restringir o acesso público em seus bancos de dados com sub-redes privadas.

  • Restringir o gateway da Internet nas tabelas de rotas.

  • Crie uma nova VPC ou adicione seu host de salto à mesma VPC que sua instância de banco de dados. Em seguida, adicione um gateway de Internet ao seu servidor de salto com sub-redes públicas.





  • Permitir apenas portas de banco de dados específicas para os IPs necessários.






Então podemos criar um túnel SSH para acessar um servidor de banco de dados de forma segura.

SELinux

SELinux é um conjunto de modificações do kernel e ferramentas de espaço do usuário e possui alguns módulos de política. Os módulos de política são contextos do SELinux para definir regras de como processos, arquivos, portas e outros objetos do sistema interagem entre si. A interação entre objetos do sistema só é permitida se uma regra de política permitir.



Os usuários do sistema desconhecem em grande parte o SELinux. Somente os administradores de sistema precisam considerar o quão rígida uma política deve ser implementada para seu ambiente de servidor. Este detalhe dá ao kernel SELinux controle granular completo sobre todo o sistema.