Translated ['macos-hardening/macos-security-and-privilege-escalation/mac
BIN
.gitbook/assets/image (681).png
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
.gitbook/assets/image (682).png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
.gitbook/assets/image (683).png
Normal file
After Width: | Height: | Size: 65 KiB |
BIN
.gitbook/assets/image (684).png
Normal file
After Width: | Height: | Size: 106 KiB |
BIN
.gitbook/assets/image (685).png
Normal file
After Width: | Height: | Size: 186 KiB |
BIN
.gitbook/assets/image (686).png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
.gitbook/assets/image (687).png
Normal file
After Width: | Height: | Size: 109 KiB |
BIN
.gitbook/assets/image (688).png
Normal file
After Width: | Height: | Size: 102 KiB |
BIN
.gitbook/assets/image (689).png
Normal file
After Width: | Height: | Size: 102 KiB |
BIN
.gitbook/assets/image (690).png
Normal file
After Width: | Height: | Size: 68 KiB |
BIN
.gitbook/assets/image (691).png
Normal file
After Width: | Height: | Size: 54 KiB |
BIN
.gitbook/assets/image (692).png
Normal file
After Width: | Height: | Size: 113 KiB |
BIN
.gitbook/assets/image (693).png
Normal file
After Width: | Height: | Size: 100 KiB |
BIN
.gitbook/assets/image (694).png
Normal file
After Width: | Height: | Size: 179 KiB |
|
@ -147,6 +147,7 @@
|
|||
* [macOS AppleFS](macos-hardening/macos-security-and-privilege-escalation/macos-applefs.md)
|
||||
* [macOS Bypassing Firewalls](macos-hardening/macos-security-and-privilege-escalation/macos-bypassing-firewalls.md)
|
||||
* [macOS Defensive Apps](macos-hardening/macos-security-and-privilege-escalation/macos-defensive-apps.md)
|
||||
* [macOS GCD - Grand Central Dispatch](macos-hardening/macos-security-and-privilege-escalation/macos-gcd-grand-central-dispatch.md)
|
||||
* [macOS Kernel & System Extensions](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md)
|
||||
* [macOS Kernel Extensions](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md)
|
||||
* [macOS System Extensions](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md)
|
||||
|
@ -160,6 +161,9 @@
|
|||
* [macOS Universal binaries & Mach-O Format](macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md)
|
||||
* [macOS Objective-C](macos-hardening/macos-security-and-privilege-escalation/macos-basic-objective-c.md)
|
||||
* [macOS Proces Abuse](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/README.md)
|
||||
* [macOS Dirty NIB](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-dirty-nib.md)
|
||||
* [macOS Electron Applications Injection](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md)
|
||||
* [macOS Function Hooking](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-function-hooking.md)
|
||||
* [macOS IPC - Inter Process Communication](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md)
|
||||
* [macOS MIG - Mach Interface Generator](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md)
|
||||
* [macOS XPC](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/README.md)
|
||||
|
@ -167,11 +171,9 @@
|
|||
* [macOS XPC Connecting Process Check](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check.md)
|
||||
* [macOS PID Reuse](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/macos-pid-reuse.md)
|
||||
* [macOS Thread Injection via Task port](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-thread-injection-via-task-port.md)
|
||||
* [macOS Electron Applications Injection](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md)
|
||||
* [macOS Function Hooking](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-function-hooking.md)
|
||||
* [macOS .Net Applications Injection](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-.net-applications-injection.md)
|
||||
* [macOS Library Injection](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/README.md)
|
||||
* [macOS Dyld Hijacking & DYLD\_INSERT\_LIBRARIES](macos-hardening/macos-security-and-privilege-escalation/macos-dyld-hijacking-and-dyld\_insert\_libraries.md)
|
||||
* [macOS .Net Applications Injection](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-.net-applications-injection.md)
|
||||
* [macOS Security Protections](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/README.md)
|
||||
* [macOS Gatekeeper](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-gatekeeper.md)
|
||||
* [macOS SIP](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sip.md)
|
||||
|
|
|
@ -0,0 +1,166 @@
|
|||
# macOS GCD - Grand Central Dispatch
|
||||
|
||||
<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 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)**.**
|
||||
* **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>
|
||||
|
||||
## Informações Básicas
|
||||
|
||||
**Grand Central Dispatch (GCD)**, também conhecido como **libdispatch**, está disponível tanto no macOS quanto no iOS. É uma tecnologia desenvolvida pela Apple para otimizar o suporte de aplicativos para execução concorrente (multithreaded) em hardware multicore.
|
||||
|
||||
**GCD** fornece e gerencia **filas FIFO** para as quais seu aplicativo pode **enviar tarefas** na forma de **objetos de bloco**. Blocos enviados para filas de despacho são **executados em um pool de threads** totalmente gerenciado pelo sistema. O GCD cria automaticamente threads para executar as tarefas nas filas de despacho e agenda essas tarefas para serem executadas nos núcleos disponíveis.
|
||||
|
||||
{% hint style="success" %}
|
||||
Em resumo, para executar código em **paralelo**, os processos podem enviar **blocos de código para o GCD**, que cuidará de sua execução. Portanto, os processos não criam novas threads; **o GCD executa o código fornecido com seu próprio pool de threads**.
|
||||
{% endhint %}
|
||||
|
||||
Isso é muito útil para gerenciar a execução paralela com sucesso, reduzindo significativamente o número de threads que os processos criam e otimizando a execução paralela. Isso é ideal para tarefas que requerem **grande paralelismo** (força bruta?) ou para tarefas que não devem bloquear a thread principal: por exemplo, a thread principal no iOS lida com interações de interface do usuário, então qualquer outra funcionalidade que possa fazer com que o aplicativo trave (pesquisar, acessar a web, ler um arquivo...) é gerenciada dessa maneira.
|
||||
|
||||
## Objective-C
|
||||
|
||||
No Objective-C, existem diferentes funções para enviar um bloco para ser executado em paralelo:
|
||||
|
||||
* [**dispatch\_async**](https://developer.apple.com/documentation/dispatch/1453057-dispatch\_async): Envia um bloco para execução assíncrona em uma fila de despacho e retorna imediatamente.
|
||||
* [**dispatch\_sync**](https://developer.apple.com/documentation/dispatch/1452870-dispatch\_sync): Envia um objeto de bloco para execução e retorna após a conclusão desse bloco.
|
||||
* [**dispatch\_once**](https://developer.apple.com/documentation/dispatch/1447169-dispatch\_once): Executa um objeto de bloco apenas uma vez durante a vida útil de um aplicativo.
|
||||
* [**dispatch\_async\_and\_wait**](https://developer.apple.com/documentation/dispatch/3191901-dispatch\_async\_and\_wait): Envia um item de trabalho para execução e retorna somente após a conclusão. Ao contrário de [**`dispatch_sync`**](https://developer.apple.com/documentation/dispatch/1452870-dispatch\_sync), essa função respeita todos os atributos da fila ao executar o bloco.
|
||||
|
||||
Essas funções esperam os seguintes parâmetros: [**`dispatch_queue_t`**](https://developer.apple.com/documentation/dispatch/dispatch\_queue\_t) **`queue,`** [**`dispatch_block_t`**](https://developer.apple.com/documentation/dispatch/dispatch\_block\_t) **`block`**
|
||||
|
||||
Esta é a **estrutura de um Bloco**:
|
||||
```c
|
||||
struct Block {
|
||||
void *isa; // NSConcreteStackBlock,...
|
||||
int flags;
|
||||
int reserved;
|
||||
void *invoke;
|
||||
struct BlockDescriptor *descriptor;
|
||||
// captured variables go here
|
||||
};
|
||||
```
|
||||
E este é um exemplo de como usar **paralelismo** com **`dispatch_async`**:
|
||||
```objectivec
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
// Define a block
|
||||
void (^backgroundTask)(void) = ^{
|
||||
// Code to be executed in the background
|
||||
for (int i = 0; i < 10; i++) {
|
||||
NSLog(@"Background task %d", i);
|
||||
sleep(1); // Simulate a long-running task
|
||||
}
|
||||
};
|
||||
|
||||
int main(int argc, const char * argv[]) {
|
||||
@autoreleasepool {
|
||||
// Create a dispatch queue
|
||||
dispatch_queue_t backgroundQueue = dispatch_queue_create("com.example.backgroundQueue", NULL);
|
||||
|
||||
// Submit the block to the queue for asynchronous execution
|
||||
dispatch_async(backgroundQueue, backgroundTask);
|
||||
|
||||
// Continue with other work on the main queue or thread
|
||||
for (int i = 0; i < 10; i++) {
|
||||
NSLog(@"Main task %d", i);
|
||||
sleep(1); // Simulate a long-running task
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
## Swift
|
||||
|
||||
A biblioteca **`libswiftDispatch`** fornece **ligações Swift** para o framework Grand Central Dispatch (GCD), que é originalmente escrito em C.\
|
||||
A biblioteca **`libswiftDispatch`** envolve as APIs C do GCD em uma interface mais amigável para Swift, tornando mais fácil e intuitivo para os desenvolvedores Swift trabalharem com GCD.
|
||||
|
||||
* **`DispatchQueue.global().sync{ ... }`**
|
||||
* **`DispatchQueue.global().async{ ... }`**
|
||||
* **`let onceToken = DispatchOnce(); onceToken.perform { ... }`**
|
||||
* **`async await`**
|
||||
* **`var (data, response) = await URLSession.shared.data(from: URL(string: "https://api.example.com/getData"))`**
|
||||
|
||||
**Exemplo de código**:
|
||||
```swift
|
||||
import Foundation
|
||||
|
||||
// Define a closure (the Swift equivalent of a block)
|
||||
let backgroundTask: () -> Void = {
|
||||
for i in 0..<10 {
|
||||
print("Background task \(i)")
|
||||
sleep(1) // Simulate a long-running task
|
||||
}
|
||||
}
|
||||
|
||||
// Entry point
|
||||
autoreleasepool {
|
||||
// Create a dispatch queue
|
||||
let backgroundQueue = DispatchQueue(label: "com.example.backgroundQueue")
|
||||
|
||||
// Submit the closure to the queue for asynchronous execution
|
||||
backgroundQueue.async(execute: backgroundTask)
|
||||
|
||||
// Continue with other work on the main queue
|
||||
for i in 0..<10 {
|
||||
print("Main task \(i)")
|
||||
sleep(1) // Simulate a long-running task
|
||||
}
|
||||
}
|
||||
```
|
||||
## Frida
|
||||
|
||||
O seguinte script Frida pode ser usado para **interceptar várias funções `dispatch`** e extrair o nome da fila, o rastreamento de pilha e o bloco: [**https://github.com/seemoo-lab/frida-scripts/blob/main/scripts/libdispatch.js**](https://github.com/seemoo-lab/frida-scripts/blob/main/scripts/libdispatch.js)
|
||||
```bash
|
||||
frida -U <prog_name> -l libdispatch.js
|
||||
|
||||
dispatch_sync
|
||||
Calling queue: com.apple.UIKit._UIReusePool.reuseSetAccess
|
||||
Callback function: 0x19e3a6488 UIKitCore!__26-[_UIReusePool addObject:]_block_invoke
|
||||
Backtrace:
|
||||
0x19e3a6460 UIKitCore!-[_UIReusePool addObject:]
|
||||
0x19e3a5db8 UIKitCore!-[UIGraphicsRenderer _enqueueContextForReuse:]
|
||||
0x19e3a57fc UIKitCore!+[UIGraphicsRenderer _destroyCGContext:withRenderer:]
|
||||
[...]
|
||||
```
|
||||
## Ghidra
|
||||
|
||||
Atualmente, o Ghidra não entende nem a estrutura **`dispatch_block_t`** do ObjectiveC, nem a estrutura **`swift_dispatch_block`**.
|
||||
|
||||
Portanto, se você quiser que ele entenda, você pode apenas **declará-las**:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (688).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (690).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (691).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
Em seguida, encontre um local no código onde elas são **usadas**:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (692).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
Clique com o botão direito na variável -> Retype Variable e selecione neste caso **`swift_dispatch_block`**:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (693).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
O Ghidra irá reescrever automaticamente tudo:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (694).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
<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 cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou 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)**.**
|
||||
* **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>
|
|
@ -1,54 +1,76 @@
|
|||
# Abuso de Processos no macOS
|
||||
|
||||
O macOS, como qualquer outro sistema operacional, fornece uma variedade de métodos e mecanismos para que **processos interajam, comuniquem-se e compartilhem dados**. Embora essas técnicas sejam essenciais para o funcionamento eficiente do sistema, elas também podem ser abusadas por atores mal-intencionados para **realizar atividades maliciosas**.
|
||||
<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 cibersegurança**? 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)**.**
|
||||
* **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>
|
||||
|
||||
## Abuso de Processos no macOS
|
||||
|
||||
O macOS, assim como qualquer outro sistema operacional, oferece uma variedade de métodos e mecanismos para que **processos interajam, se comuniquem e compartilhem dados**. Embora essas técnicas sejam essenciais para o funcionamento eficiente do sistema, elas também podem ser abusadas por atores maliciosos para **realizar atividades maliciosas**.
|
||||
|
||||
### Injeção de Biblioteca
|
||||
|
||||
A Injeção de Biblioteca é uma técnica em que um atacante **força um processo a carregar uma biblioteca maliciosa**. Uma vez injetada, a biblioteca é executada no contexto do processo alvo, fornecendo ao atacante as mesmas permissões e acesso do processo.
|
||||
A Injeção de Biblioteca é uma técnica em que um atacante **força um processo a carregar uma biblioteca maliciosa**. Uma vez injetada, a biblioteca é executada no contexto do processo-alvo, fornecendo ao atacante as mesmas permissões e acesso do processo.
|
||||
|
||||
{% content-ref url="macos-library-injection/" %}
|
||||
[macos-library-injection](macos-library-injection/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Hooking de Função
|
||||
### Hooking de Funções
|
||||
|
||||
O Hooking de Função envolve **interceptar chamadas de função** ou mensagens dentro de um código de software. Ao enganchar funções, um atacante pode **modificar o comportamento** de um processo, observar dados sensíveis ou até mesmo obter controle sobre o fluxo de execução.
|
||||
O Hooking de Funções envolve a **interceptação de chamadas de função** ou mensagens dentro de um código de software. Ao fazer o hook de funções, um atacante pode **modificar o comportamento** de um processo, observar dados sensíveis ou até mesmo obter controle sobre o fluxo de execução.
|
||||
|
||||
{% content-ref url="../mac-os-architecture/macos-function-hooking.md" %}
|
||||
[macos-function-hooking.md](../mac-os-architecture/macos-function-hooking.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Comunicação Interprocesso
|
||||
### Comunicação entre Processos
|
||||
|
||||
A Comunicação Interprocesso (IPC) refere-se a diferentes métodos pelos quais processos separados **compartilham e trocam dados**. Embora a IPC seja fundamental para muitas aplicações legítimas, ela também pode ser mal utilizada para subverter o isolamento de processos, vazar informações sensíveis ou realizar ações não autorizadas.
|
||||
A Comunicação entre Processos (IPC) refere-se a diferentes métodos pelos quais processos separados **compartilham e trocam dados**. Embora o IPC seja fundamental para muitas aplicações legítimas, ele também pode ser usado de forma inadequada para subverter o isolamento de processos, vazar informações sensíveis ou realizar ações não autorizadas.
|
||||
|
||||
{% content-ref url="../mac-os-architecture/macos-ipc-inter-process-communication/" %}
|
||||
[macos-ipc-inter-process-communication](../mac-os-architecture/macos-ipc-inter-process-communication/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Injeção de Aplicativos Electron
|
||||
### Injeção em Aplicações Electron
|
||||
|
||||
Aplicativos Electron executados com variáveis de ambiente específicas podem ser vulneráveis à injeção de processos:
|
||||
Aplicações Electron executadas com variáveis de ambiente específicas podem ser vulneráveis à injeção de processos:
|
||||
|
||||
{% content-ref url="macos-electron-applications-injection.md" %}
|
||||
[macos-electron-applications-injection.md](macos-electron-applications-injection.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Injeção de Aplicativos .Net
|
||||
### NIB Sujo
|
||||
|
||||
É possível injetar código em aplicativos .Net **abusando da funcionalidade de depuração do .Net** (não protegida pelas proteções do macOS, como o endurecimento em tempo de execução).
|
||||
Arquivos NIB **definem elementos de interface do usuário (UI)** e suas interações dentro de um aplicativo. No entanto, eles podem **executar comandos arbitrários** e o Gatekeeper não impede que um aplicativo já executado seja executado novamente se um arquivo NIB for modificado. Portanto, eles podem ser usados para fazer com que programas arbitrários executem comandos arbitrários:
|
||||
|
||||
{% content-ref url="macos-dirty-nib.md" %}
|
||||
[macos-dirty-nib.md](macos-dirty-nib.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Injeção em Aplicações .Net
|
||||
|
||||
É possível injetar código em aplicações .Net **abusando da funcionalidade de depuração do .Net** (não protegida por proteções do macOS, como o endurecimento em tempo de execução).
|
||||
|
||||
{% content-ref url="macos-.net-applications-injection.md" %}
|
||||
[macos-.net-applications-injection.md](macos-.net-applications-injection.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Injeção de Python
|
||||
### Injeção em Python
|
||||
|
||||
Se a variável de ambiente **`PYTHONINSPECT`** estiver definida, o processo Python entrará em um cli Python assim que terminar.
|
||||
Se a variável de ambiente **`PYTHONINSPECT`** estiver definida, o processo Python entrará em um CLI Python assim que terminar.
|
||||
|
||||
Outras variáveis de ambiente, como **`PYTHONPATH`** e **`PYTHONHOME`**, também podem ser úteis para fazer um comando Python executar código arbitrário.
|
||||
Outras variáveis de ambiente, como **`PYTHONPATH`** e **`PYTHONHOME`**, também podem ser úteis para fazer com que um comando Python execute código arbitrário.
|
||||
|
||||
Observe que os executáveis compilados com **`pyinstaller`** não usarão essas variáveis ambientais, mesmo se estiverem sendo executados usando um Python incorporado.
|
||||
Observe que executáveis compilados com **`pyinstaller`** não usarão essas variáveis de ambiente, mesmo que estejam sendo executados usando um Python incorporado.
|
||||
|
||||
## Detecção
|
||||
|
||||
|
@ -57,14 +79,14 @@ Observe que os executáveis compilados com **`pyinstaller`** não usarão essas
|
|||
[**Shield**](https://theevilbit.github.io/shield/) ([**Github**](https://github.com/theevilbit/Shield)) é um aplicativo de código aberto que pode **detectar e bloquear ações de injeção de processos**:
|
||||
|
||||
* Usando **Variáveis de Ambiente**: Ele monitorará a presença de qualquer uma das seguintes variáveis de ambiente: **`DYLD_INSERT_LIBRARIES`**, **`CFNETWORK_LIBRARY_PATH`**, **`RAWCAMERA_BUNDLE_PATH`** e **`ELECTRON_RUN_AS_NODE`**
|
||||
* Usando chamadas **`task_for_pid`**: Para encontrar quando um processo deseja obter a **porta de tarefa de outro**, o que permite injetar código no processo.
|
||||
* **Parâmetros de aplicativos Electron**: Alguém pode usar os argumentos de linha de comando **`--inspect`**, **`--inspect-brk`** e **`--remote-debugging-port`** para iniciar um aplicativo Electron no modo de depuração e, assim, injetar código nele.
|
||||
* Usando **links simbólicos** ou **hardlinks**: Tipicamente, o abuso mais comum é **colocar um link com nossos privilégios de usuário** e **apontá-lo para um local de privilégio mais alto**. A detecção é muito simples para ambos os hardlinks e symlinks. Se o processo que cria o link tiver um **nível de privilégio diferente** do arquivo de destino, criamos um **alerta**. Infelizmente, no caso de symlinks, o bloqueio não é possível, pois não temos informações sobre o destino do link antes da criação. Esta é uma limitação do framework EndpointSecuriy da Apple.
|
||||
* Usando chamadas de **`task_for_pid`**: Para encontrar quando um processo deseja obter a **porta de tarefa de outro**, o que permite injetar código no processo.
|
||||
* Parâmetros de aplicativos **Electron**: Alguém pode usar os argumentos de linha de comando **`--inspect`**, **`--inspect-brk`** e **`--remote-debugging-port`** para iniciar um aplicativo Electron no modo de depuração e, assim, injetar código nele.
|
||||
* Usando **links simbólicos** ou **links físicos**: Tipicamente, o abuso mais comum é **colocar um link com nossos privilégios de usuário** e **apontá-lo para uma localização de privilégio mais alto**. A detecção é muito simples para ambos os links físicos e simbólicos. Se o processo que cria o link tiver um **nível de privilégio diferente** do arquivo de destino, criamos um **alerta**. Infelizmente, no caso de links simbólicos, o bloqueio não é possível, pois não temos informações sobre o destino do link antes da criação. Isso é uma limitação do framework EndpointSecuriy da Apple.
|
||||
### Chamadas feitas por outros processos
|
||||
|
||||
Neste [**post de blog**](https://knight.sc/reverse%20engineering/2019/04/15/detecting-task-modifications.html), você pode encontrar como é possível usar a função **`task_name_for_pid`** para obter informações sobre outros **processos injetando código em um processo** e, em seguida, obter informações sobre esse outro processo.
|
||||
No [**post do blog**](https://knight.sc/reverse%20engineering/2019/04/15/detecting-task-modifications.html) você pode encontrar como é possível usar a função **`task_name_for_pid`** para obter informações sobre outros **processos injetando código em um processo** e, em seguida, obter informações sobre esse outro processo.
|
||||
|
||||
Observe que, para chamar essa função, você precisa ser **o mesmo uid** que está executando o processo ou **root** (e ela retorna informações sobre o processo, não uma maneira de injetar código).
|
||||
Observe que para chamar essa função, você precisa ter **o mesmo uid** que o processo em execução ou ser **root** (e ela retorna informações sobre o processo, não uma maneira de injetar código).
|
||||
|
||||
## Referências
|
||||
|
||||
|
@ -75,10 +97,10 @@ Observe que, para chamar essa função, você precisa ser **o mesmo uid** que es
|
|||
|
||||
<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 [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Você trabalha em uma **empresa de cibersegurança**? 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 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).
|
||||
* **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)**.**
|
||||
* **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>
|
||||
|
|
|
@ -0,0 +1,115 @@
|
|||
# macOS Dirty NIB
|
||||
|
||||
<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 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)**.**
|
||||
* **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>
|
||||
|
||||
**Esta técnica foi retirada do post** [**https://blog.xpnsec.com/dirtynib/**](https://blog.xpnsec.com/dirtynib/)
|
||||
|
||||
## Informações Básicas
|
||||
|
||||
Os arquivos NIB são usados no ecossistema de desenvolvimento da Apple para **definir elementos de interface do usuário (UI)** e suas interações dentro de um aplicativo. Criados com a ferramenta Interface Builder, eles contêm **objetos serializados** como janelas, botões e campos de texto, que são carregados em tempo de execução para apresentar a UI projetada. Embora ainda em uso, a Apple tem recomendado o uso de Storyboards para uma representação mais visual do fluxo da UI de um aplicativo.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Além disso, os **arquivos NIB** também podem ser usados para **executar comandos arbitrários** e se o arquivo NIB for modificado em um aplicativo, o **Gatekeeper ainda permitirá a execução do aplicativo**, então eles podem ser usados para **executar comandos arbitrários dentro de aplicativos**.
|
||||
{% endhint %}
|
||||
|
||||
## Injeção de NIB Sujo <a href="#dirtynib" id="dirtynib"></a>
|
||||
|
||||
Primeiro, precisamos criar um novo arquivo NIB, usaremos o XCode para a maior parte da construção. Começamos adicionando um objeto à interface e definimos a classe como NSAppleScript:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (681).png" alt="" width="380"><figcaption></figcaption></figure>
|
||||
|
||||
Para o objeto, precisamos definir a propriedade `source` inicial, o que podemos fazer usando Atributos de Tempo de Execução Definidos pelo Usuário:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (682).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
Isso configura nosso gadget de execução de código, que apenas vai **executar AppleScript sob demanda**. Para realmente acionar a execução do AppleScript, vamos adicionar um botão por enquanto (você pode, é claro, ser criativo com isso ;). O botão será vinculado ao objeto `Apple Script` que acabamos de criar e **invocará o seletor `executeAndReturnError:`**:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (683).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
Para testar, usaremos apenas o Apple Script:
|
||||
```bash
|
||||
set theDialogText to "PWND"
|
||||
display dialog theDialogText
|
||||
```
|
||||
E se executarmos isso no depurador do XCode e clicarmos no botão:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (684).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
Com nossa capacidade de executar código AppleScript arbitrário a partir de um NIB, em seguida, precisamos de um alvo. Vamos escolher o Pages para nossa demonstração inicial, que é, é claro, um aplicativo da Apple e certamente não deve ser modificável por nós.
|
||||
|
||||
Primeiro, faremos uma cópia do aplicativo em `/tmp/`:
|
||||
```bash
|
||||
cp -a -X /Applications/Pages.app /tmp/
|
||||
```
|
||||
Em seguida, vamos iniciar o aplicativo para evitar problemas com o Gatekeeper e permitir que as coisas sejam armazenadas em cache:
|
||||
```bash
|
||||
open -W -g -j /Applications/Pages.app
|
||||
```
|
||||
Depois de executar (e encerrar) o aplicativo pela primeira vez, precisaremos substituir um arquivo NIB existente pelo nosso arquivo DirtyNIB. Para fins de demonstração, vamos apenas substituir o NIB do Painel Sobre para que possamos controlar a execução:
|
||||
```bash
|
||||
cp /tmp/Dirty.nib /tmp/Pages.app/Contents/Resources/Base.lproj/TMAAboutPanel.nib
|
||||
```
|
||||
Uma vez que tenhamos sobrescrito o nib, podemos acionar a execução selecionando o item de menu `Sobre`:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (685).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
Se olharmos mais de perto o Pages, veremos que ele possui uma autorização privada para permitir o acesso às fotos dos usuários:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (686).png" alt="" width="479"><figcaption></figcaption></figure>
|
||||
|
||||
Portanto, podemos testar nosso POC **modificando nosso AppleScript para roubar fotos** do usuário sem solicitar permissão:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```applescript
|
||||
use framework "Cocoa"
|
||||
use framework "Foundation"
|
||||
|
||||
set grabbed to current application's NSData's dataWithContentsOfFile:"/Users/xpn/Pictures/Photos Library.photoslibrary/originals/6/68CD9A98-E591-4D39-B038-E1B3F982C902.gif"
|
||||
|
||||
grabbed's writeToFile:"/Users/xpn/Library/Containers/com.apple.iWork.Pages/Data/wtf.gif" atomically:1
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
{% hint style="danger" %}
|
||||
[**Exemplo de arquivo .xib malicioso que executa código arbitrário.**](https://gist.github.com/xpn/16bfbe5a3f64fedfcc1822d0562636b4)
|
||||
{% endhint %}
|
||||
|
||||
## Restrições de Lançamento
|
||||
|
||||
Basicamente, **impedem a execução de aplicativos fora de suas localizações esperadas**, então se você copiar um aplicativo protegido por Restrições de Lançamento para `/tmp`, você não poderá executá-lo.\
|
||||
[**Encontre mais informações neste post**](../macos-security-protections/#launch-constraints)**.**
|
||||
|
||||
No entanto, ao analisar o arquivo **`/System/Volumes/Preboot/*/boot/*/usr/standalone/firmware/FUD/StaticTrustCache.img4`**, você ainda pode encontrar **aplicativos que não estão protegidos por Restrições de Lançamento**, então ainda é possível **injetar** arquivos **NIB** em locais arbitrários nesses aplicativos (verifique o link anterior para aprender como encontrar esses aplicativos).
|
||||
|
||||
## Proteções Extras
|
||||
|
||||
A partir do macOS Somona, existem algumas proteções **impedindo a gravação dentro dos aplicativos**. No entanto, ainda é possível contornar essa proteção se, antes de executar sua cópia do binário, você alterar o nome da pasta Contents:
|
||||
|
||||
1. Faça uma cópia do `CarPlay Simulator.app` para `/tmp/`
|
||||
2. Renomeie `/tmp/Carplay Simulator.app/Contents` para `/tmp/CarPlay Simulator.app/NotCon`
|
||||
3. Execute o binário `/tmp/CarPlay Simulator.app/NotCon/MacOS/CarPlay Simulator` para armazenar em cache dentro do Gatekeeper
|
||||
4. Substitua `NotCon/Resources/Base.lproj/MainMenu.nib` pelo nosso arquivo `Dirty.nib`
|
||||
5. Renomeie para `/tmp/CarPlay Simulator.app/Contents`
|
||||
6. Execute `CarPlay Simulator.app` novamente
|
||||
|
||||
<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 cibersegurança**? 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 [**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 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)**.**
|
||||
* **Compartilhe seus truques 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>
|
|
@ -4,11 +4,11 @@
|
|||
|
||||
<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 cibersegurança**? Gostaria de ver sua **empresa anunciada no HackTricks**? Ou gostaria de 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 cibersegurança**? 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)**.**
|
||||
* **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).
|
||||
* **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)**.**
|
||||
* **Compartilhe suas técnicas 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>
|
||||
|
||||
|
@ -24,7 +24,7 @@ Mais informações em:
|
|||
|
||||
## MRT - Ferramenta de Remoção de Malware
|
||||
|
||||
A Ferramenta de Remoção de Malware (MRT) é outra parte da infraestrutura de segurança do macOS. Como o nome sugere, a função principal do MRT é **remover malware conhecido de sistemas infectados**.
|
||||
A Ferramenta de Remoção de Malware (MRT) é outra parte da infraestrutura de segurança do macOS. Como o nome sugere, a principal função do MRT é **remover malware conhecido de sistemas infectados**.
|
||||
|
||||
Uma vez que o malware é detectado em um Mac (seja pelo XProtect ou por outros meios), o MRT pode ser usado para **remover automaticamente o malware**. O MRT opera silenciosamente em segundo plano e geralmente é executado sempre que o sistema é atualizado ou quando uma nova definição de malware é baixada (parece que as regras que o MRT tem para detectar malware estão dentro do binário).
|
||||
|
||||
|
@ -45,7 +45,7 @@ O aplicativo MRT está localizado em **`/Library/Apple/System/Library/CoreServic
|
|||
|
||||
### Sandbox
|
||||
|
||||
O Sandbox do macOS **limita as ações de aplicativos** que estão sendo executados 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**.
|
||||
O Sandbox do macOS **limita as aplicações** em execução 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**.
|
||||
|
||||
{% content-ref url="macos-sandbox/" %}
|
||||
[macos-sandbox](macos-sandbox/)
|
||||
|
@ -53,7 +53,7 @@ O Sandbox do macOS **limita as ações de aplicativos** que estão sendo executa
|
|||
|
||||
### TCC - **Transparência, Consentimento e Controle**
|
||||
|
||||
**TCC (Transparência, Consentimento e Controle)** é um mecanismo no macOS para **limitar e controlar o acesso de aplicativos a determinados recursos**, geralmente do ponto de vista da privacidade. Isso pode incluir coisas como serviços de localização, contatos, fotos, microfone, câmera, acessibilidade, acesso total ao disco e muito mais.
|
||||
**TCC (Transparência, Consentimento e Controle)** é um mecanismo no macOS para **limitar e controlar o acesso do aplicativo a determinados recursos**, geralmente do ponto de vista da privacidade. Isso pode incluir coisas como serviços de localização, contatos, fotos, microfone, câmera, acessibilidade, acesso total ao disco e muito mais.
|
||||
|
||||
{% content-ref url="macos-tcc/" %}
|
||||
[macos-tcc](macos-tcc/)
|
||||
|
@ -63,14 +63,35 @@ O Sandbox do macOS **limita as ações de aplicativos** que estão sendo executa
|
|||
|
||||
O cache de confiança do macOS da Apple, às vezes também chamado de cache AMFI (Apple Mobile File Integrity), é um mecanismo de segurança no macOS projetado para **impedir a execução de software não autorizado ou malicioso**. Essencialmente, é uma lista de hashes criptográficos que o sistema operacional usa para **verificar a integridade e autenticidade do software**.
|
||||
|
||||
Quando um aplicativo ou arquivo executável tenta ser executado no macOS, o sistema operacional verifica o cache de confiança do 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.
|
||||
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.
|
||||
|
||||
## Restrições de Inicialização
|
||||
|
||||
Ele controla de onde e o que pode iniciar um binário assinado pela Apple:
|
||||
Ele controla **de onde e o que** pode iniciar um **binário assinado pela Apple**:
|
||||
|
||||
* Você não pode iniciar um aplicativo diretamente se ele deve ser executado pelo launchd
|
||||
* Você não pode executar um aplicativo fora do local confiável (como /System/)
|
||||
* **Compartilhe suas técnicas 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).
|
||||
|
||||
O arquivo que contém informações sobre essas restrições está localizado no macOS em **`/System/Volumes/Preboot/*/boot/*/usr/standalone/firmware/FUD/StaticTrustCache.img4`** (e no iOS parece que está em **`/usr/standalone/firmware/FUD/StaticTrustCache.img4`**).
|
||||
|
||||
Parece que era possível usar a ferramenta [**img4tool**](https://github.com/tihmstar/img4tool) **para extrair o cache**:
|
||||
```bash
|
||||
img4tool -e in.img4 -o out.bin
|
||||
```
|
||||
(No entanto, não consegui compilá-lo no M1).
|
||||
|
||||
Em seguida, você pode usar um script como [**este**](https://gist.github.com/xpn/66dc3597acd48a4c31f5f77c3cc62f30) para extrair dados.
|
||||
|
||||
A partir desses dados, você pode verificar os aplicativos com um **valor de restrição de inicialização de `0`**, que são aqueles que não possuem restrições ([**verifique aqui**](https://gist.github.com/LinusHenze/4cd5d7ef057a144cda7234e2c247c056) para saber o que cada valor significa).
|
||||
|
||||
<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 cibersegurança**? Gostaria de ver sua **empresa anunciada no HackTricks**? Ou gostaria de 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 seus truques 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>
|
||||
|
|
|
@ -14,18 +14,18 @@
|
|||
|
||||
## Instalando o Frida
|
||||
|
||||
Vá para o aplicativo **Cydia/Sileo** em seu dispositivo com Jailbreak e adicione o repositório do Frida indo para **Gerenciar -> Fontes -> Editar -> Adicionar** e insira [**https://build.frida.re** ](https://build.frida.re). Isso adicionará uma nova fonte na lista de fontes. Vá para a fonte do **Frida**, agora você deve **instalar** o pacote **Frida**.
|
||||
Vá para o aplicativo **Cydia/Sileo** em seu dispositivo com Jailbreak e adicione o repositório do Frida indo para **Gerenciar -> Fontes -> Editar -> Adicionar** e insira [**https://build.frida.re** ](https://build.frida.re). Isso adicionará uma nova fonte na lista de fontes. Vá para a **fonte Frida**, agora você deve **instalar** o pacote **Frida**.
|
||||
|
||||
![](https://miro.medium.com/max/614/0\*qSD26kBtgt\_UIZk1.png)
|
||||
|
||||
Se você estiver usando o **Corellium**, precisará baixar a versão do Frida em [https://github.com/frida/frida/releases](https://github.com/frida/frida/releases) (`frida-gadget-[sua-versão]-ios-universal.dylib.gz`) e descompactar e copiar para o local dylib que o Frida solicita, por exemplo: `/Users/[seuusuário]/.cache/frida/gadget-ios.dylib`
|
||||
|
||||
Após a instalação, você pode usar o comando **`frida-ls-devices`** em seu PC e verificar se o dispositivo aparece (seu PC precisa ter acesso a ele).\
|
||||
Execute também **`frida-ps -Uia`** para verificar os processos em execução no telefone.
|
||||
Execute também o comando **`frida-ps -Uia`** para verificar os processos em execução no telefone.
|
||||
|
||||
## Frida sem dispositivo com Jailbreak e sem patch no aplicativo
|
||||
|
||||
Confira este post no blog sobre como usar o Frida em dispositivos não-jailbroken sem patch no aplicativo: [https://mrbypass.medium.com/unlocking-potential-exploring-frida-objection-on-non-jailbroken-devices-without-application-ed0367a84f07](https://mrbypass.medium.com/unlocking-potential-exploring-frida-objection-on-non-jailbroken-devices-without-application-ed0367a84f07)
|
||||
Confira este post no blog sobre como usar o Frida em dispositivos sem Jailbreak sem patch no aplicativo: [https://mrbypass.medium.com/unlocking-potential-exploring-frida-objection-on-non-jailbroken-devices-without-application-ed0367a84f07](https://mrbypass.medium.com/unlocking-potential-exploring-frida-objection-on-non-jailbroken-devices-without-application-ed0367a84f07)
|
||||
|
||||
## Instalação do Cliente Frida
|
||||
|
||||
|
@ -53,134 +53,104 @@ To install Frida on your iOS device, you will need to have a jailbroken device.
|
|||
|
||||
Para instalar o Frida em seu dispositivo iOS, você precisará ter um dispositivo com jailbreak. Depois de fazer o jailbreak em seu dispositivo, você pode instalar o Frida seguindo as etapas a seguir:
|
||||
|
||||
1. Open Cydia on your iOS device.
|
||||
1. Open Cydia and add the Frida repository by going to "Sources" > "Edit" > "Add" and entering the repository URL: `https://build.frida.re`.
|
||||
|
||||
1. Abra o Cydia em seu dispositivo iOS.
|
||||
1. Abra o Cydia e adicione o repositório do Frida indo em "Sources" > "Edit" > "Add" e inserindo a URL do repositório: `https://build.frida.re`.
|
||||
|
||||
2. Search for "Frida" and select the appropriate package for your iOS version.
|
||||
2. Search for "Frida" in Cydia and install the package named "Frida".
|
||||
|
||||
2. Procure por "Frida" e selecione o pacote apropriado para a versão do seu iOS.
|
||||
2. Procure por "Frida" no Cydia e instale o pacote chamado "Frida".
|
||||
|
||||
3. Install the Frida package.
|
||||
3. Once the installation is complete, you can verify that Frida is installed by opening a terminal and running the command `frida --version`.
|
||||
|
||||
3. Instale o pacote do Frida.
|
||||
3. Após a instalação ser concluída, você pode verificar se o Frida está instalado abrindo um terminal e executando o comando `frida --version`.
|
||||
|
||||
### Setting Up Frida Server
|
||||
### Configuring Frida Server
|
||||
|
||||
### Configurando o Frida Server
|
||||
|
||||
To use Frida with iOS, you will need to set up Frida Server on your device. Follow these steps to set up Frida Server:
|
||||
To use Frida with iOS devices, you will need to configure Frida Server on your device. Follow these steps to configure Frida Server:
|
||||
|
||||
Para usar o Frida com o iOS, você precisará configurar o Frida Server em seu dispositivo. Siga estas etapas para configurar o Frida Server:
|
||||
Para usar o Frida com dispositivos iOS, você precisará configurar o Frida Server em seu dispositivo. Siga estas etapas para configurar o Frida Server:
|
||||
|
||||
1. Download the Frida Server binary for iOS from the Frida releases page.
|
||||
1. Download the Frida Server binary for iOS from the Frida releases page: `https://github.com/frida/frida/releases`.
|
||||
|
||||
1. Baixe o binário do Frida Server para iOS na página de lançamentos do Frida.
|
||||
1. Baixe o binário do Frida Server para iOS na página de lançamentos do Frida: `https://github.com/frida/frida/releases`.
|
||||
|
||||
2. Transfer the Frida Server binary to your iOS device using a tool like scp or SFTP.
|
||||
2. Transfer the Frida Server binary to your iOS device using a tool like scp or any other method you prefer.
|
||||
|
||||
2. Transfira o binário do Frida Server para o seu dispositivo iOS usando uma ferramenta como scp ou SFTP.
|
||||
2. Transfira o binário do Frida Server para o seu dispositivo iOS usando uma ferramenta como scp ou qualquer outro método de sua preferência.
|
||||
|
||||
3. Open a terminal on your iOS device and navigate to the directory where you transferred the Frida Server binary.
|
||||
|
||||
3. Abra um terminal em seu dispositivo iOS e navegue até o diretório onde você transferiu o binário do Frida Server.
|
||||
|
||||
4. Make the Frida Server binary executable by running the following command:
|
||||
4. Make the Frida Server binary executable by running the command `chmod +x frida-server`.
|
||||
|
||||
4. Torne o binário do Frida Server executável executando o seguinte comando:
|
||||
4. Torne o binário do Frida Server executável executando o comando `chmod +x frida-server`.
|
||||
|
||||
5. Start the Frida Server by running the command `./frida-server`.
|
||||
|
||||
5. Inicie o Frida Server executando o comando `./frida-server`.
|
||||
|
||||
6. Once the Frida Server is running, you can verify that it is working by running the command `frida-ps -U`.
|
||||
|
||||
6. Depois que o Frida Server estiver em execução, você pode verificar se ele está funcionando executando o comando `frida-ps -U`.
|
||||
|
||||
### Connecting to the iOS Device
|
||||
|
||||
### Conectando ao Dispositivo iOS
|
||||
|
||||
To connect to your iOS device using Frida, follow these steps:
|
||||
|
||||
Para se conectar ao seu dispositivo iOS usando o Frida, siga estas etapas:
|
||||
|
||||
1. Make sure your iOS device and your computer are on the same network.
|
||||
|
||||
1. Certifique-se de que seu dispositivo iOS e seu computador estejam na mesma rede.
|
||||
|
||||
2. Open a terminal on your computer and run the command `frida-ps -U` to list the running processes on your iOS device.
|
||||
|
||||
2. Abra um terminal em seu computador e execute o comando `frida-ps -U` para listar os processos em execução em seu dispositivo iOS.
|
||||
|
||||
3. Find the process ID (PID) of the application you want to trace.
|
||||
|
||||
3. Encontre o ID do processo (PID) do aplicativo que você deseja rastrear.
|
||||
|
||||
4. Run the command `frida -U -l <script.js> -p <PID>` to start the Frida trace with the specified script and process ID.
|
||||
|
||||
4. Execute o comando `frida -U -l <script.js> -p <PID>` para iniciar o rastreamento do Frida com o script e o ID do processo especificados.
|
||||
|
||||
5. The Frida trace will start, and you will see the output in the terminal.
|
||||
|
||||
5. O rastreamento do Frida será iniciado e você verá a saída no terminal.
|
||||
|
||||
By following these steps, you can configure Frida for iOS pentesting and start tracing applications on your iOS device. Happy hacking!
|
||||
|
||||
Seguindo essas etapas, você pode configurar o Frida para pentesting em iOS e começar a rastrear aplicativos em seu dispositivo iOS. Boa sorte nas suas atividades de hacking!
|
||||
```bash
|
||||
chmod +x frida-server
|
||||
```
|
||||
# Functions
|
||||
## Trace all functions with the word "log" in their name
|
||||
frida-trace -U <program> -i "*log*"
|
||||
frida-trace -U <program> -i "*log*" | swift demangle # Demangle names
|
||||
|
||||
5. Start the Frida Server by running the following command:
|
||||
|
||||
5. Inicie o Frida Server executando o seguinte comando:
|
||||
|
||||
```bash
|
||||
./frida-server
|
||||
```
|
||||
|
||||
6. The Frida Server should now be running on your iOS device.
|
||||
|
||||
6. O Frida Server deve estar em execução em seu dispositivo iOS.
|
||||
|
||||
### Connecting to Frida Server
|
||||
|
||||
### Conectando ao Frida Server
|
||||
|
||||
To connect to the Frida Server running on your iOS device, you will need to use the Frida command-line interface (CLI) tool. Follow these steps to connect to Frida Server:
|
||||
|
||||
Para se conectar ao Frida Server em execução em seu dispositivo iOS, você precisará usar a ferramenta de linha de comando (CLI) do Frida. Siga estas etapas para se conectar ao Frida Server:
|
||||
|
||||
1. Open a terminal on your computer.
|
||||
|
||||
1. Abra um terminal em seu computador.
|
||||
|
||||
2. Run the following command to connect to the Frida Server:
|
||||
|
||||
2. Execute o seguinte comando para se conectar ao Frida Server:
|
||||
|
||||
```bash
|
||||
frida-ps -U
|
||||
```
|
||||
|
||||
3. You should see a list of running processes on your iOS device.
|
||||
|
||||
3. Você deverá ver uma lista de processos em execução em seu dispositivo iOS.
|
||||
|
||||
4. Congratulations! You are now connected to the Frida Server on your iOS device.
|
||||
|
||||
4. Parabéns! Você agora está conectado ao Frida Server em seu dispositivo iOS.
|
||||
|
||||
### Injecting JavaScript Code
|
||||
|
||||
### Injetando Código JavaScript
|
||||
|
||||
Once you are connected to the Frida Server, you can start injecting JavaScript code into running processes. Follow these steps to inject JavaScript code:
|
||||
|
||||
Depois de se conectar ao Frida Server, você pode começar a injetar código JavaScript em processos em execução. Siga estas etapas para injetar código JavaScript:
|
||||
|
||||
1. Create a new JavaScript file with your desired code.
|
||||
|
||||
1. Crie um novo arquivo JavaScript com o código desejado.
|
||||
|
||||
2. Save the JavaScript file with a .js extension.
|
||||
|
||||
2. Salve o arquivo JavaScript com a extensão .js.
|
||||
|
||||
3. Run the following command to inject the JavaScript code into a specific process:
|
||||
|
||||
3. Execute o seguinte comando para injetar o código JavaScript em um processo específico:
|
||||
|
||||
```bash
|
||||
frida -U -n <process_name> -l <path_to_js_file>
|
||||
```
|
||||
|
||||
Replace `<process_name>` with the name of the process you want to inject the code into, and `<path_to_js_file>` with the path to your JavaScript file.
|
||||
|
||||
Substitua `<process_name>` pelo nome do processo no qual você deseja injetar o código e `<path_to_js_file>` pelo caminho para o seu arquivo JavaScript.
|
||||
|
||||
4. The JavaScript code will now be injected into the specified process.
|
||||
|
||||
4. O código JavaScript agora será injetado no processo especificado.
|
||||
|
||||
### Conclusion
|
||||
|
||||
### Conclusão
|
||||
|
||||
Configuring Frida for iOS pentesting allows you to perform dynamic analysis and reverse engineering of mobile applications. By injecting JavaScript code into running processes, you can gain insights into the application's behavior and identify potential vulnerabilities. With the ability to trace and manipulate function calls, Frida is a powerful tool for iOS pentesting.
|
||||
|
||||
Configurar o Frida para pentesting em iOS permite realizar análises dinâmicas e engenharia reversa de aplicativos móveis. Ao injetar código JavaScript em processos em execução, você pode obter insights sobre o comportamento do aplicativo e identificar possíveis vulnerabilidades. Com a capacidade de rastrear e manipular chamadas de função, o Frida é uma ferramenta poderosa para pentesting em iOS.
|
||||
```bash
|
||||
# Trace all methods of all classes
|
||||
# Objective-C
|
||||
## Trace all methods of all classes
|
||||
frida-trace -U <program> -m "*[* *]"
|
||||
|
||||
# Trace all methods with the word "authentication" from classes that start with "NE"
|
||||
## Trace all methods with the word "authentication" from classes that start with "NE"
|
||||
frida-trace -U <program> -m "*[NE* *authentication*]"
|
||||
|
||||
# Plug-In
|
||||
## To hook a plugin that is momentarely executed prepare Frida indicating the ID of the Plugin binary
|
||||
frida-trace -U -W <if-plugin-bin> -m '*[* *]'
|
||||
```
|
||||
### Obter todas as classes e métodos
|
||||
|
||||
* Auto completar: Basta executar `frida -U <programa>`
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (687).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
* Obter **todas** as **classes** disponíveis (filtrar por string)
|
||||
|
||||
{% code title="/tmp/script.js" %}
|
||||
|
@ -229,6 +199,238 @@ console.log("Objective-C runtime is not available.");
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
* **Chamar uma função**
|
||||
```javascript
|
||||
// Find the address of the function to call
|
||||
const func_addr = Module.findExportByName("<Prog Name>", "<Func Name>");
|
||||
// Declare the function to call
|
||||
const func = new NativeFunction(
|
||||
func_addr,
|
||||
"void", ["pointer", "pointer", "pointer"], {
|
||||
});
|
||||
|
||||
var arg0 = null;
|
||||
|
||||
// In this case to call this function we need to intercept a call to it to copy arg0
|
||||
Interceptor.attach(wg_log_addr, {
|
||||
onEnter: function(args) {
|
||||
arg0 = new NativePointer(args[0]);
|
||||
}
|
||||
});
|
||||
|
||||
// Wait untill a call to the func occurs
|
||||
while (! arg0) {
|
||||
Thread.sleep(1);
|
||||
console.log("waiting for ptr");
|
||||
}
|
||||
|
||||
|
||||
var arg1 = Memory.allocUtf8String('arg1');
|
||||
var txt = Memory.allocUtf8String('Some text for arg2');
|
||||
wg_log(arg0, arg1, txt);
|
||||
|
||||
console.log("loaded");
|
||||
```
|
||||
## Frida Fuzzing
|
||||
|
||||
### Frida Stalker
|
||||
|
||||
Stalker é o **motor de rastreamento** de código do Frida. Ele permite que threads sejam **seguidos**, **capturando** cada função, **cada bloco**, até mesmo cada instrução que é executada.
|
||||
|
||||
Você tem um exemplo implementando o Frida Stalker em [https://github.com/poxyran/misc/blob/master/frida-stalker-example.py](https://github.com/poxyran/misc/blob/master/frida-stalker-example.py)
|
||||
|
||||
Este é outro exemplo para anexar o Frida Stalker toda vez que uma função é chamada:
|
||||
```javascript
|
||||
console.log("loading");
|
||||
const wg_log_addr = Module.findExportByName("<Program>", "<function_name>");
|
||||
const wg_log = new NativeFunction(
|
||||
wg_log_addr,
|
||||
"void", ["pointer", "pointer", "pointer"], {
|
||||
});
|
||||
|
||||
Interceptor.attach(wg_log_addr, {
|
||||
onEnter: function(args) {
|
||||
console.log(`logging the following message: ${args[2].readCString()}`);
|
||||
|
||||
Stalker.follow({
|
||||
events: {
|
||||
// only collect coverage for newly encountered blocks
|
||||
compile: true,
|
||||
},
|
||||
onReceive: function (events) {
|
||||
const bbs = Stalker.parse(events, {
|
||||
stringify: false,
|
||||
annotate: false
|
||||
});
|
||||
console.log("Stalker trace of write_msg_to_log: \n" + bbs.flat().map(DebugSymbol.fromAddress).join('\n'));
|
||||
}
|
||||
});
|
||||
},
|
||||
onLeave: function(retval) {
|
||||
Stalker.unfollow();
|
||||
Stalker.flush(); // this is important to get all events
|
||||
}
|
||||
});
|
||||
```
|
||||
{% hint style="danger" %}
|
||||
Isso é interessante para fins de depuração, mas para fuzzing, ficar constantemente **`.follow()`** e **`.unfollow()`** é muito ineficiente.
|
||||
{% endhint %}
|
||||
|
||||
## [Fpicker](https://github.com/ttdennis/fpicker)
|
||||
|
||||
[**fpicker**](https://github.com/ttdennis/fpicker) é uma suíte de fuzzing baseada em Frida que oferece uma variedade de modos de fuzzing para fuzzing em processo, como um modo AFL++ ou um modo de rastreamento passivo. Ele deve ser executado em todas as plataformas suportadas pelo Frida.
|
||||
|
||||
* [**Instalar fpicker**](https://github.com/ttdennis/fpicker#requirements-and-installation) **& radamsa**
|
||||
```bash
|
||||
# Get fpicker
|
||||
git clone https://github.com/ttdennis/fpicker
|
||||
cd fpicker
|
||||
|
||||
# Get Frida core devkit and prepare fpicker
|
||||
wget https://github.com/frida/frida/releases/download/16.1.4/frida-core-devkit-16.1.4-[yourOS]-[yourarchitecture].tar.xz
|
||||
# e.g. https://github.com/frida/frida/releases/download/16.1.4/frida-core-devkit-16.1.4-macos-arm64.tar.xz
|
||||
tar -xf ./*tar.xz
|
||||
cp libfrida-core.a libfrida-core-[yourOS].a #libfrida-core-macos.a
|
||||
|
||||
# Install fpicker
|
||||
make fpicker-[yourOS] # fpicker-macos
|
||||
# This generates ./fpicker
|
||||
|
||||
# Install radamsa (fuzzer generator)
|
||||
brew install radamsa
|
||||
```
|
||||
* **Preparar o FS:**
|
||||
```bash
|
||||
# From inside fpicker clone
|
||||
mkdir -p examples/wg-log # Where the fuzzing script will be
|
||||
mkdir -p examples/wg-log/out # For code coverage and crashes
|
||||
mkdir -p examples/wg-log/in # For starting inputs
|
||||
|
||||
# Create at least 1 input for the fuzzer
|
||||
echo Hello World > examples/wg-log/in/0
|
||||
```
|
||||
* **Script de Fuzzer** (`exemplos/wg-log/myfuzzer.js`):
|
||||
|
||||
{% code title="exemplos/wg-log/myfuzzer.js" %}
|
||||
```javascript
|
||||
// Import the fuzzer base class
|
||||
import { Fuzzer } from "../../harness/fuzzer.js";
|
||||
|
||||
class WGLogFuzzer extends Fuzzer {
|
||||
|
||||
constructor() {
|
||||
console.log("WGLogFuzzer constructor called")
|
||||
|
||||
// Get and declare the function we are going to fuzz
|
||||
var wg_log_addr = Module.findExportByName("<Program name>", "<func name to fuzz>");
|
||||
var wg_log_func = new NativeFunction(
|
||||
wg_log_addr,
|
||||
"void", ["pointer", "pointer", "pointer"], {
|
||||
});
|
||||
|
||||
// Initialize the object
|
||||
super("<Program nane>", wg_log_addr, wg_log_func);
|
||||
this.wg_log_addr = wg_log_addr; // We cannot use "this" before calling "super"
|
||||
|
||||
console.log("WGLogFuzzer in the middle");
|
||||
|
||||
// Prepare the second argument to pass to the fuzz function
|
||||
this.tag = Memory.allocUtf8String("arg2");
|
||||
|
||||
// Get the first argument we need to pass from a call to the functino we want to fuzz
|
||||
var wg_log_global_ptr = null;
|
||||
console.log(this.wg_log_addr);
|
||||
Interceptor.attach(this.wg_log_addr, {
|
||||
onEnter: function(args) {
|
||||
console.log("Entering in the function to get the first argument");
|
||||
wg_log_global_ptr = new NativePointer(args[0]);
|
||||
}
|
||||
});
|
||||
|
||||
while (! wg_log_global_ptr) {
|
||||
Thread.sleep(1)
|
||||
}
|
||||
this.wg_log_global_ptr = wg_log_global_ptr;
|
||||
console.log("WGLogFuzzer prepare ended")
|
||||
}
|
||||
|
||||
|
||||
// This function is called by the fuzzer with the first argument being a pointer into memory
|
||||
// where the payload is stored and the second the length of the input.
|
||||
fuzz(payload, len) {
|
||||
// Get a pointer to payload being a valid C string (with a null byte at the end)
|
||||
var payload_cstring = payload.readCString(len);
|
||||
this.payload = Memory.allocUtf8String(payload_cstring);
|
||||
|
||||
// Debug and fuzz
|
||||
this.debug_log(this.payload, len);
|
||||
// Pass the 2 first arguments we know the function needs and finally the payload to fuzz
|
||||
this.target_function(this.wg_log_global_ptr, this.tag, this.payload);
|
||||
}
|
||||
}
|
||||
|
||||
const f = new WGLogFuzzer();
|
||||
rpc.exports.fuzzer = f;
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
* **Compilar** o fuzzer:
|
||||
```bash
|
||||
# From inside fpicker clone
|
||||
## Compile from "myfuzzer.js" to "harness.js"
|
||||
frida-compile examples/wg-log/myfuzzer.js -o harness.js
|
||||
```
|
||||
* Chame o fuzzer **`fpicker`** usando **`radamsa`**:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
# Indicate fpicker to fuzz a program with the harness.js script and which folders to use
|
||||
fpicker -v --fuzzer-mode active -e attach -p <Program to fuzz> -D usb -o examples/wg-log/out/ -i examples/wg-log/in/ -f harness.js --standalone-mutator cmd --mutator-command "radamsa"
|
||||
# You can find code coverage and crashes in examples/wg-log/out/
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
{% hint style="danger" %}
|
||||
Neste caso, **não estamos reiniciando o aplicativo ou restaurando o estado** após cada payload. Portanto, se o Frida encontrar uma **falha**, as **próximas entradas** após esse payload também podem **causar falhas no aplicativo** (porque o aplicativo está em um estado instável), mesmo que a **entrada não deva causar falhas** no aplicativo.
|
||||
|
||||
Além disso, o Frida irá se conectar aos sinais de exceção do iOS, então quando o **Frida encontrar uma falha**, provavelmente um **relatório de falha do iOS não será gerado**.
|
||||
|
||||
Para evitar isso, por exemplo, poderíamos reiniciar o aplicativo após cada falha do Frida.
|
||||
{% endhint %}
|
||||
|
||||
### Logs e Falhas
|
||||
|
||||
Você pode verificar o **console do macOS** ou o **`log`** cli para verificar os logs do macOS.\
|
||||
Você também pode verificar os logs do iOS usando o **`idevicesyslog`**.\
|
||||
Alguns logs omitirão informações adicionando **`<private>`**. Para mostrar todas as informações, você precisa instalar algum perfil em [https://developer.apple.com/bug-reporting/profiles-and-logs/](https://developer.apple.com/bug-reporting/profiles-and-logs/) para habilitar essas informações privadas.
|
||||
|
||||
Se você não sabe o que fazer:
|
||||
```sh
|
||||
vim /Library/Preferences/Logging/com.apple.system.logging.plist
|
||||
<?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>Enable-Private-Data</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
killall -9 logd
|
||||
```
|
||||
Você pode verificar os crashes em: 
|
||||
|
||||
* **iOS**
|
||||
* Configurações → Privacidade → Análise e Melhorias → Dados de Análise
|
||||
* `/private/var/mobile/Library/Logs/CrashReporter/`
|
||||
* **macOS**:
|
||||
* `/Library/Logs/DiagnosticReports/`
|
||||
* `~/Library/Logs/DiagnosticReports`
|
||||
|
||||
{% hint style="warning" %}
|
||||
O iOS armazena apenas 25 crashes do mesmo aplicativo, portanto, você precisa limpar isso ou o iOS deixará de criar crashes.
|
||||
{% endhint %}
|
||||
|
||||
## Tutoriais Frida para Android
|
||||
|
||||
{% content-ref url="../android-app-pentesting/frida-tutorial/" %}
|
||||
|
@ -239,10 +441,10 @@ console.log("Objective-C runtime is not available.");
|
|||
|
||||
<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)!
|
||||
* Você trabalha em uma **empresa de cibersegurança**? 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)**.**
|
||||
* **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).
|
||||
* **Compartilhe seus truques 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>
|
||||
|
|