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.
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 |