iOS UIPasteboard

Wsparcie dla HackTricks

Udostępnianie danych w ramach i między aplikacjami na urządzeniach iOS jest ułatwione przez mechanizm UIPasteboard, który dzieli się na dwie główne kategorie:

  • Ogólny schowek systemowy: Używany do udostępniania danych z dowolną aplikacją i zaprojektowany tak, aby utrzymywać dane po ponownym uruchomieniu urządzenia i odinstalowaniu aplikacji, funkcja ta jest dostępna od iOS 10.

  • Niestandardowe / nazwane schowki: Służą specjalnie do udostępniania danych w obrębie aplikacji lub z inną aplikacją, która dzieli ten sam identyfikator zespołu, i nie są zaprojektowane do utrzymywania danych poza życiem procesu aplikacji, która je tworzy, zgodnie ze zmianami wprowadzonymi w iOS 10.

Rozważania dotyczące bezpieczeństwa odgrywają znaczącą rolę przy korzystaniu ze schowków. Na przykład:

  • Nie ma mechanizmu, który pozwala użytkownikom zarządzać uprawnieniami aplikacji do dostępu do schowka.

  • Aby zminimalizować ryzyko nieautoryzowanego monitorowania schowka w tle, dostęp jest ograniczony do momentu, gdy aplikacja jest na pierwszym planie (od iOS 9).

  • Użycie trwałych nazwanych schowków jest odradzane na rzecz wspólnych kontenerów z powodu obaw o prywatność.

  • Funkcja Uniwersalny schowek, wprowadzona w iOS 10, umożliwiająca udostępnianie treści między urządzeniami za pośrednictwem ogólnego schowka, może być zarządzana przez programistów w celu ustawienia wygasania danych i wyłączenia automatycznego transferu treści.

Zabezpieczenie, aby wrażliwe informacje nie były przypadkowo przechowywane w globalnym schowku, jest kluczowe. Dodatkowo aplikacje powinny być zaprojektowane tak, aby zapobiegać niewłaściwemu wykorzystaniu danych z globalnego schowka do niezamierzonych działań, a programiści są zachęcani do wdrażania środków zapobiegających kopiowaniu wrażliwych informacji do schowka.

Analiza statyczna

W przypadku analizy statycznej przeszukaj kod źródłowy lub binarny w poszukiwaniu:

  • generalPasteboard, aby zidentyfikować użycie ogólnego schowka systemowego.

  • pasteboardWithName:create: i pasteboardWithUniqueName, aby tworzyć niestandardowe schowki. Sprawdź, czy trwałość jest włączona, chociaż jest to przestarzałe.

Analiza dynamiczna

Analiza dynamiczna polega na podłączaniu lub śledzeniu konkretnych metod:

  • Monitoruj generalPasteboard w celu użycia systemowego.

  • Śledź pasteboardWithName:create: i pasteboardWithUniqueName dla niestandardowych implementacji.

  • Obserwuj przestarzałe wywołania metody setPersistent:, aby sprawdzić ustawienia trwałości.

Kluczowe szczegóły do monitorowania obejmują:

  • Nazwy schowków i zawartość (na przykład sprawdzanie ciągów, adresów URL, obrazów).

  • Liczba elementów i typy danych obecnych, wykorzystując standardowe i niestandardowe kontrole typów danych.

  • Opcje wygasania i lokalne poprzez inspekcję metody setItems:options:.

Przykładem użycia narzędzia monitorującego jest monitor schowka objection, który co 5 sekund sprawdza zmiany w generalPasteboard i wyświetla nowe dane.

Oto prosty przykład skryptu JavaScript, inspirowany podejściem objection, do odczytu i rejestrowania zmian z schowka co 5 sekund:

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

References

Wsparcie HackTricks

Last updated