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:
curl -i --header "Content-Type: application/json" \
--request POST \
--data '{"email":"api@local.net","password":"Str0ngPas$"}'\
https://server123/api/v1/auth/sign_inComo respuesta, recibimos el siguiente mensaje:
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:
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/stationsComo respuesta, recibimos el siguiente mensaje:
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: Bmh2GVrxr6aW0Hngor4gPw
token-type: Bearer
client: D-Uv3ER53873olhnNLjL9w
expiry: 1615311367
uid: api@local.net
ETag: W/"ba0df406b647bd92f0bf3a18916714c1"
Cache-Control: max-age=0, private, must-revalidate
X-Request-Id: 35a26441-ae78-48fa-8b2e-e92d2605133b
X-Runtime: 0.167748
Transfer-Encoding: chunked
{"data": [
{"id":1,"name":"865293041101853","equipment_brand_name":"Corrector
BK","phone":"","equipment_id":1},...
],
"total_pages":7,
"current_page":2
}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
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
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.
# Logs all changes to models
gem "audited"
# Logging settings
Audited.config do |config|
config.audit_class = CustomAudit
end
class CustomAudit < Audited::Audit
default_scope { order(created_at: :desc) }
ACTION_NAME = { 'Create' => 'create',
'Update' => 'update',
'Destroy' => 'destroy' }.freeze
end
# Metering device
class Equipment < ApplicationRecord
audited except: [:password]
...
endRecopilación de errores en los datos procedentes de los medidores
# data model for error collection
class ErrorLog < ApplicationRecord
enum message: { invalid_equipment_serial_number: 0,
invalid_equipment_software_version: 1,
...
}
belongs_to :loggable, polymorphic: true
belongs_to :loggable_equipment, class_name: 'Equipment', foreign_key: :loggable_id, optional: true
validates :loggable_type, :loggable_id, :message, presence: true
end
# Event log
unless valid_value?(serial_number)
message_params = {equipment: equipment, new_serial_number: serial_number}
message2logger(loggable_obj: equipment, message: :invalid_equipment_serial_number, params: message_params)
endAlmacenamiento de registros
Uso de un almacenamiento centralizado para los registros.
Tabla audits
Esta tabla almacena la información de registro de datos.
| Campo | Tipo | Descripción |
|---|---|---|
id | integer | Identificador único del registro (clave primaria). |
auditable_id | integer | Referencia al objeto auditado (equipment.id, stations.id …). |
auditable_type | character varying | Objeto auditable (equipment, stations …). |
user_id | integer | Referencia al identificador del usuario (users.id) |
action | character varying | Acción |
audited_changes | jsonb | Cambios auditados |
version | integer | Versión de los cambios |
remote_address | character varying | Dirección remota |
request_uuid | character varying | El identificador del evento. |
created_at | timestamp(6) without time zone | Fecha/hora del cambio. |
Tabla error_logs
Esta tabla almacena información sobre los errores en los datos procedentes de los medidores.
| Campo | Tipo | Descripción |
|---|---|---|
id | integer | Identificador único del registro (clave primaria). |
loggable_id | integer | Referencia al objeto registrado (equipment.id …). |
loggable_type | character varying | Objeto registrado (equipment …). |
message | integer | Referencia al identificador del error. |
params | jsonb | Características del error. |
created_at | timestamp(6) without time zone | Fecha/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
¿Te resultó útil esta página?
¡Gracias por tus comentarios!