Skip to content

MASTG-TECH-0134: Monitoramento da Pasteboard

Você pode monitorar a área de transferência para verificar se há dados sensíveis copiados nela. Isso é útil para detectar possíveis vazamentos de dados ou uso indevido da área de transferência em aplicativos iOS.

Obtendo Informações da Área de Transferência

  • Obtenha o nome da área de transferência interceptando pasteboardWithName:create: e inspecionando seus parâmetros de entrada, ou pasteboardWithUniqueName e inspecionando seu valor de retorno.
  • Obtenha o primeiro item disponível na área de transferência: por exemplo, para strings, use o método string. Alternativamente, use qualquer um dos outros métodos para tipos de dados padrão.
  • 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, por exemplo, hasImages, hasStrings, hasURLs (a partir do iOS 10).
  • Verifique outros tipos de dados (normalmente UTIs) com containsPasteboardTypes: inItemSet:. Você pode inspecionar tipos de dados mais concretos, como, por exemplo, uma imagem como public.png e public.tiff (UTIs) ou para dados personalizados, como com.mycompany.myapp.mytype. Lembre-se de que, nesse caso, apenas os aplicativos que declaram conhecimento do tipo são capazes de entender os dados gravados na área de transferência. Isso é o mesmo que vimos na seção Compartilhamento UIActivity)). Recupere-os usando itemSetWithPasteboardTypes: e definindo as UTIs correspondentes.
  • Verifique itens excluídos ou com expiração interceptando setItems:options: e inspecionando suas opções para UIPasteboardOptionLocalOnly ou UIPasteboardOptionExpirationDate.

Monitorando Dados Sensíveis

Se estiver procurando apenas por strings, você pode querer usar o comando ios pasteboard monitor do Objection para iOS:

Conecta-se à classe UIPasteboard do iOS e consulta a generalPasteboard a cada 5 segundos em busca de dados. Se novos dados forem encontrados, diferentes da consulta anterior, esses dados serão exibidos na tela.

Você também pode construir seu próprio monitor de área de transferência que monitore informações específicas, como visto acima.

Por exemplo, este script (inspirado no script por trás do monitor de área de transferência do objection) lê os itens da área de transferência a cada 5 segundos. Se houver algo novo, ele irá imprimir:

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);

Na saída, podemos ver o seguinte:

[* Pasteboard changed] count: 64 hasStrings: true hasURLs: false hasImages: false
(
    {
        "public.utf8-plain-text" = hola;
    }
)
[* Pasteboard changed] count: 65 hasStrings: true hasURLs: true hasImages: false
(
    {
        "public.url" = "https://codeshare.frida.re/";
        "public.utf8-plain-text" = "https://codeshare.frida.re/";
    }
)
[* Pasteboard changed] count: 66 hasStrings: false hasURLs: false hasImages: true
(
    {
        "com.apple.uikit.image" = "<UIImage: 0x1c42b23c0> size {571, 264} orientation 0 scale 1.000000";
        "public.jpeg" = "<UIImage: 0x1c44a1260> size {571, 264} orientation 0 scale 1.000000";
        "public.png" = "<UIImage: 0x1c04aaaa0> size {571, 264} orientation 0 scale 1.000000";
    }
)

Você vê que primeiro um texto foi copiado, incluindo a string "hola". Depois disso, uma URL foi copiada e, finalmente, uma imagem foi copiada. Alguns deles estão disponíveis por meio de diferentes UTIs. Outros aplicativos considerarão essas UTIs para permitir ou não a colagem desses dados.