Comprender el cifrado y las copias de seguridad de MS SQL Server

13

Entonces pregunté en el chat qué tan seguros son los archivos de respaldo de SQL Server.

Me dicen que si un atacante tiene acceso al archivo .bak sin cifrar, puede tener acceso a los datos.

Así que echemos un vistazo a este escenario:

OPEN SYMMETRIC KEY MySymetricKey DECRYPTION
BY CERTIFICATE MyCertificate

aviso: no hay contraseña aquí.

y luego encriptamos nuestras tablas por:

UPDATE tbl1
 SET namePAss = ENCRYPTBYKEY(KEY_GUID('MySymetricKey'),name)
GO

Ahora digamos que un hacker consiguió mi bakarchivo. Todo lo que tiene que hacer para ver los datos (en su propia computadora y servidor sql) es:

SELECT  
       convert( NVARCHAR(max), decryptbykey(namePAss)) 
FROM tbl1

¿Seguiría siendo capaz de acceder a los datos?

Royi Namir
fuente

Respuestas:

9
OPEN SYMMETRIC KEY MySymetricKey DECRYPTION`  
 BY CERTIFICATE MyCertificate`

aviso: no hay contraseña aquí.

Sí hay. Abriste el certificado de MyCertificate alguna manera , ¿no? Podría haber varios casos, pero cualquiera de ellos termina con una contraseña:

  • abriste el certificado usando una contraseña (obviamente, hay una contraseña en este caso)
  • el certificado está encriptado con la clave maestra de la base de datos y usted abrió la clave maestra de la base de datos usando la contraseña DBMK -> esa es la contraseña
  • el certificado se cifra con la clave maestra de la base de datos y el DBMK se cifra con la clave maestra del servicio. La clave maestra de servicio se abrió a su vez utilizando la clave de almacenamiento DPAPI de la cuenta de servicio, que está cifrada con la contraseña de la cuenta -> y esa es la contraseña

En la última clave parece que no hay contraseña, pero hay una: la contraseña de la cuenta de servicio. La copia de seguridad, cuando se restaura en un host diferente, carecerá del cifrado de la clave maestra de servicio de la clave maestra de la base de datos y esto hará que los datos sean inaccesibles.

Ver Jerarquía de cifrado

Remus Rusanu
fuente
Hola, sí, hay una contraseña pero en una etapa anterior. cuando creé por: CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'DB Master key password!' GO- Lo creé con una contraseña. pero lo extraño es que cuando lo abro, no necesito la contraseña, es exactamente el código que ha pegado. Esto es lo que no entiendo. Si soy un hacker, no me importa la contraseña utilizada para crearla. todo lo que necesito hacer es OPEN SYMMETRIC KEY MySymetricKey DECRYPTION POR CERTIFICADO MyCertificate` y NO hay contraseña aquí. por favor
corrígeme
3
@RoyiNamir Vea la última viñeta de Remus. No está especificando la contraseña pero el certificado está protegido, en última instancia, en este caso por la contraseña de la cuenta de servicio.
Mark Storey-Smith
@Remus, ¿puedes echar un vistazo a mi nueva pregunta (muy relacionada) dba.stackexchange.com/questions/29287/…
Royi Namir