sql >> Base de Datos >  >> RDS >> PostgreSQL

Uso del cifrado para fortalecer la seguridad de la base de datos PostgreSQL

Tenga en cuenta:partes del blog contienen referencias y ejemplos del "ANUNCIO DE LA DISPONIBILIDAD DEL CIFRADO DE NIVEL DE INSTANCIA DE POSTGRESQL" de CyberTec, una empresa que brinda soporte, consultoría y capacitación para PostgreSQL.

Las organizaciones manejan diferentes tipos de datos, incluida información muy importante que debe almacenarse en una base de datos. La seguridad es un aspecto clave a tener en cuenta para garantizar que los datos confidenciales, como los registros médicos y las transacciones financieras, no terminen en manos de personas con medios nefastos. A lo largo de los años, los desarrolladores proponen múltiples medidas para mejorar la protección e integridad de los datos. Una de las técnicas más empleadas es el cifrado para evitar filtraciones de datos.

Por mucho que haya utilizado medidas de protección complejas, es posible que algunas personas terminen accediendo a su sistema. El cifrado es una capa adicional de seguridad. PostgreSQL ofrece cifrado en diferentes niveles además de brindar flexibilidad para proteger los datos de la divulgación como resultado de administradores no confiables, conexiones de red inseguras y robo del servidor de la base de datos. PostgreSQL proporciona diferentes opciones de encriptación como:

  • Autenticación de host SSL
  • Cifrado de datos en una red
  • Cifrado de partición de datos
  • Cifrado para columnas específicas
  • Cifrado de almacenamiento de contraseñas
  • Cifrado del lado del cliente

Sin embargo, cuanto más sofisticada sea la estrategia de encriptación que emplee, mayor será la probabilidad de que no pueda acceder a sus datos. Además, el proceso de lectura no solo será difícil, sino que también requerirá muchos recursos para consultar y descifrar. La opción de cifrado que seleccione depende de la naturaleza de los datos con los que esté tratando en términos de confidencialidad. El siguiente diagrama ilustra el procedimiento general de cifrado y descifrado de datos durante las transacciones del servidor.

Este artículo analiza las diferentes formas en que una empresa puede proteger la información confidencial, pero el principal punto de interés será el cifrado a nivel de instancia que se mencionó anteriormente.

Cifrado

El cifrado es una práctica de codificación de datos para que ya no estén en su formato original y no se puedan leer. Hay 2 tipos de datos en cuanto a la base de datos se refiere:datos en reposo y datos en movimiento. Cuando los datos se almacenan en la base de datos, se denominan datos en reposo. Por otro lado, si un cliente, por ejemplo, envía una solicitud a la base de datos, si se devuelven algunos datos y es necesario que lleguen al cliente, se denominan datos en movimiento. Los dos tipos diferentes de datos deben protegerse utilizando una tecnología similar. Por ejemplo, si se desarrolla una aplicación en la que un usuario necesita enviar una contraseña, esta contraseña no se almacenará en la base de datos como texto sin formato. Hay algunos procedimientos de codificación que se utilizan para cambiar este texto sin formato en una cadena diferente antes del almacenamiento. Además, si el usuario necesita usar esta contraseña, por ejemplo, para un sistema de inicio de sesión, entonces necesitamos una forma de comparar una que se enviará en el proceso de descifrado.

El cifrado de la base de datos se puede implementar de diferentes maneras, pero muchos desarrolladores no tienen en cuenta el nivel de transporte. Sin embargo, los diferentes enfoques también están asociados con diferentes dificultades entre los tiempos de acceso a datos más lentos, especialmente cuando se accede mucho a la memoria virtual.

Cifrado de datos en reposo

Los datos en reposo significan datos inactivos que se almacenan físicamente en el disco. Cuando se trata de alojar una base de datos en un entorno de nube, donde el proveedor de la nube tiene acceso completo a la infraestructura, el cifrado puede ser una buena medida para mantener el control sobre los datos. Algunas de las estrategias de encriptación que puede usar se analizan a continuación.

Cifrado de disco completo (FDE)

El concepto detrás de FDE es generalmente proteger cada archivo y almacenamiento temporal que pueda contener partes de los datos. Es bastante eficiente, especialmente cuando te cuesta seleccionar lo que quieres proteger o, más bien, si no quieres perderte ningún archivo. La principal ventaja de esta estrategia es que no requiere atención especial por parte del usuario final después de tener acceso al sistema. Sin embargo, este enfoque tiene algunas trampas. Estos incluyen:

  • El proceso de cifrado y descifrado ralentiza el tiempo total de acceso a los datos.
  • Es posible que los datos no estén protegidos cuando el sistema está encendido, ya que la información se descifrará y estará lista para leer. Por lo tanto, debe implementar otras estrategias de encriptación, como la encriptación basada en archivos.

Cifrado basado en archivos

En este caso, los archivos o directorios son cifrados por el propio sistema de archivos criptográficos apilables. En PostgreSQL, a menudo usamos el enfoque pg_crypto como se explica en este artículo.

Algunas de las ventajas del cifrado del sistema de archivos incluyen:

  • El control de acciones se puede aplicar mediante el uso de criptografía de clave pública
  • Administración separada de archivos cifrados, de modo que se realicen copias de seguridad de archivos modificados individualmente, incluso en forma cifrada, en lugar de realizar copias de seguridad de todo el volumen cifrado.

Sin embargo, este no es un método de encriptación muy confiable que pueda usar para sus datos agrupados. El motivo es que algunas soluciones de cifrado basadas en archivos pueden dejar un remanente de archivos cifrados de los que un atacante puede recuperarse. Por lo tanto, el mejor enfoque de combinación es combinar esto con el cifrado de disco completo.

Cifrado a nivel de instancia

El nivel de instancia utiliza búferes de modo que todos los archivos que componen el clúster de PostgreSQL se almacenan en el disco como cifrado de datos en reposo. Luego se presentan como bloques descifrados a medida que se leen del disco a los búferes compartidos. Después de escribir estos bloques en el disco desde los búferes compartidos, se vuelven a cifrar automáticamente. La base de datos primero se inicializa con cifrado utilizando el comando initdb. En segundo lugar, durante el inicio, el servidor obtiene la clave de cifrado de cualquiera de estas dos formas; mediante el parámetro pgcrypto.keysetup_command o mediante una variable de entorno.

Descargue el documento técnico hoy Gestión y automatización de PostgreSQL con ClusterControl Obtenga información sobre lo que necesita saber para implementar, monitorear, administrar y escalar PostgreSQLDescargar el documento técnico

Configuración del cifrado de nivel de instancia

En los pasos a continuación se describe un pequeño resumen sobre cómo puede configurar el cifrado a nivel de instancia:

  1. Compruebe si tiene "contrib" instalado usando el comando rpm -qa |grep contrib para SO basado en RedHat o dpkg -l |grep contrib para SO basado en Debian. Si no está en la lista, instálelo con apt-get install postgresql-contrib si está usando el entorno basado en Debian o yum install postgresql-contrib si está usando un sistema operativo basado en RedHat.
  2. Cree el código PostgreSQL.
  3. Inicialización del clúster estableciendo la clave de cifrado y ejecutando el comando he initdb
    read -sp "Postgres passphrase: " PGENCRYPTIONKEY
    export PGENCRYPTIONKEY=$PGENCRYPTIONKEY
    initdb –data-encryption pgcrypto --data-checksums -D cryptotest
  4. Inicie el servidor con el comando
    $ postgres -D /usr/local/pgsql/data
  5. Configuración de la variable de entorno PGECRYPTIONKEY con el comando:
    export PGENCRYPTIONKEY=topsecret pg_ctl -D cryptotest start
    La clave también se puede configurar a través de un procedimiento de lectura de clave personalizado y más seguro a través del comando mencionado anteriormente "pgcrypto.keysetup_command" parámetro postgresql.conf.

Expectativas de rendimiento

El cifrado siempre tiene un costo de rendimiento, ya que no hay opciones sin costo. Si su carga de trabajo está orientada a IO, puede esperar un rendimiento considerablemente reducido, pero puede que no sea así. A veces, en el hardware de servidor típico, si el conjunto de datos se comparte menos en los búferes o su tiempo de permanencia en los búferes es pequeño, el impacto en el rendimiento puede ser insignificante.

Después de realizar el cifrado de mi base de datos, realicé una pequeña prueba para verificar si el cifrado realmente afecta el rendimiento y los resultados se tabulan a continuación.

Carga de trabajo Sin encriptación Con cifrado Coste de rendimiento
Operación de inserción masiva 26 s 68s 161 %
Ajuste de lectura y escritura en búferes compartidos (en una proporción de 1:3) 3200TPS 3068TPS 4,13 %
Solo lectura desde búferes compartidos 2234 TPS 2219 TPS 0,68 %
Solo lectura que no encaja en los búferes compartidos 1845 TP 1434 TPS 22,28 %
Lectura y escritura que no encajan en los búferes compartidos en una proporción de 1:3 3422 TPS 2545 TPS 25,6 %

Como se muestra en la tabla anterior, podemos ver que el rendimiento no es lineal, ya que a veces salta del 161 % al 0,7 %. Esta es una simple indicación de que el rendimiento del cifrado es específico de la carga de trabajo además de ser sensible a la cantidad de páginas que se mueven entre los búferes compartidos y el disco. Esto también puede afectar la potencia de la CPU dependiendo de la carga de trabajo involucrada. El cifrado a nivel de instancia es una opción bastante viable y el enfoque más simple para varios entornos.

Conclusión

El cifrado de datos es una tarea importante, especialmente para la información confidencial en la gestión de bases de datos. Hay una serie de opciones disponibles para el cifrado de datos en lo que respecta a PostgreSQL. Al determinar qué enfoque utilizar, es importante comprender los datos, la arquitectura de la aplicación y el uso de los datos, ya que el cifrado tiene un costo de rendimiento. De esta manera, podrá comprender:cuándo habilitar el cifrado, dónde están expuestos sus datos y dónde están seguros, cuál es el mejor enfoque de cifrado para usar.