Mecanismos de seguridad de los datos

Sistema unificado de autenticación y autorización, cifrado y hash de datos, además de los subsistemas de auditoría y monitorización que protegen los datos en toda la plataforma.

Sistema unificado de autenticación y autorización

El sistema unificado de autenticación y autorización es un componente clave de la protección de datos que proporciona acceso seguro a los recursos del sistema. Permite gestionar los usuarios, sus permisos y el acceso a los datos a nivel de todo el sistema.

Recordatorio:

  • La autenticación es el proceso de verificar la identidad de un usuario (por ejemplo, mediante un nombre de usuario y una contraseña).
  • La autorización es el proceso de comprobar los permisos de un usuario para realizar determinadas acciones (por ejemplo, el acceso a datos o a funciones del sistema).

Componentes del sistema

Autenticación

  • Nombre de usuario y contraseña: el método tradicional de autenticación. Al iniciar sesión, el usuario debe identificarse primero con un nombre de usuario y una contraseña.
  • Autenticación multifactor (MFA): el uso de varios factores (por ejemplo, un token de software que se actualiza dinámicamente para la API web).

La autenticación basada en tokens simplifica el proceso para los usuarios habituales. Para empezar, el usuario envía al servidor una solicitud con un nombre de usuario y una contraseña. El servidor los valida contra los valores registrados en su base de datos de identidades. Si la identidad se confirma, el servidor devuelve un token de autenticación (que también se almacena en la base de datos).

Cuando ese mismo usuario solicita más adelante acceso a recursos protegidos, esas solicitudes pueden autorizarse con el token de autenticación en lugar de con un nombre de usuario y una contraseña. El servidor coteja el token con el registrado en la base de datos y concede el acceso.

Autorización

  • Roles y permisos: a los usuarios se les asignan roles (por ejemplo, administrador de acceso, usuario) que definen sus permisos.
  • ACL (Access Control Lists): listas que definen quién tiene acceso a qué recursos.
  • RBAC (Role-Based Access Control): control de acceso basado en roles.
  • ABAC (Attribute-Based Access Control): control de acceso basado en atributos (por ejemplo, según la hora del día o la ubicación).

Almacenamiento de los datos de usuario

  • Base de datos de usuarios: almacena la información sobre los usuarios, sus roles y sus permisos en una única base de datos.

Seguridad

  • Cifrado: protege los datos durante su transmisión y almacenamiento.
  • Tokens de acceso: tokens de software que se actualizan dinámicamente y se utilizan para la gestión de sesiones.
  • Auditoría: registro de todas las acciones de los usuarios para su posterior análisis.

Implementación del sistema

La plataforma utiliza un flujo de autenticación basado en tokens. El usuario inicia sesión con un nombre de usuario y una contraseña, el sistema los valida y devuelve un token de acceso, y ese token se envía después con cada solicitud posterior para autorizar el acceso a los recursos protegidos. La dirección de correo electrónico del usuario se utiliza como nombre de usuario.

Ejemplo de una solicitud en formato Curl:

Request example
curl -i --header "Content-Type: application/json" \
--request POST \
--data '{"email":"api@local.net","password":"Str0ngPas$"}'\
https://server123/api/v1/auth/sign_in

Como respuesta, recibimos el siguiente mensaje:

Response example
HTTP/1.1 200 OK
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block X-Content-Type-Options: nosniff X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none Referrer-Policy: strict-origin-when-cross-origin Content-Type: application/json; charset=utf-8 access-token: tgervk9_9xicJYpmSsnnNA
token-type: Bearer
client: D-Uv3ER53873olhnNLjL9w
expiry: 1615227012
uid: api@local.net
ETag: W/"5b9bcc76f7223b72b79d9f2d31ff0fd5"
Cache-Control: max-age=0, private, must-revalidate
X-Request-Id: c18e06b4-e5bd-40b5-875d-7ac958e2fbb5
X-Runtime: 0.391069
Transfer-Encoding: chunked
{"data":{"id":6,"email":"api@local.
net","provider":"email","uid":"api@local.net","name":"API user"}}

En esta respuesta nos interesa el parámetro access_token. El valor de esta cabecera se utiliza como contraseña en cada solicitud y cambia con cada una de ellas.

A continuación, un ejemplo de solicitud que utiliza el token de la respuesta anterior:

Request example with token
curl -i --header "access-token: tgervk9_9xicJYpmSsnnNA" \
--header "token-type: Bearer" \
--header "client: D-Uv3ER53873olhnNLjL9w" \
--header "uid: api@local.net" \
--request GET \
--header "Content-Type: application/json" \
--data '{"page":"2"}' \
https://server123/api/v1/stations

Como respuesta, recibimos el siguiente mensaje:

Para finalizar la sesión, puede utilizar el procedimiento SignOut, o bien guardar las cabeceras necesarias de la última solicitud y reutilizarlas la próxima vez si el token no ha caducado. Tenga en cuenta que, si no se finaliza la sesión, el último token sigue siendo válido durante un tiempo, según la configuración del sistema en el servidor.

Ventajas del sistema

Un sistema unificado de autenticación y autorización es una herramienta potente para la protección de datos y el control de acceso. Ofrece las siguientes ventajas:

  • Gestión centralizada: simplifica la administración de los usuarios y sus permisos.
  • Seguridad: protege los datos frente a accesos no autorizados.
  • Coherencia: todas las aplicaciones y sistemas utilizan el mismo mecanismo de autenticación y autorización.
  • Escalabilidad: facilita la incorporación de nuevas aplicaciones y usuarios.

Cifrado de datos

Para proteger la información crítica, el sistema utiliza el cifrado (la conversión de la información en una forma que no puede leerse sin la clave adecuada) y el hash (la conversión de datos en una cadena única de longitud fija: un hash). Este es uno de los mecanismos clave de protección de datos, ya que garantiza la confidencialidad, la integridad y la seguridad de la información tanto en almacenamiento como en tránsito.

El sistema utiliza diversos algoritmos de cifrado y hash de datos.

Aplicación del cifrado en el sistema

Cifrado en almacenamiento

  • Bases de datos: cifrado de campos individuales de la base de datos.
  • Archivos: cifrado de los archivos antes de guardarlos en disco.

Cifrado de los datos en tránsito

  • HTTPS: uso de SSL/TLS para cifrar los datos durante la transmisión por la red.
  • VPN: creación de un túnel seguro para la transmisión de datos.

Cifrado de contraseñas

Almacenamiento de hashes de contraseñas en lugar de las propias contraseñas.

Ejemplos de cifrado y descifrado de datos

Veamos ejemplos de cifrado y descifrado de archivos de configuración del sistema.

Cifrado de datos

example.config
mkdir_p(encrypted_dir_path)
encrypted = Rails.application.encrypted(encrypted_file_path, key_path: 'config/system.key')
encrypted.write(File.read(decrypted_file_path))
File.delete(decrypted_file_path)

Descifrado de datos

example.config
mkdir_p(decrypted_dir_path)
File.write(decrypted_file_path,
  Rails.application.encrypted(encrypted_file_path, key_path: 'config/system.key').read
)

Ventajas del cifrado de datos

  • Confidencialidad: protección de los datos frente a accesos no autorizados.
  • Integridad: garantía de que los datos no han sido alterados.
  • Autenticidad: confirmación del origen de los datos.
  • Cumplimiento normativo: cumplimiento de los requisitos reglamentarios.

Auditoría y monitorización

Varios subsistemas supervisan la actividad de los usuarios y del sistema, detectan comportamientos sospechosos y garantizan el cumplimiento de los requisitos de seguridad. En conjunto:

  • recopilan, analizan y almacenan información sobre la actividad de los usuarios y del sistema para garantizar la trazabilidad y el cumplimiento;
  • supervisan de forma continua el sistema y los equipos en tiempo real para detectar incidentes y responder a ellos.

Objetivos

  • Trazabilidad: garantizar que se registra toda la actividad de los usuarios y del sistema.
  • Seguridad: detectar y prevenir la actividad no autorizada.
  • Detección de problemas: identificar problemas y anomalías del hardware y adoptar medidas correctivas.
  • Optimización del rendimiento: analizar el rendimiento del sistema y localizar los cuellos de botella que requieren optimización.
  • Predicción y planificación: recopilar datos para prever las cargas de trabajo futuras y planificar los recursos.
  • Cumplimiento: garantizar el cumplimiento de los requisitos reglamentarios.
  • Análisis de incidentes: analizar los incidentes ocurridos para evitar futuros incidentes.

Componentes de la auditoría y la monitorización

Recopilación de datos

  • Registros: registros de las acciones de los usuarios y del sistema en todos los niveles.
  • Métricas: datos sobre el rendimiento del sistema (por ejemplo, el uso de la CPU o de la memoria).

Almacenamiento de datos

  • Almacenamiento de registros: recopilación de datos de diversas fuentes, con almacenamiento distribuido de los registros y las métricas organizado por área temática.
  • Rotación de registros: eliminación automática de los registros antiguos para ahorrar espacio.

Análisis de datos

  • Búsqueda y filtrado: la posibilidad de buscar y filtrar los registros por distintos criterios.
  • Analítica: el uso de herramientas de análisis de datos (por ejemplo, Zabbix).

Alertas

  • Alertas: envío de notificaciones sobre actividad sospechosa y situaciones de emergencia (por ejemplo, por correo electrónico o por chat de Telegram).
  • Acciones automáticas: respuesta automática ante incidentes (por ejemplo, el bloqueo de un usuario).

Ejemplo de implementación

Registro

Uso de una biblioteca de registro en la aplicación.

Recopilación de errores en los datos procedentes de los medidores

Almacenamiento de registros

Uso de un almacenamiento centralizado para los registros.

Tabla audits

Esta tabla almacena la información de registro de datos.

CampoTipoDescripción
idintegerIdentificador único del registro (clave primaria).
auditable_idintegerReferencia al objeto auditado (equipment.id, stations.id …).
auditable_typecharacter varyingObjeto auditable (equipment, stations …).
user_idintegerReferencia al identificador del usuario (users.id)
actioncharacter varyingAcción
audited_changesjsonbCambios auditados
versionintegerVersión de los cambios
remote_addresscharacter varyingDirección remota
request_uuidcharacter varyingEl identificador del evento.
created_attimestamp(6) without time zoneFecha/hora del cambio.
Tabla error_logs

Esta tabla almacena información sobre los errores en los datos procedentes de los medidores.

CampoTipoDescripción
idintegerIdentificador único del registro (clave primaria).
loggable_idintegerReferencia al objeto registrado (equipment.id …).
loggable_typecharacter varyingObjeto registrado (equipment …).
messageintegerReferencia al identificador del error.
paramsjsonbCaracterísticas del error.
created_attimestamp(6) without time zoneFecha/hora del cambio.

Análisis de registros

Herramientas utilizadas para analizar los registros:

  • Configuración de formularios web para visualizar y analizar los registros.
  • Creación de paneles para supervisar la actividad de los usuarios.

Alertas

Alertas personalizadas para la actividad sospechosa:

  • Configuración de alertas en Zabbix para supervisar las métricas.
  • Envío de notificaciones por correo electrónico o por chat de Telegram ante eventos de alarma.

Ventajas de la auditoría y la monitorización

La auditoría y la monitorización son herramientas potentes de protección de datos que permiten hacer un seguimiento de la actividad de los usuarios y del sistema, detectar comportamientos sospechosos y garantizar el cumplimiento de los requisitos de seguridad. Permiten:

  • garantizar la trazabilidad y la seguridad de los datos;
  • detectar y prevenir incidentes;
  • cumplir los requisitos reglamentarios.

Temas relacionados

Última actualización el

¿Te resultó útil esta página?