iOS UIPasteboard

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

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: e pasteboardWithUniqueName 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: e pasteboardWithUniqueName 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

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

Last updated