mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-21 02:23:30 +00:00
109 lines
10 KiB
Markdown
109 lines
10 KiB
Markdown
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
- Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|
|
|
- Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
|
|
- Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
|
|
- **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
|
|
- **Compartilhe suas técnicas de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
|
|
</details>
|
|
|
|
|
|
O [`UIPasteboard`](https://developer.apple.com/documentation/uikit/uipasteboard) permite compartilhar dados dentro de um aplicativo e de um aplicativo para outros aplicativos. Existem dois tipos de pasteboards:
|
|
|
|
* **pasteboard geral do sistema**: para compartilhar dados com **qualquer aplicativo**. Persistente por padrão em reinicializações de dispositivos e desinstalações de aplicativos (desde o iOS 10).
|
|
* **pasteboards personalizados / nomeados**: para compartilhar dados **com outro aplicativo** (que possui o mesmo ID de equipe do aplicativo a ser compartilhado) ou com o **próprio aplicativo** (eles estão disponíveis apenas no processo que os cria). Não persistentes por padrão (desde o iOS 10), ou seja, eles existem apenas até que o aplicativo proprietário (criador) seja encerrado.
|
|
|
|
Algumas considerações de segurança:
|
|
|
|
* Os usuários **não podem conceder ou negar permissão** para que os aplicativos leiam o **pasteboard**.
|
|
* Desde o iOS 9, os aplicativos [não podem acessar o pasteboard enquanto estão em segundo plano](https://forums.developer.apple.com/thread/13760), o que mitiga a monitoração do pasteboard em segundo plano.
|
|
* [A Apple adverte sobre pasteboards nomeados persistentes](https://developer.apple.com/documentation/uikit/uipasteboard?language=objc) e **desencoraja seu uso**. Em vez disso, devem ser usados contêineres compartilhados.
|
|
* A partir do iOS 10, há um novo recurso Handoff chamado **Universal Clipboard** que é ativado por padrão. Ele permite que o **conteúdo do pasteboard geral seja transferido automaticamente entre dispositivos**. Este recurso pode ser desativado se o desenvolvedor optar por fazê-lo e também é possível definir uma data e hora de expiração para os dados copiados.
|
|
|
|
Portanto, é importante **verificar se informações confidenciais não estão sendo salvas no pasteboard global**.\
|
|
Também é importante verificar se um **aplicativo não está usando os dados do pasteboard global para executar ações**, pois um aplicativo malicioso pode adulterar esses dados.
|
|
|
|
Um **aplicativo também pode impedir que seus usuários copiem dados confidenciais para a área de transferência** (o que é recomendado).
|
|
|
|
## Análise estática
|
|
|
|
O **pasteboard geral do sistema** pode ser obtido usando [`generalPasteboard`](https://developer.apple.com/documentation/uikit/uipasteboard/1622106-generalpasteboard?language=objc), pesquise o código-fonte ou o binário compilado para este método. O uso do pasteboard geral do sistema deve ser evitado ao lidar com dados confidenciais.
|
|
|
|
**Pasteboards personalizados** podem ser criados com [`pasteboardWithName:create:`](https://developer.apple.com/documentation/uikit/uipasteboard/1622074-pasteboardwithname?language=objc) ou [`pasteboardWithUniqueName`](https://developer.apple.com/documentation/uikit/uipasteboard/1622087-pasteboardwithuniquename?language=objc). Verifique se os pasteboards personalizados estão definidos como persistentes, pois isso é obsoleto desde o iOS 10. Deve ser usado um contêiner compartilhado.
|
|
|
|
## Análise dinâmica
|
|
|
|
Intercepte ou rastreie o seguinte:
|
|
|
|
* `generalPasteboard` para o pasteboard geral do sistema.
|
|
* `pasteboardWithName:create:` e `pasteboardWithUniqueName` para pasteboards personalizados.
|
|
|
|
Você também pode interceptar ou rastrear o método obsoleto [`setPersistent:`](https://developer.apple.com/documentation/uikit/uipasteboard/1622096-setpersistent?language=objc) e verificar se ele está sendo chamado.
|
|
|
|
Ao **monitorar** os **pasteboards**, há vários **detalhes** que podem ser **recuperados** dinamicamente:
|
|
|
|
* Obtenha o **nome do pasteboard** interceptando `pasteboardWithName:create:` e inspecionando seus parâmetros de entrada ou `pasteboardWithUniqueName` e inspecionando seu valor de retorno.
|
|
* Obtenha o **primeiro item disponível no pasteboard**: por exemplo, para strings, use o método `string`. Ou use qualquer um dos outros métodos para os [tipos de dados padrão](https://developer.apple.com/documentation/uikit/uipasteboard?language=objc#1654275).
|
|
* Obtenha o **número de itens** com `numberOfItems`.
|
|
* Verifique a **existência de tipos de dados padrão** com os [métodos de conveniência](https://developer.apple.com/documentation/uikit/uipasteboard?language=objc#2107142), por exemplo, `hasImages`, `hasStrings`, `hasURLs` (a partir do iOS 10).
|
|
* Verifique outros tipos de dados (tipicamente UTIs) com [`containsPasteboardTypes:inItemSet:`](https://developer.apple.com/documentation/uikit/uipasteboard/1622100-containspasteboardtypes?language=objc). Você pode inspecionar tipos de dados mais concretos, como uma imagem como public.png e public.tiff ([UTIs](http://web.archive.org/web/20190616231857/https://developer.apple.com/documentation/mobilecoreservices/uttype)) ou dados personalizados, como com.mycompany.myapp.mytype. Lembre-se de que, nesse caso, apenas os aplicativos que _declararam conhecimento_ do tipo são capazes de entender os dados escritos no pasteboard. Recupere-os usando [`itemSetWithPasteboardTypes:`](https://developer.apple.com/documentation/uikit/uipasteboard/1622071-itemsetwithpasteboardtypes?language=objc) e definindo os UTIs correspondentes.
|
|
* Verifique itens excluídos ou expirados interceptando `setItems:options:` e inspecionando suas opções para `UIPasteboardOptionLocalOnly` ou `UIPasteboardOptionExpirationDate`.
|
|
|
|
Se estiver procurando apenas por strings, convém usar o comando **objection** `ios pasteboard monitor`:
|
|
|
|
> Interfere na classe UIPasteboard do iOS e verifica o generalPasteboard a cada 5 segundos em busca de dados. Se novos dados forem encontrados, diferentes da pesquisa anterior, esses dados serão exibidos na tela.
|
|
|
|
Você também pode criar seu próprio monitor de pasteboard que monitora informações específicas, como visto acima.
|
|
|
|
Por exemplo, este script (inspirado no script por trás do monitor de pasteboard do [objection](https://github.com/sensepost/objection/blob/b39ee53b5ba2e9a271797d2f3931d79c46dccfdb/agent/src/ios/pasteboard.ts)) lê os itens do pasteboard a cada 5 segundos, se houver algo novo, ele será impresso:
|
|
```javascript
|
|
const UIPasteboard = ObjC.classes.UIPasteboard;
|
|
const Pasteboard = UIPasteboard.generalPasteboard();
|
|
var items = "";
|
|
var count = Pasteboard.changeCount().toString();
|
|
|
|
setInterval(function () {
|
|
const currentCount = Pasteboard.changeCount().toString();
|
|
const currentItems = Pasteboard.items().toString();
|
|
|
|
if (currentCount === count) { return; }
|
|
|
|
items = currentItems;
|
|
count = currentCount;
|
|
|
|
console.log('[* Pasteboard changed] count: ' + count +
|
|
' hasStrings: ' + Pasteboard.hasStrings().toString() +
|
|
' hasURLs: ' + Pasteboard.hasURLs().toString() +
|
|
' hasImages: ' + Pasteboard.hasImages().toString());
|
|
console.log(items);
|
|
|
|
}, 1000 * 5);
|
|
```
|
|
# Referências
|
|
|
|
{% embed url="https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8" %}
|
|
|
|
|
|
|
|
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
- Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|
|
|
- Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
|
|
- Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
|
|
- **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
|
|
- **Compartilhe suas técnicas de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [repositório hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
|
|
</details>
|