macOS System Extensions
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ao contrário das Kernel Extensions, as System Extensions são executadas no espaço do usuário em vez do espaço do kernel, reduzindo o risco de uma falha do sistema devido a mau funcionamento da extensão.
Existem três tipos de extensões de sistema: DriverKit Extensions, Network Extensions e Endpoint Security Extensions.
DriverKit é um substituto para extensões de kernel que fornecem suporte de hardware. Ele permite que drivers de dispositivo (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 de 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.
As Network Extensions fornecem a capacidade de personalizar comportamentos de rede. Existem vários tipos de Network Extensions:
App Proxy: 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.
Packet Tunnel: Isso é usado para criar um cliente VPN que implementa um protocolo VPN personalizado orientado a pacotes. Isso significa que ele lida com o tráfego de rede com base em pacotes individuais.
Filter Data: Isso é usado para filtrar "fluxos" de rede. Ele pode monitorar ou modificar dados de rede no nível do fluxo.
Filter Packet: Isso é usado para filtrar pacotes individuais de rede. Ele pode monitorar ou modificar dados de rede no nível do pacote.
DNS Proxy: Isso é usado para criar um provedor DNS personalizado. Ele pode ser usado para monitorar ou modificar solicitações e respostas DNS.
O Endpoint Security é um framework fornecido pela Apple no macOS que oferece um conjunto de APIs para segurança do sistema. É destinado ao uso por fornecedores de segurança e desenvolvedores para construir produtos que podem 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 do kernel.
O núcleo deste framework é implementado no kernel, como uma Kernel Extension (KEXT) localizada em /System/Library/Extensions/EndpointSecurity.kext
. Este KEXT é composto por vários componentes-chave:
EndpointSecurityDriver: Isso atua como o "ponto de entrada" para a extensão do kernel. É o principal ponto de interação entre o OS e o framework de Endpoint Security.
EndpointSecurityEventManager: Este componente é responsável por implementar hooks do kernel. Hooks do kernel permitem que o framework monitore eventos do sistema interceptando chamadas de 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 Endpoint Security pode monitorar são categorizados em:
Eventos de arquivo
Eventos de processo
Eventos de socket
Eventos do kernel (como carregar/descarregar uma extensão de kernel ou abrir um dispositivo do I/O Kit)
A comunicação no espaço do usuário com o framework de Endpoint Security acontece através da classe IOUserClient. Duas subclasses diferentes são usadas, dependendo do tipo de chamador:
EndpointSecurityDriverClient: Isso requer a permissão com.apple.private.endpoint-security.manager
, que é mantida apenas pelo processo do sistema endpointsecurityd
.
EndpointSecurityExternalClient: Isso requer a permissão com.apple.developer.endpoint-security.client
. Isso seria tipicamente usado por software de segurança de terceiros que precisa interagir com o framework de Endpoint Security.
As Endpoint Security Extensions:libEndpointSecurity.dylib
é a biblioteca C que as extensões de sistema usam para se comunicar com o kernel. Esta biblioteca usa o I/O Kit (IOKit
) para se comunicar com o KEXT de Endpoint Security.
endpointsecurityd
é um daemon do sistema chave envolvido na gestão e lançamento de extensões de sistema de segurança de endpoint, particularmente durante o processo de inicialização inicial. Apenas extensões de sistema marcadas com NSEndpointSecurityEarlyBoot
em seu arquivo Info.plist
recebem esse tratamento de inicialização antecipada.
Outro daemon do sistema, sysextd
, valida extensões de sistema e as move para os locais apropriados do sistema. Em seguida, ele pede ao daemon relevante para carregar a extensão. O SystemExtensions.framework
é responsável por ativar e desativar extensões de sistema.
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.
A questão é que o aplicativo de segurança precisa ter permissões de Acesso Completo ao Disco. Portanto, se um atacante puder remover isso, ele poderá impedir que o software seja executado:
Para mais informações sobre este bypass e relacionados, confira a palestra #OBTS v5.0: "O Calcanhar de Aquiles do EndpointSecurity" - Fitzl Csaba
No final, isso foi corrigido ao dar a nova permissão kTCCServiceEndpointSecurityClient
ao aplicativo de segurança gerenciado por tccd
, para que tccutil
não limpe suas permissões, impedindo-o de ser executado.
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)