macOS NVRAM
Tip
Μάθε & εξασκήσου στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθε & εξασκήσου στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθε & εξασκήσου στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Περιηγήσου στον πλήρη κατάλογο HackTricks Training για τα assessment tracks (ARTA/GRTA/AzRTA) και στο Linux Hacking Expert (LHE).
Υποστήριξε το HackTricks
- Δες τα subscription plans!
- Γίνε μέλος της 💬 Discord group, της telegram group, ακολούθησε το @hacktricks_live στο X/Twitter, ή δες τη LinkedIn page και το YouTube channel.
- Μοιράσου hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Βασικές Πληροφορίες
NVRAM (Μη πτητική μνήμη τυχαίας προσπέλασης) αποθηκεύει ρυθμίσεις εκκίνησης και σε επίπεδο firmware στο υλικό των Mac. Οι πιο κρίσιμες για την ασφάλεια μεταβλητές περιλαμβάνουν:
| Μεταβλητή | Σκοπός |
|---|---|
boot-args | Παράμετροι εκκίνησης του kernel (debug flags, verbose boot, AMFI bypass) |
csr-active-config | SIP configuration bitmask — ελέγχει ποιες προστασίες είναι ενεργές |
SystemAudioVolume | Ένταση ήχου κατά την εκκίνηση |
prev-lang:kbd | Προτιμώμενη γλώσσα / διάταξη πληκτρολογίου |
efi-boot-device-data | Επιλογή συσκευής εκκίνησης |
Σε σύγχρονα Mac, οι μεταβλητές NVRAM χωρίζονται μεταξύ system μεταβλητών (προστατευόμενων από Secure Boot) και non-system μεταβλητών. Τα Apple Silicon Macs χρησιμοποιούν ένα Secure Storage Component (SSC) για να δέσουν κρυπτογραφικά την κατάσταση του NVRAM με την αλυσίδα εκκίνησης.
Πρόσβαση στο NVRAM από τον χώρο χρήστη
Ανάγνωση NVRAM
# List all NVRAM variables
nvram -p
# Read a specific variable
nvram boot-args
# Export all NVRAM as XML plist
nvram -xp
# Read SIP configuration
nvram csr-active-config
csrutil status
Εγγραφή NVRAM
Η εγγραφή μεταβλητών NVRAM απαιτεί δικαιώματα root και, για συστημικά κρίσιμες μεταβλητές (όπως csr-active-config), η διαδικασία πρέπει να έχει συγκεκριμένες σημαίες υπογραφής κώδικα ή entitlements:
# Set boot-args (requires root)
sudo nvram boot-args="debug=0x144 kcsuffix=development"
# Clear boot-args
sudo nvram -d boot-args
# Set a custom variable
sudo nvram MyCustomVar="persistence-value"
Σημαία CS_NVRAM_UNRESTRICTED
Τα Binaries με τη σημαία code-signing CS_NVRAM_UNRESTRICTED μπορούν να τροποποιήσουν μεταβλητές NVRAM που κανονικά προστατεύονται ακόμη και από τον root.
Εύρεση NVRAM-Unrestricted Binaries
# Check code signing flags for a binary
codesign -dvvv /usr/sbin/nvram 2>&1 | grep "flags="
Επιπτώσεις Ασφαλείας
Αποδυνάμωση του SIP μέσω NVRAM
Εάν ένας επιτιθέμενος μπορεί να γράψει σε NVRAM (είτε μέσω ενός παραβιασμένου NVRAM-unrestricted binary είτε εκμεταλλευόμενος κάποια ευπάθεια), μπορεί να τροποποιήσει το csr-active-config ώστε να απενεργοποιήσει τις προστασίες SIP στην επόμενη εκκίνηση:
# SIP configuration is a bitmask stored in NVRAM
# Each bit controls a different SIP protection:
# Bit 0 (0x1): Filesystem protection
# Bit 1 (0x2): Kext signing
# Bit 2 (0x4): Task-for-pid restriction
# Bit 3 (0x8): Unrestricted filesystem
# Bit 4 (0x10): Apple Internal (debug)
# Bit 5 (0x20): Unrestricted DTrace
# Bit 6 (0x40): Unrestricted NVRAM
# Bit 7 (0x80): Device configuration
# Current SIP configuration
nvram csr-active-config | xxd
# On older hardware, a compromised NVRAM-unrestricted binary could:
# nvram csr-active-config=%7f%00%00%00 # Disable most SIP protections
Warning
Σε σύγχρονα Apple Silicon Macs, η Secure Boot chain επικυρώνει τις αλλαγές στο NVRAM και αποτρέπει την τροποποίηση του SIP κατά την εκτέλεση. Οι αλλαγές του
csr-active-configεφαρμόζονται μόνο μέσω του recoveryOS. Ωστόσο, σε Intel Macs ή συστήματα με reduced security mode, η χειραγώγηση του NVRAM μπορεί ακόμα να αποδυναμώσει το SIP.
Ενεργοποίηση Kernel Debugging
# Enable kernel debug flags via boot-args
sudo nvram boot-args="debug=0x144"
# Common debug flags:
# 0x01 DB_HALT — Wait for debugger at boot
# 0x04 DB_KPRT — Send kernel printf to serial
# 0x40 DB_KERN_DUMP — Dump kernel core on NMI
# 0x100 DB_REBOOT_POST_PANIC — Reboot after panic
# Use development kernel
sudo nvram boot-args="kcsuffix=development"
Μόνιμη παρουσία στο firmware
Οι τροποποιήσεις του NVRAM επιβιώνουν την επανεγκατάσταση του OS — παραμένουν στο επίπεδο του firmware. Ένας επιτιθέμενος μπορεί να γράψει προσαρμοσμένες μεταβλητές NVRAM που ένας μηχανισμός επίμονης παρουσίας διαβάζει κατά την εκκίνηση:
# Write a persistence marker
nvram attacker-payload-config="base64_encoded_config_here"
# A startup script or LaunchDaemon could read this:
nvram attacker-payload-config 2>/dev/null && /path/to/payload
Caution
Η μόνιμη αποθήκευση στο NVRAM επιβιώνει από διαγραφές δίσκου και επανεγκαταστάσεις του OS. Απαιτεί PRAM/NVRAM reset (Command+Option+P+R on Intel Macs) ή DFU restore (Apple Silicon) για να καθαριστεί.
AMFI Bypass
Το όρισμα εκκίνησης amfi_get_out_of_my_way=1 απενεργοποιεί την Apple Mobile File Integrity, επιτρέποντας την εκτέλεση unsigned code:
# This requires NVRAM write access AND reduced security boot:
sudo nvram boot-args="amfi_get_out_of_my_way=1"
Πραγματικά CVE
| CVE | Περιγραφή |
|---|---|
| CVE-2020-9839 | Χειρισμός του NVRAM που επιτρέπει επίμονη SIP bypass |
| CVE-2019-8779 | Μόνιμη παρουσία NVRAM σε επίπεδο firmware σε T2 Macs |
| CVE-2022-22583 | PackageKit ευπάθεια σχετική με NVRAM που οδηγεί σε privilege escalation |
| CVE-2020-10004 | Λογικό σφάλμα στον χειρισμό του NVRAM που επιτρέπει τροποποίηση του συστήματος |
Enumeration Script
#!/bin/bash
echo "=== NVRAM Security Audit ==="
# Current SIP status
echo -e "\n[*] SIP Status:"
csrutil status
# Current boot-args
echo -e "\n[*] Boot Arguments:"
nvram boot-args 2>/dev/null || echo " (none set)"
# All NVRAM variables
echo -e "\n[*] All NVRAM Variables:"
nvram -p | grep -v "^$" | wc -l
echo " variables total"
# Security-relevant variables
echo -e "\n[*] Security-Relevant Variables:"
for var in csr-active-config boot-args StartupMute SystemAudioVolume efi-boot-device; do
echo " $var: $(nvram "$var" 2>/dev/null || echo 'not set')"
done
# Check for custom (non-Apple) variables
echo -e "\n[*] Non-Standard Variables (potential persistence):"
nvram -p | grep -v "^$" | grep -vE "^(SystemAudioVolume|boot-args|csr-active-config|prev-lang|LocationServicesEnabled|fmm-mobileme-token|bluetoothInternalControllerAddress|bluetoothActiveControllerInfo|SystemAudioVolumeExtension|efi-)" | head -20
Αναφορές
- Apple Platform Security Guide — Διαδικασία εκκίνησης
- Apple Security Updates — CVEs σχετικά με NVRAM
- Duo Labs — Ασφάλεια Apple T2
Tip
Μάθε & εξασκήσου στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθε & εξασκήσου στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθε & εξασκήσου στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Περιηγήσου στον πλήρη κατάλογο HackTricks Training για τα assessment tracks (ARTA/GRTA/AzRTA) και στο Linux Hacking Expert (LHE).
Υποστήριξε το HackTricks
- Δες τα subscription plans!
- Γίνε μέλος της 💬 Discord group, της telegram group, ακολούθησε το @hacktricks_live στο X/Twitter, ή δες τη LinkedIn page και το YouTube channel.
- Μοιράσου hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.


