0

SecCodeCheckValidity:Für welche Art von dynamischer Code-Änderung schützt die dynamische Code-Gültigkeitsprüfung?

Führt dynamische Validierung signierter Code.

SecStaticCodeCheckValidity

Test prüft ein statisches Codeobjekt.

Diese Funktion ruft die Signatur des angegebenen Codes ab und überprüft sie. Es prüft die Gültigkeit aller versiegelten Komponenten, einschließlich Ressourcen (falls vorhanden). Es validiert den Code gegen einen Code Anforderung, wenn eine angegeben ist. Der Aufruf ist erfolgreich, wenn alle diese Bedingungen zufriedenstellend sind. Dieser Aufruf ist nur dann sicher, wenn der Code nicht gleichzeitig geändert wird und das Ergebnis nur gültig ist , solange der Code nicht geändert wird. Wenn das zugrunde liegende Dateisystem dynamische Merkmale aufweist, z. B. ein Netzwerkdateisystem, Union mount oder FUSE, müssen Sie prüfen, wie sicher der Code von der Änderung nach der Validierung ist.

So ist diese Beschreibung für das Zeichenbeleg von Apple, ist es nicht klar, was sie "dynamische CharacterStics" hier bedeuten.

Antwort

0

SecStaticCodeCheckValidity überprüft, ob die Anwendung on-disk. Im Gegensatz dazu verifiziert SecCodeCheckValidity die Anwendung im Speicher gegen die gleichen Anforderungen, während es ausgeführt wird.

Dieser versucht, Änderungen durch Hijacking, Injection oder andere traditionelle Methoden der Mutation von In-Memory-Code zu verhindern, indem geprüft wird, ob er noch mit einer gültigen Signatur code-signiert ist.

Ich erinnere mich, diese Unterscheidung irgendwo während der WWDC '09 zu hören, korrigiere mich, wenn ich falsch liege.

Wenn Sie, ob einige Ausführen von Code überprüfen wollen, von Apple und nicht etwas bezeichnet Anforderung vom Programmierer festgelegt unterzeichnet, mögen Sie:

SecRequirementCreateWithString(CFSTR("anchor apple"), ...) 

und dann passieren das Ergebnis SecRequirementRef-SecCodeCheckValidity. Es besteht keine Notwendigkeit, in diesem Fall mit der angegebenen Anforderung zu interagieren, da Sie bereits entschieden haben, welcher Code für Sie akzeptabel ist, also alles, was von Apple signiert wurde.

Im Produktionscode können Sie csreq(1) verwenden, um eine binäre Version von "Anchor Apple" zu kompilieren und SecRequirementCreateWithData anstelle von SecRequirementCreateWithString zu verwenden, was schneller ist.

+0

Wie oft überprüft es 'in-memory'? – PnotNP

Verwandte Themen