Comprendre le chiffrement et les sauvegardes de MS SQL Server

13

Je demandais donc dans le chat comment les fichiers de sauvegarde SQL Server sont sécurisés.

On me dit que si un attaquant a accès au fichier .bak non crypté, il peut avoir accès aux données.

Regardons donc ce scénario:

OPEN SYMMETRIC KEY MySymetricKey DECRYPTION
BY CERTIFICATE MyCertificate

remarque - il n'y a pas de mot de passe ici.

puis nous chiffrons nos tables par:

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

Disons maintenant qu'un pirate a obtenu mon bakfichier. Tout ce qu'il a à faire pour visualiser les données (sur son propre ordinateur et serveur SQL) est:

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

Serait-il toujours en mesure d'accéder aux données?

Royi Namir
la source

Réponses:

9
OPEN SYMMETRIC KEY MySymetricKey DECRYPTION`  
 BY CERTIFICATE MyCertificate`

remarque - il n'y a pas de mot de passe ici.

Oui il y a. Vous avez ouvert le certificat d'une MyCertificate manière ou d'une autre , n'est-ce pas? Il peut y avoir plusieurs cas, mais chacun d'eux se retrouve avec un mot de passe:

  • vous avez ouvert le certificat en utilisant un mot de passe (évidemment, il y a un mot de passe dans ce cas)
  • le certificat est chiffré avec la clé principale de la base de données et vous avez ouvert la clé principale de la base de données à l'aide du mot de passe DBMK -> c'est le mot de passe
  • le certificat est chiffré avec la clé principale de la base de données et le DBMK est chiffré avec la clé principale du service. La clé principale du service a été à son tour ouverte à l'aide de la clé de stockage DPAPI du compte de service, qui est chiffrée avec le mot de passe du compte -> et c'est le mot de passe

Dans la dernière clé, il ne semble pas y avoir de mot de passe, mais il y en a un: le mot de passe du compte de service. La sauvegarde, lorsqu'elle est restaurée sur un hôte différent, il lui manquera le cryptage de la clé principale du service de la clé principale de la base de données et cela rendra les données inaccessibles.

Voir Hiearchy de chiffrement

Remus Rusanu
la source
HI, oui il y a un mot de passe mais dans une étape précédente. quand j'ai créé par: CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'DB Master key password!' GO- Je l'ai créé avec un mot de passe. mais la chose étrange est que lorsque je l' ouvre - je n'ai pas besoin du mot de passe c'est exactement le code que vous avez collé. C'est la chose que je ne comprends pas. Si je suis un pirate - je me fiche du mot de passe utilisé pour le créer. tout ce que je dois faire est OPEN SYMMETRIC KEY MySymetricKey DECRYPTION PAR CERTIFICAT MyCertificate` et il n'y a PAS de mot de passe ici. veuillez me corriger
Royi Namir
3
@RoyiNamir Voir la dernière puce de Remus. Vous ne spécifiez pas le mot de passe mais le certificat est protégé, finalement dans ce cas par le mot de passe du compte de service.
Mark Storey-Smith, du
@Remus pouvez-vous s'il vous plaît jeter un oeil dans ma nouvelle question (très liée) dba.stackexchange.com/questions/29287/…
Royi Namir