¿Es un agujero de seguridad tener un procedimiento almacenado que genere los nombres de clave y certificado?

3

Mi escenario es este:

(Siguiendo el método de abrir claves, cifrar y cerrar claves, se encuentra en Blog de Ben Cull .)

Imagine que tiene un servidor MS SQL con toneladas de claves para cifrar diferentes campos en diferentes tablas que actualiza cada cierto tiempo, y utiliza procedimientos para abrir las claves y cerrarlas, PERO para reducir la cantidad de procedimientos. y las funciones que tiene que actualizar de vez en cuando, elimina las funciones para cifrar los datos y, en cambio, OUTPUT la clave y los nombres de certificado, por lo que solo puede usar la función de cifrado normal con la clave y el certificado de los parámetros de SALIDA de el procedimiento OpenKey.

Se vería algo como esto:

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

Y así, usar la función y el cifrado se vería así:

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: el certificado se almacenaría en la tabla para su descifrado más tarde, por eso se lo devolvería).

En teoría, esto sería útil, ya que solo tendría que actualizar los procedimientos de OpenKey y CloseKey.

Mi pregunta es:

¿La salida de los nombres de clave y certificado de un procedimiento almacenado de OpenKey es un posible agujero de seguridad? Si es así, ¿hay alguna manera de hacer esto seguro?

Apreciaré cualquier entrada.

¡Gracias!

    
pregunta Hawkeye 05.10.2016 - 21:50
fuente

1 respuesta

0

Luego de un tiempo e investigación, creo que he respondido mi propia pregunta.

Al usar este método de abrir y cerrar claves, no establece ningún permiso, por lo tanto, nada que no tenga los permisos apropiados (propios) puede usar el procedimiento almacenado y recibir los nombres de clave y certificado emitidos. - Los procedimientos almacenados de OpenKey y CloseKey funcionan bajo los permisos del procedimiento almacenado de llamada, por lo tanto, solo el procedimiento almacenado de llamada con los permisos podrá usar y ver los nombres de clave y certificado emitidos por el procedimiento de OpenKey.

En resumen: parece que la salida de los nombres de Clave y Certificación en el procedimiento almacenado de OpenKey no debería crear un agujero de seguridad, siempre que no se establezcan permisos para ello.

Pensé que compartiría mis conclusiones, si quizás ayudara a otra persona.

    
respondido por el Hawkeye 09.11.2016 - 19:42
fuente

Lea otras preguntas en las etiquetas