En busca de información privilegiada FILESTREAM

14

Cuando la función FILESTREAM está activada en Microsoft SQL Server 2012, SQL Server creará un recurso compartido "oculto" en el sistema. El recurso compartido se define de la siguiente manera:

Sharename          FILESTREAM_SHARE
Path               \\?\GLOBALROOT\Device\RsFx0320\<localmachine>\FILESTREAM_SHARE
Remark             SQL Server FILESTREAM share
Maximum users      unlimited
Users Caching      Manual caching of documents 
Permissions        NT-AUTHORITY\Authenticated Users, FULL

El nombre es el nombre del recurso compartido que proporciona cuando configura inicialmente FILESTREAM en el Administrador de configuración de SQL Server . Pero para que sirve?

Hasta aquí

Leí toda la documentación disponible de FILESTREAM desde:

... pero no se mencionó la participación y lo que hace o para qué sirve. Ingrese el nombre y SQL Server creará el recurso compartido bajo el capó.

Base de datos habilitada para FILESTREAM

Cuando crea una base de datos habilitada para FILESTREAM, la base de datos hace referencia a un grupo de archivos que hace referencia a un directorio (recomendado en una unidad separada) que no tiene absolutamente nada que ver con el recurso compartido, que se creó inicialmente durante la configuración de FILESTREAM.

Captura de pantalla del script de base de datos habilitado para FILESTREAM

Script para crear una base de datos habilitada para FILESTREAM Sí, me doy cuenta de que todas las rutas están en C :; es solo un ejemplo

El libro blanco de Paul Randall et al. continúa explicando que ...

Los datos de FILESTREAM se almacenan en el sistema de archivos en un conjunto de directorios NTFS llamados contenedores de datos, que corresponden a grupos de archivos especiales en la base de datos. El acceso transaccional a los datos de FILESTREAM está controlado por SQL Server y un controlador de filtro del sistema de archivos que se instala como parte de la habilitación de FILESTREAM a nivel de Windows. El uso de un controlador de filtro del sistema de archivos también permite el acceso remoto a los datos de FILESTREAM a través de una ruta UNC. SQL Server mantiene un tipo de enlace desde las filas de la tabla a los archivos FILESTREAM asociados con ellos. Esto significa que eliminar o renombrar cualquier archivo FILESTREAM directamente a través del sistema de archivos provocará daños en la base de datos.

... más abajo en el documento (página 14) continúan con ...

Hay un único controlador de filtro del sistema de archivos FILESTREAM para cada volumen NTFS que tiene un contenedor de datos FILESTREAM, y también hay uno para cada versión de SQL Server que tiene un contenedor de datos FILESTREAM en el volumen. Cada controlador de filtro es responsable de administrar todos los contenedores de datos de FILESTREAM para ese volumen, para todas las instancias que usan una versión particular de SQL Server.

Por ejemplo, un volumen NTFS que aloja tres contenedores de datos FILESTREAM, uno para cada una de las tres instancias de SQL Server 2008, solo tendrá un controlador de filtro del sistema de archivos FILESTREAM de SQL Server 2008.

Preguntas

  1. Es bueno saber que SQL Server tiene todo lo bueno y atado, pero ¿qué hace realmente ese recurso compartido? ¿Es el llamado "controlador de filtro del sistema de archivos"?
  2. Dado que cualquier usuario autenticado puede acceder al "recurso compartido", ¿cuáles son las implicaciones de seguridad?
  3. ¿El dispositivo RsFx0320 es un predecesor del formato de sistema de archivos resistente que se introdujo con Windows Server 2012?

Si puede proporcionar respuestas a mis preguntas, entonces sería bueno si pudiera proporcionar una fuente de referencia.

John aka hot2use
fuente

Respuestas:

5

Cuando la función FILESTREAM está activada en Microsoft SQL Server 2012, SQL Server creará un recurso compartido "oculto" en el sistema.

No hace esto de manera predeterminada, debe ELEGIR para habilitar el recurso compartido. Esto se realiza a través del Administrador de configuración de SQL Server. Si cancela la selección, el recurso Enable FILESTREAM for file I/O accesscompartido se eliminará.

ingrese la descripción de la imagen aquí

  1. Es bueno saber que SQL Server tiene todo lo bueno y atado, pero ¿qué hace realmente ese recurso compartido?

El recurso compartido permite que los clientes (locales y remotos) tengan una ubicación compartida singular para usar la API de Windows de transmisión para acceder a los datos de flujo de archivos. Esto funciona en conjunto con la configuración de nivel de instancia de SQL Server para el acceso de flujo de archivos de Full Access Enabledcualquier otra configuración de acceso no debería funcionar con la API de transmisión.

ingrese la descripción de la imagen aquí

  1. ... ¿Es el llamado "controlador de filtro del sistema de archivos"?

No, no es. Esto es solo un archivo compartido.

Intenté no enturbiar las aguas, pero pediste tanta información como fue posible. En el texto tachado anterior, de hecho, dije que este no era el controlador del filtro. Sin embargo, eso técnicamente es una verdad a medias. Sí, es una carpeta compartida pero en realidad se comparte a través del controlador de filtro. Realmente debatí sobre esto porque comienza a convertirse en un agujero de conejo que realmente no se puede superar sin el código fuente (y para ser honesto, en mi opinión, tiene poco valor además del académico).

El objetivo del controlador de filtro es hacer algunas cosas, pero una de esas cosas es proporcionar acceso transaccional a los datos almacenados en el destino del flujo de archivos a través de una variedad de interfaces; SQL Server, Transact SQL, API de Windows. También hace un puñado de otros elementos, sin embargo, el acceso dado a través del recurso compartido se realiza a través del controlador de filtro. De hecho, si intenta acceder a los archivos en un flujo de archivos y no es un administrador o SQL Server, no debería poder acceder a ellos.

Entonces, sí, esto es y no es el controlador del filtro. Es la mitad de un recurso compartido de archivos de Windows que se expone a través de un controlador de filtro. Puede ver esto si ve la propiedad de ruta del recurso compartido.

get-wmiobject -class Win32_share | where {$_.Description -like 'SQL Server*'} | ft name, path -autosize

2. Considerando que cualquier usuario autenticado puede acceder al "recurso compartido", ¿cuáles son las implicaciones de seguridad?

Puede cambiar los permisos y requiere que la configuración se establezca correctamente. Las implicaciones de seguridad son las de cualquier otro recurso compartido de archivos.

¿Es el dispositivo RsFx0320 un predecesor del formato de sistema de archivos resistente que se introdujo con Windows Server 2012?

No, este es el nombre de una versión específica del controlador de filtro. Por ejemplo, aquí hay un sistema con el 2016 cargado RsFx0410. ReFS es un sistema de archivos, este es un controlador de filtro que se encuentra entre el sistema de archivos y el controlador de minipuerto. En realidad, es bastante desconcertante que este sea un controlador de filtro heredado como lo indica el .10 al final de la altitud ... hmm. También notará que tiene una altitud bastante baja , que generalmente no es aceptable para controladores de filtros de terceros.

ingrese la descripción de la imagen aquí

Si puede proporcionar respuestas a mis preguntas, entonces sería bueno si pudiera proporcionar una fuente de referencia.

No tengo fuentes para esto, pero he hecho una copia de seguridad de mi información a través de capturas de pantalla y opciones de configuración que cambian la configuración. Todo en esta respuesta se puede encontrar mirando a través del producto y sabiendo cómo funcionan las ventanas (por ejemplo, controladores de filtro).

Sean dice eliminar a Sara Chipps
fuente
Gracias por las respuestas a 1, 2 y 3. Aprecio especialmente su explicación del controlador del filtro. Su comentario al principio está debidamente anotado, pero me doy cuenta de que el recurso compartido solo se creará si activo la opción en las opciones de FILESTREAM. He leído una gran cantidad de documentación sobre la configuración / configuración de FILESTREAM y cosas internas.
John aka hot2use
2

Aquí está mi opinión sobre sus preguntas:

1. Es bueno saber que SQL Server tiene todo lo bueno y atado, pero ¿qué hace realmente ese recurso compartido? ¿Es el llamado "controlador de filtro del sistema de archivos"?

El acceso a la secuencia de archivos de SQL Server se trata, bueno, del acceso a los archivos. El recurso compartido proporciona esa ubicación a través de un recurso compartido de archivos.

Puede ver esto fácilmente con un código C # usando OpenSqlFilestream en

https://docs.microsoft.com/en-us/sql/relational-databases/blob/access-filestream-data-with-opensqlfilestream

Como puede ver, no hay FILE_SHARE_READ para CreateFile y no hay archivos mágicos, ni archivos stream:

try
    {
        if ( (srcHandle = CreateFile(
            srcFilePath,
            GENERIC_READ,
            FILE_SHARE_READ,
            NULL,
            OPEN_EXISTING,
            FILE_FLAG_SEQUENTIAL_SCAN,
            NULL)) == INVALID_HANDLE_VALUE )
            throw szErrMsgSrc;

Nota: En cuanto a por qué no hay un servidor local / opción de FILESTREAM sin compartir, no tengo idea. Parece que a algunas personas les gustaría ese nivel adicional de seguridad.

2. Considerando que cualquier usuario autenticado puede acceder al "recurso compartido", ¿cuáles son las implicaciones de seguridad?

Wow, gran pregunta. Parece que los permisos compartidos están disponibles para cualquier usuario autenticado, pero los permisos NTFS subyacentes deberían ajustar la seguridad. Pero, esto me parece un agujero de seguridad. Tendría que investigar más a fondo qué tan bien ajustados están los permisos NTFS, pero definitivamente no me gustan los permisos de uso compartido de archivos generalizados. Vamos Microsoft, TODOS los "usuarios autenticados"? Bien o mal, creo que Microsoft tiende a ignorar el recurso compartido / enfoque en los permisos NTFS.

El suministro de "usuarios autenticados" ha sido un tema debatido durante años. Este es uno de los mejores blogs que he leído sobre "usuarios autenticados". Está tan arraigado en Windows que no creo que digan que es un riesgo legítimo, hasta que salga su nuevo producto que lo elimine.

https://social.technet.microsoft.com/Forums/windowsserver/en-US/bb74fa7c-89bd-476d-88bf-e88cd66618e6/why-is-authenticated-users-in-the-local-users-group-by- default? forum = winserversecurity

¿Es el dispositivo RsFx0320 un predecesor del formato de sistema de archivos resistente que se introdujo con Windows Server 2012?

Parece estar basado en SQL en lugar de O / S. RsFx0320.sys es SQL 2008. Como se ve a continuación, SQL 2012 es RsFx0201.sys y SQL 2014 es RsFx0300.sys:

https://support.microsoft.com/en-us/help/2961258/fix-cannot-access-the-data-in-filetable-after-you-upgrade-from-sql-ser

Microsoft muestra lo que puede suceder cuando actualiza de 2012 a 2014:

To work around this issue, change manually the path property of the resource <AvailabilityGroupName>_FSShare to point to the correct driver: From
'\\?\GLOBALROOT\Device\RsFx0201\<localmachine>\{AvailabilityGroupID}' to '\\?\GLOBALROOT\Device\RsFx0300\<localmachine>\{AvailabilityGroupID}'
Picadura
fuente
Gracias por las respuestas a mis preguntas 2 y 3. Me doy cuenta por su respuesta 1, que puedo acceder a los datos a través de ese recurso compartido, pero me preguntaba cómo, de ahí el título "En busca de información privilegiada FILESTREAM ".
John aka hot2use