# ExtensÔes do Sistema macOS {% hint style="success" %} Aprenda e pratique Hacking AWS: [**Treinamento HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Aprenda e pratique Hacking GCP: [**Treinamento HackTricks GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Apoie o HackTricks * Verifique os [**planos de assinatura**](https://github.com/sponsors/carlospolop)! * **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐩 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Compartilhe truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
{% endhint %} ## ExtensÔes do Sistema / Framework de Segurança de Ponta Ao contrårio das ExtensÔes de 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 uma falha do sistema devido a mau funcionamento da extensão.
https://knight.sc/images/system-extension-internals-1.png
Existem trĂȘs tipos de extensĂ”es do sistema: ExtensĂ”es **DriverKit**, ExtensĂ”es de **Rede** e ExtensĂ”es de **Segurança de Ponta**. ### **ExtensĂ”es DriverKit** O DriverKit Ă© um substituto para extensĂ”es de kernel que **fornecem suporte de hardware**. Ele permite que drivers de dispositivos (como USB, Serial, NIC e HID drivers) sejam executados no espaço do usuĂĄrio em vez do espaço do kernel. O framework DriverKit inclui **versĂ”es no 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 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 ao 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 Pacotes**: 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. * **Filtro de Dados**: Isso Ă© usado para filtrar "fluxos" de rede. Pode monitorar ou modificar dados de rede no nĂ­vel do fluxo. * **Filtro de Pacotes**: Isso Ă© usado para filtrar pacotes individuais de rede. Pode monitorar ou modificar dados de rede no nĂ­vel do pacote. * **Proxy DNS**: Isso Ă© usado para criar um provedor DNS personalizado. Pode ser usado para monitorar ou modificar solicitaçÔes e respostas DNS. ## Framework de Segurança de Ponta A Segurança de Ponta Ă© 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 de Kernel (KEXT) localizada em **`/System/Library/Extensions/EndpointSecurity.kext`**. Esta KEXT Ă© composta por vĂĄrios componentes principais: * **EndpointSecurityDriver**: Atua como o "ponto de entrada" para a extensĂŁo do kernel. É o principal ponto de interação entre o SO e o framework de Segurança de Ponta. * **EndpointSecurityEventManager**: Este componente Ă© responsĂĄvel por implementar ganchos do kernel. Os ganchos do kernel permitem que o framework monitore eventos do sistema interceptando chamadas do sistema. * **EndpointSecurityClientManager**: Gerencia a comunicação com clientes no espaço do usuĂĄrio, mantendo o controle de quais clientes estĂŁo conectados e precisam receber notificaçÔes de eventos. * **EndpointSecurityMessageManager**: Envia mensagens e notificaçÔes de eventos para clientes no espaço do usuĂĄrio. Os eventos que o framework de Segurança de Ponta pode monitorar sĂŁo categorizados em: * Eventos de arquivo * Eventos de processo * Eventos de soquete * Eventos de kernel (como carregar/descarregar uma extensĂŁo de kernel ou abrir um dispositivo I/O Kit) ### Arquitetura do Framework de Segurança de Ponta
https://www.youtube.com/watch?v=jaVkpM1UqOs
A **comunicação no espaço do usuĂĄrio** com o framework de Segurança de Ponta ocorre por meio 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 Ă© detida 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 Segurança de Ponta. As ExtensĂ”es de Segurança de Ponta:**`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 KEXT de Segurança de Ponta. **`endpointsecurityd`** Ă© um daemon do sistema chave envolvido na gestĂŁo e lançamento de extensĂ”es do sistema de segurança de ponta, especialmente durante o processo de inicialização inicial. **Apenas 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 adequadas do sistema. Em seguida, solicita ao daemon relevante para carregar a extensĂŁo. O **`SystemExtensions.framework`** Ă© responsĂĄvel por ativar e desativar as extensĂ”es do sistema. ## Bypass do 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 a aplicação de segurança precisa ter as **permissĂ”es de Acesso Total ao Disco**. Portanto, se um atacante pudesse remover isso, ele poderia impedir que o software fosse executado: ```bash tccutil reset All ``` Para **mais informaçÔes** sobre esse bypass e outros relacionados, confira a palestra [#OBTS v5.0: "O Calcanhar de Aquiles da Segurança de Endpoint" - Fitzl Csaba](https://www.youtube.com/watch?v=lQO7tvNCoTI) 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 que ele seja executado. ## ReferĂȘncias * [**OBTS v3.0: "Segurança e Insegurança de Endpoint" - Scott Knight**](https://www.youtube.com/watch?v=jaVkpM1UqOs) * [**https://knight.sc/reverse%20engineering/2019/08/24/system-extension-internals.html**](https://knight.sc/reverse%20engineering/2019/08/24/system-extension-internals.html) {% hint style="success" %} Aprenda e pratique Hacking na AWS:[**Treinamento HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Aprenda e pratique Hacking no GCP: [**Treinamento HackTricks GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Apoie o HackTricks * Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)! * **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐩 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Compartilhe truques de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
{% endhint %}