Que-es-el-DDM-Itequia

Cómo generar una estrategia de DDM en tu empresa

A la hora de definir una política de seguridad para una aplicación, uno de los retos más frecuentes es limitar el acceso no autorizado a la información confidencial

Por ejemplo, quizá quieras que tu personal de Marketing tenga acceso completo a toda la información sobre los clientes, ya sean fijos o potenciales, pero que tu departamento de finanzas solo pueda acceder a la información pertinente a los cobros o tus directivos únicamente puedan buscar sus datos de contacto.  

Si alguna vez has trabajado con SQL Server en Microsoft, seguramente hayas tenido que definir la información a la que tienen acceso tus diferentes departamentos o la capacidad que tengan para editarlos. 

Hoy en día, estas técnicas se conocen como Data Masking. Una técnica especialmente útil y accesible a todo tipo de empresas gracias a Dynamic Data Masking

¿Qué es el DDM?  

El Dynamic Data Masking (de ahí sus siglas DDM) es una técnica para proteger la información sensible de ojos no deseados. Te permite especificar la extensión de los datos a los que puede acceder un usuario sin los permisos necesarios. 

La ventaja del DDM es que se puede aplicar en cualquier momento, incluso con una aplicación que ya esté en funcionamiento, sin necesidad de cambiar ninguna configuración u orden de acción existente. 

¿Qué datos debería ocultar a ojos externos? 

Los cuatro tipos de datos más comunes que te interesa mantener en secreto suelen ser: 

Personally Identifiable Information (PII) 

Los datos que se pueden emplear para identificar a determinados perfiles. Incluye nombres completos o números de documentos personales (DNI, carné de conducir y Seguridad Social, entre otros). 

Protected Health Information (PHI) 

Los datos recogidos por los proveedores de servicios de salud, privados o públicos, para identificar los tratamientos necesarios. Incluye información de seguro, demográfica, resultados de test e historiales médicos. 

Payment Card Information 

La información que damos a las tiendas online al realizar una compra desde la web. Recae dentro de la Payment Card Industry Data Security Standard (PCIDSS) para garantizar la seguridad de los datos del titular de la tarjeta. 

Propiedad Intelectual (IP) 

La información relacionada con inventos, planes de negocio, diseños y planes de construcción. Tienen muchísimo valor para una empresa y se deben proteger contra robos y acceso no autorizado. 

¿Qué alternativas tenemos a esta exposición? 

En realidad, existen tres tipos muy habituales para enmascarar datos dentro de las bibliotecas de datos: 

  • Static Data Masking: Se crea una versión duplicada de los datos que contenga información parcial o completamente enmascarada. Ambas versiones se mantienen en emplazamientos distintos. 
  • On the fly Data Masking: modifica la información sensible durante su transferencia entre diferentes ambientes para asegurar que llega segura al receptor. Más recomendada para empresas que operan bajo Continuous Integration.
  • Dynamic Data Masking, del que ya hemos hablado antes. 

Una de las soluciones que recomendaríamos en el caso de que el motor de la base de datos utilizado por la aplicación sea SQL Server (muy habitual en todo tipo de sectores) sería el uso del Enmascaramiento Dinámico de Datos disponible en SQL Server en sus versiones SQL Server 2016 (13.x) y posteriores como Azure SQL Database, Azure SQL Managed Instance y Azure Synapse Analytics. 

Formato-de-Datos-con-DDM-Itequia

¿Cómo habilitamos el DDM en una columna? 

Para habilitar esta característica tan sólo tenemos que definir una máscara en función del tipo de dato de la columna. 

Esta máscara se crea en la propia definición de la columna en T-SQL aplicando una función que devuelve un valor enmascarado en lugar del valor real de la columna: 

Función
Tipo de DatoDescripciónT-SQL definición Columna
Default()
 
TodosAplica un valor por defecto a todas las columnas, en función del tipo de dato: 
Cadena à xxx 
Numéricos à 0 
Fecha y Hora: 01.01.1900 00:00:00 
Teléfono varchar(20) MASKED WITH (FUNCTION = ‘default()’)  
Email() 
Cadena 
 
Muestra la primera letra del valor añadiendo el siguiente patrón: 
{P}xxxx@XXX.com
Email varchar(100) MASKED WITH (FUNCTION = ’email()’)  
Partial
 
Cadena Muestra los N primeros caracteres y los N últimos aplicando un relleno: 
Rxxxxxxxo 
Apellidos varchar(100) MASKED WITH (FUNCTION = ‘partial(1, “xxxxxx”, 1)’)
Random
 
Numérico Muestra un valor aleatorio dentro de un intervalo SalarioBruto decimal (18,2) MASKED WITH (FUNCTION = ‘random(1,999999)’) 
Datetime 
(1)
  
Fecha y Hora Enmascara la parte del día que se requiera: 
Año à datetime (“Y”) 
Mes à datetime (“M”) 
Dia à datetime (“D”) 
Hora à datetime (“h”) 
Minuto à datetime (“m”) 
Segundo à datetime (“s”) 
 
(1) Sólo disponible en Sql Server 2022 
FechaNacimiento ADD MASKED WITH (FUNCTION = ‘datetime(“M”)’) 

Gestión de Permisos  

DDM dispone de la opción de otorgar diferentes niveles de permisos de visualización de los valores no enmascarados con diferentes granularidades: Base de Datos, Schema, Tabla e incluso de columna: 

Nivel T-SQL 
Base de Datos GRANT UNMASK TO {Usuario}; 
Schema GRANT UNMASK ON SCHEMA::{Schema} TO {Usuario} 
Tabla GRANT UNMASK ON {Schema.Tabla} TO {Usuario};   
Columna GRANT UNMASK ON {Schema.Tabla}(Columna) TO {Usuario} 
  • Hay que tener en cuenta que el permiso UNMASK no otorga permisos de Lectura por sí sólo, el usuario deberá tener también el permiso de SELECT para poder visualizar cualquier valor, así como remarcar que un usuario sin permiso de UNMASK pero si de UPDATE podría actualizar una columna enmascarada. 

¿Cómo aplicamos el DDM en Azure? 

En el portal de Azure, dentro del menú de opciones de la administración de una base de datos SQL Server, disponemos de la opción de ‘Enmascaramiento dinámico de datos’. Nos permite realizar de forma muy simple la administración de las máscaras para cualquier columna existente, sin tener que conocer la sintáxis T-SQL que hemos visto anteriormente: 

Como-Activar-DDM-en-Azure-Itequia
  • (1) Opción de Administración del DDM dentro de la Base de Datos en Azure. 
  • (2) Acción para crear una máscara en cualquiera de las columnas existentes. 
  • (3) Columnas sugeridas como candidatas para enmascarar con opción a crear una máscara para ellas. 

Al pulsar en la acción (2) ‘Agregar máscara’, Azure nos presentará una pantalla dónde podremos crear la máscara seleccionando previamente el Schema, Tabla y Columna. La acción (3) presentará la misma pantalla preseleccionando los valores anteriores, a partir de la columna sugerida. 

En la pantalla finalmente nos presentarán la lista de formatos disponibles en función del tipo de dato de la columna: 

Listado-de-Formatos-de-DDM-Microsoft-Itequia

Tipos de Formato predefinidos de enmascaramiento en Azure: 

Tipo de Formato Tipo de Dato Pantalla
Valor Predeterminado TodosFormato-Predeterminado-de-DDM-en-Microsoft-Itequia
Tarjeta Crédito CadenaDatos-de-Tarjeta-de-Credito-Enmascarados-Itequia
Correo electrónico CadenaRegla-de-Ocultación-de-Correo-Electrónico-en-Azure-Itequia
Rango aleatorio NuméricoRegla-Para-Rango-Aleatorio-en-Azure-Itequia
Cadena personalizadaCadenaComo-Ocultar-Una-Cadena-Personalizada-con-DDM-Itequia

¿Cómo se pone un DDM en acción? 

Vamos a observar un ejemplo de DDM con todos los ejemplos que hemos descrito en la tabla anterior 

En primer lugar, creamos la tabla de Empleados; enmascarando las diferentes columnas que hemos visto: 

Ejemplo-de-Tabla-de-Empleados-con-DDM-Itequia

Un usuario con permiso de SELECT y UNMASK sobre esa tabla, obtendría los siguientes valores: 

Vision-con-Permisos-de-Tabla-con-DDM-Activo-Itequia

En cambio, un usuario con permiso de SELECT, pero sin permiso de UNMASK obtendría las mismas filas, pero con los valores enmascarados en cada una de las columnas definidas con máscara dinámica, aplicando a cada columna la función de enmascaramiento establecida: 

Vision-Parcial-con-Permiso-SELECT-de-Tabla-de-Empleados-Itequia

Aquí te dejamos el mismo ejemplo descrito en texto con las partes más importantes destacadas 

CREATE TABLE Empleados ( 

    EmpleadoID int IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED, 

    Nombre varchar(50) MASKED WITH (FUNCTION = 'partial(1, "xx", 1)') NULL, 

    Apellidos    varchar(50) MASKED WITH (FUNCTION = 'partial(1, "xxxxxx", 1)') NULL, 

    Telefono     varchar(12) MASKED WITH (FUNCTION = 'default()') NULL, 

    Email        varchar(50) MASKED WITH (FUNCTION = 'email()') NOT NULL, 

    SalarioBruto decimal(18,2) MASKED WITH (FUNCTION = 'random(1, 999999)') NULL 

); 

INSERT INTO Empleados (Nombre, Apellidos, Telefono, Email, SalarioBruto) 

VALUES    

('Antonio', 'González López', '612999888', 'antonio.gonzalez@contoso.es', 2000),   

('Juan', 'Valdés Rovira', '612444555', 'juan.valdes@contoso.com', 2500),   

('Luis', 'Torres Sánchez', '612333222', 'luis.torres@contoso.net', 3000) 

CREATE USER MaskingTestUser WITHOUT LOGIN;   

GRANT SELECT ON SCHEMA::dbo TO MaskingTestUser;

EXECUTE AS USER = 'MaskingTestUser';   

SELECT * FROM dbo.Empleados 

CREATE TABLE Empleados  

( 

UsuarioID int IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED, 

Nombre varchar(50) NULL, 

Apellidos varchar(50) NULL, 

Telefono varchar(12) NULL, 

Email varchar(50) NOT NULL, 

FechaNacimiento datetime NULL, 

IBAN varchar(50) NULL, 

SalarioBruto decimal(18,2) NULL 

); 

INSERT INTO Empleados (Nombre, Apellidos, Telefono, Email, FechaNacimiento, IBAN, SalarioBruto) 

VALUES    

('Antonio', 'González López', '612999888', 'antonio.gonzalez@contoso.es', '1990-07-11', 'ES0220958524201618721727', 2000),   

('Juan', 'Valdés Rovira', '612444555', 'juan.valdes@contoso.com', '1980-01-29', 'ES6320804148384145618563', 2500),   

('Luis', 'Torres Sánchez', '612333222', 'luis.torres@contoso.net', '1985-06-15', 'ES9201826168304876446786', 3000)

¿Qué beneficios da el DDM? 

Para terminar, podemos comentar algunas ventajas del DDM que hemos visto a lo largo del artículo: 

  • Minimiza la exposición de información sensible a usuarios sin permiso 
  • Mejora la configuración de bases de datos con información protegida al eliminar la manipulación de la misma 
  • Ofrece ocultación parcial o completa de datos textuales y numéricos con funciones aleatorias 
  • Refuerza las políticas de protección de datos en tu empresa, incentivando la responsabilidad individual y grupal de tus trabajadores 
  • Ofrece agilidad y transparencia a la gestión de tu aplicación manteniendo los datos intactos 

También es importante aclarar que el enmascaramiento dinámico utilizado de forma aislada no garantiza totalmente la protección de la información confidencial. Es recomendable emplear herramientas para administrar adecuadamente los permisos en la base de datos aplicando siempre el principio de otorgar los mínimos permisos requeridos, habilitando otros mecanismos de seguridad como la Auditoria y el Cifrado. 

Si quieres conocer más sobre como aprovechar tus técnicas de DDM dentro de las suites de Microsoft, contacta con nosotros. 

Francisco Valcarreras – Senior Product Owner at Itequia