iOS UIPasteboard

Support 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 do sistema: Esta é usada para compartilhar dados com qualquer aplicativo e é projetada para persistir dados entre reinicializações do dispositivo e desinstalações de aplicativos, um recurso que está 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 mudanças introduzidas no iOS 10.

Considerações de segurança desempenham um papel significativo ao utilizar áreas de transferência. Por exemplo:

  • Não há mecanismo para os usuários gerenciarem permissões de aplicativos 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 a 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 de privacidade.

  • O recurso Clipboard Universal introduzido com o iOS 10, permitindo que o conteúdo seja compartilhado entre dispositivos via a área de transferência geral, pode ser gerenciado pelos desenvolvedores para definir a expiração de 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 global é crucial. Além disso, os aplicativos devem ser projetados para evitar o uso indevido de dados da área de transferência 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.

Análise Estática

Para análise estática, procure no código-fonte ou binário por:

  • generalPasteboard para identificar o uso da área de transferência geral do sistema.

  • pasteboardWithName:create: e pasteboardWithUniqueName para criar áreas de transferência personalizadas. Verifique se a persistência está habilitada, embora isso esteja obsoleto.

Análise Dinâmica

A análise dinâmica envolve a interceptação 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 obsoleto setPersistent: para verificar configurações de persistência.

Detalhes importantes a serem monitorados incluem:

  • Nomes da área de transferência e conteúdos (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 locais apenas inspecionando 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 generalPasteboard 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

Support HackTricks

Last updated