mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-27 23:20:49 +00:00
Translated ['macos-hardening/macos-security-and-privilege-escalation/mac
This commit is contained in:
parent
1582043ad0
commit
d2aa4dd90a
4 changed files with 302 additions and 241 deletions
|
@ -1,12 +1,10 @@
|
|||
# macOS Apps - Inspecting, debugging and Fuzzing
|
||||
|
||||
## macOS Apps - Inspeção, depuração e Fuzzing
|
||||
# macOS Apps - Inspeção, depuração e Fuzzing
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprenda hacking AWS do zero ao avançado com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
Outras formas de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
|
@ -16,22 +14,30 @@ Outras maneiras de apoiar o HackTricks:
|
|||
|
||||
</details>
|
||||
|
||||
### Análise Estática
|
||||
### [WhiteIntel](https://whiteintel.io)
|
||||
|
||||
#### otool
|
||||
<figure><img src="/.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**WhiteIntel**](https://whiteintel.io) é um mecanismo de busca alimentado pela **dark web** que oferece funcionalidades **gratuitas** para verificar se uma empresa ou seus clientes foram **comprometidos** por **malwares stealers**.
|
||||
|
||||
O principal objetivo do WhiteIntel é combater a apropriação de contas e ataques de ransomware resultantes de malwares que roubam informações.
|
||||
|
||||
Você pode acessar o site deles e experimentar o mecanismo gratuitamente em:
|
||||
|
||||
{% embed url="https://whiteintel.io" %}
|
||||
|
||||
---
|
||||
|
||||
## Análise Estática
|
||||
|
||||
### otool
|
||||
```bash
|
||||
otool -L /bin/ls #List dynamically linked libraries
|
||||
otool -tv /bin/ps #Decompile application
|
||||
```
|
||||
|
||||
#### objdump
|
||||
### objdump
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
```bash
|
||||
objdump -m --dylibs-used /bin/ls #List dynamically linked libraries
|
||||
objdump -m -h /bin/ls # Get headers information
|
||||
|
@ -40,11 +46,9 @@ objdump -m --full-contents /bin/ls # Dump every section
|
|||
objdump -d /bin/ls # Dissasemble the binary
|
||||
objdump --disassemble-symbols=_hello --x86-asm-syntax=intel toolsdemo #Disassemble a function using intel flavour
|
||||
```
|
||||
|
||||
#### jtool2
|
||||
### jtool2
|
||||
|
||||
A ferramenta pode ser usada como um **substituto** para **codesign**, **otool** e **objdump**, e fornece algumas funcionalidades adicionais. [**Baixe-a aqui**](http://www.newosxbook.com/tools/jtool.html) ou instale-a com `brew`.
|
||||
|
||||
```bash
|
||||
# Install
|
||||
brew install --cask jtool2
|
||||
|
@ -61,13 +65,11 @@ ARCH=x86_64 jtool2 --sig /System/Applications/Automator.app/Contents/MacOS/Autom
|
|||
# Get MIG information
|
||||
jtool2 -d __DATA.__const myipc_server | grep MIG
|
||||
```
|
||||
|
||||
#### Codesign / ldid
|
||||
### Codesign / ldid
|
||||
|
||||
{% hint style="danger" %}
|
||||
**`Codesign`** pode ser encontrado no **macOS** enquanto **`ldid`** pode ser encontrado no **iOS**
|
||||
{% endhint %}
|
||||
|
||||
```bash
|
||||
# Get signer
|
||||
codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier"
|
||||
|
@ -94,25 +96,22 @@ ldid -e <binary>
|
|||
## /tmp/entl.xml is a XML file with the new entitlements to add
|
||||
ldid -S/tmp/entl.xml <binary>
|
||||
```
|
||||
|
||||
#### SuspiciousPackage
|
||||
### SuspiciousPackage
|
||||
|
||||
[**SuspiciousPackage**](https://mothersruin.com/software/SuspiciousPackage/get.html) é uma ferramenta útil para inspecionar arquivos **.pkg** (instaladores) e ver o que está dentro antes de instalá-los.\
|
||||
Esses instaladores possuem scripts bash `preinstall` e `postinstall` que os autores de malware geralmente abusam para **persistir** o **malware**.
|
||||
|
||||
#### hdiutil
|
||||
### hdiutil
|
||||
|
||||
Esta ferramenta permite **montar** imagens de disco da Apple (**.dmg**) para inspecioná-las antes de executar qualquer coisa:
|
||||
|
||||
```bash
|
||||
hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg
|
||||
```
|
||||
|
||||
Será montado em `/Volumes`
|
||||
|
||||
#### Objective-C
|
||||
### Objective-C
|
||||
|
||||
**Metadados**
|
||||
#### Metadados
|
||||
|
||||
{% hint style="danger" %}
|
||||
Note que programas escritos em Objective-C **mantêm** suas declarações de classe **quando** **compilados** em [binários Mach-O](../macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md). Tais declarações de classe **incluem** o nome e tipo de:
|
||||
|
@ -123,22 +122,20 @@ Note que programas escritos em Objective-C **mantêm** suas declarações de cla
|
|||
* As variáveis de instância da classe
|
||||
|
||||
Você pode obter essas informações usando [**class-dump**](https://github.com/nygard/class-dump):
|
||||
|
||||
```bash
|
||||
class-dump Kindle.app
|
||||
```
|
||||
|
||||
**Chamada de Função**
|
||||
#### Chamada de Função
|
||||
|
||||
Quando uma função é chamada em um binário que usa Objective-C, o código compilado, em vez de chamar essa função, irá chamar **`objc_msgSend`**. Que irá chamar a função final:
|
||||
|
||||
![](<../../../.gitbook/assets/image (560).png>)
|
||||
![](<../../../.gitbook/assets/image (302).png>)
|
||||
|
||||
Os parâmetros que essa função espera são:
|
||||
|
||||
* O primeiro parâmetro (**self**) é "um ponteiro que aponta para a **instância da classe que irá receber a mensagem**". Ou de forma mais simples, é o objeto sobre o qual o método está sendo invocado. Se o método for um método de classe, isso será uma instância do objeto da classe (como um todo), enquanto que para um método de instância, self apontará para uma instância instanciada da classe como um objeto.
|
||||
* O segundo parâmetro, (**op**), é "o seletor do método que manipula a mensagem". Novamente, de forma mais simples, este é apenas o **nome do método**.
|
||||
* Os parâmetros restantes são quaisquer **valores necessários pelo método** (op).
|
||||
- O primeiro parâmetro (**self**) é "um ponteiro que aponta para a **instância da classe que irá receber a mensagem**". Ou de forma mais simples, é o objeto no qual o método está sendo invocado. Se o método for um método de classe, isso será uma instância do objeto da classe (como um todo), enquanto que para um método de instância, self apontará para uma instância instanciada da classe como um objeto.
|
||||
- O segundo parâmetro, (**op**), é "o seletor do método que manipula a mensagem". Novamente, de forma mais simples, este é apenas o **nome do método**.
|
||||
- Os parâmetros restantes são quaisquer **valores necessários pelo método** (op).
|
||||
|
||||
Veja como **obter essas informações facilmente com `lldb` em ARM64** nesta página:
|
||||
|
||||
|
@ -149,8 +146,8 @@ Veja como **obter essas informações facilmente com `lldb` em ARM64** nesta pá
|
|||
x64:
|
||||
|
||||
| **Argumento** | **Registrador** | **(para) objc\_msgSend** |
|
||||
| ----------------- | ----------------------------------------------------------- | ---------------------------------------------------------- |
|
||||
| **1º argumento** | **rdi** | **self: objeto sobre o qual o método está sendo invocado** |
|
||||
| ------------------ | -------------------------------------------------------------- | ---------------------------------------------------- |
|
||||
| **1º argumento** | **rdi** | **self: objeto no qual o método está sendo invocado** |
|
||||
| **2º argumento** | **rsi** | **op: nome do método** |
|
||||
| **3º argumento** | **rdx** | **1º argumento para o método** |
|
||||
| **4º argumento** | **rcx** | **2º argumento para o método** |
|
||||
|
@ -158,12 +155,11 @@ x64:
|
|||
| **6º argumento** | **r9** | **4º argumento para o método** |
|
||||
| **7º+ argumento** | <p><strong>rsp+</strong><br><strong>(na pilha)</strong></p> | **5º+ argumento para o método** |
|
||||
|
||||
#### Swift
|
||||
### Swift
|
||||
|
||||
Com binários Swift, como há compatibilidade com Objective-C, às vezes é possível extrair declarações usando [class-dump](https://github.com/nygard/class-dump/), mas nem sempre.
|
||||
|
||||
Com os comandos de linha **`jtool -l`** ou **`otool -l`** é possível encontrar várias seções que começam com o prefixo **`__swift5`**:
|
||||
|
||||
```bash
|
||||
jtool2 -l /Applications/Stocks.app/Contents/MacOS/Stocks
|
||||
LC 00: LC_SEGMENT_64 Mem: 0x000000000-0x100000000 __PAGEZERO
|
||||
|
@ -175,11 +171,9 @@ Mem: 0x100027064-0x1000274cc __TEXT.__swift5_fieldmd
|
|||
Mem: 0x1000274cc-0x100027608 __TEXT.__swift5_capture
|
||||
[...]
|
||||
```
|
||||
|
||||
Pode encontrar mais informações sobre a **informação armazenada nesta seção neste post do blog**.
|
||||
|
||||
Além disso, **os binários Swift podem ter símbolos** (por exemplo, bibliotecas precisam armazenar símbolos para que suas funções possam ser chamadas). Os **símbolos geralmente têm informações sobre o nome da função** e atributos de uma maneira feia, então eles são muito úteis e existem "**demanglers"** que podem obter o nome original:
|
||||
|
||||
Além disso, **os binários Swift podem ter símbolos** (por exemplo, bibliotecas precisam armazenar símbolos para que suas funções possam ser chamadas). Os **símbolos geralmente contêm informações sobre o nome da função** e atributos de uma maneira confusa, então eles são muito úteis e existem "**demanglers"** que podem obter o nome original:
|
||||
```bash
|
||||
# Ghidra plugin
|
||||
https://github.com/ghidraninja/ghidra_scripts/blob/master/swift_demangler.py
|
||||
|
@ -187,65 +181,63 @@ https://github.com/ghidraninja/ghidra_scripts/blob/master/swift_demangler.py
|
|||
# Swift cli
|
||||
swift demangle
|
||||
```
|
||||
|
||||
#### Binários compactados
|
||||
### Binários compactados
|
||||
|
||||
* Verificar alta entropia
|
||||
* Verificar as strings (se houver quase nenhuma string compreensível, está compactado)
|
||||
* O empacotador UPX para MacOS gera uma seção chamada "\_\_XHDR"
|
||||
|
||||
### Análise Dinâmica
|
||||
## Análise Dinâmica
|
||||
|
||||
{% hint style="warning" %}
|
||||
Observe que, para depurar binários, **o SIP precisa estar desativado** (`csrutil disable` ou `csrutil enable --without debug`) ou copiar os binários para uma pasta temporária e **remover a assinatura** com `codesign --remove-signature <caminho-do-binário>` ou permitir a depuração do binário (você pode usar [este script](https://gist.github.com/carlospolop/a66b8d72bb8f43913c4b5ae45672578b))
|
||||
Note que, para depurar binários, **o SIP precisa estar desativado** (`csrutil disable` ou `csrutil enable --without debug`) ou copiar os binários para uma pasta temporária e **remover a assinatura** com `codesign --remove-signature <caminho-do-binário>` ou permitir a depuração do binário (você pode usar [este script](https://gist.github.com/carlospolop/a66b8d72bb8f43913c4b5ae45672578b))
|
||||
{% endhint %}
|
||||
|
||||
{% hint style="warning" %}
|
||||
Observe que, para **instrumentar binários do sistema** (como `cloudconfigurationd`) no macOS, **o SIP deve estar desativado** (apenas remover a assinatura não funcionará).
|
||||
Note que, para **instrumentar binários do sistema** (como `cloudconfigurationd`) no macOS, **o SIP deve estar desativado** (apenas remover a assinatura não funcionará).
|
||||
{% endhint %}
|
||||
|
||||
#### Logs Unificados
|
||||
### Logs Unificados
|
||||
|
||||
O MacOS gera muitos logs que podem ser muito úteis ao executar um aplicativo tentando entender **o que ele está fazendo**.
|
||||
|
||||
Além disso, existem alguns logs que conterão a tag `<private>` para **ocultar** algumas informações **identificáveis do usuário** ou do **computador**. No entanto, é possível **instalar um certificado para divulgar essas informações**. Siga as explicações de [**aqui**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log).
|
||||
|
||||
#### Hopper
|
||||
### Hopper
|
||||
|
||||
**Painel esquerdo**
|
||||
#### Painel esquerdo
|
||||
|
||||
No painel esquerdo do Hopper, é possível ver os símbolos (**Labels**) do binário, a lista de procedimentos e funções (**Proc**) e as strings (**Str**). Essas não são todas as strings, mas as definidas em várias partes do arquivo Mac-O (como _cstring ou_ `objc_methname`).
|
||||
|
||||
**Painel central**
|
||||
#### Painel central
|
||||
|
||||
No painel central, você pode ver o **código desmontado**. E você pode vê-lo como um desmonte **bruto**, como **gráfico**, como **decompilado** e como **binário** clicando no ícone respectivo:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (6).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (340).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Ao clicar com o botão direito em um objeto de código, você pode ver **referências para/de esse objeto** ou até mesmo alterar seu nome (isso não funciona no pseudocódigo decompilado):
|
||||
Ao clicar com o botão direito em um objeto de código, você pode ver as **referências para/de esse objeto** ou até mesmo alterar seu nome (isso não funciona no pseudocódigo decompilado):
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1114).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Além disso, na **parte inferior do meio, você pode escrever comandos python**.
|
||||
|
||||
**Painel direito**
|
||||
#### Painel direito
|
||||
|
||||
No painel direito, você pode ver informações interessantes, como o **histórico de navegação** (para saber como você chegou à situação atual), o **grafo de chamadas** onde você pode ver todas as **funções que chamam essa função** e todas as funções que **essa função chama**, e informações sobre **variáveis locais**.
|
||||
|
||||
#### dtrace
|
||||
### dtrace
|
||||
|
||||
Ele permite aos usuários acessar aplicativos em um nível extremamente **baixo** e fornece uma maneira para os usuários **rastrearem** **programas** e até mesmo alterarem seu fluxo de execução. O Dtrace usa **sondas** que são **colocadas em todo o kernel** e estão em locais como o início e o fim das chamadas de sistema.
|
||||
|
||||
O DTrace usa a função **`dtrace_probe_create`** para criar uma sonda para cada chamada de sistema. Essas sondas podem ser acionadas no **ponto de entrada e saída de cada chamada de sistema**. A interação com o DTrace ocorre por meio de /dev/dtrace, que está disponível apenas para o usuário root.
|
||||
|
||||
{% hint style="success" %}
|
||||
Para habilitar o Dtrace sem desativar completamente a proteção SIP, você pode executar no modo de recuperação: `csrutil enable --without dtrace`
|
||||
Para habilitar o Dtrace sem desativar completamente a proteção do SIP, você pode executar no modo de recuperação: `csrutil enable --without dtrace`
|
||||
|
||||
Você também pode **`dtrace`** ou **`dtruss`** binários que **você compilou**.
|
||||
{% endhint %}
|
||||
|
||||
As sondas disponíveis do dtrace podem ser obtidas com:
|
||||
|
||||
```bash
|
||||
dtrace -l | head
|
||||
ID PROVIDER MODULE FUNCTION NAME
|
||||
|
@ -255,26 +247,22 @@ ID PROVIDER MODULE FUNCTION NAME
|
|||
43 profile profile-97
|
||||
44 profile profile-199
|
||||
```
|
||||
|
||||
O nome da sonda consiste em quatro partes: o provedor, módulo, função e nome (`fbt:mach_kernel:ptrace:entry`). Se você não especificar alguma parte do nome, o Dtrace aplicará essa parte como um caractere curinga.
|
||||
|
||||
Para configurar o DTrace para ativar sondas e especificar quais ações executar quando elas dispararem, precisaremos usar a linguagem D.
|
||||
|
||||
Uma explicação mais detalhada e mais exemplos podem ser encontrados em [https://illumos.org/books/dtrace/chp-intro.html](https://illumos.org/books/dtrace/chp-intro.html)
|
||||
|
||||
**Exemplos**
|
||||
#### Exemplos
|
||||
|
||||
Execute `man -k dtrace` para listar os **scripts DTrace disponíveis**. Exemplo: `sudo dtruss -n binary`
|
||||
|
||||
* Em linha
|
||||
|
||||
```bash
|
||||
#Count the number of syscalls of each running process
|
||||
sudo dtrace -n 'syscall:::entry {@[execname] = count()}'
|
||||
```
|
||||
|
||||
* script
|
||||
|
||||
```bash
|
||||
syscall:::entry
|
||||
/pid == $1/
|
||||
|
@ -312,89 +300,76 @@ printf("=%d\n", arg1);
|
|||
#Log sys calls with values
|
||||
sudo dtrace -s syscalls_info.d -c "cat /etc/hosts"
|
||||
```
|
||||
|
||||
#### dtruss
|
||||
|
||||
#### dtruss
|
||||
|
||||
### dtruss
|
||||
```bash
|
||||
dtruss -c ls #Get syscalls of ls
|
||||
dtruss -c -p 1000 #get syscalls of PID 1000
|
||||
```
|
||||
|
||||
#### ktrace
|
||||
### ktrace
|
||||
|
||||
Você pode usar este mesmo com o **SIP ativado**
|
||||
|
||||
```bash
|
||||
ktrace trace -s -S -t c -c ls | grep "ls("
|
||||
```
|
||||
|
||||
#### ProcessMonitor
|
||||
### ProcessMonitor
|
||||
|
||||
[**ProcessMonitor**](https://objective-see.com/products/utilities.html#ProcessMonitor) é uma ferramenta muito útil para verificar as ações relacionadas a processos que um processo está realizando (por exemplo, monitorar quais novos processos um processo está criando).
|
||||
|
||||
#### SpriteTree
|
||||
### SpriteTree
|
||||
|
||||
[**SpriteTree**](https://themittenmac.com/tools/) é uma ferramenta que imprime as relações entre processos.\
|
||||
Você precisa monitorar seu Mac com um comando como **`sudo eslogger fork exec rename create > cap.json`** (o terminal que inicia isso requer FDA). E então você pode carregar o json nesta ferramenta para visualizar todas as relações:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (710).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1179).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
#### FileMonitor
|
||||
### FileMonitor
|
||||
|
||||
[**FileMonitor**](https://objective-see.com/products/utilities.html#FileMonitor) permite monitorar eventos de arquivos (como criação, modificações e exclusões), fornecendo informações detalhadas sobre tais eventos.
|
||||
|
||||
#### Crescendo
|
||||
### Crescendo
|
||||
|
||||
[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo) é uma ferramenta GUI com a aparência e sensação que os usuários do Windows podem conhecer do _Procmon_ da Microsoft Sysinternal. Esta ferramenta permite iniciar e parar a gravação de vários tipos de eventos, permite filtrar esses eventos por categorias como arquivo, processo, rede, etc., e fornece a funcionalidade de salvar os eventos gravados em um formato json.
|
||||
[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo) é uma ferramenta GUI com a aparência que os usuários do Windows podem conhecer do _Procmon_ da Microsoft Sysinternal. Esta ferramenta permite iniciar e parar a gravação de vários tipos de eventos, permite filtrar esses eventos por categorias como arquivo, processo, rede, etc., e fornece a funcionalidade de salvar os eventos gravados em um formato json.
|
||||
|
||||
#### Apple Instruments
|
||||
### Apple Instruments
|
||||
|
||||
[**Apple Instruments**](https://developer.apple.com/library/archive/documentation/Performance/Conceptual/CellularBestPractices/Appendix/Appendix.html) fazem parte das ferramentas de desenvolvedor do Xcode - usadas para monitorar o desempenho do aplicativo, identificar vazamentos de memória e rastrear a atividade do sistema de arquivos.
|
||||
|
||||
![](<../../../.gitbook/assets/image (15).png>)
|
||||
![](<../../../.gitbook/assets/image (1135).png>)
|
||||
|
||||
#### fs\_usage
|
||||
### fs\_usage
|
||||
|
||||
Permite seguir as ações realizadas por processos:
|
||||
|
||||
```bash
|
||||
fs_usage -w -f filesys ls #This tracks filesystem actions of proccess names containing ls
|
||||
fs_usage -w -f network curl #This tracks network actions
|
||||
```
|
||||
|
||||
#### TaskExplorer
|
||||
### TaskExplorer
|
||||
|
||||
[**Taskexplorer**](https://objective-see.com/products/taskexplorer.html) é útil para ver as **bibliotecas** usadas por um binário, os **arquivos** que ele está usando e as **conexões de rede**.\
|
||||
Também verifica os processos binários no **virustotal** e mostra informações sobre o binário.
|
||||
|
||||
### PT\_DENY\_ATTACH <a href="#page-title" id="page-title"></a>
|
||||
## PT\_DENY\_ATTACH <a href="#page-title" id="page-title"></a>
|
||||
|
||||
Neste [**post do blog**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html) você pode encontrar um exemplo de como **depurar um daemon em execução** que usou **`PT_DENY_ATTACH`** para evitar a depuração, mesmo que o SIP estivesse desativado.
|
||||
Neste [**post do blog**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html), você pode encontrar um exemplo de como **depurar um daemon em execução** que usou **`PT_DENY_ATTACH`** para evitar a depuração, mesmo que o SIP estivesse desativado.
|
||||
|
||||
#### lldb
|
||||
### lldb
|
||||
|
||||
**lldb** é a ferramenta de **fato** para **depuração** de binários **macOS**.
|
||||
|
||||
```bash
|
||||
lldb ./malware.bin
|
||||
lldb -p 1122
|
||||
lldb -n malware.bin
|
||||
lldb -n malware.bin --waitfor
|
||||
```
|
||||
|
||||
Você pode definir o sabor intel ao usar o lldb criando um arquivo chamado **`.lldbinit`** em sua pasta pessoal com a seguinte linha:
|
||||
|
||||
Você pode definir o sabor da Intel ao usar o lldb criando um arquivo chamado **`.lldbinit`** em sua pasta pessoal com a seguinte linha:
|
||||
```bash
|
||||
settings set target.x86-disassembly-flavor intel
|
||||
```
|
||||
|
||||
{% hint style="warning" %}
|
||||
Dentro do lldb, faça dump de um processo com `process save-core`
|
||||
{% endhint %}
|
||||
|
||||
<table data-header-hidden><thead><tr><th width="225"></th><th></th></tr></thead><tbody><tr><td><strong>(lldb) Comando</strong></td><td><strong>Descrição</strong></td></tr><tr><td><strong>run (r)</strong></td><td>Iniciar a execução, que continuará sem interrupções até que um ponto de interrupção seja atingido ou o processo seja encerrado.</td></tr><tr><td><strong>continue (c)</strong></td><td>Continuar a execução do processo em depuração.</td></tr><tr><td><strong>nexti (n / ni)</strong></td><td>Executar a próxima instrução. Este comando irá pular chamadas de função.</td></tr><tr><td><strong>stepi (s / si)</strong></td><td>Executar a próxima instrução. Ao contrário do comando nexti, este comando irá entrar nas chamadas de função.</td></tr><tr><td><strong>finish (f)</strong></td><td>Executar o restante das instruções na função atual ("frame") e parar.</td></tr><tr><td><strong>control + c</strong></td><td>Pausar a execução. Se o processo foi iniciado (r) ou continuado (c), isso fará com que o processo pare ...onde quer que esteja atualmente em execução.</td></tr><tr><td><strong>breakpoint (b)</strong></td><td><p>b main #Qualquer função chamada main</p><p>b <nome_do_bin>`main #Função principal do binário</p><p>b set -n main --shlib <nome_da_biblioteca> #Função principal do binário indicado</p><p>b -[NSDictionary objectForKey:]</p><p>b -a 0x0000000100004bd9</p><p>br l #Lista de pontos de interrupção</p><p>br e/dis <número> #Ativar/Desativar ponto de interrupção</p><p>breakpoint delete <número></p></td></tr><tr><td><strong>help</strong></td><td><p>help breakpoint #Obter ajuda do comando de ponto de interrupção</p><p>help memory write #Obter ajuda para escrever na memória</p></td></tr><tr><td><strong>reg</strong></td><td><p>reg read</p><p>reg read $rax</p><p>reg read $rax --format <<a href="https://lldb.llvm.org/use/variable.html#type-format">formato</a>></p><p>reg write $rip 0x100035cc0</p></td></tr><tr><td><strong>x/s <endereço_reg/memória></strong></td><td>Exibir a memória como uma string terminada por nulo.</td></tr><tr><td><strong>x/i <endereço_reg/memória></strong></td><td>Exibir a memória como instrução de montagem.</td></tr><tr><td><strong>x/b <endereço_reg/memória></strong></td><td>Exibir a memória como byte.</td></tr><tr><td><strong>print object (po)</strong></td><td><p>Isto irá imprimir o objeto referenciado pelo parâmetro</p><p>po $raw</p><p><code>{</code></p><p><code>dnsChanger = {</code></p><p><code>"affiliate" = "";</code></p><p><code>"blacklist_dns" = ();</code></p><p>Observe que a maioria das APIs ou métodos Objective-C da Apple retornam objetos e, portanto, devem ser exibidos através do comando "print object" (po). Se po não produzir uma saída significativa, use <code>x/b</code></p></td></tr><tr><td><strong>memory</strong></td><td>memory read 0x000....<br>memory read $x0+0xf2a<br>memory write 0x100600000 -s 4 0x41414141 #Escrever AAAA nesse endereço<br>memory write -f s $rip+0x11f+7 "AAAA" #Escrever AAAA no endereço</td></tr><tr><td><strong>disassembly</strong></td><td><p>dis #Desmontar a função atual</p><p>dis -n <nome_da_função> #Desmontar função</p><p>dis -n <nome_da_função> -b <nome_base> #Desmontar função<br>dis -c 6 #Desmontar 6 linhas<br>dis -c 0x100003764 -e 0x100003768 # De um endereço até o outro<br>dis -p -c 4 # Iniciar na desmontagem do endereço atual</p></td></tr><tr><td><strong>parray</strong></td><td>parray 3 (char **)$x1 # Verificar array de 3 componentes no registro x1</td></tr></tbody></table>
|
||||
<table data-header-hidden><thead><tr><th width="225"></th><th></th></tr></thead><tbody><tr><td><strong>(lldb) Comando</strong></td><td><strong>Descrição</strong></td></tr><tr><td><strong>run (r)</strong></td><td>Iniciar a execução, que continuará sem interrupções até atingir um ponto de interrupção ou o processo terminar.</td></tr><tr><td><strong>continue (c)</strong></td><td>Continuar a execução do processo em depuração.</td></tr><tr><td><strong>nexti (n / ni)</strong></td><td>Executar a próxima instrução. Este comando irá pular chamadas de função.</td></tr><tr><td><strong>stepi (s / si)</strong></td><td>Executar a próxima instrução. Ao contrário do comando nexti, este comando irá entrar nas chamadas de função.</td></tr><tr><td><strong>finish (f)</strong></td><td>Executar o restante das instruções na função atual ("frame") e parar.</td></tr><tr><td><strong>control + c</strong></td><td>Pausar a execução. Se o processo foi executado (r) ou continuado (c), isso fará com que o processo pare... onde quer que esteja executando no momento.</td></tr><tr><td><strong>breakpoint (b)</strong></td><td><p>b main #Qualquer função chamada main</p><p>b <nome_do_bin>`main #Função principal do binário</p><p>b set -n main --shlib <nome_da_biblioteca> #Função principal do binário indicado</p><p>b -[NSDictionary objectForKey:]</p><p>b -a 0x0000000100004bd9</p><p>br l #Lista de pontos de interrupção</p><p>br e/dis <número> #Ativar/Desativar ponto de interrupção</p><p>breakpoint delete <número></p></td></tr><tr><td><strong>help</strong></td><td><p>help breakpoint #Obter ajuda sobre o comando de ponto de interrupção</p><p>help memory write #Obter ajuda para escrever na memória</p></td></tr><tr><td><strong>reg</strong></td><td><p>reg read</p><p>reg read $rax</p><p>reg read $rax --format <<a href="https://lldb.llvm.org/use/variable.html#type-format">formato</a>></p><p>reg write $rip 0x100035cc0</p></td></tr><tr><td><strong>x/s <>endereço_do_reg/memória</strong></td><td>Exibir a memória como uma string terminada por nulo.</td></tr><tr><td><strong>x/i <>endereço_do_reg/memória</strong></td><td>Exibir a memória como instrução de montagem.</td></tr><tr><td><strong>x/b <>endereço_do_reg/memória</strong></td><td>Exibir a memória como byte.</td></tr><tr><td><strong>print object (po)</strong></td><td><p>Isto irá imprimir o objeto referenciado pelo parâmetro</p><p>po $raw</p><p><code>{</code></p><p><code>dnsChanger = {</code></p><p><code>"affiliate" = "";</code></p><p><code>"blacklist_dns" = ();</code></p><p>Observe que a maioria das APIs ou métodos Objective-C da Apple retornam objetos e, portanto, devem ser exibidos através do comando "print object" (po). Se po não produzir uma saída significativa, use <code>x/b</code></p></td></tr><tr><td><strong>memory</strong></td><td>memory read 0x000....<br>memory read $x0+0xf2a<br>memory write 0x100600000 -s 4 0x41414141 #Escrever AAAA nesse endereço<br>memory write -f s $rip+0x11f+7 "AAAA" #Escrever AAAA no endereço</td></tr><tr><td><strong>disassembly</strong></td><td><p>dis #Desmontar a função atual</p><p>dis -n <nome_da_função> #Desmontar função</p><p>dis -n <nome_da_função> -b <nome_base> #Desmontar função<br>dis -c 6 #Desmontar 6 linhas<br>dis -c 0x100003764 -e 0x100003768 # De um endereço até o outro<br>dis -p -c 4 # Iniciar no endereço atual desmontando</p></td></tr><tr><td><strong>parray</strong></td><td>parray 3 (char **)$x1 # Verificar array de 3 componentes no registro x1</td></tr></tbody></table>
|
||||
|
||||
{% hint style="info" %}
|
||||
Ao chamar a função **`objc_sendMsg`**, o registro **rsi** contém o **nome do método** como uma string terminada por nulo ("C"). Para imprimir o nome via lldb faça:
|
||||
|
@ -407,9 +382,9 @@ Ao chamar a função **`objc_sendMsg`**, o registro **rsi** contém o **nome do
|
|||
`(lldb) reg read $rsi: rsi = 0x00000001000f1576 "startMiningWithPort:password:coreCount:slowMemory:currency:"`
|
||||
{% endhint %}
|
||||
|
||||
#### Análise Anti-Dinâmica
|
||||
### Análise Anti-Dinâmica
|
||||
|
||||
**Detecção de VM**
|
||||
#### Detecção de VM
|
||||
|
||||
* O comando **`sysctl hw.model`** retorna "Mac" quando o **host é um MacOS**, mas algo diferente quando é uma VM.
|
||||
* Manipulando os valores de **`hw.logicalcpu`** e **`hw.physicalcpu`**, alguns malwares tentam detectar se é uma VM.
|
||||
|
@ -419,18 +394,16 @@ Ao chamar a função **`objc_sendMsg`**, o registro **rsi** contém o **nome do
|
|||
* Também pode-se invocar a chamada de sistema **`ptrace`** com a flag **`PT_DENY_ATTACH`**. Isso **impede** que um deb**u**gger se conecte e rastreie.
|
||||
* Pode-se verificar se a função **`sysctl`** ou **`ptrace`** está sendo **importada** (mas o malware poderia importá-la dinamicamente)
|
||||
* Conforme observado neste artigo, “[Derrotando Técnicas Anti-Depuração: variantes de ptrace no macOS](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\
|
||||
“_A mensagem Processo # saiu com **status = 45 (0x0000002d)** geralmente é um sinal revelador de que o alvo de depuração está usando **PT\_DENY\_ATTACH**_”
|
||||
“_A mensagem Processo # saiu com **status = 45 (0x0000002d)** geralmente é um sinal revelador de que o alvo de depuração está usando **PT\_DENY\_ATTACH**_”
|
||||
## Fuzzing
|
||||
|
||||
### Fuzzing
|
||||
|
||||
#### [ReportCrash](https://ss64.com/osx/reportcrash.html)
|
||||
### [ReportCrash](https://ss64.com/osx/reportcrash.html)
|
||||
|
||||
O ReportCrash **analisa processos que estão a falhar e guarda um relatório de falha no disco**. Um relatório de falha contém informações que podem **ajudar um programador a diagnosticar** a causa de uma falha.\
|
||||
Para aplicações e outros processos **a correr no contexto de lançamento por utilizador**, o ReportCrash é executado como um LaunchAgent e guarda os relatórios de falha na pasta `~/Library/Logs/DiagnosticReports/` do utilizador.\
|
||||
Para daemons, outros processos **a correr no contexto de lançamento do sistema** e outros processos privilegiados, o ReportCrash é executado como um LaunchDaemon e guarda os relatórios de falha na pasta `/Library/Logs/DiagnosticReports` do sistema.
|
||||
|
||||
Se estiver preocupado com os relatórios de falha **a serem enviados para a Apple**, pode desativá-los. Caso contrário, os relatórios de falha podem ser úteis para **descobrir como um servidor falhou**.
|
||||
|
||||
```bash
|
||||
#To disable crash reporting:
|
||||
launchctl unload -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist
|
||||
|
@ -440,29 +413,26 @@ sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Roo
|
|||
launchctl load -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist
|
||||
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Root.plist
|
||||
```
|
||||
### Sono
|
||||
|
||||
#### Sono
|
||||
Durante a fuzzing em um MacOS, é importante não permitir que o Mac entre em modo de sono:
|
||||
|
||||
Durante o fuzzing em um MacOS, é importante não permitir que o Mac entre em modo de sono:
|
||||
|
||||
* systemsetup -setsleep Nunca
|
||||
* systemsetup -setsleep Never
|
||||
* pmset, Preferências do Sistema
|
||||
* [KeepingYouAwake](https://github.com/newmarcel/KeepingYouAwake)
|
||||
|
||||
**Desconexão SSH**
|
||||
#### Desconexão SSH
|
||||
|
||||
Se estiver fazendo fuzzing via uma conexão SSH, é importante garantir que a sessão não seja encerrada. Portanto, altere o arquivo sshd\_config com:
|
||||
|
||||
* TCPKeepAlive Sim
|
||||
* TCPKeepAlive Yes
|
||||
* ClientAliveInterval 0
|
||||
* ClientAliveCountMax 0
|
||||
|
||||
```bash
|
||||
sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
|
||||
sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
|
||||
```
|
||||
|
||||
#### Manipuladores Internos
|
||||
### Manipuladores Internos
|
||||
|
||||
**Confira a seguinte página** para descobrir como você pode encontrar qual aplicativo é responsável por **manipular o esquema ou protocolo especificado:**
|
||||
|
||||
|
@ -470,18 +440,16 @@ sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
|
|||
[macos-file-extension-apps.md](../macos-file-extension-apps.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
#### Enumerando Processos de Rede
|
||||
|
||||
### Enumerando Processos de Rede
|
||||
```bash
|
||||
dtrace -n 'syscall::recv*:entry { printf("-> %s (pid=%d)", execname, pid); }' >> recv.log
|
||||
#wait some time
|
||||
sort -u recv.log > procs.txt
|
||||
cat procs.txt
|
||||
```
|
||||
|
||||
Ou use `netstat` ou `lsof`
|
||||
|
||||
#### Libgmalloc
|
||||
### Libgmalloc
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/Pasted Graphic 14.png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -491,56 +459,44 @@ lldb -o "target create `which some-binary`" -o "settings set target.env-vars DYL
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
#### Fuzzers
|
||||
### Fuzzers
|
||||
|
||||
[**AFL++**](https://github.com/AFLplusplus/AFLplusplus)
|
||||
#### [AFL++](https://github.com/AFLplusplus/AFLplusplus)
|
||||
|
||||
Funciona para ferramentas de linha de comando
|
||||
|
||||
[**Litefuzz**](https://github.com/sec-tools/litefuzz)
|
||||
#### [Litefuzz](https://github.com/sec-tools/litefuzz)
|
||||
|
||||
Ele "**simplesmente funciona"** com ferramentas GUI do macOS. Observe que alguns aplicativos do macOS têm requisitos específicos, como nomes de arquivos exclusivos, a extensão correta, a necessidade de ler os arquivos do sandbox (`~/Library/Containers/com.apple.Safari/Data`)...
|
||||
Ele "**simplesmente funciona"** com ferramentas GUI do macOS. Note que alguns aplicativos do macOS têm requisitos específicos como nomes de arquivos únicos, a extensão correta, precisam ler os arquivos do sandbox (`~/Library/Containers/com.apple.Safari/Data`)...
|
||||
|
||||
Alguns exemplos:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```
|
||||
```bash
|
||||
# iBooks
|
||||
litefuzz -l -c "/System/Applications/Books.app/Contents/MacOS/Books FUZZ" -i files/epub -o crashes/ibooks -t /Users/test/Library/Containers/com.apple.iBooksX/Data/tmp -x 10 -n 100000 -ez
|
||||
|
||||
# -l : Local
|
||||
# -c : cmdline with FUZZ word (if not stdin is used)
|
||||
# -i : input directory or file
|
||||
# -o : Dir to output crashes
|
||||
# -t : Dir to output runtime fuzzing artifacts
|
||||
# -x : Tmeout for the run (default is 1)
|
||||
# -n : Num of fuzzing iterations (default is 1)
|
||||
# -e : enable second round fuzzing where any crashes found are reused as inputs
|
||||
# -z : enable malloc debug helpers
|
||||
|
||||
# Font Book
|
||||
litefuzz -l -c "/System/Applications/Font Book.app/Contents/MacOS/Font Book FUZZ" -i input/fonts -o crashes/font-book -x 2 -n 500000 -ez
|
||||
|
||||
# smbutil (using pcap capture)
|
||||
litefuzz -lk -c "smbutil view smb://localhost:4455" -a tcp://localhost:4455 -i input/mac-smb-resp -p -n 100000 -z
|
||||
|
||||
# screensharingd (using pcap capture)
|
||||
litefuzz -s -a tcp://localhost:5900 -i input/screenshared-session --reportcrash screensharingd -p -n 100000
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
\`\`\`bash # iBooks litefuzz -l -c "/System/Applications/Books.app/Contents/MacOS/Books FUZZ" -i files/epub -o crashes/ibooks -t /Users/test/Library/Containers/com.apple.iBooksX/Data/tmp -x 10 -n 100000 -ez
|
||||
|
||||
## -l : Local
|
||||
|
||||
## -c : cmdline with FUZZ word (if not stdin is used)
|
||||
|
||||
## -i : input directory or file
|
||||
|
||||
## -o : Dir to output crashes
|
||||
|
||||
## -t : Dir to output runtime fuzzing artifacts
|
||||
|
||||
## -x : Tmeout for the run (default is 1)
|
||||
|
||||
## -n : Num of fuzzing iterations (default is 1)
|
||||
|
||||
## -e : enable second round fuzzing where any crashes found are reused as inputs
|
||||
|
||||
## -z : enable malloc debug helpers
|
||||
|
||||
## Font Book
|
||||
|
||||
litefuzz -l -c "/System/Applications/Font Book.app/Contents/MacOS/Font Book FUZZ" -i input/fonts -o crashes/font-book -x 2 -n 500000 -ez
|
||||
|
||||
## smbutil (using pcap capture)
|
||||
|
||||
litefuzz -lk -c "smbutil view smb://localhost:4455" -a tcp://localhost:4455 -i input/mac-smb-resp -p -n 100000 -z
|
||||
|
||||
## screensharingd (using pcap capture)
|
||||
|
||||
litefuzz -s -a tcp://localhost:5900 -i input/screenshared-session --reportcrash screensharingd -p -n 100000
|
||||
|
||||
```
|
||||
### Mais Informações sobre Fuzzing no MacOS
|
||||
|
||||
* [https://www.youtube.com/watch?v=T5xfL9tEg44](https://www.youtube.com/watch?v=T5xfL9tEg44)
|
||||
|
@ -555,17 +511,29 @@ litefuzz -s -a tcp://localhost:5900 -i input/screenshared-session --reportcrash
|
|||
* [**https://taomm.org/vol1/analysis.html**](https://taomm.org/vol1/analysis.html)
|
||||
* [**The Art of Mac Malware: The Guide to Analyzing Malicious Software**](https://taomm.org/)
|
||||
|
||||
|
||||
### [WhiteIntel](https://whiteintel.io)
|
||||
|
||||
<figure><img src="/.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**WhiteIntel**](https://whiteintel.io) é um mecanismo de busca alimentado pela **dark web** que oferece funcionalidades **gratuitas** para verificar se uma empresa ou seus clientes foram **comprometidos** por **malwares de roubo de informações**.
|
||||
|
||||
O principal objetivo do WhiteIntel é combater tomadas de contas e ataques de ransomware resultantes de malwares que roubam informações.
|
||||
|
||||
Você pode verificar o site deles e experimentar o mecanismo gratuitamente em:
|
||||
|
||||
{% embed url="https://whiteintel.io" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
```
|
||||
|
|
|
@ -4,26 +4,40 @@
|
|||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* 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)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
||||
### [WhiteIntel](https://whiteintel.io)
|
||||
|
||||
<figure><img src="/.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**WhiteIntel**](https://whiteintel.io) é um mecanismo de busca alimentado pela **dark web** que oferece funcionalidades **gratuitas** para verificar se uma empresa ou seus clientes foram **comprometidos** por **malwares de roubo**.
|
||||
|
||||
O principal objetivo do WhiteIntel é combater tomadas de contas e ataques de ransomware resultantes de malwares de roubo de informações.
|
||||
|
||||
Você pode verificar o site deles e experimentar o mecanismo gratuitamente em:
|
||||
|
||||
{% embed url="https://whiteintel.io" %}
|
||||
|
||||
---
|
||||
|
||||
## **Informações Básicas**
|
||||
|
||||
**Proteção da Integridade do Sistema (SIP)** no macOS é um mecanismo projetado para evitar que até mesmo os usuários mais privilegiados façam alterações não autorizadas em pastas-chave do sistema. Essa funcionalidade desempenha um papel crucial na manutenção da integridade do sistema, restringindo ações como adicionar, modificar ou excluir arquivos em áreas protegidas. As principais pastas protegidas pelo SIP incluem:
|
||||
**Proteção de Integridade do Sistema (SIP)** no macOS é um mecanismo projetado para impedir até mesmo os usuários mais privilegiados de fazer alterações não autorizadas em pastas-chave do sistema. Essa funcionalidade desempenha um papel crucial na manutenção da integridade do sistema, restringindo ações como adicionar, modificar ou excluir arquivos em áreas protegidas. As principais pastas protegidas pelo SIP incluem:
|
||||
|
||||
* **/System**
|
||||
* **/bin**
|
||||
* **/sbin**
|
||||
* **/usr**
|
||||
|
||||
As regras que governam o comportamento do SIP são definidas no arquivo de configuração localizado em **`/System/Library/Sandbox/rootless.conf`**. Dentro deste arquivo, os caminhos prefixados com um asterisco (*) são considerados exceções às restrições rigorosas do SIP.
|
||||
As regras que regem o comportamento do SIP são definidas no arquivo de configuração localizado em **`/System/Library/Sandbox/rootless.conf`**. Dentro deste arquivo, os caminhos prefixados com um asterisco (\*) são designados como exceções às restrições rigorosas do SIP.
|
||||
|
||||
Considere o exemplo abaixo:
|
||||
```javascript
|
||||
|
@ -32,7 +46,7 @@ Considere o exemplo abaixo:
|
|||
* /usr/local
|
||||
* /usr/share/man
|
||||
```
|
||||
Este trecho implica que, embora o SIP geralmente proteja o diretório **`/usr`**, existem subdiretórios específicos (`/usr/libexec/cups`, `/usr/local` e `/usr/share/man`) onde modificações são permitidas, conforme indicado pelo asterisco (*) precedendo seus caminhos.
|
||||
Este trecho implica que, embora o SIP geralmente proteja o diretório **`/usr`**, existem subdiretórios específicos (`/usr/libexec/cups`, `/usr/local` e `/usr/share/man`) nos quais modificações são permitidas, conforme indicado pelo asterisco (\*) precedendo seus caminhos.
|
||||
|
||||
Para verificar se um diretório ou arquivo está protegido pelo SIP, você pode usar o comando **`ls -lOd`** para verificar a presença da marca **`restricted`** ou **`sunlnk`**. Por exemplo:
|
||||
```bash
|
||||
|
@ -57,13 +71,13 @@ Além disso, se um arquivo contiver o atributo estendido **`com.apple.rootless`*
|
|||
* Modificar variáveis NVRAM
|
||||
* Permitir a depuração do kernel
|
||||
|
||||
As opções são mantidas na variável nvram como um bitflag (`csr-active-config` no Intel e `lp-sip0` é lido a partir da Árvore de Dispositivos inicializada para ARM). Você pode encontrar as bandeiras no código-fonte do XNU em `csr.sh`:
|
||||
As opções são mantidas na variável nvram como um bitflag (`csr-active-config` no Intel e `lp-sip0` é lido da Árvore de Dispositivos inicializados para ARM). Você pode encontrar as bandeiras no código-fonte do XNU em `csr.sh`:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (720).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1189).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Status do SIP
|
||||
|
||||
Você pode verificar se o SIP está habilitado em seu sistema com o seguinte comando:
|
||||
Você pode verificar se o SIP está ativado em seu sistema com o seguinte comando:
|
||||
```bash
|
||||
csrutil status
|
||||
```
|
||||
|
@ -77,20 +91,20 @@ csrutil enable --without debug
|
|||
```
|
||||
### Outras Restrições
|
||||
|
||||
- **Impede o carregamento de extensões de kernel não assinadas** (kexts), garantindo que apenas extensões verificadas interajam com o kernel do sistema.
|
||||
- **Previne a depuração** dos processos do sistema macOS, protegendo os componentes principais do sistema contra acesso e modificação não autorizados.
|
||||
- **Inibe ferramentas** como dtrace de inspecionar processos do sistema, protegendo ainda mais a integridade da operação do sistema.
|
||||
* **Impede o carregamento de extensões de kernel não assinadas** (kexts), garantindo que apenas extensões verificadas interajam com o kernel do sistema.
|
||||
* **Previne a depuração** dos processos do sistema macOS, protegendo os componentes principais do sistema contra acesso e modificação não autorizados.
|
||||
* **Inibe ferramentas** como o dtrace de inspecionar processos do sistema, protegendo ainda mais a integridade da operação do sistema.
|
||||
|
||||
**[Saiba mais sobre as informações do SIP nesta palestra](https://www.slideshare.net/i0n1c/syscan360-stefan-esser-os-x-el-capitan-sinking-the-ship).**
|
||||
[**Saiba mais sobre as informações do SIP nesta palestra**](https://www.slideshare.net/i0n1c/syscan360-stefan-esser-os-x-el-capitan-sinking-the-ship)**.**
|
||||
|
||||
## Contornos do SIP
|
||||
|
||||
Contornar o SIP permite a um atacante:
|
||||
|
||||
- **Acessar Dados do Usuário**: Ler dados sensíveis do usuário, como e-mails, mensagens e histórico do Safari de todas as contas de usuário.
|
||||
- **Bypass do TCC**: Manipular diretamente o banco de dados TCC (Transparência, Consentimento e Controle) para conceder acesso não autorizado à webcam, microfone e outros recursos.
|
||||
- **Estabelecer Persistência**: Colocar malware em locais protegidos pelo SIP, tornando-o resistente à remoção, mesmo com privilégios de root. Isso também inclui a possibilidade de manipular a Ferramenta de Remoção de Malware (MRT).
|
||||
- **Carregar Extensões de Kernel**: Embora existam salvaguardas adicionais, contornar o SIP simplifica o processo de carregar extensões de kernel não assinadas.
|
||||
* **Acessar Dados do Usuário**: Ler dados sensíveis do usuário, como e-mails, mensagens e histórico do Safari de todas as contas de usuário.
|
||||
* **Burlar o TCC**: Manipular diretamente o banco de dados TCC (Transparência, Consentimento e Controle) para conceder acesso não autorizado à webcam, microfone e outros recursos.
|
||||
* **Estabelecer Persistência**: Colocar malware em locais protegidos pelo SIP, tornando-o resistente à remoção, mesmo com privilégios de root. Isso também inclui a possibilidade de manipular a Ferramenta de Remoção de Malware (MRT).
|
||||
* **Carregar Extensões de Kernel**: Embora existam salvaguardas adicionais, contornar o SIP simplifica o processo de carregar extensões de kernel não assinadas.
|
||||
|
||||
### Pacotes de Instalador
|
||||
|
||||
|
@ -133,7 +147,6 @@ reboot
|
|||
```
|
||||
A exploração dessa vulnerabilidade tem implicações graves. O arquivo `Info.plist`, normalmente responsável por gerenciar permissões para extensões de kernel, se torna ineficaz. Isso inclui a incapacidade de listar certas extensões, como `AppleHWAccess.kext`. Consequentemente, com o mecanismo de controle do SIP desativado, essa extensão pode ser carregada, concedendo acesso não autorizado de leitura e gravação à RAM do sistema.
|
||||
|
||||
|
||||
#### [Montar sobre pastas protegidas pelo SIP](https://www.slideshare.net/i0n1c/syscan360-stefan-esser-os-x-el-capitan-sinking-the-ship)
|
||||
|
||||
Foi possível montar um novo sistema de arquivos sobre **pastas protegidas pelo SIP para burlar a proteção**.
|
||||
|
@ -149,13 +162,12 @@ O sistema está configurado para inicializar a partir de uma imagem de disco do
|
|||
```bash
|
||||
/usr/sbin/bless -setBoot -folder /Volumes/Macintosh HD/macOS Install Data -bootefi /Volumes/Macintosh HD/macOS Install Data/boot.efi -options config="\macOS Install Data\com.apple.Boot" -label macOS Installer
|
||||
```
|
||||
A segurança desse processo pode ser comprometida se um atacante alterar a imagem de atualização (`InstallESD.dmg`) antes do boot. A estratégia envolve substituir um carregador dinâmico (dyld) por uma versão maliciosa (`libBaseIA.dylib`). Essa substituição resulta na execução do código do atacante quando o instalador é iniciado.
|
||||
A segurança deste processo pode ser comprometida se um atacante alterar a imagem de atualização (`InstallESD.dmg`) antes de inicializar. A estratégia envolve substituir um carregador dinâmico (dyld) por uma versão maliciosa (`libBaseIA.dylib`). Essa substituição resulta na execução do código do atacante quando o instalador é iniciado.
|
||||
|
||||
O código do atacante ganha controle durante o processo de atualização, explorando a confiança do sistema no instalador. O ataque continua alterando a imagem `InstallESD.dmg` por meio de swizzling de método, direcionando especialmente o método `extractBootBits`. Isso permite a injeção de código malicioso antes que a imagem do disco seja utilizada.
|
||||
|
||||
Além disso, dentro do `InstallESD.dmg`, há um `BaseSystem.dmg`, que serve como sistema de arquivos raiz do código de atualização. Injetar uma biblioteca dinâmica nisso permite que o código malicioso opere dentro de um processo capaz de alterar arquivos de nível de sistema, aumentando significativamente o potencial de comprometimento do sistema.
|
||||
|
||||
|
||||
#### [systemmigrationd (2023)](https://www.youtube.com/watch?v=zxZesAN-TEk)
|
||||
|
||||
Nesta palestra da [**DEF CON 31**](https://www.youtube.com/watch?v=zxZesAN-TEk), é mostrado como o **`systemmigrationd`** (que pode contornar o SIP) executa um script **bash** e um script **perl**, que podem ser abusados via variáveis de ambiente **`BASH_ENV`** e **`PERL5OPT`**.
|
||||
|
@ -176,8 +188,8 @@ Os Instantâneos do Sistema Lacrados são um recurso introduzido pela Apple no *
|
|||
|
||||
Aqui está uma visão mais detalhada:
|
||||
|
||||
1. **Sistema Imutável**: Os Instantâneos do Sistema Lacrados tornam o volume do sistema macOS "imutável", o que significa que ele não pode ser modificado. Isso impede quaisquer alterações não autorizadas ou acidentais no sistema que possam comprometer a segurança ou a estabilidade do sistema.
|
||||
2. **Atualizações de Software do Sistema**: Quando você instala atualizações ou upgrades do macOS, o macOS cria um novo instantâneo do sistema. O volume de inicialização do macOS então usa o **APFS (Apple File System)** para alternar para esse novo instantâneo. Todo o processo de aplicação de atualizações se torna mais seguro e confiável, pois o sistema sempre pode reverter para o instantâneo anterior se algo der errado durante a atualização.
|
||||
1. **Sistema Imutável**: Os Instantâneos do Sistema Lacrados tornam o volume do sistema do macOS "imutável", o que significa que ele não pode ser modificado. Isso impede quaisquer alterações não autorizadas ou acidentais no sistema que possam comprometer a segurança ou a estabilidade do sistema.
|
||||
2. **Atualizações de Software do Sistema**: Quando você instala atualizações ou upgrades do macOS, o macOS cria um novo instantâneo do sistema. O volume de inicialização do macOS então usa o **APFS (Apple File System)** para alternar para este novo instantâneo. Todo o processo de aplicação de atualizações se torna mais seguro e confiável, pois o sistema sempre pode reverter para o instantâneo anterior se algo der errado durante a atualização.
|
||||
3. **Separação de Dados**: Em conjunto com o conceito de separação de volumes de Dados e Sistema introduzido no macOS Catalina, o recurso de Instantâneos do Sistema Lacrados garante que todos os seus dados e configurações sejam armazenados em um volume "**Dados**" separado. Essa separação torna seus dados independentes do sistema, o que simplifica o processo de atualizações do sistema e aprimora a segurança do sistema.
|
||||
|
||||
Lembre-se de que esses instantâneos são gerenciados automaticamente pelo macOS e não ocupam espaço adicional em seu disco, graças às capacidades de compartilhamento de espaço do APFS. Também é importante observar que esses instantâneos são diferentes dos **instantâneos do Time Machine**, que são backups acessíveis pelo usuário de todo o sistema.
|
||||
|
@ -188,42 +200,42 @@ O comando **`diskutil apfs list`** lista os **detalhes dos volumes APFS** e sua
|
|||
|
||||
<pre><code>+-- Container disk3 966B902E-EDBA-4775-B743-CF97A0556A13
|
||||
| ====================================================
|
||||
| APFS Container Reference: disk3
|
||||
| Size (Capacity Ceiling): 494384795648 B (494.4 GB)
|
||||
| Capacity In Use By Volumes: 219214536704 B (219.2 GB) (44.3% used)
|
||||
| Capacity Not Allocated: 275170258944 B (275.2 GB) (55.7% free)
|
||||
| Referência do Container APFS: disk3
|
||||
| Tamanho (Capacidade Máxima): 494384795648 B (494,4 GB)
|
||||
| Capacidade Usada Pelos Volumes: 219214536704 B (219,2 GB) (44,3% usado)
|
||||
| Capacidade Não Alocada: 275170258944 B (275,2 GB) (55,7% livre)
|
||||
| |
|
||||
| +-< Physical Store disk0s2 86D4B7EC-6FA5-4042-93A7-D3766A222EBE
|
||||
| +-< Armazenamento Físico disk0s2 86D4B7EC-6FA5-4042-93A7-D3766A222EBE
|
||||
| | -----------------------------------------------------------
|
||||
| | APFS Physical Store Disk: disk0s2
|
||||
| | Size: 494384795648 B (494.4 GB)
|
||||
| | Disco de Armazenamento Físico APFS: disk0s2
|
||||
| | Tamanho: 494384795648 B (494,4 GB)
|
||||
| |
|
||||
| +-> Volume disk3s1 7A27E734-880F-4D91-A703-FB55861D49B7
|
||||
| | ---------------------------------------------------
|
||||
<strong>| | APFS Volume Disk (Role): disk3s1 (System)
|
||||
</strong>| | Name: Macintosh HD (Case-insensitive)
|
||||
<strong>| | Mount Point: /System/Volumes/Update/mnt1
|
||||
</strong>| | Capacity Consumed: 12819210240 B (12.8 GB)
|
||||
| | Sealed: Broken
|
||||
| | FileVault: Yes (Unlocked)
|
||||
| | Encrypted: No
|
||||
<strong>| | Disco do Volume APFS (Função): disk3s1 (Sistema)
|
||||
</strong>| | Nome: Macintosh HD (Não diferencia maiúsculas de minúsculas)
|
||||
<strong>| | Ponto de Montagem: /System/Volumes/Update/mnt1
|
||||
</strong>| | Capacidade Consumida: 12819210240 B (12,8 GB)
|
||||
| | Lacrado: Quebrado
|
||||
| | FileVault: Sim (Desbloqueado)
|
||||
| | Criptografado: Não
|
||||
| | |
|
||||
| | Snapshot: FAA23E0C-791C-43FF-B0E7-0E1C0810AC61
|
||||
| | Snapshot Disk: disk3s1s1
|
||||
<strong>| | Snapshot Mount Point: /
|
||||
</strong><strong>| | Snapshot Sealed: Yes
|
||||
| | Instantâneo: FAA23E0C-791C-43FF-B0E7-0E1C0810AC61
|
||||
| | Disco do Instantâneo: disk3s1s1
|
||||
<strong>| | Ponto de Montagem do Instantâneo: /
|
||||
</strong><strong>| | Instantâneo Lacrado: Sim
|
||||
</strong>[...]
|
||||
+-> Volume disk3s5 281959B7-07A1-4940-BDDF-6419360F3327
|
||||
| ---------------------------------------------------
|
||||
| APFS Volume Disk (Role): disk3s5 (Data)
|
||||
| Name: Macintosh HD - Data (Case-insensitive)
|
||||
<strong> | Mount Point: /System/Volumes/Data
|
||||
</strong><strong> | Capacity Consumed: 412071784448 B (412.1 GB)
|
||||
</strong> | Sealed: No
|
||||
| FileVault: Yes (Unlocked)
|
||||
| Disco do Volume APFS (Função): disk3s5 (Dados)
|
||||
| Nome: Macintosh HD - Data (Não diferencia maiúsculas de minúsculas)
|
||||
<strong> | Ponto de Montagem: /System/Volumes/Data
|
||||
</strong><strong> | Capacidade Consumida: 412071784448 B (412,1 GB)
|
||||
</strong> | Lacrado: Não
|
||||
| FileVault: Sim (Desbloqueado)
|
||||
</code></pre>
|
||||
|
||||
No output anterior, é possível ver que as **localizações acessíveis pelo usuário** estão montadas em `/System/Volumes/Data`.
|
||||
No output anterior, é possível ver que **locais acessíveis pelo usuário** estão montados em `/System/Volumes/Data`.
|
||||
|
||||
Além disso, o **instantâneo do volume do sistema macOS** está montado em `/` e está **lacrado** (assinado criptograficamente pelo sistema operacional). Portanto, se o SIP for contornado e modificado, o **sistema não inicializará mais**.
|
||||
|
||||
|
@ -233,10 +245,22 @@ csrutil authenticated-root status
|
|||
Authenticated Root status: enabled
|
||||
```
|
||||
Além disso, o disco de snapshot também é montado como **somente leitura**:
|
||||
```
|
||||
```bash
|
||||
mount
|
||||
/dev/disk3s1s1 on / (apfs, sealed, local, read-only, journaled)
|
||||
```
|
||||
### [WhiteIntel](https://whiteintel.io)
|
||||
|
||||
<figure><img src="/.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**WhiteIntel**](https://whiteintel.io) é um mecanismo de busca alimentado pela **dark web** que oferece funcionalidades **gratuitas** para verificar se uma empresa ou seus clientes foram **comprometidos** por **malwares stealers**.
|
||||
|
||||
O principal objetivo do WhiteIntel é combater tomadas de conta e ataques de ransomware resultantes de malwares que roubam informações.
|
||||
|
||||
Você pode acessar o site deles e experimentar o mecanismo gratuitamente em:
|
||||
|
||||
{% embed url="https://whiteintel.io" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
@ -246,7 +270,7 @@ Outras maneiras de apoiar o HackTricks:
|
|||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* 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)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
# Execução de Método de Mesma Origem (SOME)
|
||||
# SOME - Same Origin Method Execution
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></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**? Gostaria de 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 Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
|
@ -12,13 +12,27 @@
|
|||
|
||||
</details>
|
||||
|
||||
## Execução de Método de Mesma Origem
|
||||
### [WhiteIntel](https://whiteintel.io)
|
||||
|
||||
<figure><img src="/.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**WhiteIntel**](https://whiteintel.io) é um mecanismo de busca alimentado pela **dark web** que oferece funcionalidades **gratuitas** para verificar se uma empresa ou seus clientes foram **comprometidos** por **malwares de roubo**.
|
||||
|
||||
O principal objetivo do WhiteIntel é combater tomadas de conta de contas e ataques de ransomware resultantes de malwares de roubo de informações.
|
||||
|
||||
Você pode verificar o site deles e experimentar o mecanismo gratuitamente em:
|
||||
|
||||
{% embed url="https://whiteintel.io" %}
|
||||
|
||||
---
|
||||
|
||||
## Same Origin Method Execution
|
||||
|
||||
Haverá ocasiões em que você pode executar algum javascript limitado em uma página. Por exemplo, no caso em que você pode [**controlar um valor de retorno que será executado**](./#javascript-function).
|
||||
|
||||
Nesses casos, uma das melhores coisas que você poderia fazer é **acessar o DOM para chamar qualquer** ação sensível que você possa encontrar lá (como clicar em um botão). No entanto, geralmente você encontrará essa vulnerabilidade em **pequenos pontos de extremidade sem nada interessante no DOM**.
|
||||
|
||||
Nesses cenários, esse ataque será muito útil, pois seu objetivo é ser capaz de **abusar da execução limitada de JS dentro de um DOM de uma página diferente do mesmo domínio** com ações muito interessantes.
|
||||
Nesses cenários, esse ataque será muito útil, porque seu objetivo é ser capaz de **abusar da execução limitada de JS dentro de um DOM de uma página diferente do mesmo domínio** com ações muito interessantes.
|
||||
|
||||
Basicamente, o fluxo do ataque é o seguinte:
|
||||
|
||||
|
@ -26,13 +40,13 @@ Basicamente, o fluxo do ataque é o seguinte:
|
|||
* Se não for limitado e você puder executar qualquer JS, você poderia simplesmente abusar disso como um XSS regular.
|
||||
* Faça a **vítima abrir uma página** controlada pelo **atacante**.
|
||||
* A **página se abrirá** em uma **janela diferente** (a nova janela terá o objeto **`opener`** referenciando a inicial).
|
||||
* A **página inicial** carregará a **página** onde o **DOM interessante** está localizado.
|
||||
* A **página inicial** carregará a **página** onde está localizado o **DOM interessante**.
|
||||
* A **segunda página** carregará a **página vulnerável abusando do callback** e usando o objeto **`opener`** para **acessar e executar alguma ação na página inicial** (que agora contém o DOM interessante).
|
||||
|
||||
{% hint style="danger" %}
|
||||
Observe que mesmo que a página inicial acesse uma nova URL após ter criado a segunda página, o **objeto `opener` da segunda página ainda é uma referência válida para a primeira página no novo DOM**.
|
||||
|
||||
Além disso, para que a segunda página possa usar o objeto opener, **ambas as páginas devem estar na mesma origem**. Esta é a razão pela qual, para abusar dessa vulnerabilidade, você precisa encontrar algum tipo de **XSS na mesma origem**.
|
||||
Além disso, para que a segunda página possa usar o objeto opener **ambas as páginas devem estar na mesma origem**. Esta é a razão pela qual, para abusar dessa vulnerabilidade, você precisa encontrar algum tipo de **XSS na mesma origem**.
|
||||
{% endhint %}
|
||||
|
||||
### Exploração
|
||||
|
@ -43,9 +57,21 @@ Além disso, para que a segunda página possa usar o objeto opener, **ambas as p
|
|||
### Exemplo
|
||||
|
||||
* Você pode encontrar um exemplo vulnerável em [https://www.someattack.com/Playground/](https://www.someattack.com/Playground/)
|
||||
* Observe que neste exemplo o servidor está **gerando código javascript** e **adicionando** ao HTML com base no **conteúdo do parâmetro de retorno:** `<script>opener.{callbacl_content}</script>` . Por isso, neste exemplo, você não precisa indicar o uso de `opener` explicitamente.
|
||||
* Observe que neste exemplo o servidor está **gerando código javascript** e **adicionando** ao HTML com base no **conteúdo do parâmetro de callback:** `<script>opener.{callbacl_content}</script>` . Por isso, neste exemplo você não precisa indicar o uso de `opener` explicitamente.
|
||||
* Confira também este CTF writeup: [https://ctftime.org/writeup/36068](https://ctftime.org/writeup/36068)
|
||||
|
||||
## Referências
|
||||
|
||||
* [https://conference.hitb.org/hitbsecconf2017ams/sessions/everybody-wants-some-advance-same-origin-method-execution/](https://conference.hitb.org/hitbsecconf2017ams/sessions/everybody-wants-some-advance-same-origin-method-execution/)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Você trabalha em uma **empresa de cibersegurança**? Gostaria de 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 Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦[**@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,43 +1,58 @@
|
|||
# Níveis de Integridade
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
|
||||
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* 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)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
||||
### [WhiteIntel](https://whiteintel.io)
|
||||
|
||||
# Níveis de Integridade
|
||||
<figure><img src="/.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
No Windows Vista e versões posteriores, todos os itens protegidos vêm com uma etiqueta de **nível de integridade**. Essa configuração atribui principalmente um nível de integridade "médio" a arquivos e chaves de registro, exceto para determinadas pastas e arquivos nos quais o Internet Explorer 7 pode escrever em um nível de integridade baixo. O comportamento padrão é para processos iniciados por usuários padrão terem um nível de integridade médio, enquanto os serviços geralmente operam em um nível de integridade do sistema. Um rótulo de alta integridade protege o diretório raiz.
|
||||
[**WhiteIntel**](https://whiteintel.io) é um mecanismo de busca alimentado pela **dark web** que oferece funcionalidades **gratuitas** para verificar se uma empresa ou seus clientes foram **comprometidos** por **malwares de roubo**.
|
||||
|
||||
O principal objetivo do WhiteIntel é combater a apropriação de contas e ataques de ransomware resultantes de malwares de roubo de informações.
|
||||
|
||||
Você pode verificar o site deles e experimentar o mecanismo gratuitamente em:
|
||||
|
||||
{% embed url="https://whiteintel.io" %}
|
||||
|
||||
---
|
||||
|
||||
## Níveis de Integridade
|
||||
|
||||
No Windows Vista e em versões posteriores, todos os itens protegidos vêm com uma etiqueta de **nível de integridade**. Essa configuração atribui principalmente um nível de integridade "médio" a arquivos e chaves de registro, exceto para determinadas pastas e arquivos nos quais o Internet Explorer 7 pode gravar em um nível de integridade baixo. O comportamento padrão é para processos iniciados por usuários padrão terem um nível de integridade médio, enquanto os serviços geralmente operam em um nível de integridade do sistema. Um rótulo de alta integridade protege o diretório raiz.
|
||||
|
||||
Uma regra chave é que objetos não podem ser modificados por processos com um nível de integridade inferior ao nível do objeto. Os níveis de integridade são:
|
||||
|
||||
- **Não Confiável**: Este nível é para processos com logins anônimos. %%%Exemplo: Chrome%%%
|
||||
- **Baixo**: Principalmente para interações na internet, especialmente no Modo Protegido do Internet Explorer, afetando arquivos e processos associados, e certas pastas como a **Pasta de Internet Temporária**. Processos de baixa integridade enfrentam restrições significativas, incluindo nenhum acesso de gravação no registro e acesso limitado de gravação no perfil do usuário.
|
||||
- **Médio**: O nível padrão para a maioria das atividades, atribuído a usuários padrão e objetos sem níveis de integridade específicos. Mesmo os membros do grupo Administradores operam neste nível por padrão.
|
||||
- **Alto**: Reservado para administradores, permitindo que eles modifiquem objetos em níveis de integridade inferiores, incluindo aqueles no próprio nível alto.
|
||||
- **Sistema**: O nível operacional mais alto para o kernel do Windows e serviços principais, fora do alcance até mesmo dos administradores, garantindo a proteção de funções vitais do sistema.
|
||||
- **Instalador**: Um nível único que se destaca acima de todos os outros, permitindo que objetos neste nível desinstalem qualquer outro objeto.
|
||||
* **Não confiável**: Este nível é para processos com logins anônimos. %%%Exemplo: Chrome%%%
|
||||
* **Baixo**: Principalmente para interações na internet, especialmente no Modo Protegido do Internet Explorer, afetando arquivos e processos associados, e certas pastas como a **Pasta de Internet Temporária**. Processos de baixa integridade enfrentam restrições significativas, incluindo nenhum acesso de gravação no registro e acesso limitado de gravação no perfil do usuário.
|
||||
* **Médio**: O nível padrão para a maioria das atividades, atribuído a usuários padrão e objetos sem níveis de integridade específicos. Mesmo os membros do grupo Administradores operam neste nível por padrão.
|
||||
* **Alto**: Reservado para administradores, permitindo que eles modifiquem objetos em níveis de integridade inferiores, incluindo aqueles no próprio nível alto.
|
||||
* **Sistema**: O nível operacional mais alto para o kernel do Windows e serviços principais, fora do alcance até mesmo dos administradores, garantindo a proteção de funções vitais do sistema.
|
||||
* **Instalador**: Um nível único que se destaca acima de todos os outros, permitindo que objetos neste nível desinstalem qualquer outro objeto.
|
||||
|
||||
Você pode obter o nível de integridade de um processo usando o **Process Explorer** da **Sysinternals**, acessando as **propriedades** do processo e visualizando a aba "**Segurança**":
|
||||
|
||||
![](<../../.gitbook/assets/image (318).png>)
|
||||
![](<../../.gitbook/assets/image (821).png>)
|
||||
|
||||
Você também pode obter seu **nível de integridade atual** usando `whoami /groups`
|
||||
|
||||
![](<../../.gitbook/assets/image (319).png>)
|
||||
![](<../../.gitbook/assets/image (322).png>)
|
||||
|
||||
## Níveis de Integridade no Sistema de Arquivos
|
||||
### Níveis de Integridade no Sistema de Arquivos
|
||||
|
||||
Um objeto dentro do sistema de arquivos pode precisar de um **requisito mínimo de nível de integridade** e se um processo não tiver esse nível de integridade, ele não poderá interagir com ele.\
|
||||
Por exemplo, vamos **criar um arquivo de console de usuário regular e verificar as permissões**:
|
||||
Por exemplo, vamos **criar um arquivo regular a partir de um console de usuário regular e verificar as permissões**:
|
||||
```
|
||||
echo asd >asd.txt
|
||||
icacls asd.txt
|
||||
|
@ -48,7 +63,7 @@ NT AUTHORITY\INTERACTIVE:(I)(M,DC)
|
|||
NT AUTHORITY\SERVICE:(I)(M,DC)
|
||||
NT AUTHORITY\BATCH:(I)(M,DC)
|
||||
```
|
||||
Agora, vamos atribuir um nível de integridade mínimo de **Alto** ao arquivo. Isso **deve ser feito a partir de um console** sendo executado como **administrador**, pois um **console regular** estará em execução no nível de integridade Médio e **não terá permissão** para atribuir o nível de integridade Alto a um objeto:
|
||||
Agora, vamos atribuir um nível de integridade mínimo de **Alto** ao arquivo. Isso **deve ser feito a partir de um console** sendo executado como **administrador**, pois um **console regular** estará sendo executado no nível de Integridade Médio e **não será permitido** atribuir o nível de Integridade Alto a um objeto:
|
||||
```
|
||||
icacls asd.txt /setintegritylevel(oi)(ci) High
|
||||
processed file: asd.txt
|
||||
|
@ -63,7 +78,7 @@ NT AUTHORITY\SERVICE:(I)(M,DC)
|
|||
NT AUTHORITY\BATCH:(I)(M,DC)
|
||||
Mandatory Label\High Mandatory Level:(NW)
|
||||
```
|
||||
Aqui é onde as coisas ficam interessantes. Você pode ver que o usuário `DESKTOP-IDJHTKP\user` tem **privilégios COMPLETOS** sobre o arquivo (de fato, este foi o usuário que criou o arquivo), no entanto, devido ao nível mínimo de integridade implementado, ele não poderá mais modificar o arquivo a menos que esteja sendo executado em um Nível de Integridade Alto (observe que ele poderá lê-lo):
|
||||
Este é o ponto onde as coisas ficam interessantes. Você pode ver que o usuário `DESKTOP-IDJHTKP\user` tem **privilégios COMPLETOS** sobre o arquivo (de fato, este foi o usuário que criou o arquivo), no entanto, devido ao nível mínimo de integridade implementado, ele não poderá mais modificar o arquivo a menos que esteja executando em um Nível de Integridade Alto (observe que ele ainda poderá lê-lo):
|
||||
```
|
||||
echo 1234 > asd.txt
|
||||
Access is denied.
|
||||
|
@ -76,7 +91,7 @@ Access is denied.
|
|||
**Portanto, quando um arquivo possui um nível mínimo de integridade, para modificá-lo você precisa estar executando pelo menos nesse nível de integridade.**
|
||||
{% endhint %}
|
||||
|
||||
## Níveis de Integridade em Binários
|
||||
### Níveis de Integridade em Binários
|
||||
|
||||
Fiz uma cópia do `cmd.exe` em `C:\Windows\System32\cmd-low.exe` e defini um **nível de integridade baixo a partir de um console de administrador:**
|
||||
```
|
||||
|
@ -90,12 +105,40 @@ Mandatory Label\Low Mandatory Level:(NW)
|
|||
```
|
||||
Agora, quando eu executar `cmd-low.exe` ele **será executado em um nível de integridade baixo** em vez de médio:
|
||||
|
||||
![](<../../.gitbook/assets/image (320).png>)
|
||||
![](<../../.gitbook/assets/image (310).png>)
|
||||
|
||||
Para pessoas curiosas, se você atribuir um nível de integridade alto a um binário (`icacls C:\Windows\System32\cmd-high.exe /setintegritylevel high`) ele não será executado automaticamente com alto nível de integridade (se você o invocar de um nível de integridade médio --por padrão-- ele será executado em um nível de integridade médio).
|
||||
|
||||
## Níveis de Integridade em Processos
|
||||
### Níveis de Integridade em Processos
|
||||
|
||||
Nem todos os arquivos e pastas têm um nível mínimo de integridade, **mas todos os processos estão em execução sob um nível de integridade**. E semelhante ao que aconteceu com o sistema de arquivos, **se um processo deseja escrever dentro de outro processo, ele deve ter pelo menos o mesmo nível de integridade**. Isso significa que um processo com nível de integridade baixo não pode abrir um identificador com acesso total a um processo com nível de integridade médio.
|
||||
Nem todos os arquivos e pastas têm um nível mínimo de integridade, **mas todos os processos são executados em um nível de integridade**. E semelhante ao que aconteceu com o sistema de arquivos, **se um processo deseja escrever dentro de outro processo, ele deve ter pelo menos o mesmo nível de integridade**. Isso significa que um processo com nível de integridade baixo não pode abrir um identificador com acesso total a um processo com nível de integridade médio.
|
||||
|
||||
Devido às restrições comentadas nesta e na seção anterior, do ponto de vista da segurança, é sempre **recomendado executar um processo no nível mais baixo de integridade possível**.
|
||||
Devido às restrições mencionadas nesta e na seção anterior, do ponto de vista da segurança, é sempre **recomendado executar um processo no nível mais baixo de integridade possível**.
|
||||
|
||||
|
||||
### [WhiteIntel](https://whiteintel.io)
|
||||
|
||||
<figure><img src="/.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**WhiteIntel**](https://whiteintel.io) é um mecanismo de busca alimentado pela **dark web** que oferece funcionalidades **gratuitas** para verificar se uma empresa ou seus clientes foram **comprometidos** por **malwares ladrões**.
|
||||
|
||||
O principal objetivo do WhiteIntel é combater a apropriação de contas e ataques de ransomware resultantes de malwares que roubam informações.
|
||||
|
||||
Você pode verificar o site deles e experimentar o mecanismo de busca de forma **gratuita** em:
|
||||
|
||||
{% embed url="https://whiteintel.io" %}
|
||||
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenha [**produtos oficiais PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* 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)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
Loading…
Reference in a new issue