Controle de acesso (Windows Plataforma de Filtragem)

No WFP (Windows Filtering Platform), o serviço BFE (Mecanismo de Filtragem Base) implementa o modelo de controle de acesso padrão do Windows com base em tokens de acesso e descritores de segurança.

Modelo de controle de acesso

Os descritores de segurança podem ser especificados ao adicionar novos objetos WFP, como filtros e subcamadas. Os descritores de segurança são gerenciados usando as funções de gerenciamento do WFP Fwpm*GetSecurityInfo0 e Fwpm*SetSecurityInfo0, em * que significa o nome do objeto WFP. Essas funções são semanticamente idênticas às funções GetSecurityInfo e SetSecurityInfo do Windows.

Observação

As funções Fwpm*SetSecurityInfo0 não podem ser chamadas de dentro de uma transação explícita.

Observação

As funções Fwpm*SetSecurityInfo0 só poderão ser chamadas de dentro de uma sessão dinâmica se estiverem sendo usadas para gerenciar um objeto dinâmico criado na mesma sessão.

O descritor de segurança padrão para o mecanismo de filtro (o objeto Engine raiz no diagrama abaixo) é o seguinte.

  • Conceda direitos de acesso GENERIC_ALL (GA) ao grupo administradores interno.
  • Conceda direitos de acesso GENERIC_READ (GR) GENERIC_WRITE (GW) GENERIC_EXECUTE (GX) aos operadores de configuração de rede.
  • Conceda direitos de acesso GRGWGX aos seguintes SSIDs (identificadores de segurança de serviço): MpsSvc (Firewall do Windows), NapAgent (Agente de Proteção de Acesso à Rede), PolicyAgent (Agente de Política IPsec), RpcSs (Chamada de Procedimento Remoto) e WdiServiceHost (Host do Serviço de Diagnóstico).
  • Conceda FWPM_ACTRL_OPEN e FWPM_ACTRL_CLASSIFY a todos. (Esses são direitos de acesso específicos do WFP, descritos na tabela abaixo.)

Os descritores de segurança padrão restantes são derivados por meio de herança.

Há algumas verificações de acesso, como para chamadas de função Fwpm*Add0, Fwpm*CreateEnumHandle0, Fwpm*SubscribeChanges0 , que não podem ser feitas no nível do objeto individual. Para essas funções, há objetos de contêiner para cada tipo de objeto. Para os tipos de objeto padrão (por exemplo, provedores, textos explicativos, filtros), as funções Fwpm*GetSecurityInfo0 e Fwpm*SetSecurityInfo0 existentes são sobrecarregadas, de modo que um parâmetro GUID nulo identifique o contêiner associado. Para os outros tipos de objeto (por exemplo, eventos de rede e associações de segurança IPsec), há funções explícitas para gerenciar as informações de segurança do contêiner.

O BFE dá suporte à herança automática de ACEs (entradas de controle de acesso) da LISTA de Controle de Acesso Discricionárias (DACL). O BFE não dá suporte a ACEs da SACL (Lista de Controle de Acesso do Sistema). Os objetos herdam ACEs de seu contêiner. Os contêineres herdam ACEs do mecanismo de filtro. Os caminhos de propagação são mostrados no diagrama abaixo.

Diagrama que mostra os caminhos de propagação ace, começando com 'Engine'.

Para os tipos de objeto padrão, a BFE impõe todos os direitos de acesso genéricos e padrão. Além disso, o WFP define os seguintes direitos de acesso específicos.

Acesso WFP à direita Descrição
FWPM_ACTRL_ADD
Necessário para adicionar um objeto a um contêiner.
FWPM_ACTRL_ADD_LINK
Necessário para criar uma associação a um objeto . Por exemplo, para adicionar um filtro que faça referência a um texto explicativo, o chamador deve ter ADD_LINK acesso ao texto explicativo.
FWPM_ACTRL_BEGIN_READ_TXN
Necessário para iniciar uma transação de leitura explícita.
FWPM_ACTRL_BEGIN_WRITE_TXN
Necessário para iniciar uma transação de gravação explícita.
FWPM_ACTRL_CLASSIFY
Necessário para classificar em relação a uma camada de modo de usuário.
FWPM_ACTRL_ENUM
Necessário para enumerar os objetos em um contêiner. No entanto, o enumerador retorna apenas objetos aos quais o chamador tem acesso FWPM_ACTRL_READ.
FWPM_ACTRL_OPEN
Necessário para abrir uma sessão com BFE.
FWPM_ACTRL_READ
Necessário para ler as propriedades de um objeto.
FWPM_ACTRL_READ_STATS
Necessário para ler estatísticas.
FWPM_ACTRL_SUBSCRIBE
Necessário para assinar notificações. Os assinantes receberão apenas notificações de objetos aos quais têm acesso FWPM_ACTRL_READ.
FWPM_ACTRL_WRITE
Necessário para definir as opções do mecanismo.

O BFE ignora todas as verificações de acesso para chamadores no modo kernel.

Para impedir que os administradores se bloqueiem do BFE, os membros do grupo de administradores internos sempre recebem FWPM_ACTRL_OPEN ao objeto do mecanismo. Portanto, um administrador pode recuperar o acesso por meio das etapas a seguir.

  • Habilite o privilégio SE_TAKE_OWNERSHIP_NAME .
  • Chame FwpmEngineOpen0. A chamada é bem-sucedida porque o chamador é membro de Administradores Internos.
  • Assuma a propriedade do objeto do mecanismo. Isso é bem-sucedido porque o chamador tem o privilégio SE_TAKE_OWNERSHIP_NAME .
  • Atualize a DACL. Isso é bem-sucedido porque o proprietário sempre tem acesso WRITE_DAC

Como a BFE dá suporte à própria auditoria personalizada, ela não gera auditorias genéricas de acesso a objetos. Portanto, a SACL é ignorada.

Direitos de acesso necessários do WFP

A tabela a seguir mostra os direitos de acesso exigidos pelas funções do WFP para acessar vários objetos de plataforma de filtragem. As funções FwpmFilter* são listadas como um exemplo para acessar os objetos padrão. Todas as outras funções que acessam objetos padrão seguem o modelo de acesso de funções FwpmFilter* .

Função Objeto verificado Acesso necessário
FwpmEngineOpen0 Mecanismo FWPM_ACTRL_OPEN
FwpmEngineGetOption0 Mecanismo FWPM_ACTRL_READ
FwpmEngineSetOption0 Mecanismo FWPM_ACTRL_WRITE
FwpmSessionCreateEnumHandle0 Mecanismo FWPM_ACTRL_ENUM
FwpmTransactionBegin0 Mecanismo & FWPM_ACTRL_BEGIN_READ_TXN FWPM_ACTRL_BEGIN_WRITE_TXN
FwpmFilterAdd0 Provedor de Contêiner
Camada
Sub-Layer
Balão
Contexto do Provedor
FWPM_ACTRL_ADDFWPM_ACTRL_ADD_LINK
FWPM_ACTRL_ADD_LINK
FWPM_ACTRL_ADD_LINK
FWPM_ACTRL_ADD_LINK
FWPM_ACTRL_ADD_LINK
FwpmFilterDeleteById0
FwpmFilterDeleteByKey0
Filtrar DELETE
FwpmFilterGetById0
FwpmFilterGetByKey0
Filtrar FWPM_ACTRL_READ
FwpmFilterCreateEnumHandle0 Filtro de Contêiner
FWPM_ACTRL_ENUMFWPM_ACTRL_READ
FwpmFilterSubscribeChanges0 Contêiner FWPM_ACTRL_SUBSCRIBE
FwpmFilterSubscriptionsGet0 Contêiner FWPM_ACTRL_READ
IPsecGetStatistics0 Banco de Dados SA IPsec FWPM_ACTRL_READ_STATS
IPsecSaContextCreate0
IPsecSaContextGetSpi0
IPsecSaContextAddInbound0
IPsecSaContextAddOutbound0
Banco de Dados SA IPsec FWPM_ACTRL_ADD
IPsecSaContextDeleteById0
IPsecSaContextExpire0
Banco de Dados SA IPsec DELETE
IPsecSaContextGetById0 Banco de Dados SA IPsec FWPM_ACTRL_READ
IPsecSaContextCreateEnumHandle0
IPsecSaCreateEnumHandle0
Banco de Dados SA IPsec & FWPM_ACTRL_ENUM FWPM_ACTRL_READ
IkeextGetStatistics0 IKE SA DB FWPM_ACTRL_READ_STATS
IkeextSaDeleteById0 IKE SA DB DELETE
IkeextSaGetById0 IKE SA DB FWPM_ACTRL_READ
IkeextSaCreateEnumHandle0 IKE SA DB & FWPM_ACTRL_ENUM FWPM_ACTRL_READ
FwpmNetEventCreateEnumHandle0 Contêiner FWPM_ACTRL_ENUM
FwpmIPsecTunnelAdd0
FwpmIPsecTunnelDeleteByKey0
Nenhuma verificação de acesso adicional além daquelas para os filtros individuais e contextos do provedor