Em busca de informações privilegiadas da FILESTREAM

14

Quando o recurso FILESTREAM é ativado no Microsoft SQL Server 2012, o SQL Server cria um compartilhamento "oculto" no sistema. O compartilhamento é definido da seguinte maneira:

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

O nome é o nome do compartilhamento que você fornece ao configurar inicialmente FILESTREAM no SQL Server Configuration Manager . Mas para que serve?

Tão longe

Eu li toda a documentação FILESTREAM disponível, começando em:

... mas não houve menção ao compartilhamento e o que ele faz ou para que serve. Você digita o nome e o SQL Server cria o compartilhamento oculto.

Banco de dados ativado por FILESTREAM

Quando você cria um banco de dados ativado para FILESTREAM, o banco de dados faz referência a um grupo de arquivos que faz referência a um diretório (recomendado em uma unidade separada) que não tem absolutamente nada a ver com o compartilhamento, que foi criado inicialmente durante a configuração de FILESTREAM.

Script do banco de dados ativado para FILESTREAM

Script para criar banco de dados ativado para FILESTREAM Sim, percebo que todos os caminhos estão em C :; é apenas um exemplo

O white paper de Paul Randall et al. passa a explicar que ...

Os dados FILESTREAM são armazenados no sistema de arquivos em um conjunto de diretórios NTFS chamados contêineres de dados, que correspondem a grupos de arquivos especiais no banco de dados. O acesso transacional aos dados do FILESTREAM é controlado pelo SQL Server e um driver de filtro do sistema de arquivos instalado como parte da ativação do FILESTREAM no nível do Windows. O uso de um driver de filtro do sistema de arquivos também permite acesso remoto aos dados FILESTREAM através de um caminho UNC. O SQL Server mantém um link das sortes das linhas da tabela para os arquivos FILESTREAM associados a eles. Isso significa que excluir ou renomear qualquer arquivo FILESTREAM diretamente através do sistema de arquivos resultará em corrupção do banco de dados.

... mais abaixo no documento (página 14) que eles continuam com ...

Há um único driver de filtro do sistema de arquivos FILESTREAM para cada volume NTFS que possui um contêiner de dados FILESTREAM e também um para cada versão do SQL Server que possui um contêiner de dados FILESTREAM no volume. Cada driver de filtro é responsável por gerenciar todos os contêineres de dados FILESTREAM desse volume, para todas as instâncias que usam uma versão específica do SQL Server.

Por exemplo, um volume NTFS que hospeda três contêineres de dados FILESTREAM, um para cada uma das três instâncias do SQL Server 2008, terá apenas um driver de filtro do sistema de arquivos SQL Server 2008 FILESTREAM.

Questões

  1. É bom saber que o SQL Server tem tudo de bom e funcional, mas o que esse compartilhamento realmente faz? É o chamado "driver de filtro do sistema de arquivos"?
  2. Como qualquer usuário autenticado pode acessar o "compartilhamento", quais são as implicações de segurança?
  3. O dispositivo RsFx0320 é um antecessor do formato de sistema de arquivos resiliente que foi introduzido no Windows Server 2012?

Se você puder fornecer respostas para minhas perguntas, seria bom se você pudesse fornecer uma referência de origem.

John aka hot2use
fonte

Respostas:

5

Quando o recurso FILESTREAM é ativado no Microsoft SQL Server 2012, o SQL Server cria um compartilhamento "oculto" no sistema.

Ele não faz isso por padrão, você precisa ESCOLHER para ativar o compartilhamento. Isso é feito via SQL Server Configuration Manager. Se você desmarcar o Enable FILESTREAM for file I/O accesscompartilhamento, será removido.

insira a descrição da imagem aqui

  1. É bom saber que o SQL Server tem tudo de bom e correto, mas o que esse compartilhamento realmente faz?

O compartilhamento permite que os clientes (local e remoto) tenham um local compartilhado singular para usar a API da janela de streaming para acessar dados de transmissão de arquivos. Isso funciona em conjunto com as configurações no nível da Instância do SQL Server para acesso ao fluxo de arquivos Full Access Enabled, qualquer outra configuração de acesso não deve funcionar com a API de streaming.

insira a descrição da imagem aqui

  1. ... É o chamado "driver de filtro do sistema de arquivos"?

Não não é. Este é apenas um compartilhamento de arquivos.

Eu estava tentando não enlamear as águas, mas você pediu o máximo de informação possível. No texto tachado acima, eu disse, de fato, que este não era o driver do filtro. No entanto, isso tecnicamente é uma meia verdade. Sim, é uma pasta compartilhada, mas na verdade compartilha através do driver do filtro. Eu realmente debati sobre isso, porque ele começa a se tornar um buraco de coelho que você realmente não pode ver sem o código-fonte (e para ser sincero, tem pouco valor além do acadêmico na minha opinião).

O objetivo principal do driver de filtro é fazer algumas coisas, mas uma delas é fornecer acesso transacional aos dados armazenados no destino do fluxo de arquivos por meio de uma variedade de interfaces; APIs do SQL Server, Transact SQL, Windows. Ele também faz alguns outros itens - no entanto, o acesso fornecido através do compartilhamento é feito através do driver do filtro. De fato, se você tentar acessar arquivos em um fluxo de arquivos e não for um administrador ou SQL Server, não poderá acessá-los.

Então, sim, isso é e não é o driver do filtro. É metade do compartilhamento de arquivos do Windows que é exposto através de um driver de filtro. Você pode ver que é a propriedade do caminho do compartilhamento.

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

2. Vendo como qualquer usuário autenticado pode acessar o "compartilhamento", quais são as implicações de segurança?

Você pode alterar as permissões e requer que as configurações sejam definidas corretamente. As implicações de segurança são as de qualquer outro compartilhamento de arquivo.

3.O dispositivo RsFx0320 é um antecessor do formato de sistema de arquivos resiliente que foi introduzido no Windows Server 2012?

Não, este é o nome de uma versão específica do driver do filtro. Por exemplo, aqui está um sistema com o 2016 carregado RsFx0410. O ReFS é um sistema de arquivos, é um driver de filtro que fica entre o sistema de arquivos e o driver da miniporta. Na verdade, é bastante desconcertante que este seja um driver de filtro herdado, conforme indicado pelo .10 no final da altitude ... hmm. Você também notará que a altitude é baixa , o que geralmente não é aceitável para drivers de filtro de terceiros.

insira a descrição da imagem aqui

Se você puder fornecer respostas para minhas perguntas, seria bom se você pudesse fornecer uma referência de origem.

Não tenho fontes para isso, mas fiz backup de minhas informações por meio de capturas de tela e opções de configuração que alteram as configurações. Tudo nesta resposta pode ser encontrado consultando o próprio produto e sabendo como funcionam as peças do Windows (por exemplo, drivers de filtro).

Sean diz Remover Sara Chipps
fonte
Obrigado pelas respostas a 1, 2 e 3. Agradeço especialmente sua explicação sobre o driver do filtro. Sua observação no início está devidamente anotada, mas percebo que o compartilhamento será criado apenas se eu ativar a opção nas opções FILESTREAM. Eu li uma grande quantidade de documentação sobre as configurações / definições do FILESTREAM e outras coisas internas.
John aka hot2use
2

Aqui está a minha opinião sobre suas perguntas:

1.É bom saber que o SQL Server tem tudo de bom e funcional, mas o que esse compartilhamento realmente faz? É o chamado "driver de filtro do sistema de arquivos"?

O acesso ao fluxo de arquivos do SQL Server trata-se, bem, do acesso a arquivos. O compartilhamento fornece esse local por meio de um compartilhamento de arquivos.

Você pode ver isso facilmente com algum código C # usando o OpenSqlFilestream em

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

Como você pode ver, não há FILE_SHARE_READ para CreateFile e não há mágica de arquivo, nem fluxo de arquivos:

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

Nota: Por que não há opção FILESTREAM para servidor local / sem compartilhamento - não faço idéia. Parece que algumas pessoas podem gostar desse nível extra de segurança.

2. Vendo como qualquer usuário autenticado pode acessar o "compartilhamento", quais são as implicações de segurança?

Uau, ótima pergunta. Parece que as permissões de compartilhamento estão disponíveis para qualquer usuário autenticado, mas as permissões NTFS subjacentes devem ajustar a segurança. Mas, isso me parece uma brecha de segurança. Eu teria que investigar mais detalhadamente como as permissões de NTFS estão ajustadas, mas definitivamente não estou gostando das permissões de compartilhamento de arquivos generalizadas. Vamos lá Microsoft, TODOS "usuários autenticados"? Certo ou errado, acho que a Microsoft tende a ignorar o compartilhamento / foco nas permissões NTFS.

O fornecimento de "usuários autenticados" é um tópico debatido há anos. Aqui está um dos melhores blogs que eu já li sobre "usuários autenticados". Ele está tão arraigado no Windows que acho que eles nunca diriam que é um risco legítimo - até o lançamento do novo produto, que o livra.

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

3.O dispositivo RsFx0320 é um antecessor do formato de sistema de arquivos resiliente que foi introduzido no Windows Server 2012?

Parece ser baseado em SQL e não em O / S. RsFx0320.sys é o SQL 2008. Como visto abaixo, o SQL 2012 é RsFx0201.sys e o SQL 2014 é RsFx0300.sys:

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

A Microsoft mostra o que pode acontecer quando você atualiza de 2012 para 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}'
Picada
fonte
Obrigado pelas respostas às minhas perguntas 2 e 3. Percebo pela sua resposta 1, que posso acessar os dados através desse compartilhamento, mas fiquei pensando sobre como, daí o título "Em busca de informações privilegiadas da FILESTREAM ".
John aka hot2use