PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Utilizando criptografia para fortalecer a segurança do banco de dados PostgreSQL


Observação:Partes do blog contêm referências e exemplos de "ANNONCING AVAILABILITY OF POSTGRESQL INSTANCE LEVEL ENCRYPTION" da CyberTec, uma empresa que fornece suporte, consultoria e treinamento para PostgreSQL.

As organizações lidam com diferentes tipos de dados, incluindo informações muito importantes que precisam ser armazenadas em um banco de dados. A segurança é um aspecto fundamental a ser considerado para garantir que dados confidenciais, como registros médicos e transações financeiras, não acabem nas mãos de pessoas com meios nefastos. Ao longo dos anos, os desenvolvedores criaram várias medidas para melhorar a integridade e a proteção dos dados. Uma das técnicas mais empregadas é a criptografia para evitar violações de dados.

Por mais que você tenha usado medidas de proteção complexas, algumas pessoas ainda podem acabar tendo acesso ao seu sistema. A criptografia é uma camada adicional de segurança. O PostgreSQL oferece criptografia em diferentes níveis, além de fornecer flexibilidade na proteção de dados contra divulgação como resultado de administradores não confiáveis, conexões de rede inseguras e roubo de servidor de banco de dados. O PostgreSQL fornece diferentes opções de criptografia, como:
  • Autenticação de host SSL
  • Criptografia de dados em uma rede
  • Criptografia de partição de dados
  • Criptografia para colunas específicas
  • Criptografia de armazenamento de senha
  • Criptografia do lado do cliente

No entanto, quanto mais sofisticada a estratégia de criptografia que você emprega, maior a probabilidade de você ser bloqueado de seus dados. Além disso, o processo de leitura não será apenas difícil, mas também exigirá muitos recursos para consultar e descriptografar. A opção de criptografia selecionada depende da natureza dos dados com os quais você está lidando em termos de confidencialidade. O diagrama abaixo ilustra o procedimento geral de criptografia e descriptografia de dados durante as transações do servidor.

Este artigo discute as diferentes maneiras pelas quais uma empresa pode proteger informações confidenciais, mas o principal ponto de interesse será a criptografia em nível de instância mencionada anteriormente.

Criptografia


A criptografia é uma prática de codificação de dados para que eles não estejam mais em seu formato original e não possam ser lidos. Existem 2 tipos de dados no que diz respeito ao banco de dados:dados em repouso e dados em movimento. Quando os dados são armazenados no banco de dados, eles são chamados de dados em repouso. Por outro lado, se um cliente, por exemplo, envia uma solicitação ao banco de dados, se algum dado é retornado e precisa chegar ao cliente, então é chamado de dado em movimento. Os dois tipos diferentes de dados precisam ser protegidos usando tecnologia semelhante. Por exemplo, se um aplicativo for desenvolvido de forma que um usuário precise enviar uma senha, essa senha não será armazenada no banco de dados como texto simples. Existem alguns procedimentos de codificação que são usados ​​para alterar esse texto simples em alguma string diferente antes do armazenamento. Além disso, se o usuário precisar usar essa senha, por exemplo, para um sistema de login, precisamos de uma forma de comparar uma que será enviada no processo de descriptografia.

A criptografia de banco de dados pode ser implementada de diferentes maneiras, mas muitos desenvolvedores não levam em consideração o nível de transporte. No entanto, as diferentes abordagens também estão associadas a diferentes armadilhas entre tempos de acesso a dados mais lentos, especialmente quando a memória virtual está sendo muito acessada.

Criptografia de dados em repouso


Dados em repouso significam dados inativos que são armazenados fisicamente no disco. Quando se trata de hospedar um banco de dados em um ambiente de nuvem, onde o fornecedor da nuvem tem acesso total à infraestrutura, a criptografia pode ser uma boa medida para manter o controle sobre os dados. Algumas das estratégias de criptografia que você pode usar são discutidas abaixo.

Criptografia completa de disco (FDE)


O conceito por trás do FDE é geralmente proteger todos os arquivos e armazenamentos temporários que possam conter partes dos dados. É bastante eficiente, especialmente quando você tem dificuldade em selecionar o que deseja proteger ou melhor, se não deseja perder um arquivo. A principal vantagem dessa estratégia é que ela não requer atenção especial por parte do usuário final após ter acesso ao sistema. Esta abordagem tem algumas armadilhas embora. Esses incluem:
  • O processo de criptografia e descriptografia diminui o tempo geral de acesso aos dados.
  • Os dados podem não ser protegidos quando o sistema está ligado, pois as informações serão descriptografadas e estarão prontas para leitura. Portanto, você precisa usar algumas outras estratégias de criptografia, como criptografia baseada em arquivo.

Criptografia baseada em arquivo


Nesse caso, os arquivos ou diretórios são criptografados pelo próprio sistema de arquivos criptográficos empilháveis. No PostgreSQL, geralmente usamos a abordagem pg_crypto conforme discutido neste artigo.

Algumas das vantagens da criptografia do sistema de arquivos incluem:
  • O controle de ação pode ser aplicado por meio do uso de criptografia de chave pública
  • Gerenciamento separado de arquivos criptografados, de modo que backups de arquivos alterados individualmente, mesmo em formato criptografado, em vez de backup de todo o volume criptografado.

No entanto, esse não é um método de criptografia muito confiável que você pode usar para seus dados em cluster. O motivo é que algumas soluções de criptografia baseadas em arquivos podem deixar um resquício de arquivos criptografados dos quais um invasor pode se recuperar. A melhor abordagem de combinação é, portanto, combiná-la com a criptografia completa do disco.

Criptografia em nível de instância


O nível de instância usa buffers para que todos os arquivos que compõem o cluster PostgreSQL sejam armazenados em disco como criptografia de dados em repouso. Eles são então apresentados como blocos descriptografados à medida que são lidos do disco em buffers compartilhados. Depois de gravar esses blocos em disco a partir dos buffers compartilhados, eles são novamente criptografados automaticamente. O banco de dados é inicializado primeiro com criptografia usando o comando initdb. Em segundo lugar, durante a inicialização, a chave de criptografia é buscada pelo servidor de uma dessas duas maneiras; através do parâmetro pgcrypto.keysetup_command ou através de uma variável de ambiente.
Baixe o whitepaper hoje PostgreSQL Management &Automation with ClusterControlSaiba o que você precisa saber para implantar, monitorar, gerenciar e dimensionar o PostgreSQLBaixe o whitepaper

Configurando a criptografia no nível da instância


Uma pequena recapitulação sobre como você pode configurar a criptografia no nível da instância é descrita nas etapas abaixo:
  1. Verifique se você tem “contrib” instalado usando o comando rpm -qa |grep contrib para SO baseado em RedHat ou dpkg -l |grep contrib para SO baseado em Debian. Se não estiver na lista, instale-o com apt-get install postgresql-contrib se estiver usando o ambiente baseado em Debian ou yum install postgresql-contrib se estiver usando um sistema operacional baseado em RedHat.
  2. Crie o código PostgreSQL.
  3. Inicializando o cluster estabelecendo a chave de criptografia e executando o comando initdb
    read -sp "Postgres passphrase: " PGENCRYPTIONKEY
    export PGENCRYPTIONKEY=$PGENCRYPTIONKEY
    initdb –data-encryption pgcrypto --data-checksums -D cryptotest
  4. Inicie o servidor com o comando
    $ postgres -D /usr/local/pgsql/data
  5. Definindo a variável de ambiente PGENCRYPTIONKEY com o comando:
    export PGENCRYPTIONKEY=topsecret pg_ctl -D cryptotest start
    A chave também pode ser definida através de um procedimento de leitura de chave personalizado e mais seguro através do parâmetro postgresql.conf do comando mencionado acima “pgcrypto.keysetup_command”.

Expectativas de desempenho


A criptografia sempre tem um custo de desempenho, pois não há opções sem custo. Se sua carga de trabalho for orientada para E/S, você pode esperar um desempenho consideravelmente reduzido, mas esse pode não ser o caso. Às vezes, no hardware de servidor típico, se o conjunto de dados for menos compartilhado nos buffers ou seu tempo de permanência nos buffers for pequeno, o impacto no desempenho pode ser insignificante.

Após fazer a criptografia do meu banco de dados, executei alguns pequenos testes para verificar se a criptografia realmente afeta o desempenho e os resultados estão tabulados abaixo.
Carga de trabalho Sem criptografia Com criptografia Custo de desempenho
Operação de inserção em massa 26s 68s 161%
Ajuste de leitura e gravação em buffers compartilhados (na proporção de 1:3) 3200TPS 3068TPS 4,13%
Somente leitura de buffers compartilhados 2234 TPS 2219 TPS 0,68%
Somente leitura não cabendo em buffers compartilhados 1845 TPs 1434 TPS 22,28%
Leitura-gravação não cabendo em buffers compartilhados na proporção de 1:3 3422 TPS 2545 TPS 25,6%

Conforme ilustrado na tabela acima, podemos ver que o desempenho não é linear, pois às vezes salta de 161% para 0,7%. Essa é uma indicação simples de que o desempenho da criptografia é específico da carga de trabalho, além de ser sensível à quantidade de páginas movidas entre os buffers compartilhados e o disco. Isso também pode afetar o poder da CPU, dependendo da carga de trabalho envolvida. A criptografia em nível de instância é uma opção bastante viável e a abordagem mais simples para vários ambientes.

Conclusão


A criptografia de dados é uma tarefa importante, especialmente para informações confidenciais no gerenciamento de banco de dados. Existem várias opções disponíveis para criptografia de dados no que diz respeito ao PostgreSQL. Ao determinar qual abordagem usar, é importante entender os dados, a arquitetura do aplicativo e o uso de dados, pois a criptografia custa o desempenho. Dessa forma, você poderá entender:quando habilitar a criptografia, onde seus dados estão expostos e onde estão seguros, qual é a melhor abordagem de criptografia a ser usada.