mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-24 05:33:33 +00:00
Translated ['macos-hardening/macos-security-and-privilege-escalation/mac
This commit is contained in:
parent
17ab6d1a8a
commit
e627677c6b
4 changed files with 179 additions and 137 deletions
|
@ -51,19 +51,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
|
||||
### Codesign / ldid
|
||||
|
||||
O comando `codesign` é uma ferramenta de linha de comando no macOS que permite assinar digitalmente aplicativos e bibliotecas para garantir sua autenticidade e integridade. A assinatura digital é um mecanismo de segurança que verifica se o código não foi alterado ou adulterado desde que foi assinado.
|
||||
|
||||
A assinatura digital é especialmente importante para aplicativos distribuídos fora da Mac App Store, pois fornece uma maneira de verificar se o aplicativo não foi modificado por terceiros mal-intencionados. Além disso, a assinatura digital é necessária para recursos como a capacidade de acessar certos recursos protegidos do sistema operacional e para permitir que o aplicativo seja executado em sistemas macOS com Gatekeeper habilitado.
|
||||
|
||||
O comando `codesign` pode ser usado para inspecionar, adicionar ou remover assinaturas digitais de aplicativos e bibliotecas. Ele também pode ser usado para verificar a validade de uma assinatura digital existente.
|
||||
|
||||
A assinatura digital é baseada em certificados emitidos por uma autoridade de certificação confiável. Ao assinar um aplicativo ou biblioteca, um certificado é usado para criar uma assinatura digital que é anexada ao código. Quando o aplicativo ou biblioteca é executado, o sistema operacional verifica a assinatura digital usando a chave pública correspondente ao certificado usado para assinar o código. Se a verificação for bem-sucedida, o aplicativo ou biblioteca é considerado autêntico e confiável.
|
||||
|
||||
O comando `codesign` também pode ser usado para identificar e corrigir problemas de assinatura digital, como assinaturas inválidas ou ausentes. Isso é particularmente útil durante o processo de desenvolvimento e depuração de aplicativos, onde é necessário garantir que a assinatura digital esteja correta antes de distribuir o aplicativo para outros usuários.
|
||||
|
||||
Em resumo, o comando `codesign` é uma ferramenta essencial para garantir a segurança e a integridade de aplicativos e bibliotecas no macOS, permitindo a assinatura digital e a verificação de sua autenticidade.
|
||||
{% 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"
|
||||
|
@ -79,6 +71,16 @@ spctl --assess --verbose /Applications/Safari.app
|
|||
|
||||
# Sign a binary
|
||||
codesign -s <cert-name-keychain> toolsdemo
|
||||
|
||||
# Get signature info
|
||||
ldid -h <binary>
|
||||
|
||||
# Get entitlements
|
||||
ldid -e <binary>
|
||||
|
||||
# Change entilements
|
||||
## /tmp/entl.xml is a XML file with the new entitlements to add
|
||||
ldid -S/tmp/entl.xml <binary>
|
||||
```
|
||||
### SuspiciousPackage
|
||||
|
||||
|
@ -179,7 +181,7 @@ No painel esquerdo do Hopper, é possível ver os símbolos (**Labels**) do bin
|
|||
|
||||
#### 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 **descompilado** e como **binário** clicando no ícone respectivo:
|
||||
No painel central, você pode ver o **código desmontado**. E você pode vê-lo como um desmonte **bruto**, como **gráfico**, como **descompilado** e como **binário** clicando no ícone correspondente:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (6).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -254,7 +256,7 @@ O fuzzing é uma técnica usada para encontrar vulnerabilidades em aplicativos p
|
|||
|
||||
## Conclusão
|
||||
|
||||
A inspeção, depuração e fuzzing de aplicativos no macOS são técnicas valiosas para identificar vulnerabilidades e realizar escalonamento de privilégios. Ao usar as ferramentas e técnicas mencionadas neste guia, você poderá analisar aplicativos de forma mais eficaz e descobrir possíveis falhas de segurança.
|
||||
A inspeção, depuração e fuzzing de aplicativos no macOS são técnicas valiosas para identificar vulnerabilidades e melhorar a segurança dos aplicativos. Ao usar as ferramentas mencionadas neste guia, os hackers éticos podem descobrir e corrigir falhas antes que sejam exploradas por atacantes mal-intencionados.
|
||||
```bash
|
||||
syscall:::entry
|
||||
/pid == $1/
|
||||
|
@ -372,7 +374,7 @@ settings set target.x86-disassembly-flavor intel
|
|||
Dentro do lldb, faça o 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>Comando (lldb)</strong></td><td><strong>Descrição</strong></td></tr><tr><td><strong>run (r)</strong></td><td>Inicia 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>Continua a execução do processo em depuração.</td></tr><tr><td><strong>nexti (n / ni)</strong></td><td>Executa a próxima instrução. Este comando irá pular chamadas de função.</td></tr><tr><td><strong>stepi (s / si)</strong></td><td>Executa 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>Executa o restante das instruções na função atual ("frame") e retorna.</td></tr><tr><td><strong>control + c</strong></td><td>Pausa a execução. Se o processo foi iniciado (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 main do binário</p><p>b set -n main --shlib <nome_da_biblioteca> #Função main 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> #Ativa/Desativa 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 breakpoint</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_registrador/memória></strong></td><td>Exibe a memória como uma string terminada em nulo.</td></tr><tr><td><strong>x/i <endereço_do_registrador/memória></strong></td><td>Exibe a memória como uma instrução de montagem.</td></tr><tr><td><strong>x/b <endereço_do_registrador/memória></strong></td><td>Exibe a memória como um byte.</td></tr><tr><td><strong>print object (po)</strong></td><td><p>Isso 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 por meio do comando "print object" (po). Se o 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 #Escreve AAAA nesse endereço<br>memory write -f s $rip+0x11f+7 "AAAA" #Escreve AAAA no endereço</td></tr><tr><td><strong>disassembly</strong></td><td><p>dis #Desmonta a função atual</p><p>dis -n <nome_da_função> #Desmonta a função</p><p>dis -n <nome_da_função> -b <nome_do_binário> #Desmonta a função<br>dis -c 6 #Desmonta 6 linhas<br>dis -c 0x100003764 -e 0x100003768 #De um endereço até o outro<br>dis -p -c 4 #Começa no endereço atual desmontando</p></td></tr><tr><td><strong>parray</strong></td><td>parray 3 (char **)$x1 #Verifica o array de 3 componentes no registrador x1</td></tr></tbody></table>
|
||||
<table data-header-hidden><thead><tr><th width="225"></th><th></th></tr></thead><tbody><tr><td><strong>Comando (lldb)</strong></td><td><strong>Descrição</strong></td></tr><tr><td><strong>run (r)</strong></td><td>Inicia a execução, que continuará até que um ponto de interrupção seja atingido ou o processo seja encerrado.</td></tr><tr><td><strong>continue (c)</strong></td><td>Continua a execução do processo em depuração.</td></tr><tr><td><strong>nexti (n / ni)</strong></td><td>Executa a próxima instrução. Este comando irá pular chamadas de função.</td></tr><tr><td><strong>stepi (s / si)</strong></td><td>Executa 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>Executa o restante das instruções na função atual ("frame") e retorna.</td></tr><tr><td><strong>control + c</strong></td><td>Pausa a execução. Se o processo foi iniciado (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 main do binário</p><p>b set -n main --shlib <nome_da_biblioteca> #Função main 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> #Ativa/Desativa 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 breakpoint</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_registrador/memória></strong></td><td>Exibe a memória como uma string terminada em nulo.</td></tr><tr><td><strong>x/i <endereço_do_registrador/memória></strong></td><td>Exibe a memória como uma instrução de montagem.</td></tr><tr><td><strong>x/b <endereço_do_registrador/memória></strong></td><td>Exibe a memória como um byte.</td></tr><tr><td><strong>print object (po)</strong></td><td><p>Isso 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 por meio do comando "print object" (po). Se o 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 #Escreve AAAA nesse endereço<br>memory write -f s $rip+0x11f+7 "AAAA" #Escreve AAAA no endereço</td></tr><tr><td><strong>disassembly</strong></td><td><p>dis #Desmonta a função atual</p><p>dis -n <nome_da_função> #Desmonta a função</p><p>dis -n <nome_da_função> -b <nome_do_binário> #Desmonta a função<br>dis -c 6 #Desmonta 6 linhas<br>dis -c 0x100003764 -e 0x100003768 #De um endereço até o outro<br>dis -p -c 4 #Começa no endereço atual desmontando</p></td></tr><tr><td><strong>parray</strong></td><td>parray 3 (char **)$x1 #Verifica o array de 3 componentes no registrador x1</td></tr></tbody></table>
|
||||
|
||||
{% hint style="info" %}
|
||||
Ao chamar a função **`objc_sendMsg`**, o registrador **rsi** contém o **nome do método** como uma string terminada em nulo ("C"). Para imprimir o nome via lldb, faça:
|
||||
|
@ -391,20 +393,20 @@ Ao chamar a função **`objc_sendMsg`**, o registrador **rsi** contém o **nome
|
|||
|
||||
* 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.
|
||||
* Alguns malwares também podem **detectar se a máquina é baseada no VMware** com base no endereço MAC (00:50:56).
|
||||
* Alguns malwares também podem **detectar** se a máquina é baseada no VMware pelo endereço MAC (00:50:56).
|
||||
* Também é possível descobrir se um processo está sendo depurado com um código simples como:
|
||||
* `if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //processo sendo depurado }`
|
||||
* Também pode invocar a chamada de sistema **`ptrace`** com a flag **`PT_DENY_ATTACH`**. Isso **impede** que um depurador se conecte e rastreie.
|
||||
* Também pode invocar a chamada de sistema **`ptrace`** com a flag **`PT_DENY_ATTACH`**. Isso **impede** um depurador de se conectar e rastrear.
|
||||
* Você pode verificar se a função **`sysctl`** ou **`ptrace`** está sendo **importada** (mas o malware pode importá-la dinamicamente)
|
||||
* Como 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/)":\
|
||||
* Como observado neste artigo, “[Defeating Anti-Debug Techniques: macOS ptrace variants](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**_"
|
||||
## Fuzzing
|
||||
|
||||
### [ReportCrash](https://ss64.com/osx/reportcrash.html)
|
||||
|
||||
O ReportCrash **analisa processos que estão travando e salva um relatório de travamento no disco**. Um relatório de travamento contém informações que podem **ajudar um desenvolvedor a diagnosticar** a causa de um travamento.\
|
||||
Para aplicativos e outros processos **executando no contexto do launchd por usuário**, o ReportCrash é executado como um LaunchAgent e salva os relatórios de travamento em `~/Library/Logs/DiagnosticReports/` do usuário.\
|
||||
Para daemons, outros processos **executando no contexto do launchd do sistema** e outros processos privilegiados, o ReportCrash é executado como um LaunchDaemon e salva os relatórios de travamento em `/Library/Logs/DiagnosticReports` do sistema.
|
||||
Para aplicativos e outros processos **executando no contexto do launchd por usuário**, o ReportCrash é executado como um LaunchAgent e salva os relatórios de travamento no diretório `~/Library/Logs/DiagnosticReports/` do usuário.\
|
||||
Para daemons, outros processos **executando no contexto do launchd do sistema** e outros processos privilegiados, o ReportCrash é executado como um LaunchDaemon e salva os relatórios de travamento no diretório `/Library/Logs/DiagnosticReports` do sistema.
|
||||
|
||||
Se você está preocupado com os relatórios de travamento **sendo enviados para a Apple**, você pode desativá-los. Caso contrário, os relatórios de travamento podem ser úteis para **descobrir como um servidor travou**.
|
||||
```bash
|
||||
|
@ -437,7 +439,7 @@ sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
|
|||
```
|
||||
### Manipuladores Internos
|
||||
|
||||
**Confira a seguinte página** para descobrir como você pode encontrar qual aplicativo é responsável por **manipular o esquema ou protocolo especificado:**
|
||||
**Verifique a seguinte página** para descobrir como você pode encontrar qual aplicativo é responsável por **manipular o esquema ou protocolo especificado:**
|
||||
|
||||
{% content-ref url="../macos-file-extension-apps.md" %}
|
||||
[macos-file-extension-apps.md](../macos-file-extension-apps.md)
|
||||
|
@ -466,11 +468,11 @@ lldb -o "target create `which some-binary`" -o "settings set target.env-vars DYL
|
|||
|
||||
#### [AFL++](https://github.com/AFLplusplus/AFLplusplus)
|
||||
|
||||
Funciona para ferramentas de linha de comando
|
||||
Funciona para ferramentas de linha de comando.
|
||||
|
||||
#### [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 de GUI do macOS. Observe que alguns aplicativos do macOS têm requisitos específicos, como nomes de arquivos exclusivos, a extensão correta e a necessidade de ler os arquivos do sandbox (`~/Library/Containers/com.apple.Safari/Data`)...
|
||||
|
||||
Alguns exemplos:
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
* **/System**: Arquivo para fazer o OS X funcionar. Você deve encontrar principalmente arquivos específicos da Apple aqui (não de terceiros).
|
||||
* **/tmp**: Arquivos são excluídos após 3 dias (é um link simbólico para /private/tmp)
|
||||
* **/Users**: Diretório pessoal dos usuários.
|
||||
* **/usr**: Configuração e binários do sistema
|
||||
* **/usr**: Configurações e binários do sistema
|
||||
* **/var**: Arquivos de log
|
||||
* **/Volumes**: As unidades montadas aparecerão aqui.
|
||||
* **/.vol**: Ao executar `stat a.txt`, você obtém algo como `16777223 7545753 -rw-r--r-- 1 username wheel ...`, onde o primeiro número é o número de ID do volume onde o arquivo existe e o segundo é o número de inode. Você pode acessar o conteúdo deste arquivo através de /.vol/ com essas informações executando `cat /.vol/16777223/7545753`
|
||||
|
@ -34,7 +34,7 @@
|
|||
|
||||
* Os **aplicativos do sistema** estão localizados em `/System/Applications`
|
||||
* Os aplicativos **instalados** geralmente são instalados em `/Applications` ou em `~/Applications`
|
||||
* Os **dados do aplicativo** podem ser encontrados em `/Library/Application Support` para os aplicativos em execução como root e `~/Library/Application Support` para aplicativos em execução como usuário.
|
||||
* Os **dados do aplicativo** podem ser encontrados em `/Library/Application Support` para os aplicativos em execução como root e `~/Library/Application Support` para aplicativos em execução como o usuário.
|
||||
* Os **daemons** de aplicativos de terceiros que **precisam ser executados como root** geralmente estão localizados em `/Library/PrivilegedHelperTools/`
|
||||
* Os aplicativos **sandboxed** são mapeados na pasta `~/Library/Containers`. Cada aplicativo tem uma pasta com o nome do ID do pacote do aplicativo (`com.apple.Safari`).
|
||||
* O **kernel** está localizado em `/System/Library/Kernels/kernel`
|
||||
|
@ -87,20 +87,26 @@ No macOS (e iOS), todas as bibliotecas compartilhadas do sistema, como framework
|
|||
|
||||
Semelhante ao cache compartilhado do dyld, o kernel e as extensões do kernel também são compilados em um cache do kernel, que é carregado durante a inicialização.
|
||||
|
||||
Para extrair as bibliotecas do arquivo único de cache compartilhado do dylib, era possível usar o binário [dyld\_shared\_cache\_util](https://www.mbsplugins.de/files/dyld\_shared\_cache\_util-dyld-733.8.zip), que pode não estar funcionando atualmente:
|
||||
Para extrair as bibliotecas do arquivo único de cache compartilhado do dylib, era possível usar o binário [dyld\_shared\_cache\_util](https://www.mbsplugins.de/files/dyld\_shared\_cache\_util-dyld-733.8.zip), que pode não estar funcionando atualmente, mas você também pode usar o [**dyldextractor**](https://github.com/arandomdev/dyldextractor):
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
# dyld_shared_cache_util
|
||||
dyld_shared_cache_util -extract ~/shared_cache/ /System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/dyld_shared_cache_arm64e
|
||||
|
||||
# dyldextractor
|
||||
dyldex -l [dyld_shared_cache_path] # List libraries
|
||||
dyldex_all [dyld_shared_cache_path] # Extract all
|
||||
# More options inside the readme
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
Em versões mais antigas, você pode encontrar o **cache compartilhado** em **`/System/Library/dyld/`**.
|
||||
|
||||
No iOS, você pode encontrá-los em **`/System/Library/Caches/com.apple.dyld/`**.
|
||||
|
||||
{% hint style="success" %}
|
||||
Observe que mesmo que a ferramenta `dyld_shared_cache_util` não funcione, você pode passar o **binário dyld compartilhado para o Hopper** e o Hopper será capaz de identificar todas as bibliotecas e permitir que você **selecione qual** deseja investigar:
|
||||
|
||||
|
||||
Observe que mesmo que a ferramenta `dyld_shared_cache_util` não funcione, você pode passar o **binário compartilhado do dyld para o Hopper** e o Hopper será capaz de identificar todas as bibliotecas e permitir que você **selecione qual** deseja investigar:
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (680).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
@ -115,10 +121,10 @@ Em uma **pasta**, **leitura** permite **listá-la**, **escrita** permite **exclu
|
|||
|
||||
Existem alguns sinalizadores que podem ser definidos nos arquivos e que farão com que o arquivo se comporte de maneira diferente. Você pode **verificar os sinalizadores** dos arquivos dentro de um diretório com `ls -lO /caminho/diretório`
|
||||
|
||||
* **`uchg`**: Conhecido como sinalizador **uchange**, ele **impede qualquer ação** de alterar ou excluir o **arquivo**. Para defini-lo, faça: `chflags uchg arquivo.txt`
|
||||
* **`uchg`**: Conhecido como sinalizador **uchange**, impedirá qualquer ação de alterar ou excluir o **arquivo**. Para defini-lo, faça: `chflags uchg arquivo.txt`
|
||||
* O usuário root pode **remover o sinalizador** e modificar o arquivo
|
||||
* **`restricted`**: Esse sinalizador faz com que o arquivo seja **protegido pelo SIP** (você não pode adicionar esse sinalizador a um arquivo).
|
||||
* **`Sticky bit`**: Se um diretório tiver o sticky bit, **apenas** o **proprietário do diretório ou o root podem renomear ou excluir** arquivos. Normalmente, isso é definido no diretório /tmp para evitar que usuários comuns excluam ou movam arquivos de outros usuários.
|
||||
* **`Sticky bit`**: Se um diretório tiver o sticky bit, **apenas** o **proprietário do diretório ou o root podem renomear ou excluir** arquivos. Normalmente, isso é definido no diretório /tmp para impedir que usuários comuns excluam ou movam arquivos de outros usuários.
|
||||
|
||||
### **ACLs de Arquivo**
|
||||
|
||||
|
|
|
@ -36,12 +36,16 @@ As permissões são herdadas do aplicativo pai e as permissões são rastreadas
|
|||
|
||||
### Banco de dados TCC
|
||||
|
||||
As seleções são então armazenadas no banco de dados do TCC em todo o sistema em `/Library/Application Support/com.apple.TCC/TCC.db` ou em `$HOME/Library/Application Support/com.apple.TCC/TCC.db` para preferências por usuário. Os bancos de dados são protegidos contra edição com SIP (Proteção de Integridade do Sistema), mas você pode lê-los.
|
||||
As seleções são então armazenadas no banco de dados do TCC em todo o sistema em **`/Library/Application Support/com.apple.TCC/TCC.db`** ou em **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** para preferências por usuário. Os bancos de dados são protegidos contra edição com SIP (System Integrity Protection), mas você pode lê-los.
|
||||
|
||||
Além disso, um processo com acesso total ao disco pode editar o banco de dados em modo de usuário.
|
||||
{% hint style="danger" %}
|
||||
O banco de dados TCC no iOS está em **`/private/var/mobile/Library/TCC/TCC.db`**
|
||||
{% endhint %}
|
||||
|
||||
Além disso, um processo com **acesso total ao disco** pode editar o banco de dados do modo de usuário.
|
||||
|
||||
{% hint style="info" %}
|
||||
A interface do usuário do centro de notificações pode fazer alterações no banco de dados do TCC do sistema:
|
||||
A **interface do centro de notificações** pode fazer **alterações no banco de dados TCC do sistema**:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -50,10 +54,51 @@ codesign -dv --entitlements :- /System/Library/PrivateFrameworks/TCC.framework/S
|
|||
com.apple.private.tcc.manager
|
||||
com.apple.rootless.storage.TCC
|
||||
```
|
||||
{% tab title="user DB" %}
|
||||
{% tab title="Banco de dados do usuário" %}
|
||||
|
||||
No entanto, os usuários podem **excluir ou consultar regras** com a utilidade de linha de comando **`tccutil`**.
|
||||
{% endtab %}
|
||||
{% endtabs %}
|
||||
|
||||
{% code title="Example" %}
|
||||
```bash
|
||||
$ tccutil reset All
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
This command will **reset all TCC permissions** for all applications for the current user.
|
||||
|
||||
{% code title="Example" %}
|
||||
```bash
|
||||
$ tccutil reset Camera com.apple.Safari
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
This command will **reset the Camera permission** for both the `Camera` and `Safari` applications for the current user.
|
||||
|
||||
{% code title="Example" %}
|
||||
```bash
|
||||
$ tccutil reset Microphone
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
This command will **reset the Microphone permission** for all applications for the current user.
|
||||
|
||||
{% code title="Example" %}
|
||||
```bash
|
||||
$ tccutil reset Microphone com.apple.Terminal
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
This command will **reset the Microphone permission** for both the `Microphone` and `Terminal` applications for the current user.
|
||||
|
||||
{% code title="Example" %}
|
||||
```bash
|
||||
$ tccutil reset Microphone com.apple.Terminal /Applications/Google\ Chrome.app
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
This command will **reset the Microphone permission** for the `Microphone`, `Terminal`, and `Google Chrome` applications for the current user.
|
||||
```bash
|
||||
sqlite3 ~/Library/Application\ Support/com.apple.TCC/TCC.db
|
||||
sqlite> .schema
|
||||
|
@ -152,7 +197,11 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app
|
|||
<string>kTCCServiceAddressBook</string>
|
||||
</array>
|
||||
```
|
||||
Isso evitará que o Calendário solicite ao usuário acesso a lembretes, calendário e lista de endereços.
|
||||
Isso evitará que o Calendário solicite ao usuário acesso a lembretes, calendário e lista de contatos.
|
||||
|
||||
{% hint style="success" %}
|
||||
Além de alguma documentação oficial sobre as permissões, também é possível encontrar **informações interessantes sobre as permissões** em [**https://newosxbook.com/ent.jl**](https://newosxbook.com/ent.jl)
|
||||
{% endhint %}
|
||||
|
||||
### Locais sensíveis desprotegidos
|
||||
|
||||
|
@ -162,7 +211,7 @@ Isso evitará que o Calendário solicite ao usuário acesso a lembretes, calend
|
|||
|
||||
### Intenção do usuário / com.apple.macl
|
||||
|
||||
Como mencionado anteriormente, é possível conceder acesso a um aplicativo a um arquivo arrastando-o e soltando-o nele. Esse acesso não será especificado em nenhum banco de dados TCC, mas sim como um atributo estendido do arquivo. Esse atributo armazenará o UUID do aplicativo permitido:
|
||||
Como mencionado anteriormente, é possível **conceder acesso a um aplicativo a um arquivo arrastando-o e soltando-o nele**. Esse acesso não será especificado em nenhum banco de dados TCC, mas como um **atributo estendido do arquivo**. Esse atributo irá **armazenar o UUID** do aplicativo permitido:
|
||||
```bash
|
||||
xattr Desktop/private.txt
|
||||
com.apple.macl
|
||||
|
|
|
@ -20,13 +20,13 @@ Acesse hoje:
|
|||
|
||||
</details>
|
||||
|
||||
## Conceitos básicos do iOS
|
||||
## Conceitos Básicos do iOS
|
||||
|
||||
{% content-ref url="ios-basics.md" %}
|
||||
[ios-basics.md](ios-basics.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Ambiente de teste
|
||||
## Ambiente de Teste
|
||||
|
||||
Nesta página, você pode encontrar informações sobre o **simulador iOS**, **emuladores** e **jailbreaking**:
|
||||
|
||||
|
@ -34,9 +34,9 @@ Nesta página, você pode encontrar informações sobre o **simulador iOS**, **e
|
|||
[ios-testing-environment.md](ios-testing-environment.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Análise inicial
|
||||
## Análise Inicial
|
||||
|
||||
### Operações básicas de teste do iOS
|
||||
### Operações Básicas de Teste do iOS
|
||||
|
||||
Durante o teste, **várias operações serão sugeridas** (conectar ao dispositivo, ler/escrever/fazer upload/fazer download de arquivos, usar algumas ferramentas...). Portanto, se você não sabe como realizar alguma dessas ações, **comece lendo a página**:
|
||||
|
||||
|
@ -46,10 +46,10 @@ Durante o teste, **várias operações serão sugeridas** (conectar ao dispositi
|
|||
|
||||
{% hint style="info" %}
|
||||
Para os próximos passos, **o aplicativo deve estar instalado** no dispositivo e você já deve ter obtido o **arquivo IPA** do aplicativo.\
|
||||
Leia a página [Operações básicas de teste do iOS](basic-ios-testing-operations.md) para aprender como fazer isso.
|
||||
Leia a página [Operações Básicas de Teste do iOS](basic-ios-testing-operations.md) para aprender como fazer isso.
|
||||
{% endhint %}
|
||||
|
||||
### Análise estática básica
|
||||
### Análise Estática Básica
|
||||
|
||||
Recomenda-se usar a ferramenta [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) para realizar uma Análise Estática automática no arquivo IPA.
|
||||
|
||||
|
@ -57,22 +57,22 @@ Identificação das **proteções presentes no binário**:
|
|||
|
||||
* **PIE (Position Independent Executable)**: Quando ativado, o aplicativo é carregado em um endereço de memória aleatório toda vez que é iniciado, tornando mais difícil prever seu endereço de memória inicial.
|
||||
|
||||
```
|
||||
```bash
|
||||
otool -hv <app-binary> | grep PIE # Deve incluir a flag PIE
|
||||
```
|
||||
* **Stack Canaries**: Para validar a integridade da pilha, um valor 'canary' é colocado na pilha antes de chamar uma função e é validado novamente quando a função termina.
|
||||
|
||||
```
|
||||
```bash
|
||||
otool -I -v <app-binary> | grep stack_chk # Deve incluir os símbolos: stack_chk_guard e stack_chk_fail
|
||||
```
|
||||
* **ARC (Automatic Reference Counting)**: Para evitar falhas comuns de corrupção de memória
|
||||
|
||||
```
|
||||
```bash
|
||||
otool -I -v <app-binary> | grep objc_release # Deve incluir o símbolo _objc_release
|
||||
```
|
||||
* **Binary Criptografado**: O binário deve estar criptografado
|
||||
|
||||
```
|
||||
```bash
|
||||
otool -arch all -Vl <app-binary> | grep -A5 LC_ENCRYPT # O cryptid deve ser 1
|
||||
```
|
||||
|
||||
|
@ -80,7 +80,7 @@ otool -arch all -Vl <app-binary> | grep -A5 LC_ENCRYPT # O cryptid deve ser 1
|
|||
|
||||
* **Algoritmos de Hash Fracos**
|
||||
|
||||
```
|
||||
```bash
|
||||
# No dispositivo iOS
|
||||
otool -Iv <app> | grep -w "_CC_MD5"
|
||||
otool -Iv <app> | grep -w "_CC_SHA1"
|
||||
|
@ -91,7 +91,7 @@ grep -iER "_CC_SHA1"
|
|||
```
|
||||
* **Funções de Aleatoriedade Inseguras**
|
||||
|
||||
```
|
||||
```bash
|
||||
# No dispositivo iOS
|
||||
otool -Iv <app> | grep -w "_random"
|
||||
otool -Iv <app> | grep -w "_srand"
|
||||
|
@ -104,7 +104,7 @@ grep -iER "_rand"
|
|||
```
|
||||
* **Função 'Malloc' Insegura**
|
||||
|
||||
```
|
||||
```bash
|
||||
# No dispositivo iOS
|
||||
otool -Iv <app> | grep -w "_malloc"
|
||||
|
||||
|
@ -113,7 +113,7 @@ grep -iER "_malloc"
|
|||
```
|
||||
* **Funções Inseguras e Vulneráveis**
|
||||
|
||||
```
|
||||
```bash
|
||||
# No dispositivo iOS
|
||||
otool -Iv <app> | grep -w "_gets"
|
||||
otool -Iv <app> | grep -w "_memcpy"
|
||||
|
@ -146,7 +146,7 @@ Confira a análise dinâmica realizada pelo [**MobSF**](https://github.com/MobSF
|
|||
|
||||
### Listando Apps Instalados
|
||||
|
||||
Ao direcionar apps instalados no dispositivo, você primeiro precisa descobrir o identificador de pacote correto do aplicativo que deseja analisar. Você pode usar `frida-ps -Uai` para obter todos os apps (`-a`) atualmente instalados (`-i`) no dispositivo USB conectado (`-U`):
|
||||
Ao direcionar apps que estão instalados no dispositivo, você primeiro precisa descobrir o identificador de pacote correto do aplicativo que deseja analisar. Você pode usar `frida-ps -Uai` para obter todos os apps (`-a`) atualmente instalados (`-i`) no dispositivo USB conectado (`-U`):
|
||||
```bash
|
||||
$ frida-ps -Uai
|
||||
PID Name Identifier
|
||||
|
@ -161,7 +161,7 @@ PID Name Identifier
|
|||
```
|
||||
### Enumeração Básica e Hooking
|
||||
|
||||
Aprenda como **enumerar os componentes do aplicativo** e como facilmente **hookar métodos e classes** com o Objection:
|
||||
Aprenda como **enumerar os componentes do aplicativo** e como facilmente **hookar métodos e classes** com o objection:
|
||||
|
||||
{% content-ref url="ios-hooking-with-objection.md" %}
|
||||
[ios-hooking-with-objection.md](ios-hooking-with-objection.md)
|
||||
|
@ -176,10 +176,10 @@ Após descompactá-los, você deve ver `<NOME>.app`, um arquivo compactado que c
|
|||
* `_CodeSignature/` contém um arquivo plist com uma assinatura sobre todos os arquivos no pacote.
|
||||
* `Assets.car`: Outro arquivo compactado que contém recursos (ícones).
|
||||
* `Frameworks/` contém as bibliotecas nativas do aplicativo como arquivos .dylib ou .framework.
|
||||
* `PlugIns/` pode conter extensões do aplicativo como arquivos .appex (não presentes no exemplo).
|
||||
* [`Core Data`](https://developer.apple.com/documentation/coredata): É usado para salvar os dados permanentes do seu aplicativo para uso offline, para armazenar dados temporários em cache e adicionar funcionalidade de desfazer ao seu aplicativo em um único dispositivo. Para sincronizar dados em vários dispositivos em uma única conta do iCloud, o Core Data espelha automaticamente seu esquema em um contêiner do CloudKit.
|
||||
* `PlugIns/` pode conter extensões de aplicativos como arquivos .appex (não presentes no exemplo).
|
||||
* [`Core Data`](https://developer.apple.com/documentation/coredata): É usado para salvar os dados permanentes do seu aplicativo para uso offline, para armazenar dados temporários em cache e adicionar funcionalidade de desfazer ao seu aplicativo em um único dispositivo. Para sincronizar dados em vários dispositivos em uma única conta do iCloud, o Core Data espelha automaticamente seu esquema em um contêiner CloudKit.
|
||||
* [`PkgInfo`](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigApplications.html): O arquivo `PkgInfo` é uma maneira alternativa de especificar os códigos de tipo e criador do seu aplicativo ou pacote.
|
||||
* **en.lproj, fr.proj, Base.lproj**: São os pacotes de idioma que contêm recursos para esses idiomas específicos e um recurso padrão caso um idioma não seja suportado.
|
||||
* **en.lproj, fr.proj, Base.lproj**: São os pacotes de idiomas que contêm recursos para esses idiomas específicos e um recurso padrão caso um idioma não seja suportado.
|
||||
|
||||
Existem várias maneiras de definir a interface do usuário em um aplicativo iOS: arquivos _storyboard_, _nib_ ou _xib_.
|
||||
|
||||
|
@ -214,7 +214,7 @@ Consulte os capítulos mencionados para aprender mais sobre como testar cada um
|
|||
|
||||
No iOS, os aplicativos do sistema podem ser encontrados no diretório `/Applications`, enquanto os aplicativos instalados pelo usuário estão disponíveis em `/private/var/containers/`. No entanto, encontrar a pasta certa apenas navegando no sistema de arquivos não é uma tarefa trivial, pois cada aplicativo recebe um UUID (Identificador Único Universal) de 128 bits aleatório atribuído para os nomes de seus diretórios.
|
||||
|
||||
Para obter facilmente as informações do diretório de instalação para aplicativos instalados pelo usuário, você pode usar o comando **`env`** do Objection, que também mostrará todas as informações de diretório do aplicativo:
|
||||
Para obter facilmente as informações do diretório de instalação para aplicativos instalados pelo usuário, você pode usar o comando **`env`** do objection, que também mostrará todas as informações de diretório do aplicativo:
|
||||
```bash
|
||||
OWASP.iGoat-Swift on (iPhone: 11.1.2) [usb] # env
|
||||
|
||||
|
@ -544,7 +544,7 @@ Esse método removerá todas as solicitações e respostas em cache do arquivo C
|
|||
|
||||
[Documentação da Apple](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral):
|
||||
|
||||
`Um objeto de configuração de sessão efêmera é semelhante a uma configuração de sessão padrão (consulte default), exceto que o objeto de sessão correspondente não armazena caches, armazenamentos de credenciais ou quaisquer dados relacionados à sessão no disco. Em vez disso, os dados relacionados à sessão são armazenados na RAM. A única vez em que uma sessão efêmera grava dados no disco é quando você solicita que ela grave o conteúdo de uma URL em um arquivo.`
|
||||
`Um objeto de configuração de sessão efêmera é semelhante a uma configuração de sessão padrão (consulte default), exceto que o objeto de sessão correspondente não armazena caches, armazenamentos de credenciais ou quaisquer dados relacionados à sessão no disco. Em vez disso, os dados relacionados à sessão são armazenados na RAM. A única vez que uma sessão efêmera grava dados no disco é quando você solicita que ela grave o conteúdo de uma URL em um arquivo.`
|
||||
3. O cache também pode ser desativado definindo a Política de Cache como [.notAllowed](https://developer.apple.com/documentation/foundation/urlcache/storagepolicy/notallowed). Isso desativará o armazenamento de cache de qualquer forma, seja na memória ou no disco.
|
||||
|
||||
### Snapshots
|
||||
|
@ -576,59 +576,33 @@ Objective-C:
|
|||
|
||||
Objective-C é uma linguagem de programação utilizada para desenvolver aplicativos iOS. Ela é baseada na linguagem C e adiciona recursos de programação orientada a objetos. Neste guia, exploraremos técnicas de pentesting para aplicativos iOS escritos em Objective-C.
|
||||
|
||||
## Configuração do ambiente
|
||||
## Configuração do ambiente de pentesting
|
||||
|
||||
Antes de começar a realizar testes de penetração em aplicativos iOS escritos em Objective-C, é necessário configurar o ambiente de desenvolvimento. Siga as etapas abaixo para configurar o ambiente:
|
||||
Antes de começar o pentesting em aplicativos iOS escritos em Objective-C, é necessário configurar o ambiente de trabalho. Aqui estão os passos para configurar o ambiente de pentesting:
|
||||
|
||||
1. Instale o Xcode, que é a IDE oficial da Apple para desenvolvimento de aplicativos iOS.
|
||||
2. Certifique-se de ter um dispositivo iOS real ou um simulador iOS configurado para testar os aplicativos.
|
||||
3. Instale o Homebrew, um gerenciador de pacotes para macOS.
|
||||
4. Instale o Frida, uma ferramenta de instrumentação dinâmica que será usada para realizar testes de penetração em aplicativos iOS.
|
||||
1. Instale o Xcode: O Xcode é a IDE oficial da Apple para desenvolvimento de aplicativos iOS. Você pode baixá-lo gratuitamente na App Store.
|
||||
|
||||
## Instrumentação de aplicativos iOS
|
||||
2. Configure um dispositivo iOS para depuração: Para testar aplicativos iOS em um dispositivo físico, você precisa configurar o dispositivo para depuração. Conecte o dispositivo ao computador e siga as instruções para habilitar a depuração USB.
|
||||
|
||||
A instrumentação de aplicativos iOS escritos em Objective-C é uma técnica comumente usada para realizar testes de penetração. A instrumentação permite que você inspecione e modifique o comportamento do aplicativo em tempo de execução.
|
||||
3. Instale ferramentas de pentesting: Existem várias ferramentas disponíveis para pentesting em aplicativos iOS. Algumas das ferramentas populares incluem o Frida, Cycript e o Burp Suite. Instale essas ferramentas de acordo com as instruções fornecidas em suas respectivas documentações.
|
||||
|
||||
Existem várias ferramentas disponíveis para instrumentar aplicativos iOS escritos em Objective-C. Alguns exemplos populares incluem:
|
||||
## Técnicas de pentesting em aplicativos iOS escritos em Objective-C
|
||||
|
||||
- Frida: uma ferramenta de instrumentação dinâmica que permite injetar código JavaScript em aplicativos iOS.
|
||||
- Cycript: uma ferramenta de instrumentação que permite inspecionar e modificar aplicativos iOS em tempo de execução.
|
||||
- Hopper: um desmontador e analisador de código para aplicativos iOS.
|
||||
Aqui estão algumas técnicas de pentesting que podem ser aplicadas a aplicativos iOS escritos em Objective-C:
|
||||
|
||||
## Análise de segurança
|
||||
1. Análise de código estático: Realize uma análise de código estático para identificar vulnerabilidades de segurança no código-fonte do aplicativo. Isso pode incluir a identificação de chamadas inseguras de API, uso inadequado de criptografia e outras práticas de programação inseguras.
|
||||
|
||||
A análise de segurança é uma etapa importante no processo de pentesting de aplicativos iOS escritos em Objective-C. Durante a análise de segurança, você identificará vulnerabilidades e pontos fracos no aplicativo.
|
||||
2. Interceptação de tráfego de rede: Use ferramentas como o Burp Suite para interceptar e analisar o tráfego de rede gerado pelo aplicativo. Isso pode ajudar a identificar vazamentos de informações confidenciais, como tokens de autenticação ou dados sensíveis transmitidos sem criptografia.
|
||||
|
||||
Existem várias técnicas que podem ser usadas para realizar a análise de segurança em aplicativos iOS escritos em Objective-C. Alguns exemplos incluem:
|
||||
3. Teste de injeção de código: Use ferramentas como o Frida ou o Cycript para injetar código em tempo de execução no aplicativo e explorar possíveis vulnerabilidades. Isso pode incluir a identificação de pontos de injeção de código, como funções de deserialização ou manipulação inadequada de entradas do usuário.
|
||||
|
||||
- Análise estática de código: examinar o código-fonte do aplicativo em busca de vulnerabilidades conhecidas.
|
||||
- Análise dinâmica de código: executar o aplicativo em um ambiente controlado e monitorar seu comportamento em tempo de execução.
|
||||
- Análise de rede: monitorar o tráfego de rede gerado pelo aplicativo em busca de informações sensíveis sendo transmitidas sem criptografia.
|
||||
4. Teste de autenticação e autorização: Verifique se o aplicativo implementa corretamente os mecanismos de autenticação e autorização. Isso pode incluir a identificação de vulnerabilidades, como autenticação fraca, falta de controle de acesso adequado ou falhas na implementação de sessões seguras.
|
||||
|
||||
## Exploração de vulnerabilidades
|
||||
|
||||
Após identificar vulnerabilidades em um aplicativo iOS escrito em Objective-C, você pode explorá-las para obter acesso não autorizado ou realizar outras ações maliciosas.
|
||||
|
||||
Existem várias técnicas de exploração que podem ser usadas em aplicativos iOS escritos em Objective-C. Alguns exemplos incluem:
|
||||
|
||||
- Injeção de código: injetar código malicioso no aplicativo para executar ações não autorizadas.
|
||||
- Quebra de criptografia: explorar falhas na implementação de criptografia para obter acesso a informações sensíveis.
|
||||
- Manipulação de dados: modificar dados em tempo de execução para alterar o comportamento do aplicativo.
|
||||
|
||||
## Recomendações de segurança
|
||||
|
||||
Ao desenvolver aplicativos iOS em Objective-C, é importante seguir práticas recomendadas de segurança para proteger o aplicativo contra ataques.
|
||||
|
||||
Algumas recomendações de segurança para aplicativos iOS escritos em Objective-C incluem:
|
||||
|
||||
- Utilizar criptografia adequada para proteger informações sensíveis armazenadas no aplicativo.
|
||||
- Implementar autenticação e autorização adequadas para controlar o acesso ao aplicativo.
|
||||
- Validar e sanitizar todas as entradas de dados para evitar ataques de injeção de código.
|
||||
- Manter o aplicativo atualizado com as últimas correções de segurança e atualizações do sistema operacional iOS.
|
||||
5. Teste de armazenamento de dados: Verifique se o aplicativo armazena dados sensíveis de forma segura. Isso pode incluir a identificação de vulnerabilidades, como o armazenamento não criptografado de informações confidenciais ou a falta de proteção adequada dos dados em repouso.
|
||||
|
||||
## Conclusão
|
||||
|
||||
Neste guia, exploramos técnicas de pentesting para aplicativos iOS escritos em Objective-C. Através da instrumentação, análise de segurança e exploração de vulnerabilidades, é possível identificar e corrigir falhas de segurança em aplicativos iOS. Ao seguir as práticas recomendadas de segurança, você pode proteger seus aplicativos contra ataques maliciosos.
|
||||
O pentesting em aplicativos iOS escritos em Objective-C é uma etapa importante para garantir a segurança dos aplicativos. Ao seguir as técnicas de pentesting mencionadas neste guia, você poderá identificar e corrigir vulnerabilidades de segurança antes que elas sejam exploradas por hackers mal-intencionados. Lembre-se sempre de obter permissão legal antes de realizar qualquer teste de pentesting em aplicativos iOS.
|
||||
```
|
||||
@property (UIImageView *)backgroundImage;
|
||||
|
||||
|
@ -735,14 +709,14 @@ idevicesyslog -u <id> (| grep <app>) # To get the device logs
|
|||
```
|
||||
Você pode coletar logs do console através da janela **Devices** do Xcode da seguinte forma:
|
||||
|
||||
1. Inicie o Xcode.
|
||||
2. Conecte seu dispositivo ao seu computador hospedeiro.
|
||||
1. Abra o Xcode.
|
||||
2. Conecte seu dispositivo ao computador hospedeiro.
|
||||
3. Escolha **Window** -> **Devices and Simulators**.
|
||||
4. Clique no seu dispositivo iOS conectado na seção esquerda da janela Devices.
|
||||
5. Reproduza o problema.
|
||||
6. Clique no botão **Open Console** localizado na área superior direita da janela Devices para visualizar os logs do console em uma janela separada.
|
||||
|
||||
![](<../../.gitbook/assets/image (466) (2) (2) (2) (2) (2) (2) (2) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (
|
||||
![](<../../.gitbook/assets/image (466) (2) (2) (2) (2) (2) (2) (2) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1
|
||||
```bash
|
||||
iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
|
||||
|
||||
|
@ -900,7 +874,7 @@ A função **`evaluatePolicy` retorna um valor booleano** indicando se o usuári
|
|||
|
||||
As APIs do **keychain do iOS podem (e devem) ser usadas para implementar a autenticação local**. Durante esse processo, o aplicativo armazena um token de autenticação secreto ou outro dado secreto que identifica o usuário no keychain. Para autenticar em um serviço remoto, o usuário deve desbloquear o keychain usando sua senha ou impressão digital para obter os dados secretos.
|
||||
|
||||
O keychain permite salvar itens com o atributo especial `SecAccessControl`, que permitirá o acesso ao item apenas no keychain após o usuário passar pela autenticação do Touch ID (ou código de acesso, se tal fallback for permitido pelos parâmetros do atributo).
|
||||
O keychain permite salvar itens com o atributo especial `SecAccessControl`, que permitirá o acesso ao item apenas após o usuário passar pela autenticação do Touch ID (ou código de acesso, se tal fallback for permitido pelos parâmetros do atributo).
|
||||
|
||||
No exemplo a seguir, vamos salvar a string "test\_strong\_password" no keychain. A string só pode ser acessada no dispositivo atual enquanto o código de acesso estiver definido (parâmetro `kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly`) e após a autenticação do Touch ID para as impressões digitais atualmente registradas (parâmetro `SecAccessControlCreateFlags.biometryCurrentSet`):
|
||||
|
||||
|
@ -940,9 +914,48 @@ if status == noErr {
|
|||
// error while saving
|
||||
}
|
||||
```
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="Objective-C" %}
|
||||
|
||||
# Pentesting iOS Apps
|
||||
|
||||
## Introdução
|
||||
|
||||
O pentesting de aplicativos iOS envolve a avaliação da segurança de aplicativos desenvolvidos para dispositivos iOS, como iPhones e iPads. Neste guia, exploraremos várias técnicas e ferramentas para realizar pentesting em aplicativos iOS.
|
||||
|
||||
## Configuração do Ambiente
|
||||
|
||||
Antes de começar o pentesting de aplicativos iOS, é necessário configurar um ambiente adequado. Isso envolve a instalação de ferramentas e a configuração de um dispositivo iOS ou um emulador.
|
||||
|
||||
### Ferramentas
|
||||
|
||||
Existem várias ferramentas disponíveis para pentesting de aplicativos iOS. Algumas das ferramentas populares incluem:
|
||||
|
||||
- [MobSF](https://github.com/MobSF/Mobile-Security-Framework-MobSF): Uma estrutura de segurança móvel que oferece recursos de análise estática e dinâmica para aplicativos iOS.
|
||||
- [Frida](https://frida.re/): Uma estrutura de instrumentação dinâmica que permite a manipulação de aplicativos iOS em tempo de execução.
|
||||
- [Cycript](http://www.cycript.org/): Uma ferramenta de depuração e exploração que permite a inspeção e modificação de aplicativos iOS em tempo de execução.
|
||||
- [Burp Suite](https://portswigger.net/burp): Uma suíte de ferramentas de teste de segurança que pode ser usada para interceptar e modificar o tráfego entre um aplicativo iOS e um servidor.
|
||||
|
||||
### Dispositivo iOS ou Emulador
|
||||
|
||||
Para realizar o pentesting de aplicativos iOS, você precisará de um dispositivo iOS real ou de um emulador. Se você estiver usando um dispositivo iOS real, certifique-se de que ele esteja desbloqueado e conectado ao mesmo Wi-Fi que o seu computador.
|
||||
|
||||
Se você estiver usando um emulador, pode usar o emulador iOS fornecido pelo Xcode ou um emulador de terceiros, como o [Simulator](https://www.simulator.dev/) ou o [Appetize.io](https://appetize.io/).
|
||||
|
||||
## Técnicas de Pentesting
|
||||
|
||||
Existem várias técnicas que podem ser usadas para realizar o pentesting de aplicativos iOS. Algumas das técnicas comuns incluem:
|
||||
|
||||
- Análise estática: envolve a análise do código do aplicativo iOS em busca de vulnerabilidades de segurança.
|
||||
- Análise dinâmica: envolve a execução do aplicativo iOS em um ambiente controlado para identificar vulnerabilidades de segurança em tempo de execução.
|
||||
- Injeção de código: envolve a injeção de código malicioso em um aplicativo iOS para explorar vulnerabilidades.
|
||||
- Interceptação de tráfego: envolve a interceptação e análise do tráfego entre um aplicativo iOS e um servidor para identificar vulnerabilidades.
|
||||
- Engenharia reversa: envolve a desmontagem e análise do código do aplicativo iOS para entender seu funcionamento interno e identificar vulnerabilidades.
|
||||
|
||||
## Conclusão
|
||||
|
||||
O pentesting de aplicativos iOS é uma parte essencial do processo de desenvolvimento seguro de aplicativos móveis. Ao realizar o pentesting de aplicativos iOS, é possível identificar e corrigir vulnerabilidades de segurança antes que elas sejam exploradas por hackers mal-intencionados. Esperamos que este guia tenha fornecido uma visão geral das técnicas e ferramentas envolvidas no pentesting de aplicativos iOS.
|
||||
|
||||
{% endtab %}
|
||||
```objectivec
|
||||
// 1. create AccessControl object that will represent authentication settings
|
||||
CFErrorRef *err = nil;
|
||||
|
@ -1018,37 +1031,9 @@ let password = String(data: queryResult as! Data, encoding: .utf8)!
|
|||
// authorization not passed
|
||||
}
|
||||
```
|
||||
{% tab title="Objective-C" %}
|
||||
|
||||
# Pentesting em iOS
|
||||
|
||||
Este guia fornece uma visão geral das técnicas de pentesting em aplicativos iOS. Ele abrange várias áreas, incluindo análise estática e dinâmica, engenharia reversa, manipulação de dados em trânsito e em repouso, e exploração de vulnerabilidades comuns.
|
||||
|
||||
## Análise Estática
|
||||
|
||||
A análise estática envolve a revisão do código-fonte do aplicativo em busca de vulnerabilidades conhecidas e práticas inseguras. Isso pode ser feito usando ferramentas como o Xcode, que possui recursos de análise estática embutidos, ou ferramentas de terceiros, como o OCLint.
|
||||
|
||||
## Análise Dinâmica
|
||||
|
||||
A análise dinâmica envolve a execução do aplicativo em um ambiente controlado para identificar vulnerabilidades em tempo de execução. Isso pode ser feito usando ferramentas como o Frida, que permite a instrumentação do aplicativo em tempo real para interceptar chamadas de função e manipular dados em memória.
|
||||
|
||||
## Engenharia Reversa
|
||||
|
||||
A engenharia reversa envolve a desmontagem do código do aplicativo para entender seu funcionamento interno. Isso pode ser feito usando ferramentas como o Hopper ou o IDA Pro para analisar o código de montagem gerado a partir do código-fonte.
|
||||
|
||||
## Manipulação de Dados em Trânsito e em Repouso
|
||||
|
||||
A manipulação de dados em trânsito e em repouso envolve a identificação e exploração de vulnerabilidades relacionadas à criptografia, autenticação e comunicação segura. Isso pode ser feito usando ferramentas como o Burp Suite para interceptar e modificar o tráfego de rede.
|
||||
|
||||
## Exploração de Vulnerabilidades Comuns
|
||||
|
||||
A exploração de vulnerabilidades comuns envolve a identificação e exploração de vulnerabilidades conhecidas, como injeção de SQL, cross-site scripting (XSS) e deserialização não segura. Isso pode ser feito usando ferramentas como o OWASP ZAP para identificar e explorar essas vulnerabilidades.
|
||||
|
||||
## Conclusão
|
||||
|
||||
O pentesting em aplicativos iOS é uma parte essencial do processo de desenvolvimento seguro. Ao realizar análises estáticas e dinâmicas, engenharia reversa, manipulação de dados em trânsito e em repouso, e exploração de vulnerabilidades comuns, é possível identificar e corrigir vulnerabilidades antes que elas sejam exploradas por hackers mal-intencionados.
|
||||
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="Objective-C" %}
|
||||
```objectivec
|
||||
// 1. define query
|
||||
NSDictionary *query = @{(__bridge id)kSecClass: (__bridge id)kSecClassGenericPassword,
|
||||
|
@ -1217,7 +1202,7 @@ Para verificar esse problema usando o Burp, depois de confiar no CA do Burp no i
|
|||
### Pinagem de Certificado
|
||||
|
||||
Se um aplicativo estiver usando corretamente a Pinagem SSL, então o aplicativo só funcionará se o certificado for o esperado. Ao testar um aplicativo, **isso pode ser um problema, pois o Burp irá fornecer seu próprio certificado.**\
|
||||
Para contornar essa proteção em um dispositivo com jailbreak, você pode instalar o aplicativo [**SSL Kill Switch**](https://github.com/nabla-c0d3/ssl-kill-switch2) ou instalar o [**Burp Mobile Assistant**](https://portswigger.net/burp/documentation/desktop/mobile/config-ios-device).
|
||||
Para contornar essa proteção em um dispositivo com jailbreak, você pode instalar o aplicativo [**SSL Kill Switch**](https://github.com/nabla-c0d3/ssl-kill-switch2) ou instalar [**Burp Mobile Assistant**](https://portswigger.net/burp/documentation/desktop/mobile/config-ios-device)
|
||||
|
||||
Você também pode usar o comando `ios sslpinning disable` do **objection**.
|
||||
|
||||
|
@ -1245,14 +1230,14 @@ Além disso, alguns SDKs começam a **conter malware quando são muito confiáve
|
|||
|
||||
Além disso, os serviços fornecidos por esses SDKs podem envolver **serviços de rastreamento para monitorar o comportamento do usuário** ao usar o aplicativo, vender anúncios em banner ou melhorar a experiência do usuário. A desvantagem dos serviços de terceiros é que os desenvolvedores não conhecem os detalhes do código executado por meio das bibliotecas de terceiros. Consequentemente, não deve ser enviado mais informações do que o necessário para um serviço e nenhuma informação sensível deve ser divulgada.
|
||||
|
||||
A desvantagem é que um **desenvolvedor não sabe em detalhes qual código é executado por meio de bibliotecas de terceiros** e, portanto, abre mão da visibilidade. Consequentemente, deve-se garantir que não mais informações do que o necessário sejam enviadas para o serviço e que nenhuma informação sensível seja divulgada.
|
||||
A desvantagem é que um **desenvolvedor não sabe em detalhes qual código é executado por meio de bibliotecas de terceiros** e, portanto, abre mão da visibilidade. Consequentemente, deve-se garantir que apenas as informações necessárias sejam enviadas ao serviço e que nenhuma informação sensível seja divulgada.
|
||||
|
||||
A maioria dos serviços de terceiros é implementada de duas maneiras:
|
||||
|
||||
* com uma biblioteca independente
|
||||
* com um SDK completo
|
||||
|
||||
Todos os dados enviados para serviços de terceiros devem ser anonimizados para evitar a exposição de PII (Informações de Identificação Pessoal) que permitiria que a terceira parte identificasse a conta do usuário.
|
||||
Todos os dados enviados para serviços de terceiros devem ser anonimizados para evitar a exposição de PII (Informações de Identificação Pessoal) que permitiria que terceiros identificassem a conta do usuário.
|
||||
|
||||
Você pode encontrar as **bibliotecas usadas por um aplicativo** executando o comando **`otool`** no aplicativo (e **executando** o comando **em cada** biblioteca **compartilhada** para encontrar mais bibliotecas compartilhadas usadas).
|
||||
|
||||
|
@ -1284,7 +1269,7 @@ Acesse hoje:
|
|||
|
||||
<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**? Gostaria de ver sua **empresa anunciada no HackTricks**? Ou gostaria de 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 segurança cibernética**? 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 [**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)**.**
|
||||
|
|
Loading…
Reference in a new issue