Translated ['mobile-pentesting/ios-pentesting/README.md'] to pt

This commit is contained in:
Translator 2024-04-23 20:58:37 +00:00
parent 67999c6212
commit 2fe9a9d0b9

View file

@ -1,24 +1,24 @@
# iOS Pentesting
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (45).png" alt=""><figcaption></figcaption></figure>
\
Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir facilmente e **automatizar fluxos de trabalho** com as ferramentas comunitárias mais avançadas do mundo.\
Acesse hoje:
Use [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) para construir facilmente e **automatizar fluxos de trabalho** com as ferramentas da comunidade mais avançada do mundo.\
Acesse hoje mesmo:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<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 na 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ê 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)
* Adquira o [**swag oficial do 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** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do 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) no github.
</details>
@ -40,7 +40,7 @@ Nesta página, você pode encontrar informações sobre o **simulador iOS**, **e
### 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/download de arquivos, usar algumas ferramentas...). Portanto, se você não souber como realizar alguma dessas ações, **comece lendo a página**:
Durante o teste, **várias operações serão sugeridas** (conectar ao dispositivo, ler/escrever/fazer upload/download de arquivos, usar algumas ferramentas...). Portanto, se você não souber como realizar alguma dessas ações, por favor, **comece lendo a página**:
{% content-ref url="basic-ios-testing-operations.md" %}
[basic-ios-testing-operations.md](basic-ios-testing-operations.md)
@ -80,7 +80,7 @@ otool -arch all -Vl <app-binary> | grep -A5 LC_ENCRYPT # O cryptid deve ser 1
**Identificação de Funções Sensíveis/Inseguras**
* **Algoritmos de Hash Fracos**
* **Algoritmos de Hashing Fracos**
```bash
# No dispositivo iOS
@ -180,10 +180,10 @@ A estrutura de um arquivo **IPA** é essencialmente a de um **pacote compactado*
* **`Frameworks/`**: Esta pasta abriga as bibliotecas nativas do aplicativo, que podem estar na forma de arquivos `.dylib` ou `.framework`.
* **`PlugIns/`**: Isso pode incluir extensões para o aplicativo, conhecidas como arquivos `.appex`, embora nem sempre estejam presentes.
* [**`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 e adicionar funcionalidade de desfazer ao seu aplicativo em um único dispositivo. Para sincronizar dados em vários dispositivos em uma única conta iCloud, o Core Data espelha automaticamente seu esquema para 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 idiomas que contêm recursos para esses idiomas específicos, e um recurso padrão no caso de um idioma não ser suportado.
* [**`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 de seu aplicativo ou pacote.
* **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 no caso de um idioma não ser suportado.
* **Segurança**: O diretório `_CodeSignature/` desempenha um papel crítico na segurança do aplicativo, verificando a integridade de todos os arquivos empacotados por meio de assinaturas digitais.
* **Gerenciamento de Ativos**: O arquivo `Assets.car` usa compressão para gerenciar eficientemente ativos gráficos, crucial para otimizar o desempenho do aplicativo e reduzir seu tamanho geral.
* **Gerenciamento de Ativos**: O arquivo `Assets.car` usa compressão para gerenciar eficientemente ativos gráficos, crucial para otimizar o desempenho do aplicativo e reduzir seu tamanho total.
* **Frameworks e PlugIns**: Esses diretórios destacam a modularidade dos aplicativos iOS, permitindo que os desenvolvedores incluam bibliotecas de código reutilizáveis (`Frameworks/`) e estendam a funcionalidade do aplicativo (`PlugIns/`).
* **Localização**: A estrutura suporta vários idiomas, facilitando o alcance global do aplicativo ao incluir recursos para pacotes de idiomas específicos.
@ -202,13 +202,19 @@ $ plutil -convert xml1 Info.plist
$ apt install libplist-utils
$ plistutil -i Info.plist -o Info_xml.plist
```
Entre a infinidade de informações que o arquivo **Info.plist** pode divulgar, entradas notáveis incluem strings de permissão do aplicativo (`UsageDescription`), esquemas de URL personalizados (`CFBundleURLTypes`), e configurações para a Segurança de Transporte do Aplicativo (`NSAppTransportSecurity`). Essas entradas, juntamente com outras como tipos de documentos personalizados exportados/importados (`UTExportedTypeDeclarations` / `UTImportedTypeDeclarations`), podem ser facilmente localizadas inspecionando o arquivo ou empregando um simples comando `grep`:
Entre a miríade de informações que o arquivo **Info.plist** pode divulgar, entradas notáveis incluem strings de permissão do aplicativo (`UsageDescription`), esquemas de URL personalizados (`CFBundleURLTypes`), e configurações para a Segurança de Transporte do Aplicativo (`NSAppTransportSecurity`). Essas entradas, juntamente com outras como tipos de documentos personalizados exportados/importados (`UTExportedTypeDeclarations` / `UTImportedTypeDeclarations`), podem ser facilmente localizadas inspecionando o arquivo ou empregando um simples comando `grep`:
```bash
$ grep -i <keyword> Info.plist
```
**Caminhos de Dados**
No ambiente iOS, diretórios são designados especificamente para **aplicativos do sistema** e **aplicativos instalados pelo usuário**. Os aplicativos do sistema residem no diretório `/Applications`, enquanto os aplicativos instalados pelo usuário são colocados em `/private/var/containers/`. Esses aplicativos recebem um identificador único conhecido como **UUID de 128 bits**, tornando a tarefa de localizar manualmente a pasta de um aplicativo desafiadora devido à aleatoriedade dos nomes de diretório.
No ambiente iOS, diretórios são designados especificamente para **aplicações do sistema** e **aplicações instaladas pelo usuário**. As aplicações do sistema residem no diretório `/Applications`, enquanto as aplicações instaladas pelo usuário são colocadas em `/var/mobile/containers/Data/Application/`. Essas aplicações recebem um identificador único conhecido como **UUID de 128 bits**, tornando a tarefa de localizar manualmente a pasta de um aplicativo desafiadora devido à aleatoriedade dos nomes dos diretórios.
{% hint style="warning" %}
Como as aplicações no iOS devem ser isoladas, cada aplicativo terá também uma pasta dentro de **`$HOME/Library/Containers`** com o **`CFBundleIdentifier`** do aplicativo como nome da pasta.
No entanto, ambas as pastas (de dados e de contêiner) possuem o arquivo **`.com.apple.mobile_container_manager.metadata.plist`** que vincula ambos os arquivos na chave `MCMetadataIdentifier`).
{% endhint %}
Para facilitar a descoberta do diretório de instalação de um aplicativo instalado pelo usuário, a ferramenta **objection** fornece um comando útil, `env`. Este comando revela informações detalhadas do diretório para o aplicativo em questão. Abaixo está um exemplo de como usar este comando:
```bash
@ -285,7 +291,7 @@ Regular 420 None ... README.txt
```
### Reversão Binária
Dentro da pasta `<application-name>.app` você encontrará um arquivo binário chamado `<application-name>`. Este é o arquivo que será **executado**. Você pode realizar uma inspeção básica do binário com a ferramenta **`otool`**:
Dentro da pasta `<nome-do-aplicativo>.app`, você encontrará um arquivo binário chamado `<nome-do-aplicativo>`. Este é o arquivo que será **executado**. Você pode realizar uma inspeção básica do binário com a ferramenta **`otool`**:
```bash
otool -Vh DVIA-v2 #Check some compilation attributes
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
@ -363,7 +369,7 @@ double _field2;
```
No entanto, as melhores opções para desmontar o binário são: [**Hopper**](https://www.hopperapp.com/download.html?) e [**IDA**](https://www.hex-rays.com/products/ida/support/download_freeware/).
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (45).png" alt=""><figcaption></figcaption></figure>
\
Use [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) para construir facilmente e **automatizar fluxos de trabalho** com as ferramentas comunitárias mais avançadas do mundo.\
@ -381,7 +387,7 @@ Para aprender como o iOS armazena dados no dispositivo, leia esta página:
{% hint style="warning" %}
Os seguintes locais para armazenar informações devem ser verificados **logo após a instalação do aplicativo**, **após verificar todas as funcionalidades** do aplicativo e mesmo após **sair de um usuário e entrar em outro**.\
O objetivo é encontrar **informações sensíveis desprotegidas** do aplicativo (senhas, tokens), do usuário atual e de usuários anteriormente conectados.
O objetivo é encontrar **informações sensíveis desprotegidas** do aplicativo (senhas, tokens), do usuário atual e de usuários anteriormente logados.
{% endhint %}
### Plist
@ -390,7 +396,7 @@ Os arquivos **plist** são arquivos XML estruturados que **contêm pares chave-v
A forma mais comum de persistir dados em arquivos plist é através do uso do **NSUserDefaults**. Este arquivo plist é salvo dentro do sandbox do aplicativo em **`Library/Preferences/<appBundleID>.plist`**
A classe [`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) fornece uma interface programática para interagir com o sistema padrão. O sistema padrão permite que um aplicativo personalize seu comportamento de acordo com as **preferências do usuário**. Os dados salvos pelo `NSUserDefaults` podem ser visualizados no pacote de aplicativos. Esta classe armazena **dados** em um **arquivo plist**, mas é destinada a ser usada com pequenas quantidades de dados.
A classe [`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) fornece uma interface programática para interagir com o sistema padrão. O sistema padrão permite que um aplicativo personalize seu comportamento de acordo com as **preferências do usuário**. Os dados salvos pelo `NSUserDefaults` podem ser visualizados no pacote do aplicativo. Esta classe armazena **dados** em um **arquivo plist**, mas é destinada a ser usada com pequenas quantidades de dados.
Esses dados não podem ser acessados diretamente por um computador confiável, mas podem ser acessados fazendo um **backup**.
@ -406,18 +412,18 @@ Para converter arquivos do formato **XML ou binário (bplist)** para XML, estão
```bash
$ plutil -convert xml1 Info.plist
```
**Para Usuários Linux:** Primeiro, instale `libplist-utils` e, em seguida, use `plistutil` para converter seu arquivo:
**Para Usuários Linux:** Primeiro, instale `libplist-utils` e depois utilize `plistutil` para converter seu arquivo:
```bash
$ apt install libplist-utils
$ plistutil -i Info.plist -o Info_xml.plist
```
**Dentro de uma Sessão do Objection:** Para analisar aplicativos móveis, um comando específico permite que você converta arquivos plist diretamente:
**Dentro de uma Sessão do Objection:** Para analisar aplicativos móveis, um comando específico permite converter arquivos plist diretamente:
```bash
ios plist cat /private/var/mobile/Containers/Data/Application/<Application-UUID>/Library/Preferences/com.some.package.app.plist
```
### Core Data
[`Core Data`](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/nsfetchedresultscontroller.html#//apple_ref/doc/uid/TP40001075-CH8-SW1) é um framework para gerenciar a camada de modelo de objetos em sua aplicação. [Core Data pode usar o SQLite como seu armazenamento persistente](https://cocoacasts.com/what-is-the-difference-between-core-data-and-sqlite/), mas o próprio framework não é um banco de dados. CoreData não criptografa seus dados por padrão. No entanto, uma camada de criptografia adicional pode ser adicionada ao CoreData. Consulte o [Repositório do GitHub](https://github.com/project-imas/encrypted-core-data) para mais detalhes.
[`Core Data`](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/nsfetchedresultscontroller.html#//apple_ref/doc/uid/TP40001075-CH8-SW1) é um framework para gerenciar a camada de modelo de objetos em sua aplicação. [O Core Data pode usar o SQLite como seu armazenamento persistente](https://cocoacasts.com/what-is-the-difference-between-core-data-and-sqlite/), mas o próprio framework não é um banco de dados. CoreData não criptografa seus dados por padrão. No entanto, uma camada adicional de criptografia pode ser adicionada ao CoreData. Consulte o [Repositório do GitHub](https://github.com/project-imas/encrypted-core-data) para mais detalhes.
Você pode encontrar as informações do SQLite Core Data de um aplicativo no caminho `/private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support`
@ -454,7 +460,7 @@ Como os bancos de dados Yap são bancos de dados sqlite, você pode encontrá-lo
### Outros Bancos de Dados SQLite
É comum que aplicativos criem seu próprio banco de dados sqlite. Eles podem estar armazenando dados sensíveis neles e deixando-os não criptografados. Portanto, é sempre interessante verificar cada banco de dados dentro do diretório do aplicativo. Portanto, vá para o diretório do aplicativo onde os dados são salvos (`/private/var/mobile/Containers/Data/Application/{APPID}`)
É comum que aplicativos criem seu próprio banco de dados sqlite. Eles podem estar armazenando dados sensíveis neles e deixando-os não criptografados. Portanto, é sempre interessante verificar cada banco de dados dentro do diretório de aplicativos. Portanto, vá para o diretório do aplicativo onde os dados são salvos (`/private/var/mobile/Containers/Data/Application/{APPID}`)
```bash
find ./ -name "*.sqlite" -or -name "*.db"
```
@ -462,7 +468,7 @@ find ./ -name "*.sqlite" -or -name "*.db"
Os desenvolvedores podem **armazenar e sincronizar dados** em um **banco de dados hospedado na nuvem NoSQL** por meio dos Bancos de Dados em Tempo Real do Firebase. Armazenados em formato JSON, os dados são sincronizados em tempo real para todos os clientes conectados.
Você pode descobrir como verificar se há bancos de dados do Firebase mal configurados aqui:
Você pode aprender como verificar bancos de dados do Firebase mal configurados aqui:
{% content-ref url="../../network-services-pentesting/pentesting-web/buckets/firebase-database.md" %}
[firebase-database.md](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
@ -481,7 +487,7 @@ $ find ./ -name "*.realm*"
```
Para visualizar esses arquivos de banco de dados, é recomendada a utilização da ferramenta [**Realm Studio**](https://github.com/realm/realm-studio).
Para implementar a criptografia em um banco de dados Realm, o trecho de código a seguir pode ser utilizado:
Para implementar a criptografia dentro de um banco de dados Realm, o seguinte trecho de código pode ser utilizado:
```swift
// Open the encrypted Realm file where getKey() is a method to obtain a key from the Keychain or a server
let config = Realm.Configuration(encryptionKey: getKey())
@ -503,9 +509,9 @@ ls /private/var/mobile/Containers/Data/Application/{APPID}/Library/Application S
```
### Cookies
O iOS armazena os cookies dos aplicativos no **`Library/Cookies/cookies.binarycookies`** dentro da pasta de cada aplicativo. No entanto, os desenvolvedores às vezes decidem salvá-los no **keychain** já que o **arquivo de cookies mencionado pode ser acessado em backups**.
O iOS armazena os cookies dos aplicativos na pasta **`Library/Cookies/cookies.binarycookies`** dentro da pasta de cada aplicativo. No entanto, os desenvolvedores às vezes decidem salvá-los no **keychain** já que o **arquivo de cookies mencionado pode ser acessado em backups**.
Para inspecionar o arquivo de cookies, você pode usar [**este script em python**](https://github.com/mdegrazia/Safari-Binary-Cookie-Parser) ou usar o **`ios cookies get`** do objection.\
Para inspecionar o arquivo de cookies, você pode usar [**este script em python**](https://github.com/mdegrazia/Safari-Binary-Cookie-Parser) ou usar o comando **`ios cookies get`** do objection.\
**Você também pode usar o objection para** converter esses arquivos para um formato JSON e inspecionar os dados.
```bash
...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # ios cookies get --json
@ -526,27 +532,27 @@ Para inspecionar o arquivo de cookies, você pode usar [**este script em python*
Por padrão, o NSURLSession armazena dados, como **solicitações e respostas HTTP no banco de dados Cache.db**. Este banco de dados pode conter **dados sensíveis**, como tokens, nomes de usuário ou qualquer outra informação sensível que tenha sido armazenada em cache. Para encontrar as informações em cache, abra o diretório de dados do aplicativo (`/var/mobile/Containers/Data/Application/<UUID>`) e vá para `/Library/Caches/<Bundle Identifier>`. O **cache do WebKit também é armazenado no arquivo Cache.db**. O **Objection** pode abrir e interagir com o banco de dados com o comando `sqlite connect Cache.db`, pois é um **banco de dados SQLite normal**.
É **recomendado desativar o cache desses dados**, pois eles podem conter informações sensíveis na solicitação ou resposta. A lista abaixo mostra diferentes maneiras de alcançar isso:
É **recomendado desativar o cache desses dados**, pois pode conter informações sensíveis na solicitação ou resposta. A lista abaixo mostra diferentes maneiras de alcançar isso:
1. É recomendado remover as respostas em cache após o logout. Isso pode ser feito com o método fornecido pela Apple chamado [`removeAllCachedResponses`](https://developer.apple.com/documentation/foundation/urlcache/1417802-removeallcachedresponses). Você pode chamar este método da seguinte forma:
`URLCache.shared.removeAllCachedResponses()`
Este método removerá todas as solicitações e respostas em cache do arquivo Cache.db.
2. Se você não precisa usar os cookies, seria recomendado apenas usar a propriedade de configuração [.ephemeral](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral) do URLSession, que desativará o salvamento de cookies e caches.
2. Se você não precisa usar os cookies, seria recomendado usar apenas a propriedade de configuração [.ephemeral](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral) do URLSession, que desativará o salvamento de cookies e caches.
[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 um objeto de configuração de sessão padrão (consulte padrão), 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ê diz a ela para gravar 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 padrão), 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ê diz a ela para gravar o conteúdo de uma URL em um arquivo.`
3. O cache também pode ser desativado definindo a Política de Cache para [.notAllowed](https://developer.apple.com/documentation/foundation/urlcache/storagepolicy/notallowed). Isso desativará o armazenamento de cache de qualquer maneira, seja na memória ou no disco.
### Snapshots
Sempre que você pressiona o botão home, o iOS **tira uma captura de tela da tela atual** para poder fazer a transição para o aplicativo de uma maneira mais suave. No entanto, se **dados sensíveis** estiverem presentes na tela atual, eles serão **salvos** na **imagem** (que **persiste** **através** **dos** **reinícios**). Essas são as capturas de tela às quais você também pode acessar ao tocar duas vezes na tela inicial para alternar entre aplicativos.
Sempre que você pressiona o botão home, o iOS **tira um instantâneo da tela atual** para poder fazer a transição para o aplicativo de uma maneira muito mais suave. No entanto, se **dados sensíveis** estiverem presentes na tela atual, eles serão **salvos** na **imagem** (que **persiste** **através** **dos** **reinícios**). Estes são os instantâneos aos quais você também pode acessar ao tocar duas vezes na tela inicial para alternar entre aplicativos.
A menos que o iPhone esteja com jailbreak, o **atacante** precisa ter **acesso** ao **dispositivo** **desbloqueado** para ver essas capturas de tela. Por padrão, a última captura de tela é armazenada no sandbox do aplicativo em `Library/Caches/Snapshots/` ou na pasta `Library/SplashBoard/Snapshots` (os computadores confiáveis não podem acessar o sistema de arquivos a partir do iOS 7.0).
A menos que o iPhone esteja com jailbreak, o **atacante** precisa ter **acesso** ao **dispositivo** **desbloqueado** para ver essas capturas de tela. Por padrão, o último instantâneo é armazenado no sandbox do aplicativo em `Library/Caches/Snapshots/` ou na pasta `Library/SplashBoard/Snapshots` (os computadores confiáveis não podem acessar o sistema de arquivos a partir do iOS 7.0).
Uma maneira de evitar esse comportamento indesejado é colocar uma tela em branco ou remover os dados sensíveis antes de tirar a captura de tela usando a função `ApplicationDidEnterBackground()`.
Uma maneira de evitar esse comportamento indesejado é colocar uma tela em branco ou remover os dados sensíveis antes de tirar o instantâneo usando a função `ApplicationDidEnterBackground()`.
A seguir, um método de remediação de exemplo que definirá uma captura de tela padrão.
@ -565,9 +571,7 @@ func applicationWillEnterForeground(_ application: UIApplication) {
backgroundImage?.removeFromSuperview()
}
```
Objective-C:
Objective-C:
**Objective-C:**
```
@property (UIImageView *)backgroundImage;
@ -582,15 +586,15 @@ self.backgroundImage.bounds = UIScreen.mainScreen.bounds;
[self.backgroundImage removeFromSuperview];
}
```
Este define a imagem de fundo como `overlayImage.png` sempre que a aplicação é colocada em segundo plano. Isso previne vazamentos de dados sensíveis porque `overlayImage.png` sempre substituirá a visualização atual.
Este define a imagem de fundo para `overlayImage.png` sempre que a aplicação é colocada em segundo plano. Isso previne vazamentos de dados sensíveis porque `overlayImage.png` sempre substituirá a visualização atual.
### Keychain
### Chaveiro
Para acessar e gerenciar o keychain do iOS, ferramentas como [**Keychain-Dumper**](https://github.com/ptoomey3/Keychain-Dumper) estão disponíveis, adequadas para dispositivos com jailbreak. Além disso, o [**Objection**](https://github.com/sensepost/objection) fornece o comando `ios keychain dump` para fins semelhantes.
Para acessar e gerenciar o chaveiro do iOS, ferramentas como [**Keychain-Dumper**](https://github.com/ptoomey3/Keychain-Dumper) estão disponíveis, adequadas para dispositivos com jailbreak. Além disso, o [**Objection**](https://github.com/sensepost/objection) fornece o comando `ios keychain dump` para fins semelhantes.
#### **Armazenamento de Credenciais**
A classe **NSURLCredential** é ideal para salvar informações sensíveis diretamente no keychain, contornando a necessidade de NSUserDefaults ou outros invólucros. Para armazenar credenciais após o login, o seguinte código Swift é usado:
A classe **NSURLCredential** é ideal para salvar informações sensíveis diretamente no chaveiro, contornando a necessidade de NSUserDefaults ou outros invólucros. Para armazenar credenciais após o login, o seguinte código Swift é usado:
```swift
NSURLCredential *credential;
credential = [NSURLCredential credentialWithUser:username password:password persistence:NSURLCredentialPersistencePermanent];
@ -598,19 +602,19 @@ credential = [NSURLCredential credentialWithUser:username password:password pers
```
Para extrair essas credenciais armazenadas, é utilizado o comando `ios nsurlcredentialstorage dump` do Objection.
## **Teclados Personalizados e Cache do Teclado**
## **Teclados Personalizados e Cache de Teclado**
A partir do iOS 8.0, os usuários podem instalar extensões de teclado personalizadas, que são gerenciáveis em **Configurações > Geral > Teclado > Teclados**. Embora esses teclados ofereçam funcionalidades estendidas, eles representam um risco de registro de teclas e transmissão de dados para servidores externos, embora os usuários sejam notificados sobre teclados que requerem acesso à rede. Os aplicativos podem e devem restringir o uso de teclados personalizados para entrada de informações sensíveis.
A partir do iOS 8.0, os usuários podem instalar extensões de teclado personalizadas, que são gerenciáveis em **Configurações > Geral > Teclado > Teclados**. Embora esses teclados ofereçam funcionalidades estendidas, eles representam um risco de registro de teclas e transmissão de dados para servidores externos, embora os usuários sejam notificados sobre teclados que exigem acesso à rede. Os aplicativos podem e devem restringir o uso de teclados personalizados para a entrada de informações sensíveis.
**Recomendações de Segurança:**
* É aconselhável desativar os teclados de terceiros para segurança aprimorada.
* Esteja ciente das funcionalidades de autocorreção e sugestões automáticas do teclado padrão do iOS, que podem armazenar informações sensíveis em arquivos de cache localizados em `Library/Keyboard/{locale}-dynamic-text.dat` ou `/private/var/mobile/Library/Keyboard/dynamic-text.dat`. Esses arquivos de cache devem ser verificados regularmente em busca de dados sensíveis. Recomenda-se redefinir o dicionário do teclado via **Configurações > Geral > Redefinir > Redefinir Dicionário do Teclado** para limpar os dados em cache.
* Esteja ciente das funcionalidades de autocorreção e de sugestões automáticas do teclado padrão do iOS, que podem armazenar informações sensíveis em arquivos de cache localizados em `Library/Keyboard/{locale}-dynamic-text.dat` ou `/private/var/mobile/Library/Keyboard/dynamic-text.dat`. Esses arquivos de cache devem ser verificados regularmente em busca de dados sensíveis. Recomenda-se redefinir o dicionário do teclado via **Configurações > Geral > Redefinir > Redefinir Dicionário do Teclado** para limpar os dados em cache.
* A interceptação do tráfego de rede pode revelar se um teclado personalizado está transmitindo pressionamentos de teclas remotamente.
### **Prevenção de Cache de Campo de Texto**
### **Prevenindo o Cache de Campos de Texto**
O protocolo [UITextInputTraits](https://developer.apple.com/reference/uikit/uitextinputtraits) oferece propriedades para gerenciar autocorreção e entrada de texto segura, essenciais para prevenir o cache de informações sensíveis. Por exemplo, desabilitar a autocorreção e habilitar a entrada de texto segura pode ser alcançado com:
O protocolo [UITextInputTraits](https://developer.apple.com/reference/uikit/uitextinputtraits) oferece propriedades para gerenciar a autocorreção e a entrada de texto segura, essenciais para prevenir o cache de informações sensíveis. Por exemplo, desativar a autocorreção e habilitar a entrada de texto segura pode ser alcançado com:
```objectivec
textObject.autocorrectionType = UITextAutocorrectionTypeNo;
textObject.secureTextEntry = YES;
@ -637,7 +641,7 @@ As aplicações registam várias informações que podem ser sensíveis. Para mo
idevice_id --list # To find the device ID
idevicesyslog -u <id> (| grep <app>) # To capture the device logs
```
São úteis. Além disso, o **Xcode** fornece uma maneira de coletar logs do console:
São úteis. Além disso, **Xcode** fornece uma maneira de coletar logs do console:
1. Abra o Xcode.
2. Conecte o dispositivo iOS.
@ -646,7 +650,7 @@ São úteis. Além disso, o **Xcode** fornece uma maneira de coletar logs do con
5. Acione o problema que está investigando.
6. Use o botão **Open Console** para visualizar os logs em uma nova janela.
Para um registro mais avançado, conectar-se ao shell do dispositivo e usar o **socat** pode fornecer monitoramento de log em tempo real:
Para um registro mais avançado, conectar-se ao shell do dispositivo e usar **socat** pode fornecer monitoramento de log em tempo real:
```bash
iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
```
@ -654,7 +658,7 @@ Seguido por comandos para observar atividades de log, que podem ser inestimávei
***
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (45).png" alt=""><figcaption></figcaption></figure>
\
Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir facilmente e **automatizar fluxos de trabalho** com as ferramentas comunitárias mais avançadas do mundo.\
@ -664,7 +668,7 @@ Acesse hoje:
## Backups
As **funcionalidades de auto-backup** estão integradas ao iOS, facilitando a criação de cópias de dados do dispositivo através do iTunes (até o macOS Catalina), Finder (a partir do macOS Catalina) ou iCloud. Esses backups abrangem quase todos os dados do dispositivo, excluindo elementos altamente sensíveis como detalhes do Apple Pay e configurações do Touch ID.
Recursos de **auto-backup** estão integrados ao iOS, facilitando a criação de cópias de dados do dispositivo através do iTunes (até o macOS Catalina), Finder (a partir do macOS Catalina) ou iCloud. Esses backups abrangem quase todos os dados do dispositivo, excluindo elementos altamente sensíveis como detalhes do Apple Pay e configurações do Touch ID.
### Riscos de Segurança
@ -672,7 +676,7 @@ A inclusão de **aplicativos instalados e seus dados** nos backups levanta a que
### Excluindo Arquivos dos Backups
Arquivos em `Documents/` e `Library/Application Support/` são incluídos nos backups por padrão. Os desenvolvedores podem excluir arquivos ou diretórios específicos dos backups usando `NSURL setResourceValue:forKey:error:` com a chave `NSURLIsExcludedFromBackupKey`. Essa prática é crucial para proteger dados sensíveis de serem incluídos nos backups.
Arquivos em `Documents/` e `Library/Application Support/` são automaticamente incluídos nos backups. Os desenvolvedores podem excluir arquivos ou diretórios específicos dos backups usando `NSURL setResourceValue:forKey:error:` com a chave `NSURLIsExcludedFromBackupKey`. Essa prática é crucial para proteger dados sensíveis de serem incluídos nos backups.
### Testando Vulnerabilidades
@ -695,7 +699,7 @@ Para lidar com backups criptografados, scripts Python disponíveis no [repositó
### Modificando o Comportamento do Aplicativo
Um exemplo de alteração do comportamento do aplicativo por meio de modificações no backup é demonstrado no aplicativo de carteira de bitcoins [Bither](https://github.com/bither/bither-ios), onde o PIN de bloqueio da interface do usuário é armazenado em `net.bither.plist` sob a chave **pin\_code**. Remover essa chave do plist e restaurar o backup remove o requisito do PIN, fornecendo acesso irrestrito.
Um exemplo de alteração no comportamento do aplicativo por meio de modificações no backup é demonstrado no aplicativo de carteira de bitcoins Bither (https://github.com/bither/bither-ios), onde o PIN de bloqueio da interface do usuário é armazenado em `net.bither.plist` sob a chave **pin\_code**. Remover essa chave do plist e restaurar o backup remove o requisito do PIN, fornecendo acesso irrestrito.
## Resumo sobre Teste de Memória para Dados Sensíveis
@ -734,13 +738,13 @@ Alguns desenvolvedores salvam dados sensíveis no armazenamento local e os cript
### Uso de Algoritmos Inseguros e/ou Obsoletos
Os desenvolvedores não devem usar algoritmos **obsoletos** para realizar **verificações** de autorização, **armazenar** ou **enviar** dados. Alguns desses algoritmos são: RC4, MD4, MD5, SHA1... Se **hashes** forem usados para armazenar senhas, por exemplo, hashes resistentes a ataques de força bruta devem ser usados com sal.
Os desenvolvedores não devem usar **algoritmos obsoletos** para realizar **verificações** de autorização, **armazenar** ou **enviar** dados. Alguns desses algoritmos são: RC4, MD4, MD5, SHA1... Se **hashes** forem usados para armazenar senhas, por exemplo, hashes resistentes a ataques de força bruta devem ser usados com salt.
### Verificação
As principais verificações a serem realizadas são encontrar senhas/segredos **codificados** no código, ou se eles são **previsíveis**, e se o código está usando algum tipo de algoritmo de **criptografia** **fraco**.
As principais verificações a serem realizadas são encontrar senhas/segredos **codificados** no código, ou se eles são **previsíveis**, e se o código está usando algum tipo de algoritmos de **criptografia** **fracos**.
É interessante saber que você pode **monitorar** algumas **bibliotecas** de **criptografia** automaticamente usando **objection** com:
É interessante saber que você pode **monitorar** algumas **bibliotecas de criptografia** automaticamente usando **objection** com:
```swift
ios monitor crypt
```
@ -748,17 +752,17 @@ Para **mais informações** sobre APIs e bibliotecas criptográficas do iOS, ace
## Autenticação Local
A **autenticação local** desempenha um papel crucial, especialmente quando se trata de proteger o acesso a um ponto remoto por meio de métodos criptográficos. A essência aqui é que, sem uma implementação adequada, os mecanismos de autenticação local podem ser contornados.
A **autenticação local** desempenha um papel crucial, especialmente quando se trata de proteger o acesso em um ponto remoto por meio de métodos criptográficos. A essência aqui é que, sem uma implementação adequada, os mecanismos de autenticação local podem ser contornados.
O [**framework de Autenticação Local da Apple**](https://developer.apple.com/documentation/localauthentication) e o [**keychain**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html) fornecem APIs robustas para os desenvolvedores facilitarem diálogos de autenticação do usuário e lidarem de forma segura com dados secretos, respectivamente. O Secure Enclave protege a identificação de impressão digital para o Touch ID, enquanto o Face ID depende do reconhecimento facial sem comprometer os dados biométricos.
Para integrar o Touch ID/Face ID, os desenvolvedores têm duas opções de API:
* **`LocalAuthentication.framework`** para autenticação de usuário em alto nível sem acesso aos dados biométricos.
* **`Security.framework`** para acesso a serviços de chaveiro em nível mais baixo, protegendo dados secretos com autenticação biométrica. Vários [embrulhos de código aberto](https://www.raywenderlich.com/147308/secure-ios-user-data-keychain-touch-id) tornam o acesso ao chaveiro mais simples.
* **`Security.framework`** para acesso a serviços de chaveiro em nível mais baixo, protegendo dados secretos com autenticação biométrica. Vários [envoltórios de código aberto](https://www.raywenderlich.com/147308/secure-ios-user-data-keychain-touch-id) tornam o acesso ao chaveiro mais simples.
{% hint style="danger" %}
No entanto, tanto o `LocalAuthentication.framework` quanto o `Security.framework` apresentam vulnerabilidades, pois principalmente retornam valores booleanos sem transmitir dados para processos de autenticação, tornando-os suscetíveis a contornos (consulte [Don't touch me that way, por David Lindner et al](https://www.youtube.com/watch?v=XhXIHVGCFFM)).
No entanto, tanto `LocalAuthentication.framework` quanto `Security.framework` apresentam vulnerabilidades, pois retornam principalmente valores booleanos sem transmitir dados para processos de autenticação, tornando-os suscetíveis a contornos (consulte [Don't touch me that way, de David Lindner et al](https://www.youtube.com/watch?v=XhXIHVGCFFM)).
{% endhint %}
### Implementando Autenticação Local
@ -776,7 +780,7 @@ Implementar a **autenticação local** em aplicativos iOS envolve o uso de **API
O chaveiro oferece a capacidade de definir itens com o atributo `SecAccessControl`, que restringe o acesso ao item até que o usuário autentique com sucesso via Touch ID ou código de acesso do dispositivo. Esse recurso é crucial para aprimorar a segurança.
Abaixo estão exemplos de código em Swift e Objective-C demonstrando como salvar e recuperar uma string para/de um chaveiro, aproveitando esses recursos de segurança. Os exemplos mostram especificamente como configurar o controle de acesso para exigir autenticação do Touch ID e garantir que os dados sejam acessíveis apenas no dispositivo em que foram configurados, sob a condição de que um código de acesso do dispositivo esteja configurado.
Abaixo estão exemplos de código em Swift e Objective-C demonstrando como salvar e recuperar uma string do chaveiro, aproveitando esses recursos de segurança. Os exemplos mostram especificamente como configurar o controle de acesso para exigir autenticação do Touch ID e garantir que os dados sejam acessíveis apenas no dispositivo em que foram configurados, sob a condição de que um código de acesso do dispositivo esteja configurado.
{% tabs %}
{% tab title="Swift" %}
@ -818,7 +822,34 @@ if status == noErr {
```
{% endtab %}
{% tab title = "Objective-C" %}
{% tab title="Objective-C" %}
## Introdução
O iOS é um sistema operacional móvel desenvolvido pela Apple Inc. exclusivamente para seus dispositivos. O iOS é conhecido por sua segurança robusta, o que torna o pentesting de aplicativos iOS um desafio interessante.
## Ferramentas de Pentesting para iOS
Existem várias ferramentas de pentesting disponíveis para testar a segurança de aplicativos iOS. Algumas das ferramentas populares incluem:
- **Burp Suite**: Uma ferramenta poderosa para testar a segurança de aplicativos móveis, incluindo aplicativos iOS.
- **MobSF (Mobile Security Framework)**: Uma estrutura automatizada de teste de segurança para aplicativos móveis que suporta testes de aplicativos iOS.
- **Needle**: Uma estrutura de injeção de dependência para testar aplicativos iOS.
- **Cycript**: Uma ferramenta de depuração e exploração interativa para aplicativos iOS.
## Metodologia de Pentesting para iOS
Ao realizar pentesting em aplicativos iOS, é importante seguir uma metodologia bem definida. Alguns passos comuns incluem:
1. **Coleta de Informações**: Compreender o aplicativo e suas funcionalidades.
2. **Análise Estática**: Analisar o código do aplicativo em busca de vulnerabilidades.
3. **Análise Dinâmica**: Testar o aplicativo em tempo de execução para identificar possíveis vulnerabilidades.
4. **Testes de Segurança**: Realizar testes de segurança, como testes de autenticação, autorização, criptografia, etc.
5. **Relatório de Vulnerabilidades**: Documentar e relatar todas as vulnerabilidades encontradas durante o teste.
Lembre-se de sempre obter permissão adequada antes de realizar pentesting em aplicativos iOS para garantir conformidade legal e ética.
{% endtab %}
```objectivec
// 1. create AccessControl object that will represent authentication settings
CFErrorRef *err = nil;
@ -874,23 +905,27 @@ let password = String(data: queryResult as! Data, encoding: .utf8)!
```
{% endtab %}
{% tab title = "Objective-C" %}
{% tab title="Objective-C" %}
## Introdução
O Objective-C é uma linguagem de programação amplamente utilizada para o desenvolvimento de aplicativos iOS. Nesta seção, discutiremos algumas técnicas de teste de penetração específicas para aplicativos iOS escritos em Objective-C.
O Objective-C é uma linguagem de programação amplamente utilizada para o desenvolvimento de aplicativos iOS. Nesta seção, discutiremos algumas das vulnerabilidades de segurança comuns associadas ao desenvolvimento de aplicativos iOS usando Objective-C.
### Ferramentas e Ambiente
## Injeção de Código
Para realizar testes de penetração em aplicativos iOS escritos em Objective-C, você pode usar ferramentas como o **Cycript** para inspecionar e manipular aplicativos em tempo de execução, o **Clutch** para descriptografar aplicativos iOS, e o **Hopper Disassembler** para analisar o código do aplicativo.
A injeção de código é uma técnica comum usada por hackers para inserir e executar código malicioso em um aplicativo iOS. Isso pode ser feito explorando vulnerabilidades no código Objective-C do aplicativo.
### Teste de Segurança
## Armazenamento Inseguro de Dados
Durante os testes de penetração em aplicativos iOS escritos em Objective-C, é importante verificar a presença de vulnerabilidades comuns, como **injeção de código**, **armazenamento inseguro de dados**, **falta de criptografia adequada** e **falta de validação de entrada**.
O armazenamento inseguro de dados ocorre quando informações confidenciais, como senhas ou chaves de API, são armazenadas de forma insegura no aplicativo iOS. Isso pode levar a vazamentos de dados e comprometer a segurança do aplicativo.
### Considerações Finais
## Comunicação Insegura
Ao realizar testes de penetração em aplicativos iOS escritos em Objective-C, é essencial ter um bom entendimento da linguagem Objective-C, bem como das práticas recomendadas de segurança para o desenvolvimento de aplicativos iOS seguros.
A comunicação insegura ocorre quando os dados são transmitidos de forma não criptografada, tornando-os vulneráveis a ataques de interceptação. É importante garantir que todas as comunicações entre o aplicativo iOS e os servidores sejam seguras e criptografadas.
## Conclusão
Ao desenvolver aplicativos iOS em Objective-C, é crucial estar ciente das vulnerabilidades de segurança comuns e implementar práticas recomendadas para proteger os dados dos usuários e a integridade do aplicativo.
{% endtab %}
```objectivec
@ -913,18 +948,21 @@ NSLog(@"%@", password);
NSLog(@"Something went wrong");
}
```
{% endtab %}
{% endtabs %}
### Detecção
O uso de frameworks em um aplicativo também pode ser detectado analisando a lista de bibliotecas dinâmicas compartilhadas do binário do aplicativo. Isso pode ser feito usando `otool`:
```bash
$ otool -L <AppName>.app/<AppName>
```
Se o `LocalAuthentication.framework` for usado em um aplicativo, a saída conterá ambas as seguintes linhas (lembre-se de que o `LocalAuthentication.framework` usa o `Security.framework` por baixo dos panos):
Se o `LocalAuthentication.framework` for usado em um aplicativo, a saída conterá ambas as seguintes linhas (lembre-se de que o `LocalAuthentication.framework` usa o `Security.framework` internamente):
```bash
/System/Library/Frameworks/LocalAuthentication.framework/LocalAuthentication
/System/Library/Frameworks/Security.framework/Security
```
Se o `Security.framework` for usado, apenas o segundo será mostrado.
Se for usado o `Security.framework`, apenas o segundo será mostrado.
### Bypass do Framework de Autenticação Local
@ -973,7 +1011,7 @@ dispatch_async(dispatch_get_main_queue(), ^{
}
}
```
Para alcançar a **burla** da Autenticação Local, é escrito um script Frida. Este script visa a verificação do **evaluatePolicy**, interceptando o seu retorno para garantir que ele retorne **success=1**. Ao alterar o comportamento do retorno, a verificação de autenticação é efetivamente burlada.
Para alcançar a **burla** da Autenticação Local, é escrito um script Frida. Este script tem como alvo a verificação **evaluatePolicy**, interceptando o seu retorno para garantir que ele retorne **success=1**. Ao alterar o comportamento do retorno, a verificação de autenticação é efetivamente burlada.
O script abaixo é injetado para modificar o resultado do método **evaluatePolicy**. Ele altera o resultado do retorno para sempre indicar sucesso.
```swift
@ -1003,7 +1041,7 @@ frida -U -f com.highaltitudehacks.DVIAswiftv2 --no-pause -l fingerprint-bypass-i
```
## Exposição de Funcionalidades Sensíveis Através de IPC
### Manipuladores de URI Personalizados / Deeplinks / Esquemas Personalizados
### Manipulação de URI Personalizada / Deeplinks / Esquemas Personalizados
{% content-ref url="ios-custom-uri-handlers-deeplinks-custom-schemes.md" %}
[ios-custom-uri-handlers-deeplinks-custom-schemes.md](ios-custom-uri-handlers-deeplinks-custom-schemes.md)
@ -1047,8 +1085,8 @@ frida -U -f com.highaltitudehacks.DVIAswiftv2 --no-pause -l fingerprint-bypass-i
## Comunicação de Rede
É importante verificar se não há comunicação ocorrendo **sem criptografia** e também se o aplicativo está corretamente **validando o certificado TLS** do servidor.\
Para verificar esses tipos de problemas, você pode usar um proxy como o **Burp**:
É importante verificar se não há comunicação ocorrendo **sem criptografia** e também se a aplicação está corretamente **validando o certificado TLS** do servidor.\
Para verificar esse tipo de problema, você pode usar um proxy como o **Burp**:
{% content-ref url="burp-configuration-for-ios.md" %}
[burp-configuration-for-ios.md](burp-configuration-for-ios.md)
@ -1056,30 +1094,30 @@ Para verificar esses tipos de problemas, você pode usar um proxy como o **Burp*
### Verificação de Nome de Host
Um problema comum na validação do certificado TLS é verificar se o certificado foi assinado por uma **CA confiável**, mas **não verificar** se **o nome do host** do certificado é o nome do host acessado.\
Para verificar esse problema usando o Burp, após confiar na CA do Burp no iPhone, você pode **criar um novo certificado com o Burp para um nome de host diferente** e usá-lo. Se o aplicativo ainda funcionar, então algo está vulnerável.
Um problema comum na validação do certificado TLS é verificar se o certificado foi assinado por uma **CA confiável**, mas **não verificar** se **o nome do host** do certificado é o nome do host sendo acessado.\
Para verificar esse problema usando o Burp, após confiar na CA do Burp no iPhone, você pode **criar um novo certificado com o Burp para um nome de host diferente** e usá-lo. Se a aplicação ainda funcionar, então algo está vulnerável.
### 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 servirá seu próprio certificado.**\
Se uma aplicação estiver usando corretamente a Pinagem SSL, então a aplicação só funcionará se o certificado for o esperado. Ao testar uma aplicação **isso pode ser um problema, pois o Burp servirá 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 [**Burp Mobile Assistant**](https://portswigger.net/burp/documentation/desktop/mobile/config-ios-device)
Você também pode usar o `ios sslpinning disable` do **objection**
Você também pode usar `ios sslpinning disable` do **objection**
## Diversos
* Em **`/System/Library`** você pode encontrar os frameworks instalados no telefone usados pelas aplicações do sistema
* As aplicações instaladas pelo usuário na App Store estão localizadas dentro de **`/User/Applications`**
* E o **`/User/Library`** contém dados salvos pelas aplicações de nível de usuário
* Você pode acessar **`/User/Library/Notes/notes.sqlite`** para ler as notas salvas dentro do aplicativo.
* Dentro da pasta de uma aplicação instalada (**`/User/Applications/<APP ID>/`**) você pode encontrar alguns arquivos interessantes:
* Você pode acessar **`/User/Library/Notes/notes.sqlite`** para ler as notas salvas dentro da aplicação.
* Dentro da pasta de uma aplicação instalada (**`/User/Applications/<ID DO APP>/`**) você pode encontrar alguns arquivos interessantes:
* **`iTunesArtwork`**: O ícone usado pelo aplicativo
* **`iTunesMetadata.plist`**: Informações do aplicativo usadas na App Store
* **`/Library/*`**: Contém as preferências e cache. Em **`/Library/Cache/Snapshots/*`** você pode encontrar o snapshot realizado pela aplicação antes de enviá-la para segundo plano.
### Hot Patching/Atualização Forçada
Os desenvolvedores podem remotamente **corrigir todas as instalações de seu aplicativo instantaneamente** sem precisar reenviar o aplicativo para a App Store e esperar até que seja aprovado.\
Os desenvolvedores podem remotamente **corrigir todas as instalações de seu aplicativo instantaneamente** sem precisar reenviar o aplicativo para a App Store e esperar pela aprovação.\
Para esse fim, geralmente é usado o [**JSPatch**](https://github.com/bang590/JSPatch)**.** Mas existem outras opções também, como [Siren](https://github.com/ArtSabintsev/Siren) e [react-native-appstore-version-checker](https://www.npmjs.com/package/react-native-appstore-version-checker).\
**Este é um mecanismo perigoso que poderia ser abusado por SDKs de terceiros maliciosos, portanto é recomendado verificar qual método é usado para atualização automática (se houver) e testá-lo.** Você pode tentar baixar uma versão anterior do aplicativo para esse fim.
@ -1087,11 +1125,11 @@ Para esse fim, geralmente é usado o [**JSPatch**](https://github.com/bang590/JS
Um desafio significativo com **SDKs de terceiros** é a **falta de controle granular** sobre suas funcionalidades. Os desenvolvedores se deparam com uma escolha: integrar o SDK e aceitar todas as suas funcionalidades, incluindo possíveis vulnerabilidades de segurança e preocupações com privacidade, ou renunciar completamente aos seus benefícios. Muitas vezes, os desenvolvedores não conseguem corrigir vulnerabilidades dentro desses SDKs por conta própria. Além disso, à medida que os SDKs ganham confiança na comunidade, alguns podem começar a conter malware.
Os serviços fornecidos por SDKs de terceiros podem incluir rastreamento de comportamento do usuário, exibição de anúncios ou aprimoramentos da experiência do usuário. No entanto, isso introduz um risco, pois os desenvolvedores podem não estar totalmente cientes do código executado por essas bibliotecas, levando a possíveis riscos de privacidade e segurança. É crucial limitar as informações compartilhadas com serviços de terceiros ao que é necessário e garantir que nenhum dado sensível seja exposto.
Os serviços fornecidos por SDKs de terceiros podem incluir rastreamento de comportamento do usuário, exibição de anúncios ou aprimoramentos da experiência do usuário. No entanto, isso introduz um risco, pois os desenvolvedores podem não estar totalmente cientes do código executado por essas bibliotecas, levando a potenciais riscos de privacidade e segurança. É crucial limitar as informações compartilhadas com serviços de terceiros ao que é necessário e garantir que nenhum dado sensível seja exposto.
A implementação de serviços de terceiros geralmente vem em duas formas: uma biblioteca independente ou um SDK completo. Para proteger a privacidade do usuário, quaisquer dados compartilhados com esses serviços devem ser **anonimizados** para evitar a divulgação de Informações Pessoalmente Identificáveis (IPI).
Para identificar as bibliotecas que um aplicativo utiliza, o comando **`otool`** pode ser empregado. Esta ferramenta deve ser executada contra o aplicativo e cada biblioteca compartilhada que ele utiliza para descobrir bibliotecas adicionais.
Para identificar as bibliotecas que uma aplicação utiliza, o comando **`otool`** pode ser empregado. Esta ferramenta deve ser executada contra a aplicação e cada biblioteca compartilhada que ela utiliza para descobrir bibliotecas adicionais.
```bash
otool -L <application_path>
```
@ -1123,10 +1161,10 @@ otool -L <application_path>
* [https://github.com/authenticationfailure/WheresMyBrowser.iOS](https://github.com/authenticationfailure/WheresMyBrowser.iOS)
* [https://github.com/nabla-c0d3/ssl-kill-switch2](https://github.com/nabla-c0d3/ssl-kill-switch2)
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (45).png" alt=""><figcaption></figcaption></figure>
\
Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir e **automatizar fluxos de trabalho** facilmente com as ferramentas comunitárias mais avançadas do mundo.\
Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir e **automatizar fluxos de trabalho** facilmente com as **ferramentas comunitárias mais avançadas do mundo**.\
Tenha Acesso Hoje:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
@ -1138,8 +1176,8 @@ Tenha Acesso Hoje:
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)
* 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 [**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 nos siga 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).