Partilhar via


ACLs e a pilha de dispositivos

O acesso ao volume e ao dispositivo são controlados por ACLs definidas em cada uma das respectivas interfaces. As ACLs na interface do dispositivo determinam:

  • Se o usuário recebe a permissão de acesso solicitada quando um aplicativo solicita para abrir um identificador para o dispositivo.

  • Quais comandos podem ser enviados para o dispositivo.

As pilhas de driver para mídia removível, como uma unidade de CD, podem ter mais de uma interface:

  • O associado ao PDO, que é gerenciado pelo driver de porta.

  • O associado ao FDO, que é gerenciado pelo driver de classe (Cdrom.sys).

A pilha de driver para dispositivos hot-pluggable, como o UFD, também oferece uma interface para o gerenciador de volumes. Por exemplo, um utilitário de formatação abriria um identificador para a interface de volume para formatar o volume.

Para acesso direto, os aplicativos podem usar o driver de porta e as interfaces do driver de classe para abrir um identificador para a unidade. Por exemplo, se um aplicativo quiser enviar um comando SCSI para o dispositivo por meio da interface de unidade física, o processo será o seguinte:

  • Primeiro, o aplicativo abre um identificador para a interface da unidade para acesso de Leitura e Gravação.

  • Depois que o identificador for aberto com êxito, o aplicativo poderá usar a função DeviceIoControl para enviar a solicitação SCSI para o dispositivo.

Quando a pilha de driver cria a interface do dispositivo, uma ACL é aplicada nesse dispositivo. Os elementos de controle de acesso (ACE) da ACL descrevem os grupos de usuários e as permissões de acesso relacionadas. Por exemplo, um ACE para o grupo Administradores pode descrever as permissões de acesso de leitura e gravação que os administradores têm para essa interface do dispositivo.

Quando um aplicativo tenta abrir um identificador para o dispositivo, o gerente de E/S usa a ACL do dispositivo para determinar se o chamador tem permissão para o acesso solicitado. Por exemplo, se o chamador solicitar um identificador para o dispositivo para acesso de Leitura e Gravação, o identificador será fornecido somente se o chamador tiver permissão para ler e gravar por meio dessa interface. Se o chamador não tiver as permissões de acesso solicitadas, o gerente de E/S retornará um erro de Acesso Negado e a solicitação de identificador aberto falhará.

As ACLs de dispositivo são criadas por esses componentes do Windows: gerenciador de E/S, gerenciador de PnP e o novo serviço de Política de Grupo para dispositivos de armazenamento removíveis.

AcLs de dispositivo de mídia removíveis e gerenciador de E/S

Quando a pilha de driver cria o objeto de dispositivo, o gerenciador de E/S define uma ACL padrão baseada no tipo de dispositivo. A ACL padrão dá acesso completo ao SYSTEM e aos Administradores e fornece apenas o acesso Executar a todos os outros.

  • Por padrão, o gerenciador de E/S concede ao grupo de IU acesso completo para objetos de dispositivo para dispositivos de mídia removíveis, como unidades de CD e para os objetos de dispositivo de disco que definiram FILE_REMOVABLE_MEDIA características.

    Nota Antes do Windows Vista, a entrada para IU não estava presente na ACL que foi definida pelo gerente de E/S. A partir do Windows Vista, o gerenciador de E/S fornece acesso completo ao grupo de IU, para que os aplicativos possam receber acesso direto a um volume sem a necessidade de elevação de privilégio, conforme discutido anteriormente. No entanto, os dispositivos UFD que não definem a propriedade Removível não se beneficiam disso porque o gerenciador de E/S não os trata como removíveis.

  • O driver de classe de disco define a característica FILE_REMOVABLE_MEDIA se os dados de identidade (recebidos do dispositivo em resposta ao comando SCSI INQUIRY) tiverem a propriedade Removível definida. Como alguns dispositivos UFD definem essa propriedade mesmo que não sejam mídia realmente removível, o gerenciador de E/S trata esses dispositivos como discos removíveis e fornece ao grupo de IU acesso de leitura e gravação ao volume.

  • Por padrão, o gerenciador de E/S fornece apenas o acesso Executar para usuários conectados remotamente para objetos de dispositivo de mídia removíveis (dispositivos de CD) e para os objetos de dispositivo de disco que têm FILE_REMOVABLE_MEDIA características definidas. Por isso, os usuários remotos não podem queimar dados usando uma unidade de CD ou DVD ou executar backup em uma mídia óptica ou formatar um disco removível. Os administradores podem definir a política de grupo de Acesso ao Armazenamento Removível para substituir o comportamento padrão. Quando essa política é definida, o gerenciador de E/S concede acesso completo ao usuário remoto para esses dispositivos, permitindo recursos de leitura e gravação.

AcLs de dispositivo de mídia removível e gerenciador de PnP

Quando a pilha do driver do dispositivo é iniciada, o gerenciador de PnP altera a ACL no dispositivo somente se a chave do dispositivo no registro especificar um descritor de segurança para esse dispositivo. O fornecedor do dispositivo pode definir esse descritor usando SetupDiSetDeviceRegistryProperty com a propriedade definida como no seguinte.

Propriedade: SPDRP_SECURITY

Valor: SECURITY_DESCRIPTOR

Tamanho: sizeof(SECURITY_DESCRIPTOR)

Essas propriedades também podem ser definidas por meio de um instalador de pacote de driver, especificando os parâmetros relacionados em um arquivo INF.

serviço Política de Grupo para ACLs de dispositivos de armazenamento removíveis

Esse é um serviço windows que permite que os administradores definam ACLs para a interface de volume para discos e a interface de volume para CD ou DVD, unidades de disco de fita e disquete e dispositivos WPD por meio da estrutura Política de Grupo. Essa política de grupo pode ser alterada dinamicamente. Quando a política é aplicada ao computador, o serviço atualiza a ACL para os dispositivos. A ACL aplicada por esse serviço substitui a ACL padrão que foi definida pelo gerente de E/S e pelo gerenciador PnP.

O serviço Política de Grupo define a ACL na interface de volume do disco, mas não na interface fornecida pelo driver de classe de disco. Isso ocorre porque, quando um aplicativo acessa arquivos e diretórios no volume, o gerenciador de E/S usa a ACL no objeto de volume correspondente para determinar se o chamador tem as permissões de acesso necessárias. Portanto, definindo a ACL no objeto do dispositivo de volume, o serviço Política de Grupo impõe os direitos de acesso que o administrador definiu para esse volume.

Processo de Verificação de Segurança

Quando um aplicativo tenta abrir um identificador para a interface do dispositivo, o gerenciador de E/S verifica se o usuário recebeu as permissões de acesso solicitadas na chamada CreateFile . Se sim, o identificador será aberto; caso contrário, a chamada falhará com o erro ACCESS_DENIED.

Depois que o identificador é aberto, o aplicativo pode enviar comandos diretamente para o dispositivo, normalmente usando um IOCTL. Por exemplo, para enviar um comando de passagem SCSI, um aplicativo usaria IOCTL_SCSI_PASS_THROUGH ou IOCTL_SCSI_PASS_THROUGH_DIRECT.

  • IOCTL_DISK_GET_PARTITION_INFO requer apenas acesso de leitura.

  • IOCTL_SCSI_PASS_THROUGH e IOCTL_SCSI_PASS_THROUGH_DIRECT exigem que o chamador tenha aberto o identificador para a interface (que é fornecida pelo driver do dispositivo de armazenamento) para acesso de leitura e gravação.

O opcode no bloco de descritor de comando (CDB) que é dado na solicitação de passagem SCSI não é verificado para determinar se o acesso de Leitura, Gravação ou Leitura e Gravação é necessário. É por isso que o Windows sempre exige que o identificador para o dispositivo seja aberto para Leituras e Gravações para solicitações de passagem, mesmo que o aplicativo esteja fazendo apenas uma leitura, uma gravação ou nenhuma transferência de dados.

IOCTL_DISK_VERIFY pode ser enviado sem considerar as permissões de acesso solicitadas em uma chamada CreateFile . Quando o gerente de E/S recebe um IOCTL, ele verifica as permissões de acesso necessárias para esse IOCTL e as compara com as permissões de acesso concedidas ao chamador na chamada CreateFile . Se houver uma correspondência, o IOCTL será enviado para o dispositivo de destino; caso contrário, a chamada IOCTL falhará com o erro ACCESS_DENIED.

Por exemplo, se o chamador abriu um identificador para acesso somente leitura, como o seguinte.

  • IOCTL_SCSI_PASS_THROUGH falha com ACCESS_DENIED de erro porque requer acesso de Leitura e Gravação.

  • IOCTL_DISK_GET_PARTITION_INFO é enviado para a pilha de driver porque requer apenas acesso de leitura.