7.4 KiB
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras maneiras de apoiar o HackTricks:
- Se você quiser ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF Confira os PLANOS DE ASSINATURA!
- Adquira o swag oficial do PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-nos no Twitter 🐦 @carlospolopm.
- Compartilhe seus truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
{% embed url="https://websec.nl/" %}
O compartilhamento de dados dentro e entre aplicativos em dispositivos iOS é facilitado pelo mecanismo UIPasteboard
, que é dividido em duas categorias principais:
- Área de transferência geral em todo o sistema: Esta é usada para compartilhar dados com qualquer aplicativo e é projetada para persistir dados através de reinicializações do dispositivo e desinstalações de aplicativos, um recurso disponível desde o iOS 10.
- Áreas de transferência personalizadas/nomeadas: Estas 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 projetadas para persistir além da vida do processo do aplicativo que as cria, seguindo as alterações introduzidas no iOS 10.
As considerações de segurança desempenham um papel significativo ao utilizar as áreas de transferência. Por exemplo:
- Não há mecanismo para os usuários gerenciarem as permissões do aplicativo para acessar a área de transferência.
- Para mitigar o risco de monitoramento não autorizado em segundo plano da área de transferência, o acesso é restrito quando o aplicativo está em primeiro plano (desde o iOS 9).
- O uso de áreas de transferência nomeadas persistentes é desencorajado em favor de contêineres compartilhados devido a preocupações com a privacidade.
- O recurso Área de Transferência Universal introduzido com o iOS 10, permitindo o compartilhamento de conteúdo entre dispositivos via área de transferência geral, pode ser gerenciado pelos desenvolvedores para definir a expiração dos dados e desativar a transferência automática de conteúdo.
Garantir que informações sensíveis não sejam armazenadas inadvertidamente na área de transferência geral é crucial. Além disso, os aplicativos devem ser projetados para evitar o uso indevido de dados da área de transferência geral 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.
Análise Estática
Para análise estática, pesquise o código-fonte ou binário por:
generalPasteboard
para identificar o uso da área de transferência geral em todo o sistema.pasteboardWithName:create:
epasteboardWithUniqueName
para criar áreas de transferência personalizadas. Verifique se a persistência está ativada, embora isso seja obsoleto.
Análise Dinâmica
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:
epasteboardWithUniqueName
para implementações personalizadas. - Observe chamadas de método
setPersistent:
obsoletas para verificar as configurações de persistência.
Detalhes-chave a serem monitorados incluem:
- Nomes e conteúdos da área de transferência (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:
.
Um exemplo de uso de ferramenta de monitoramento é o monitor de área de transferência do objection, que verifica a área de transferência geral a cada 5 segundos em busca de alterações e exibe os novos dados.
Aqui está um exemplo simples de script JavaScript, inspirado na abordagem do objection, para ler e registrar alterações da área de transferência a cada 5 segundos:
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
- 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://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0073/
{% embed url="https://websec.nl/" %}
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras maneiras de apoiar o HackTricks:
- Se você deseja ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF Confira os PLANOS DE ASSINATURA!
- Adquira o swag oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-nos no Twitter 🐦 @carlospolopm.
- Compartilhe seus truques de hacking enviando PRs para os HackTricks e HackTricks Cloud repositórios do github.