79 lines
4.6 KiB
Markdown

{{#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}}