È una falla nella sicurezza che una stored procedure emetta i nomi di chiavi e certificati?

3

Il mio scenario è questo:

(Seguendo il metodo di apertura delle chiavi, crittografia e chiusura delle chiavi, trovato in Blog di Ben Cull .)

Immagina di avere un server MS SQL con tonnellate di chiavi per crittografare campi diversi in tabelle diverse che aggiorni ogni tanto, e usi le procedure per aprire le chiavi e chiudere le chiavi, MA per ridurre il numero di procedure e le funzioni che devi aggiornare ogni tanto, eliminate le funzioni per crittografare i dati e invece OUTPUT i nomi di chiavi e certificati, quindi puoi semplicemente usare la normale funzione di crittografia con la chiave e il certificato dai parametri OUTPUT di la procedura di OpenKey.

Sembrerebbe qualcosa del genere:

CREATE PROC [dbo].[sproc_OpenKey_10]
    (
        @Key CHAR(10) OUTPUT
        ,@Cert CHAR(10) OUTPUT
    )
AS 
BEGIN

    IF CONVERT(DATE,GETDATE())  < '1/1/2017'
        BEGIN
            OPEN SYMMETRIC KEY AC_16
            DECRYPTION BY CERTIFICATE WebAC16
            Set @Key = 'AC_16'
            Set @Cert = 'WebAC16'
        END
    ELSE    
        BEGIN
            OPEN SYMMETRIC KEY AC_17
            DECRYPTION BY CERTIFICATE WebAC17
            Set @Key = 'AC_17'
            Set @Cert = 'WebAC17'
        END
    RETURN
END

E così usando la funzione e la crittografia assomiglierebbe a questo:

DECLARE @Key10 CHAR(10)
DECLARE @Cert10 CHAR(10)
DECLARE @EncID VARCHAR(100)

EXEC dbo.sproc_Secure_OpenKey_10 @Key = @Key10 OUTPUT, @Cert = @Cert10 OUTPUT   
SET @EncID = EncryptByKey(Key_GUID(@Key10), @Custid)

(NOTA: il CERT verrebbe memorizzato nella tabella per la decrittografia in seguito - ecco perché sarebbe stato restituito.)

In teoria, sarebbe comodo, permettendoti solo di aggiornare le procedure OpenKey e CloseKey.

La mia domanda è:

L'output dei nomi Key e Cert da una stored procedure OpenKey è un possibile buco di sicurezza? Se è così, c'è un modo per renderlo sicuro?

Apprezzerò qualsiasi input.

Grazie!

    
posta Hawkeye 05.10.2016 - 21:50
fonte

1 risposta

0

Quindi dopo un po 'di tempo e ricerche, penso di aver risposto alla mia stessa domanda.

Quando si utilizza questo metodo di apertura e chiusura delle chiavi, non si impostano autorizzazioni, quindi nulla che non disponga già delle autorizzazioni appropriate (di sua proprietà) può utilizzare la stored procedure e ricevere i nomi Key e Cert emessi - le procedure memorizzate OpenKey e CloseKey funzionano con le autorizzazioni della stored procedure di chiamata, quindi sarà in grado di utilizzare solo la stored procedure di chiamata con le autorizzazioni e di visualizzare i nomi Key e Cert emessi dalla procedura OpenKey.

In breve: sembra che l'output dei nomi di Key e Cert nella stored procedure di OpenKey non crei un buco di sicurezza, a condizione che non sia impostato alcun permesso per esso.

Ho pensato di condividere le mie scoperte, se forse sarebbe stato di aiuto a qualcun altro.

    
risposta data 09.11.2016 - 19:42
fonte

Leggi altre domande sui tag