Noções básicas sobre criptografia e backups do MS SQL Server

13

Então, eu estava perguntando no bate-papo sobre a segurança dos arquivos de backup do SQL Server.

Disseram-me que, se um invasor tiver acesso ao arquivo .bak não criptografado, poderá ter acesso aos dados.

Então, vamos olhar para este cenário:

OPEN SYMMETRIC KEY MySymetricKey DECRYPTION
BY CERTIFICATE MyCertificate

aviso - não há senha aqui.

e depois criptografamos nossas tabelas:

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

Agora vamos dizer que um hacker pegou meu bakarquivo. Tudo o que ele precisa fazer para visualizar os dados (em seu próprio computador e servidor sql) é:

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

Ele ainda seria capaz de acessar os dados?

Royi Namir
fonte

Respostas:

9
OPEN SYMMETRIC KEY MySymetricKey DECRYPTION`  
 BY CERTIFICATE MyCertificate`

aviso - não há senha aqui.

Sim existe. Você abriu o certificado de MyCertificate alguma forma , não foi? Pode haver vários casos, mas qualquer um deles acaba com uma senha:

  • você abriu o certificado usando uma senha (obviamente, existe uma senha neste caso)
  • o certificado é criptografado com a chave mestra do banco de dados e você abriu a chave mestra do banco de dados usando a senha DBMK -> essa é a senha
  • o certificado é criptografado com a chave mestra do banco de dados e o DBMK é criptografado com a chave mestra de serviço. A chave mestra de serviço foi aberta, por sua vez, usando a chave de armazenamento DPAPI da conta de serviço, criptografada com a senha da conta -> e essa é a senha

Na última chave, parece não haver senha, mas existe uma: a senha da conta de serviço. O backup, quando restaurado em um host diferente, não terá a criptografia da chave mestra de serviço da chave mestra do banco de dados e isso tornará os dados inacessíveis.

Consulte Pesquisa de criptografia

Remus Rusanu
fonte
Oi, sim, existe uma senha, mas em um estágio anterior. quando criei por: CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'DB Master key password!' GO- criei com uma senha. mas o mais estranho é que, quando a abro - não preciso da senha, é exatamente o código que você colou. É isso que eu não entendo. Se eu sou um hacker - não me importo com a senha usada para criá-lo. tudo o que preciso fazer é OPEN SYMMETRIC KEY MySymetricKey DECRYPTION CERTIFICADO MyCertificate` e não há senha aqui. por favor me corrijam
Royi Namir
3
@RoyiNamir Veja o último ponto de Remus. Você não está especificando a senha, mas o certificado está protegido, neste caso, pela senha da conta de serviço.
Mark Storey-Smith
@Remus, por favor, dê uma olhada na minha nova pergunta (muito relacionada) dba.stackexchange.com/questions/29287/…
Royi Namir