Quali sono le restrizioni della firma del codice ad hoc?

8

È possibile firmare il codice o le app "ad-hoc" utilizzando codesign . La pagina man ci dice quanto segue sulla firma del codice ad hoc:

If identity is the single letter "-" (dash), ad-hoc signing is performed. Ad-hoc signing does not use an identity at all, and identifies exactly one instance of code. Significant restrictions apply to the use of ad-hoc signed code; consult documentation before using this.

(Enfasi aggiunta da me)

Volevo saperne di più e ho cercato di trovare la suddetta documentazione, ma non sono riuscito a trovare alcun dettaglio. Ho trovato una nota tecnica chiamata "MacOS Code Signing In Depth" , ma lo fa non menzionare affatto la firma ad hoc.

Quali sono queste "restrizioni significative" e dove sono documentate?

    
posta not2savvy 29.06.2017 - 16:29
fonte

1 risposta

4

In pratica, la firma ad hoc in questo contesto significa che il file binario è firmato senza alcuna prova crittografica.

In sostanza, i binari normalmente sono firmati aggiungendo un cosiddetto CMS (un messaggio crittografico) in cui l'hash di CodeDirectory è il messaggio firmato dall'identità di firma. Ciò significa che un estraneo può verificare che il codice sia stato effettivamente firmato da qualcuno che detiene la chiave privata per tale identità.

Durante l'esecuzione di programmi, il sistema macOS può verificare che queste firme siano valide e che si fidi dell'identità della firma e, in caso affermativo, eseguire il programma. Questa è la base della funzionalità GateKeeper.

I binari firmati ad hoc sono molto diversi in quanto non contengono tali CMS. Invece mantiene semplicemente il valore hash SHA-1 di CodeDirectory senza alcuna prova crittografica della sua validità e nessun percorso di certificati / identità da verificare.

CodeDirectory è un oggetto che descrive una particolare istanza di codice statico con valori hash per vari pezzi di codice di cui è fatta l'applicazione. Assicurandosi che il CodeDirectory non venga controllato verificando la firma crittografica e che i vari bit di codice dell'applicazione corrispondano ai valori hash memorizzati nella directory, è possibile verificare che il codice non sia stato manomesso.

Senza la prova crittografica questo controllo "non controllato" non può essere eseguito nel modo normale.

Invece, i binari firmati ad hoc vengono controllati confrontando il valore hash SHA-1 con un elenco di valori hash "noti" memorizzati nella cache di attendibilità statica all'interno del kernel.

In pratica ciò significa che le "restrizioni significative" poste su qualsiasi applicazione che tu firmi ad-hoc è che non passerà alcun tipo di verifica da nessuna parte. Fondamentalmente è lo stesso di un file binario non firmato.

Tuttavia, se sei Apple, puoi creare applicazioni che non sono state codificate in modo ordinario e che sono invece esplicitamente affidate al kernel. Cioè se, ad esempio, Apple desidera assicurarsi che un'applicazione non venga temporizzata quando viene eseguita in una fase iniziale dell'avvio del sistema in cui la verifica dell'identità della firma completa non è attiva e in esecuzione (o non è disponibile) è possibile utilizzare la firma ad hoc. Queste applicazioni possono sempre essere verificate dalla cache di attendibilità statica, indipendentemente dal fatto che il tuo archivio di certificati sia hosed o qualcosa del genere.

In pratica creare binari firmati ad hoc è solo un valore pratico per gli sviluppatori Apple.

Puoi trovare una documentazione minore sulla firma ad hoc nella sezione sviluppatori di Apple. Ad esempio:

link

Ma puoi anche trovare frammenti di documenti nel codice sorgente per l'utility codesign stessa e nel codice sorgente per libsecurity.

    
risposta data 02.03.2018 - 01:34
fonte

Leggi altre domande sui tag