hacktricks/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md

8.2 KiB

Extensões do Sistema macOS

Ao contrário das extensões do kernel, as extensões do sistema são executadas no espaço do usuário em vez do espaço do kernel, reduzindo o risco de falha do sistema devido a mau funcionamento da extensão.

Existem três tipos de extensões do sistema: extensões do DriverKit, extensões de rede e extensões de segurança de endpoint.

Extensões do DriverKit

O DriverKit é um substituto para extensões do kernel que fornecem suporte de hardware. Ele permite que drivers de dispositivos (como drivers USB, Serial, NIC e HID) sejam executados no espaço do usuário em vez do espaço do kernel. O framework DriverKit inclui versões do espaço do usuário de certas classes do I/O Kit, e o kernel encaminha eventos normais do I/O Kit para o espaço do usuário, oferecendo um ambiente mais seguro para esses drivers serem executados.

Extensões de Rede

As extensões de rede fornecem a capacidade de personalizar os comportamentos de rede. Existem vários tipos de extensões de rede:

  • Proxy de Aplicativo: Isso é usado para criar um cliente VPN que implementa um protocolo VPN personalizado orientado a fluxo. Isso significa que ele lida com o tráfego de rede com base em conexões (ou fluxos) em vez de pacotes individuais.
  • Túnel de Pacote: Isso é usado para criar um cliente VPN que implementa um protocolo VPN personalizado orientado a pacote. Isso significa que ele lida com o tráfego de rede com base em pacotes individuais.
  • Filtro de Dados: Isso é usado para filtrar "fluxos" de rede. Ele pode monitorar ou modificar dados de rede no nível do fluxo.
  • Filtro de Pacote: Isso é usado para filtrar pacotes de rede individuais. Ele pode monitorar ou modificar dados de rede no nível do pacote.
  • Proxy DNS: Isso é usado para criar um provedor DNS personalizado. Ele pode ser usado para monitorar ou modificar solicitações e respostas DNS.

Framework de Segurança de Endpoint

A Segurança de Endpoint é um framework fornecido pela Apple no macOS que fornece um conjunto de APIs para segurança do sistema. É destinado ao uso por fornecedores de segurança e desenvolvedores para construir produtos que possam monitorar e controlar a atividade do sistema para identificar e proteger contra atividades maliciosas.

Este framework fornece uma coleção de APIs para monitorar e controlar a atividade do sistema, como execuções de processos, eventos do sistema de arquivos, eventos de rede e kernel.

O núcleo deste framework é implementado no kernel, como uma extensão do kernel (KEXT) localizada em /System/Library/Extensions/EndpointSecurity.kext. Esta KEXT é composta por vários componentes principais:

  • EndpointSecurityDriver: Isso atua como o "ponto de entrada" para a extensão do kernel. É o principal ponto de interação entre o sistema operacional e o framework de segurança de endpoint.
  • EndpointSecurityEventManager: Este componente é responsável por implementar hooks do kernel. Hooks do kernel permitem que o framework monitore eventos do sistema interceptando chamadas do sistema.
  • EndpointSecurityClientManager: Isso gerencia a comunicação com clientes do espaço do usuário, mantendo o controle de quais clientes estão conectados e precisam receber notificações de eventos.
  • EndpointSecurityMessageManager: Isso envia mensagens e notificações de eventos para clientes do espaço do usuário.

Os eventos que o framework de segurança de endpoint pode monitorar são categorizados em:

  • Eventos de arquivo
  • Eventos de processo
  • Eventos de soquete
  • Eventos do kernel (como carregar/descarregar uma extensão do kernel ou abrir um dispositivo I/O Kit)

Arquitetura do Framework de Segurança de Endpoint

A comunicação do espaço do usuário com o framework de segurança de endpoint ocorre por meio da classe IOUserClient. Duas subclasses diferentes são usadas, dependendo do tipo de chamador:

  • EndpointSecurityDriverClient: Isso requer a concessão com.apple.private.endpoint-security.manager, que é mantida apenas pelo processo do sistema endpointsecurityd.
  • EndpointSecurityExternalClient: Isso requer a concessão com.apple.developer.endpoint-security.client. Isso seria usado normalmente por software de segurança de terceiros que precisa interagir com o framework de segurança de endpoint.

As Extensões de Segurança de Endpoint: libEndpointSecurity.dylib é a biblioteca C que as extensões do sistema usam para se comunicar com o kernel. Esta biblioteca usa o I/O Kit (IOKit) para se comunicar com a extensão do kernel de segurança de endpoint.

endpointsecurityd é um daemon do sistema chave envolvido na gestão e lançamento de extensões do sistema de segurança de endpoint, particularmente durante o processo de inicialização inicial. Somente as extensões do sistema marcadas com NSEndpointSecurityEarlyBoot em seu arquivo Info.plist recebem este tratamento de inicialização inicial.

Outro daemon do sistema, sysextd, valida as extensões do sistema e as move para as localizações apropriadas do sistema. Em seguida, ele pede ao daemon relevante para carregar a extensão. O SystemExtensions.framework é responsável por ativar e desativar as extensões do sistema.

Bypassando o ESF

O ESF é usado por ferramentas de segurança que tentarão detectar um red teamer, então qualquer informação sobre como isso poderia ser evitado soa interessante.

CVE-2021-30965

A questão é que o aplicativo de segurança precisa ter permissões de acesso total ao disco. Portanto, se um invasor pudesse remover isso, ele poderia impedir que o software fosse executado:

tccutil reset All

Para mais informações sobre essa falha de segurança e outras relacionadas, confira a palestra #OBTS v5.0: "The Achilles Heel of EndpointSecurity" - Fitzl Csaba

No final, isso foi corrigido dando a nova permissão kTCCServiceEndpointSecurityClient ao aplicativo de segurança gerenciado por tccd para que o tccutil não limpe suas permissões, impedindo-o de ser executado.

Referências

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥