ciberseguridad

DB_CHAINING: Una configuración de seguridad peligrosa

Continuamos con el tema del pasado lunes donde hablábamos de la configuración trustworthy de SQL Server. Una configuración de seguridad con unos riesgos de seguridad añadidos que es muy importante que conozcamos. Como os decía antes de irme por las ramas, hoy continuamos con ese tema y es el turno de la opción de configuración db_chaining, una configuración también de seguridad que nos va a permitir simplificar mucho los permisos, no sin riesgos claro. Quédate hasta el final que te voy a contar todos los secretos.

¿Qué es DB_Chaining?

DB_Chaining es una opción de configuración en SQL Server que, cuando está habilitada, permite a los objetos de una base de datos acceder a los objetos de otra base de datos que tienen el mismo propietario. Esto puede ser útil en situaciones donde las bases de datos necesitan compartir información, pero también plantea ciertos riesgos de seguridad que deben ser considerados cuidadosamente.

Normalmente, si un usuario tiene permiso para ejecutar un procedimiento almacenado, y ese procedimiento tiene referencias a otros objetos en la base de datos, el usuario necesita tener permisos para esos objetos también. Esto es el comportamiento por defecto de SQL Server y las bases de datos de Azure SQL ya que db_chaining por defecto está deshabilitado. Sin embargo, cuando DB_Chaining está habilitado, SQL Server trata las cadenas de propiedad de los objetos de la base de datos de manera diferente.Si el procedimiento almacenado y el objeto al que hace referencia tienen el mismo propietario, SQL Server permite que el procedimiento acceda al objeto sin comprobar los permisos del usuario para ese objeto.

db_chaining

Esto que acabamos de ver puede ser útil en situaciones donde se desea simplificar la administración de permisos. Por ejemplo, si tienes varias bases de datos que necesitan compartir información, puedes tener procedimientos almacenados en una base de datos que leen o escriben en tablas en otra base de datos. Sin DB_Chaining, tendrías que dar a los usuarios permisos para las tablas en ambas bases de datos. Con DB_Chaining, puedes dar a los usuarios permisos para ejecutar los procedimientos almacenados, y los procedimientos pueden acceder a las tablas sin que los usuarios tengan permisos directos para ellas. 

Consideraciones de Seguridad

Aunque DB_Chaining puede ser útil, también plantea riesgos de seguridad. Cuando DB_Chaining está habilitado, un usuario que tiene permiso para ejecutar un procedimiento almacenado puede potencialmente acceder a cualquier objeto en la base de datos que tenga el mismo propietario que el procedimiento. Si no se gestiona correctamente, esto podría permitir a los usuarios acceder a información a la que no deberían tener acceso.

Por lo tanto, antes de habilitar DB_Chaining, es importante entender completamente sus implicaciones de seguridad y asegurarse de que todas las bases de datos y objetos estén correctamente asegurados. Además, y esto es recomendación personal más que buenas prácticas, no os recomiendo habilitarlo para bases de datos donde los usuarios tengan permisos de control (para crear modificar los objetos) ya que podrían crear una vista para leer datos que no deberían o, peor aún, un procedimiento almacenado para editar los datos.

Conclusión

La configuración de DB_Chaining en SQL Server es una herramienta poderosa que puede simplificar la administración de permisos y facilitar el intercambio de información entre bases de datos. Sin embargo, también plantea riesgos de seguridad que deben ser cuidadosamente considerados y gestionados. Como siempre, la clave para usar DB_Chaining de manera efectiva y segura es entender completamente cómo funciona y seguir las mejores prácticas de seguridad de la información.

Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de Telegram y un canal de YouTube a los que te puede unir. ¡Hasta la próxima!

Publicado por Roberto Carrancio en Cloud, SQL Server, 1 comentario

TRUSTWORTHY: La opción que no debes habilitar

Como DBAs de SQL Server tenemos que ser verdaderos expertos en las configuraciones de las bases y datos y comprender a la perfección todas las implicaciones de cada una de estas opciones configurables. Una de las opciones con las que más cuidado hay que tener es la propiedad TRUSTWORTHY (confiable en nuestro idioma). Si lleváis tiempo en esto de la administración de bases de datos es probable que en varias ocasiones os hayáis visto envueltos en debates sobre el uso de esta opción. Trustworthy es una configuración de la base de datos que afecta directamente a la seguridad, sobre todo en lo que a ejecución de código se refiere. Su configuración es clave en el comportamiento de todos los objetos de base de datos que se ejecuten con “WITH EXECUTE AS” y en los componentes CLR marcados como EXTERNAL_ACCESS o UNSAFE.

¿Para qué sirve Trustworthy?

Ahora que ya sabemos que trustworthy es una configuración de base de datos vamos a ver qué es lo que hace. Cuando habilitamos esta configuración (por defecto está deshabilitada) lo que estamos haciendo es decirle a SQL Server que confíe en los objetos de esa base de datos en lo que a seguridad (autenticación y autorización) se refiere. Como hemos visto, esto afecta a los objetos (funciones y procedimientos) que usan EXECUTE AS y a los módulos CLR. Veamos uno a uno estos casos.

Objetos con EXECUTE AS

Cuando trustworthy está habilitado, los módulos T-SQL que usen la opción execute as podrán ejecutarse impersonándose con cualquier otro usuario. Si estos otros usuarios tienen asociado un login con permisos elevados o con usuarios con permisos sobre otras bases de datos vamos a poder acceder a todas las funcionalidades que tendría ese login.

Por ejemplo, imaginad que tenemos dos bases de datos: ventas y contabilidad. Tenemos tres usuarios: vendedor, contable y gerente. Supongamos que el usuario vendedor tiene sólo acceso a ventas, el usuario contable tiene sólo acceso a contabilidad y el usuario gerente tiene acceso a las dos bases de datos. Gracias a tener la propiedad trustworthy habilitada el usuario vendedor va a poder actuar bajo el contexto de seguridad del usuario Gerente y así acceder a datos de contabilidad con sus mismos permisos. Lo mismo para el usuario contable en la otra base de datos.

Módulos CLR

Para las integraciones de CLR (Common Language Runtime) la propiedad trustworthy va a permitir ejecutar ensamblados marcados como EXTERNAL ACCESS o UNSAFE y, gracias a ello, acceder a recursos externos del sistema o de la red que de otra manera no estarían permitidos en este contexto de seguridad.

El peligro de trustworthy

Ahora es cuando viene la historia de terror. Tener trustworthy habilitado en nuestra base de datos puede ser un vector para una escalada de privilegios. Os lo voy a demostrar. Para esta demo vamos a crear una base de datos llamada TrustyDB y vamos a habilitar la opción trustworthy. Vamos a crear un login llamado LoginTrusty. Después pondremos como propietario de nuestra base de datos al usuario “sa”, esto es una buena práctica. Por último vamos a crear un usuario UsurioTrusty para nuestro LoginTrusty y darle permisos de db_owner sobre la base de datos.

En este momento nuestro login tiene un usuario con permisos de db_owner sobre la base de datos pero no tiene permisos elevados a nivel de servidor. Tampoco es el propietario de la base de datos. Sin embargo, gracias a la propiedad trustworthy va a poder crear un procedimiento almacenado que se ejecute bajo el contexto de seguridad del propietario de la base de datos (recordad que es el sa) y añadirse al rol de servidor sysadmin.

Acabamos de ver un ejemplo en el que un usuario ha logrado escalar privilegios hasta convertirse en sysadmin. Este es uno de los problemas de habilitar trustworthy junto con el que ya habíamos comentado antes de acceder a datos de otras bases de datos sobre las que no tienes permisos. Otros problemas están relacionados con el uso de CLR ya que va a permitir acceder a información contenida en el sistema operativo (fuera del servidor de base de datos) o incluso de la red, interacciones que no estarían permitidas sin esta propiedad. La propiedad de trustworthy está pensada para eludir medidas de seguridad como la forma de módulos CLR o el uso de certificados para la elevación de privilegios controlada sobre todo en entornos de prueba o desarrollo. 

Buenas prácticas con Trustworthy

Como has podido ver, habilitar trustworthy conlleva un riesgo alto de seguridad por lo que la primera recomendación sería habilitarlo con precaución y sólo cuando sea imprescindible. Revisa muy bien los requisitos de cada escenario y determina si es o no necesario habilitarlo. Intenta una alternativa siempre que sea posible, por ejemplo para el caso de CLR la firma de código y uso de certificados te permitirá una gestión más segura de los permisos. Si no te queda más remedio que habilitar trustworthy refuerza tus controles de acceso, sigue una política de permisos mínimos para los usuarios y habilita auditorías para detectar cambios en los permisos y así como acceso a datos críticos.

Como activar Trustworthy

Realmente ya lo hemos visto en el ejemplo de arriba, podemos activar la propiedad trustworthy en las bases de datos que necesitemos con el siguiente código:

Una cosa importante que debemos tener muy en cuenta es que esta propiedad no solo está desactivada por defecto para todas las bases de datos sino que SQL Server no puede confiar en una base de datos nueva por defecto. Por este motivo, aunque tengamos la propiedad habilitada siempre que restauremos la base de datos desde un backup o separemos y adjuntemos (detach y attach) la base de datos con trustworthy habilitado esta propiedad va a estar deshabilitada y tendremos que ser nosotros quien la habilite manualmente. Esto va a pasar, sea el mismo servidor o uno distinto.

Conclusión

En resumen, habilitar la configuración de trustworthy puede ser indispensable para algunas funcionalidades de nuestro proyecto, pero si no es nuestro caso debemos evitar su uso para evitar riesgos de seguridad innecesarios. Ahora que ya comprendes su funcionamiento y los riesgos de habilitarlo seguro que te lo vas a pensar dos veces antes de concederles esa petición al usuario que te pide habilitarlo. Si no te queda más remedio recuerda las buenas prácticas y las precauciones que hemos visto en este artículo.

Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de Telegram y un canal de YouTube a los que te puede unir. ¡Hasta la próxima!

Publicado por Roberto Carrancio en Cloud, SQL Server, 1 comentario

Actualización Segura en Always On

Hoy vamos a aprovechar que recientemente se ha liberado SQL 2022 – CU13 para hablar de un proceso a simple vista trivial, pero que requiere de planificación, como es la actualización de SQL Server en los nodos de un grupo de disponibilidad Always On. No es la primera vez que comentamos en el blog la importancia de mantener nuestros SQL Server siempre actualizados para evitar vulnerabilidades graves como la que vimos aquí. En este sentido, nuestros Always On (que además suelen contener la información más crítica) son especialmente delicados. Y es que cualquiera puede ejecutar un parche de actualización y darle a siguiente hasta que termine pero, hacerlo bien, sobre todo en infraestructuras complejas como los Always On, requiere un cariño extra.

¿Qué es un Always On?

Si estás perdido en este punto no te preocupes, vamos a empezar por el principio, los grupos de disponibilidad Always On son una solución de alta disponibilidad que incorpora SQL Server en la que, por medio de un clúster de Windows (WSFC) varios servidores o nodos replican la información de nuestras bases de datos de manera síncrona o asíncrona. Esta es una breve pincelada (más bien un resumen a brocha gorda) de esta complejísima solución, si quieres saber más pásate por el artículo que le dedicamos a este tema.

El proceso de actualización

Cualquier proceso de actualización bien planeado debe constar de 3 fases principales, las pruebas previas (conocidas también como pre-checks), la actualización propiamente dicha y las pruebas finales o post-checks. Cuando hablamos de un Always On esto también va a ser así a grandes rasgos pero va a tener particularidades como pasos previos y posteriores específicos para cada uno de los nodos en función de su rol.

Pasos previos globales para la actualización

Antes de empezar a actualizar nuestros SQL Server del Always On, al igual que en cualquier proceso de actualización, deberemos revisar la documentación de la actualización en busca de errores conocidos o incompatibilidades que puedan hacer que abortemos el proceso antes de iniciarlo.

Una vez que sabemos que la actualización es teóricamente viable, vamos a verificar el entorno, en este punto verificaremos la salud de nuestro Always On (y su quórum) y comprobaremos que hay espacio suficiente en los discos para acometer con éxito el proceso de actualización. 

Con todas las comprobaciones finalizadas llega el momento de preparar el entorno, idealmente estaremos en un momento sin ninguna carga de trabajo aunque, en caso de los entornos críticos que requieren de un Always On, esto suele ser inviable. Igualmente nosotros haremos una copia de seguridad de los datos y deshabilitaremos los jobs no críticos para evitar en la medida de lo posible cualquier interferencia en el proceso. En este sentido, también es recomendable deshabilitar el balanceo automático durante todo el proceso.

Actualización paso a paso

Llega el momento de empezar a actualizar, empezaremos siempre por las réplicas secundarias externas de nuestro Always On (en caso de tenerlas) o por las que tengan replicación asíncrona. Estas réplicas tienen la ventaja de no estar sincronizadas en tiempo real con la réplica principal por lo que si algo sale mal el impacto será menor. Empezaremos validando nuevamente el estado de la sincronización (idealmente verificaremos el failover) y deteniendo la replicación de datos para las bases de datos de la réplica a actualizar. Con la replicación detenida aplicaremos el parche de actualización.Una vez aplicado el parche podremos reanudar la sincronización y verificar que todo ha salido bien. Repetiremos estos pasos por todas las réplicas secundarias. Comprobaremos que todas las réplicas tienen los datos actualizados y están sincronizando al finalizar el proceso.

Con todas las réplicas secundarias actualizadas y verificado que no ha habido ningún problema llega el momento más crítico: actualizar el nodo primario. Empezaremos verificando la replicación para garantizar que no haya pérdida de datos y realizando un failover (balanceo) del rol a otro nodo. En este momento el rol principal ya será uno de los actualizados por lo que podremos proceder en este como en los anteriores. Detendremos la replicación, aplicaremos el parche, reanudaremos la sincronización y verificaremos que todo está correcto. En caso de que sea necesario realizaremos otro failover para devolver el rol al nodo principal inicial.

Pasos posteriores a la actualización

Una vez que ya tenemos todos los nodos actualizados es el momento de las comprobaciones finales. Comprobaremos la versión de SQL y que todos los nodos están sincronizando. MUY IMPORTANTE, volveremos a habilitar los jobs que hayamos deshabilitado al inicio y el balanceo automático . Con esto ya habría finalizado el proceso, recuerda que debes prestar especial atención a que las aplicaciones vuelvan a conectar correctamente y al rendimiento global tras la actualización.

¿Por qué detener la sincronización durante la actualización?

Hemos comentado que cuando aplicas un parche a una réplica, ya sea sincrónica o asincrónica, es recomendable parar la replicación de esa réplica durante el proceso de actualización. Os he dicho que antes de aplicar el proceso de actualización de cada nodo debíamos detener la sincronización para habilitarla de nuevo después, justo al terminar ese nodo y antes de empezar con los siguientes. Esto se debe a que la aplicación de un parche puede causar cambios en la base de datos que podrían interrumpir la replicación si ésta sigue activa. Al parar la replicación, te aseguras de que cualquier cambio realizado por el parche no afecte a las otras réplicas hasta que hayas verificado que el parche se ha aplicado correctamente y que la réplica actualizada está funcionando como se espera.

Esto también tiene un punto negativo, cuando detienes la replicación de una base de datos, el nodo principal sigue acumulando los cambios en sus ficheros de log de transacciones por lo que asegúrate de tener suficiente espacio y mantén vigilado en todo momento el crecimiento de los ficheros.

Conclusión

Aplicar un parche de actualización a nuestros servidores siempre es una tarea delicada pero, con una buena planificación y siguiendo los pasos correctos podremos hacerlo sin mayor problema. Recuerda que lo que hemos comentado en este post son una guia de recomendaciones para una actualización perfecta en un entorno ideal, la vida real no siempre es tan idílica y puede que tengamos que prescindir de alguno de los pasos. Sin embargo hay que conocerlos y entender bien el por qué están en esta guía para poder valorar el riesgo de no acometerlos. Y si tienes tus SQL en la nube como bases de datos o instancias administradas de Azure, enhorabuena, te has ahorrado para siempre todos estos pasos.

Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de Telegram y un canal de YouTube a los que te puede unir. ¡Hasta la próxima!

Publicado por Roberto Carrancio en Alta Disponibilidad, SQL Server, 2 comentarios

Descifrar contraseñas de usuarios de SQL

En el video de hoy vamos a ver como funciona la función PWDCOMPARE. Como sabeís SQL Server almacena las contraseñas de los usuarios en un hash que podemos ver pero no descifrar. Aquí es donde entra en juego PWDCOMPARE, gracias a esta poderosa función de SQL Server vamos a poder comparar los hash de contraseñas almacenados en SQL Server con cadenas de caracteres en texto plano. Esto nos va a permitir simular ataques de diccionario o fuerza bruta para comprobar la seguridad de las contraseñas nuestros usuarios.

Dejadme en comentarios si os interesa que dediquemos un post a crear un script para validar automáticamente las palabras de un diccionario, los nombres de los usuarios y del servidor como contraseñas y así auditar mejor la seguridad de vuestra instalación de SQL Server o Azure SQL.

Banner-Telegram

Espero que te haya gustado el video, si es así por favor, deja tu me gusta y suscríbete al canal que nos ayuda mucho. Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de Telegram al que te puede unir. En este grupo estamos creando una comunidad de usuarios y administradores de SQL Server donde cualquiera pueda preguntar sus dudas y compartir sus casos prácticos para que todos seamos mejores profesionales. ¡Hasta la próxima!

Publicado por Roberto Carrancio en Cloud, SQL Server, Videos, 0 comentarios

RGPD en SQL y Azure: Clasificación y Cifrado de datos

No es sorpresa para ninguno de vosotros si os digo que hoy en día, cumplir con la protección de datos es más importante que nunca. Y no es para menos, el incumplimiento de estas normas puede acarrear sanciones para la empresa de hasta 20 millones de euros o el 4% de la facturación global anual, lo que sea más. La Regulación General de Protección de Datos (RGPD) ha establecido nuevas normas y expectativas para las empresas en lo que respecta a la gestión de datos personales y en este artículo, nos centraremos en cómo SQL Server puede ayudarnos a cumplir con ellas. Para ello vamos a centrarnos por un lado en la detección y clasificación de datos sensibles y por otro en las distintas soluciones nativas de cifrado y protección de estos datos.

¿Qué es el RGPD?

Antes de entrar a ver las actuaciones que tenemos que llevar a cabo en SQL Server para cumplir con la normativa, es importante que definamos los conceptos básicos que debemos conocer sobre la RGPD. No te asustes, no voy a entrar en mucho detalle, esto no es un blog legal. 

El RGPD (GDPR por sus siglas en inglés) es una ley europea que obliga a las empresas a proteger los datos personales, no solo de sus clientes y empleados sino de toda persona que tenga algún tipo de interacción con ellos. Aunque entró en vigor en 2016 y es de obligado cumplimiento desde 2018, no es raro encontrarnos con escenarios que no están completamente adaptados a ella, ya sea porque son empresas de reciente creación o porque hasta ahora no habían tenido esta necesidad.

Dentro de los datos que vamos a necesitar proteger para cumplir con el reglamento encontramos los siguientes:

  • Datos identificativos: nombre, apellidos, dirección, email, teléfono, firma, DNI y, en definitiva, cualquier dato que sirva para identificarnos.
  • Datos personales: Fecha de nacimiento, estado civil, edad, nacionailidad, sexo, religión, etc…
  • Datos sociales: Aficiones, estilo de vida, posesiones, características de la casa, etc…
  • Datos académicos y profesionales: historial académico, experiencia profesional, puesto de trabajo, profesión, pertenencia a asociaciones profesionales, etc…
  • Datos comerciales: licencias, suscripciones a publicaciones, revistas, medios de comunicación, etc…
  • Datos financieros: Cuenta bancaria, prestamos, ingresos y nivel de renta, tarjetas, planes de pensiones, datos de la nomina u otros ingresos, tributaciones, etc…

Clasificación de Datos Sensibles para cumplir la RGPD

La clasificación de datos es un primer paso fundamental en cualquier estrategia de protección de datos. Como es lógico, antes de afrontar ninguna tarea de protección de los datos deberemos clasificarlos, detectar los que son sensibles y los que están amparados por la legislación. Tanto SQL Server como las bases de datos SQL en Azure ofrecen una funcionalidad integrada para la clasificación de datos que nos permite identificar y categorizar los datos que se deben proteger.

La clasificación de datos en SQL Server se realiza a través de dos componentes principales: Etiquetas de Sensibilidad y Etiquetas de Información. Las Etiquetas de Sensibilidad nos permiten clasificar los datos según su nivel de sensibilidad, mientras que las Etiquetas de Información nos permiten categorizar los datos según el tipo de información que contienen.

Opciones Nativas de Cifrado para cumplir la RGPD

SQL Server ofrece varias herramientas nativas de cifrado para proteger nuestros datos. Estas herramientas proporcionan una capa adicional de seguridad y nos ayudan a cumplir con los requisitos de la RGPD. Ya hemos hablado de ellas en este blog de una manera detallada en este artículo, por lo que hoy vamos a hacerlo desde el punto de vista del cumplimiento normativo.

Lo primero que tenemos que tener claro es la clasificación de las medidas de cifrado según su funcionalidad. Por un lado tendremos el cifrado en tránsito que protegerá la información de un potencial atacante a la escucha durante su movimiento por la red. El otro de los tipos de cifrado es en reposo, es decir, proteger los datos de lecturas no deseadas mientras estén almacenados. En un escenario ideal implementaremos una o varias de estas técnicas de cifrado para lograr la máxima protección. 

Cifrado en tránsito

SQL Server imprenta de forma nativa la opción de usar un certificado para la conexión de manera que podamos tener un cifrado TLS en tránsito. Para ello deberemos instalar el certificado en el servidor de SQL Server y posteriormente configurarlo para su uso en SQL Server en las propiedades del servicio del motor de base de datos. Encontraremos en estas propiedades una pestaña certificados donde configurarlo (implica reinicio del servicio). En Azure no será necesario realizar ninguna acción adicional, ya que todas las conexiones implementan el uso de TLS. Sin embargo, sí es recomendable desactivar el uso de TLS 1.0 y TLS1.1 siempre que sea posible ya que por defecto están habilitados. 

Cifrado en reposo

Otra de las opciones que tenemos disponible en SQL Server es Transparent Data Encryption (TDE). TDE cifra los datos en reposo, lo que significa que los datos se cifran cuando se almacenan en el disco. Esto protege los datos contra el acceso no autorizado en caso de que los archivos de la base de datos sean robados. Sin embargo no protege los datos sensibles de su lectura para usuarios con acceso a la base de datos. Con esta opción solo nos vamos a garantizar que nadie que no disponga del certificado y la clave correctas pueda restaurar o adjuntar nuestra base de datos.

Para proteger los datos contra las lecturas de usuarios no autorizados, aunque si tengan acceso a la base de datos tenemos dos opciones, DDM y Always Encrypted. DDM o Dynamic Data Masking es la opción más básica y menos completa. Esta opción enmascara los datos para los usuarios que no tengan un permiso específico para desenmascararlos pero el dato está almacenado en disco sin ningún cifrado. Además esta opción permitirá la lectura en plano de los datos a cualquier administrador con permisos de sysadmin sin posibilidad de ocultación. 

Si queremos realmente un cifrado completo de los datos y que no puedan ser visibles para los administradores (pero si para los usuarios autorizados) tenemos Always Encrypted. Always Encrypted es una característica que protege los datos confidenciales almacenados en las bases de datos de SQL Server. Los datos están cifrados en todo momento, tanto en reposo como en tránsito, lo que significa que los datos están protegidos tanto cuando se almacenan en la base de datos como cuando se transmiten entre la base de datos y la aplicación.

Conclusión

Cumplir con la RGPD puede no ser sencillo, pero SQL Server ofrece las herramientas y funcionalidades necesarias para hacerlo de manera efectiva. Al utilizar la clasificación de datos y las herramientas nativas de cifrado, podemos proteger nuestros datos sensibles y asegurarnos de que estamos cumpliendo con las regulaciones de protección de datos.

Recuerda, la protección de datos no es solo una obligación legal, sino también una responsabilidad ética. Al proteger los datos de nuestros clientes, no solo cumplimos con la ley, sino que también construimos confianza y lealtad con nuestros clientes. Y eso, al final del día, es lo que realmente importa. Trabaja con el responsable de los datos y el departamento legal para obtener los mejores resultados. Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de Telegram y un canal de YouTube a los que te puede unir. ¡Hasta la próxima!

Publicado por Roberto Carrancio en Cloud, SQL Server, 1 comentario

¿Sirven de algo los bloqueos de recursos en Azure?

Volvemos con nuestros video blogs esta vez con un vídeo sobre los bloqueos de recursos en Azure. Esta opción nos va  a permitir generar un bloqueo sobre un objeto de Azure para evitar que se pueda borrar. De esta manera, cuando alguien intente borrar nuestra base de datos o instancia gestionada desde el portal de Azure obtendrá un error indicando que el recurso está bloqueado.

Bloqueo de Recursos en Azure

Azure ofrece una característica llamada bloqueos que nos permite proteger nuestros recursos contra modificaciones o eliminaciones accidentales. Los bloqueos de recursos pueden ser aplicados a cualquier recurso de Azure, desde suscripciones y grupos de recursos hasta servicios individuales.

Plano de Control y Plano de Datos

Para entender cómo funcionan los bloqueos de recursos, primero debemos entender la diferencia entre el plano de control y el plano de datos en Azure.

El plano de control es responsable de las operaciones de gestión en Azure. Esto incluye acciones como la creación, modificación y eliminación de recursos. Cuando aplicamos un bloqueo de recursos, estamos interactuando con el plano de control.

Por otro lado, el plano de datos se encarga de las operaciones que se realizan en los recursos una vez que están creados. Esto incluye acciones como la lectura y escritura de datos en una base de datos o el envío de mensajes a través de un bus de servicio. Este plano de datos queda fuera del «paraguas» de protección de los bloqueos de recursos.

Aplicando Bloqueos de Recursos

Los bloqueos de recursos se pueden configurar para permitir solo lecturas o para evitar todas las modificaciones. Un bloqueo de solo lectura permitirá que los usuarios vean y consulten los recursos, pero no podrán hacer cambios. Un bloqueo de no modificación, por otro lado, evitará cualquier cambio en el recurso, incluyendo la eliminación.

Conclusión

La protección de nuestros recursos en Azure es esencial para mantener la integridad y seguridad de nuestros datos. Los bloqueos de recursos nos ofrecen una forma eficaz de prevenir borrados y modificaciones no deseadas, asegurando que nuestros recursos permanezcan seguros y protegidos. Sin embargo, esto debe ser combinado por una buena política de permisos en SQL Server o, de lo contrario una operación desde el plano de datos acabará con nuestros sistemas.

Recuerda, como administradores de bases de datos, nuestra prioridad es siempre la seguridad y la protección de nuestros recursos. Asegúrate de utilizar todas las herramientas a tu disposición para mantener tus recursos de Azure seguros. Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de LinkedIn y un canal de YouTube a los que te puede unir. ¡Hasta la próxima!

Publicado por Roberto Carrancio en Cloud, Videos, 0 comentarios

Backups Inmutables. A prueba de ransomware

Ya hemos hablado en este blog de la importancia que tienen las copias de seguridad y cómo estas pueden salvarnos de una pérdida de datos en caso de desastre. Hoy vamos a ir un paso más allá y vamos a explicar cómo prepararnos para un posible escenario de ransomware que cifra completamente todos los archivos en todos los equipos de la red. No sería la primera vez que una empresa pierde sus datos y las copias de seguridad por un ataque de este tipo y se queda sin nada. Antiguamente, podríamos pensar las cintas como solución pero hoy en día su uso está cada vez menos extendido. Por suerte para nosotros existen soluciones a prueba de ransomware y una de ellas son los backups inmutables que garantizarán la continuidad de nuestro negocio ante estas situaciones.

¿Qué es el ransomware?

El ransomware es un tipo de software malicioso, o malware, que cifra los archivos del usuario, bloqueando el acceso a ellos hasta que se pague un rescate. Este tipo de ataque puede ser devastador para las empresas y los usuarios, ya que los atacantes suelen exigir el pago en criptomonedas, que son difíciles de rastrear. 

El ransomware se propaga a través de varios métodos, incluyendo archivos adjuntos de correo electrónico maliciosos, descargas de sitios web comprometidos, o incluso a través de vulnerabilidades de seguridad en el software del sistema Una vez que el ransomware ha cifrado los archivos de un usuario, el atacante proporcionará instrucciones sobre cómo pagar el rescate para obtener la clave de descifrado. Sin embargo, pagar el rescate no garantiza que los usuarios recuperen el acceso a sus archivos.

Además, este tipo de ataques suele propagarse rápidamente por la web cifrando todos los archivos en todos los ordenadores y servidores que encuentra a su paso. Esto es de una gravedad extrema pues además de los datos de nuestro SQL server puede afectar también a nuestras copias de seguridad en ubicaciones externas pero accesibles por la red. 

¿Cómo protegerse de un ataque de ransomware?

En este aspecto, es crucial una buena educación en ciberseguridad por parte de los usuarios y una buena política de restricción de permisos a nivel directorio activo. Esto sin duda nos ayudará a prevenir un ataque de ransomware. Sin embargo, tenemos que estar preparados para lo peor, en ocasiones, ni con todas las medidas que podamos imaginar podemos estar a salvo.Es por esto que debemos conocer las herramientas que tenemos a nuestro alcance para evitar, por lo menos, el cifrado de nuestras copias de seguridad y es aquí donde cobra especial relevancia la inmutabilidad de los archivos.

¿Qué son los archivos inmutables?

La inmutabilidad es un concepto fundamental en la programación funcional, pero también se aplica a otras áreas de la informática, como los sistemas de archivos. En términos generales, un objeto o dato es considerado inmutable si su estado no puede ser modificado después de su creación. Una vez que se crea un objeto inmutable, no puede ser cambiado. Esto significa que cada vez que necesitas modificar un objeto inmutable, en realidad debes crear una nueva instancia de ese objeto con el nuevo valor.

La inmutabilidad tiene varias ventajas. Por ejemplo, mejora la seguridad del código y facilita el razonamiento sobre el comportamiento del programa, ya que no tienes que preocuparte por los cambios inesperados en los objetos. Además, los objetos inmutables son naturalmente seguros para el uso en entornos multihilo, ya que no pueden ser modificados una vez creados, eliminando así la necesidad de sincronización.

¿Por qué deberías hacer tus backups inmutables?

En el contexto de las bases de datos y los backups, la inmutabilidad puede ayudar a proteger los datos contra la corrupción y facilitar la auditoría y el seguimiento de los cambios. Por ejemplo, si los backups son inmutables, puedes estar seguro de que siempre podrás recuperar tus datos a un estado conocido, sin preocuparte de que los backups puedan haber sido alterados o dañados después de su creación.

La inmutabilidad en los backups ofrece varios beneficios. En primer lugar, mejora la seguridad de los datos. Al hacer los backups inmutables, nos protegemos contra la modificación o eliminación accidental o malintencionada de las copias de seguridad. Además, la inmutabilidad facilita la auditoría de los backups, ya que podemos rastrear fácilmente todas las operaciones realizadas en las copias de seguridad (no se van a modificar una vez creadas).

Implementar Backups inmutables

Implementar la inmutabilidad en los backups de SQL Server puede sonar algo difícil, pero es factible. Existen en el mercado herramientas que harán este trabajo por nosotros. En estas herramientas, normalmente, definiremos una carpeta sobre la que aplicaremos la inmutabilidad y dos periodos de tiempo. El primero es cuanto tiempo desde su creación se podrá modificar el archivo y el segundo es cuánto tiempo permanecerá inmutable. Tenemos que dejar suficiente tiempo para que los backups puedan completarse completamente antes de que el archivo se vuelva inmutable y configurar bien el tiempo de retención para poder borrarlos periódicamente en base a nuestra política de retención sin llegar a llenar el disco.

Podríamos pensar que una solución sería volver inmutables archivos o directorios de sistemas Linux con el comando chattr. Estos archivos o directorios no pueden ser modificados una vez que se crean. Sin embargo, deshacer la inmutabilidad es tan sencillo como volver a ejecutar el comando chattr, aunque para ello hace falta permisos de root. 

Para estar más seguros, existen varias herramientas que nos pueden ayudar a implementar la inmutabilidad en nuestros backups de SQL Server. Por ejemplo, Veritas Netbackup ofrece soluciones de protección de datos que incluyen características de inmutabilidad. También tenemos una solución de inmutabilidad nativa en las carpetas de los NAS de la marca Synology que nos ofrecen opciones de almacenamiento seguro e inmutable para nuestros backups.

Implementar carpetas inmutables en NAS Synology

Desde la versión DSM 7.2 (el OS de Synology) se puede crear carpetas protegidas con “WriteOnce” que básicamente hace inmutables los archivos que contengan. A la hora de configurar WriteOnce podemos definir si usaremos un modo Enterprise o Compliance, en el primer de los casos un administrador si podría modificar los ficheros por lo que lo que nosotros necesitamos es el modo Compliance. En cuanto al bloqueo automático podremos definir un tiempo de cortesía antes de bloquear los ficheros o seleccionar que se bloqueen automáticamente. Para la retención, podremos definir un tiempo de retención o que se bloqueen para siempre (a veces es necesario para cumplir ciertas regulaciones). Por último tendremos la opción de definir los ficheros para que no admiten ningún tipo de cambio o para que solo admiten anexiones aunque esto, para los backups de SQL Server, no nos será de utilidad.

Conclusión

Los backups inmutables son una poderosa herramienta que llevará nuestros niveles de seguridad a un nivel superior. Espero que con este artículo le hayáis perdido un poco el miedo a su implementación y os animéis a ponerlo en marcha. Una vez implementado dormiremos más tranquilos, os lo aseguro.  Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de LinkedIn y un canal de YouTube a los que te puede unir. ¡Hasta la próxima!

Publicado por Roberto Carrancio en SQL Server, 0 comentarios