hacktricks/mobile-pentesting/ios-pentesting/ios-uipasteboard.md

91 lines
6.8 KiB
Markdown
Raw Normal View History

2022-04-28 16:01:33 +00:00
<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>
2022-04-28 16:01:33 +00:00
Outras formas de apoiar o HackTricks:
2022-04-28 16:01:33 +00:00
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
2022-04-28 16:01:33 +00:00
</details>
O compartilhamento de dados dentro e entre aplicativos em dispositivos iOS é facilitado pelo mecanismo [`UIPasteboard`](https://developer.apple.com/documentation/uikit/uipasteboard), que é dividido em duas categorias principais:
2022-04-28 16:01:33 +00:00
- **Pasteboard geral em todo o sistema**: Isso é usado para compartilhar dados com **qualquer aplicativo** e é projetado para persistir dados através de reinicializações do dispositivo e desinstalações de aplicativos, um recurso disponível desde o iOS 10.
- **Pasteboards personalizados/nomeados**: Estes são especificamente para compartilhamento de dados **dentro de um aplicativo ou com outro aplicativo** que compartilha o mesmo ID de equipe, e não são projetados para persistir além da vida do processo do aplicativo que os cria, seguindo as alterações introduzidas no iOS 10.
2021-05-21 16:38:18 +00:00
As **considerações de segurança** desempenham um papel significativo ao utilizar os pasteboards. Por exemplo:
- Não há mecanismo para os usuários gerenciarem as permissões do aplicativo para acessar o **pasteboard**.
- Para mitigar o risco de monitoramento não autorizado em segundo plano do pasteboard, o acesso é restrito quando o aplicativo está em primeiro plano (desde o iOS 9).
- O uso de pasteboards nomeados persistentes é desencorajado em favor de contêineres compartilhados devido a preocupações com a privacidade.
- O recurso **Universal Clipboard** introduzido com o iOS 10, permitindo o compartilhamento de conteúdo entre dispositivos via pasteboard geral, pode ser gerenciado pelos desenvolvedores para definir a expiração dos dados e desativar a transferência automática de conteúdo.
2021-05-21 16:38:18 +00:00
Garantir que **informações sensíveis não sejam armazenadas inadvertidamente** no pasteboard global é crucial. Além disso, os aplicativos devem ser projetados para evitar o uso indevido de dados do pasteboard global para ações não intencionais, e os desenvolvedores são incentivados a implementar medidas para evitar a cópia de informações sensíveis para a área de transferência.
2021-05-21 16:38:18 +00:00
### Análise Estática
2021-05-21 16:38:18 +00:00
Para análise estática, pesquise o código-fonte ou binário por:
- `generalPasteboard` para identificar o uso do **pasteboard geral em todo o sistema**.
- `pasteboardWithName:create:` e `pasteboardWithUniqueName` para criar **pasteboards personalizados**. Verifique se a persistência está ativada, embora isso seja obsoleto.
2021-05-21 16:38:18 +00:00
### Análise Dinâmica
2021-05-21 16:38:18 +00:00
A análise dinâmica envolve o hooking ou rastreamento de métodos específicos:
- Monitore `generalPasteboard` para uso em todo o sistema.
- Rastreie `pasteboardWithName:create:` e `pasteboardWithUniqueName` para implementações personalizadas.
- Observe chamadas de método `setPersistent:` obsoletas para verificar as configurações de persistência.
2021-05-21 16:38:18 +00:00
Detalhes-chave a serem monitorados incluem:
- **Nomes** e **conteúdos** do pasteboard (por exemplo, verificando strings, URLs, imagens).
- **Número de itens** e **tipos de dados** presentes, aproveitando verificações de tipos de dados padrão e personalizados.
- Opções de **expiração e somente local** ao inspecionar o método `setItems:options:`.
2021-05-21 16:38:18 +00:00
Um exemplo de uso de ferramenta de monitoramento é o **monitor de pasteboard do objection**, que verifica o generalPasteboard a cada 5 segundos em busca de alterações e exibe os novos dados.
2021-05-21 16:38:18 +00:00
Aqui está um exemplo simples de script JavaScript, inspirado na abordagem do objection, para ler e registrar alterações do pasteboard a cada 5 segundos:
2021-05-21 16:38:18 +00:00
```javascript
const UIPasteboard = ObjC.classes.UIPasteboard;
const Pasteboard = UIPasteboard.generalPasteboard();
var items = "";
var count = Pasteboard.changeCount().toString();
2021-05-21 16:38:18 +00:00
setInterval(function () {
const currentCount = Pasteboard.changeCount().toString();
const currentItems = Pasteboard.items().toString();
2021-05-21 16:38:18 +00:00
if (currentCount === count) { return; }
2021-05-21 16:38:18 +00:00
items = currentItems;
count = currentCount;
2021-05-21 16:38:18 +00:00
console.log('[* Pasteboard changed] count: ' + count +
' hasStrings: ' + Pasteboard.hasStrings().toString() +
' hasURLs: ' + Pasteboard.hasURLs().toString() +
' hasImages: ' + Pasteboard.hasImages().toString());
console.log(items);
2021-05-21 16:38:18 +00:00
}, 1000 * 5);
2021-05-21 16:38:18 +00:00
```
## Referências
2022-04-28 16:01:33 +00:00
* [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8)
* [https://hackmd.io/@robihamanto/owasp-robi](https://hackmd.io/@robihamanto/owasp-robi)
* [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0073/](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0073/)
2022-04-28 16:01:33 +00:00
<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>
2022-04-28 16:01:33 +00:00
Outras formas de apoiar o HackTricks:
2022-04-28 16:01:33 +00:00
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
2022-04-28 16:01:33 +00:00
</details>