Die System Integrity Protection (SIP)

  • Die System Integrity Protection oder abgekürzt SIP ist eine Sicherheitstechnik von OS X / macOS, die Apple mit El Capitan eingeführt hat. Sie verhindert das Verändern von Systemdateien durch den User (auch den Root-Benutzer) und das Laden/Ausführen von nicht-Apple-signierten Apps/Prozessen.

    Um OS X auf deinem Nicht-Apple-Gerät zu installieren, muss die SIP – zumindest in Teilen – abgeschaltet werden, da z.B. unsignierte Kexte für Netzwerk und Audio und auch die FakeSMC.kext geladen werden müssen.

    Die SIP besteht aus einer Bitmaske mit 9 Bits, von denen wir normalerweise 7 verwenden, mit der man wie mit Schaltern einzelne Funktionen der SIP an- oder abschalten kann.

    Hier die Funktionen der ersten 7 Bits:
    Haben alle Bits den Wert 0 – alle Schalter auf aus – ist die SIP vollständig aktiviert. Haben alle Bits den Wert 1 – alle Schalter auf an – ist die SIP vollständig deaktiviert.
    Schreiben wir die Binärzahl auf, sieht das folgendermaßen aus:


    Bit 1 CSR_ALLOW_UNTRUSTED_KEXTSErlaubt das Laden unsignierter Kexts
    Bit 2 CSR_ALLOW_UNRESTRICTED_FS Erlaubt die uneingeschränkte Nutzung des Dateisystems
    Bit 3 CSR_ALLOW_TASK_FOR_PID Erlaubt das Injecten von Code
    Bit 4 CSR_ALLOW_KERNEL_DEBUGGER Erlaubt das Ausführen von Kernel Debuggern
    Bit 5 CSR_ALLOW_APPLE_INTERNAL Eine weitere Prüfinstanz, welche unsignierte Kexte blocken kann
    Bit 6 CSR_ALLOW_UNRESTRICTED_DTRACE Erlaubt das Ausführen von dtrace-basierenden Monitoring & Reporting Tools
    Bit 7 CSR_ALLOW_UNRESTRICTED_NVRAM Erlaubt das Ändern von NVRAM-Einträgen
    SIP aktiviert SIP deakiviert
    %000 0000 %111 1111


    Im Binärzahlensystem hat das erste Bit den Wert 1, das zweite den Wert 2, das dritte 4, das vierte 8 usw. Das erste Bit steht rechts, links davon folgen Bit 2, dann Bit 3 usw. Um eine Zahl als Binärzahl zu kennzeichnen, wird sie mit einem Präfix oder einem Suffix versehen, z.B. 1001b oder %1001.
    Im Hexadezimalen Zahlenbereich haben wir die Ziffer 0-9 wie im dezimalen Zahlenbereich, danach folgen die Buchstaben A-F. Die Dezimalzahl 10 ist also die Hexadezimalzahl A, die 11 B, die 12 C, die 13 D, die 14 E und die 15 F. Mit diesen 16 Ziffern – also von 0-F – können wir genau vier Bits darstellen (auch Nibble genannt). Da ein Byte 8 Bits umfasst, brauchen wir zwei hexadezimale Ziffern, um ein Byte darstellen zu können (ein Byte = zwei Nibble). Um eine Zahl als Hexadezimalzahl zu kennzeichnen, wird sie mit einem Präfix oder einem Suffix versehen, z.B. 1Fh oder 0x1F.



    binär
    Bit4
    binär
    Bit3
    binär
    Bit2
    binär
    Bit1
    dezimal hexadezimal

    0

    0

    0

    0

    0

    0

    0

    0

    0

    1

    1

    1

    0

    0

    1

    0

    2

    2

    0

    0

    1

    1

    3

    3

    0

    1

    0

    0

    4

    4

    0

    1

    0

    1

    5

    5

    0

    1

    1

    0

    6

    6

    0

    1

    1

    1

    7

    7

    1

    0

    0

    0

    8

    8

    1

    0

    0

    1

    9

    9

    1

    0

    1

    0

    10

    A

    1

    0

    1

    1

    11

    B

    1

    1

    0

    0

    12

    C

    1

    1

    0

    1

    13

    D

    1

    1

    1

    0

    14

    E

    1

    1

    1

    1

    15

    F


    Die Tabelle zeigt in den linken vier Spalten die möglichen Werte der einzelnen Bits eines Nibbles, daneben stehen die entsprechenden Werte dezimal und hexadezimal.

    Für Clover (hexadezimal) oder Ozmosis (dezimal) müssen wir die Binärwerte umrechnen.


    Dezimal:
    Ist die SIP aktiviert ist das einfach: 0.
    Ist die SIP komplett deaktiviert müssen wir die einzelnen Werte der 7 Bits zusammenzählen:
    64 + 32 + 16 + 8 + 4 + 2 + 1 = 127


    Hexadezimal:
    Ist die SIP aktiviert, haben wir den Wert 0x00.Ist die SIP deaktiviert, haben den Wert 0x7F (8 + 4 + 2 + 1 = F für das erste (rechte) Nibble, 4 + 2 + 1 = 7 für das zweite Nibble). Da beim zweiten Nibble das höchste Bit fehlt (wir haben ja nur 7 Bit), wird das fehlende Bit als 0 gesetzt.


    Beispiel:
    Sind die Bits 1-3 und 6 und 7 gesetzt, die Bits 4 und 5 nicht, haben wir
    dezimal: 64 + 32 + 0 + 0 + 4 + 2 + 1 = 103
    hexadezimal: (0 +) 4 + 2 + 0 und 0 + 4 + 2 + 1 = 0x67


    Es gibt noch Bit 8 und 9 in der SIP, deren Gebrauch zum Erstellen einer Hackintosh-Installation mir bisher nicht bekannt ist:

    Bit 8 CSR_ALLOW_DEVICE_CONFIGURATION
    Bit 9 CSR_ALLOW_ANY_RECOVERY_OS


    Das Bit 8 hat den Wert dezimal 128, hexadezimal 80, das Bit 9 dezimal 256. Hexadezimal brauchen wir eine zusätzlich Stelle der Zahl, da wir mit 0xFF (255, %1111 1111) die höchste zweistellige hexadezimale Zahl erreicht haben. Das Bit 9 hat dann also den Wert 0x100.


    Beispiel:
    Sind alle 9 Bits gesetzt kommen wir auf
    binär: %1 1111 1111
    dezimal: 511 (256 + 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1)
    hexadezimal: 0x1FF


    Und hier noch die häufigsten bekannten Werte:


    CsrActiveConfig
    Hexadezimal
    CsrActiveConfig
    Dezimal
    Ergebnis
    0x03 3 unsignierte Kexte werden geladen
    0x67 103 Eigentlich alles offen
    0x7F 127 Wirklich alles offen

Teilen