{{#include ../../banners/hacktricks-training.md}} Udostępnianie danych w ramach i między aplikacjami na urządzeniach iOS jest ułatwione dzięki mechanizmowi [`UIPasteboard`](https://developer.apple.com/documentation/uikit/uipasteboard), który dzieli się na dwie główne kategorie: - **Ogólny schowek systemowy**: Służy do udostępniania danych **w dowolnej aplikacji** i jest zaprojektowany tak, aby utrzymywać dane po ponownym uruchomieniu urządzenia i odinstalowaniu aplikacji, co jest dostępne 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 czasem życia 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łby 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` do tworzenia **niestandardowych schowków**. 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 wywołania przestarzałej 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 generalPasteboard pod kątem zmian i wyświetla nowe dane. Oto prosty przykład skryptu JavaScript, inspirowany podejściem objection, do odczytu i rejestrowania zmian ze schowka co 5 sekund: ```javascript 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) ``` ## Odniesienia - [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8](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://hackmd.io/@robihamanto/owasp-robi) - [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0073/](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0073/) {{#include ../../banners/hacktricks-training.md}}