hacktricks/mobile-pentesting/ios-pentesting/ios-custom-uri-handlers-deeplinks-custom-schemes.md

93 lines
6.3 KiB
Markdown
Raw Normal View History

2022-04-28 16:01:33 +00:00
<details>
2024-02-11 01:46:25 +00:00
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
Inne sposoby wsparcia HackTricks:
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>
2024-02-11 01:46:25 +00:00
To jest podsumowanie związanych informacji z [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/)
2021-05-21 16:38:18 +00:00
2024-02-11 01:46:25 +00:00
## Podstawowe informacje
2021-05-21 16:38:18 +00:00
2024-02-11 01:46:25 +00:00
Niestandardowe schematy URL umożliwiają aplikacjom komunikację za pomocą niestandardowego protokołu, jak szczegółowo opisano w [Dokumentacji dla programistów Apple](https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-AppCommunication/Inter-AppCommunication.html#//apple_ref/doc/uid/TP40007072-CH6-SW1). Te schematy muszą być zadeklarowane przez aplikację, która następnie obsługuje przychodzące adresy URL zgodnie z tymi schematami. Ważne jest, aby **sprawdzać wszystkie parametry URL** i **odrzucić wszelkie nieprawidłowe adresy URL**, aby zapobiec atakom przez ten wektor.
2021-05-21 16:38:18 +00:00
2024-02-11 01:46:25 +00:00
Przykładem jest URI `myapp://hostname?data=123876123`, który wywołuje określoną akcję aplikacji. Zauważono podatność w aplikacji Skype Mobile, która umożliwiała nieautoryzowane akcje połączeń za pomocą protokołu `skype://`. Zarejestrowane schematy można znaleźć w pliku `Info.plist` aplikacji w sekcji `CFBundleURLTypes`. Złośliwe aplikacje mogą wykorzystać to, ponownie rejestrując adresy URL w celu przechwycenia poufnych informacji.
2021-05-21 16:38:18 +00:00
2024-02-11 01:46:25 +00:00
### Rejestracja schematów zapytań aplikacji
2021-05-21 16:38:18 +00:00
2024-02-11 01:46:25 +00:00
Od wersji iOS 9.0, aby sprawdzić, czy aplikacja jest dostępna, `canOpenURL:` wymaga zadeklarowania schematów URL w pliku `Info.plist` w sekcji `LSApplicationQueriesSchemes`. Ogranicza to schematy, które aplikacja może zapytać do 50, zwiększając prywatność poprzez zapobieganie wyliczaniu aplikacji.
2024-02-08 03:08:28 +00:00
```xml
<key>LSApplicationQueriesSchemes</key>
2021-05-21 16:38:18 +00:00
<array>
2024-02-11 01:46:25 +00:00
<string>url_scheme1</string>
<string>url_scheme2</string>
2021-05-21 16:38:18 +00:00
</array>
```
2024-02-11 01:46:25 +00:00
### Testowanie obsługi i walidacji adresów URL
2021-05-21 16:38:18 +00:00
2024-02-11 01:46:25 +00:00
Programiści powinni sprawdzić konkretne metody w kodzie źródłowym, aby zrozumieć konstrukcję i walidację ścieżki adresu URL, takie jak `application:didFinishLaunchingWithOptions:` i `application:openURL:options:`. Na przykład, Telegram korzysta z różnych metod otwierania adresów URL:
2021-05-21 16:38:18 +00:00
```swift
func application(_ application: UIApplication, open url: URL, sourceApplication: String?) -> Bool {
2024-02-11 01:46:25 +00:00
self.openUrl(url: url)
return true
2021-05-21 16:38:18 +00:00
}
func application(_ application: UIApplication, open url: URL, sourceApplication: String?,
annotation: Any) -> Bool {
2024-02-11 01:46:25 +00:00
self.openUrl(url: url)
return true
2021-05-21 16:38:18 +00:00
}
func application(_ app: UIApplication, open url: URL,
options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
2024-02-11 01:46:25 +00:00
self.openUrl(url: url)
return true
2021-05-21 16:38:18 +00:00
}
func application(_ application: UIApplication, handleOpen url: URL) -> Bool {
2024-02-11 01:46:25 +00:00
self.openUrl(url: url)
return true
2021-05-21 16:38:18 +00:00
}
```
2024-02-11 01:46:25 +00:00
### Testowanie żądań URL do innych aplikacji
2021-05-21 16:38:18 +00:00
2024-02-11 01:46:25 +00:00
Metody takie jak `openURL:options:completionHandler:` są kluczowe do otwierania adresów URL w celu interakcji z innymi aplikacjami. Zidentyfikowanie użycia takich metod w kodzie źródłowym aplikacji jest kluczowe dla zrozumienia komunikacji zewnętrznej.
2021-05-21 16:38:18 +00:00
2024-02-11 01:46:25 +00:00
### Testowanie przestarzałych metod
2021-05-21 16:38:18 +00:00
2024-02-11 01:46:25 +00:00
Metody obsługujące otwieranie adresów URL, takie jak `application:handleOpenURL:` i `openURL:`, które są przestarzałe, powinny być zidentyfikowane i przeanalizowane pod kątem implikacji dla bezpieczeństwa.
2021-05-21 16:38:18 +00:00
2024-02-11 01:46:25 +00:00
### Fuzzowanie schematów URL
2021-05-21 16:38:18 +00:00
2024-02-11 01:46:25 +00:00
Fuzzowanie schematów URL może pomóc w identyfikacji błędów korupcji pamięci. Narzędzia takie jak [Frida](https://codeshare.frida.re/@dki/ios-url-scheme-fuzzing/) mogą zautomatyzować ten proces, otwierając adresy URL z różnymi ładunkami, aby monitorować ewentualne awarie, jak to zostało pokazane na przykładzie manipulacji adresami URL w aplikacji iGoat-Swift:
2021-05-21 16:38:18 +00:00
```bash
$ frida -U SpringBoard -l ios-url-scheme-fuzzing.js
[iPhone::SpringBoard]-> fuzz("iGoat", "iGoat://?contactNumber={0}&message={0}")
Watching for crashes from iGoat...
No logs were moved.
Opened URL: iGoat://?contactNumber=0&message=0
```
2024-02-11 01:46:25 +00:00
## Odwołania
2024-02-08 03:08:28 +00:00
* [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/)
2022-04-28 16:01:33 +00:00
<details>
2024-02-11 01:46:25 +00:00
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
Inne sposoby wsparcia HackTricks:
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
2022-04-28 16:01:33 +00:00
</details>