Devo firmare il codice open source da solo?

12

Uso macOS 10.14 e ho riscontrato un problema quando ho provato a installare un plug-in open source per Vim che ho trovato su Github. Ho scaricato il codice sorgente e l'ho compilato da solo, il che ha funzionato bene, ma quando l'ho eseguito, l'esecuzione è stata interrotta perché "La firma del codice [dell'eseguibile] non è valida per l'utilizzo nel processo".

Questo mi ha dato un sacco di domande che non riesco a spiegarmi:

Potrei firmarlo anch'io, ma non mi piacerebbe rovinare lo scopo della firma del codice? C'è qualche differenza qualitativa nel firmare il codice da internet e consentire app da sviluppatori non identificati nella finestra di dialogo "Questa app è stata scaricata da internet"?

Se non lo faccio, di chi è la "responsabilità" di firmare? Il responsabile del repository? I contributori? Apple si aspetta che gli sviluppatori open source abbiano sempre un ID sviluppatore Apple? O ho frainteso lo scopo della firma del codice?

Modifica

Per chiarire la questione, la mia domanda è come dovrei gestire il codice sorgente senza firma che sto compilando da solo, dal momento che non mi aspetto che i contributori siano sempre in grado o ricordino di firmare il loro codice, specialmente quando si tratta di piccoli contributi progetti open source con molti contributori.

    
posta Jacob Taxén 27.11.2018 - 10:29
fonte

3 risposte

10

Firma codice ad-hoc

Per le applicazioni e i binari di terze parti che vengono compilati e che richiedono la firma del codice , utilizza una firma del codice ad hoc .

  • Presumo che l'applicazione non verrà eseguita senza una firma;
  • Presumo che l'applicazione non verrà distribuita;
  • Suppongo che non ti preoccupi dell'identità della firma che è valida.

Una firma ad hoc non offre vantaggi di sicurezza affidabili. Può essere utilizzato per determinare se l'applicazione è stata modificata e può essere utilizzata per applicare restrizioni di sicurezza, come le autorizzazioni, a un'applicazione.

Una firma ad hoc verrà convalidata con codesign ma non spctl . Questo può o non importa a seconda del binario firmato. Per applicazioni ed eseguibili, è improbabile che ciò sia importante perché spctl non viene eseguito su binari creati localmente.

Perché firmare il codice?

Per quanto riguarda la domanda perfezionata:

How I should handle unsigned source code that I compile myself, since I don't expect contributers to always be able to, or remember to, sign their code, especially when it comes to tiny contributions to open source projects with many contributers.

Per la maggior parte delle applicazioni auto compilate, non è necessario firmare il codice. Questo presuppone che tu abbia fiducia nel codice dell'applicazione. Su macOS, puoi aprire le applicazioni non attendibili dal Finder, vedi Apple apri un'app da uno sviluppatore non identificato .

Se non ti fidi del codice o degli sviluppatori, non compilare o eseguire l'applicazione.

Responsabilità dell'utente

Il fornitore del codice sorgente non ha alcuna responsabilità o obbligo di fornire binari firmati con codice precostruito. Essendo auto compilato, tutta la firma del codice è una tua scelta e responsabilità.

  • Le richieste di di Apple ai loro App Store devono essere firmate con il codice.

  • Gli sviluppatori Apple al di fuori dei loro App Store firmano il loro codice, ma non sono ancora richiesti.

In entrambi i casi, solo i binari finali sono firmati. Il codice sorgente e le risorse originali non sono firmati.

Il codice sorgente non è firmato

Il codice sorgente stesso non può essere firmato con codice in modo significativo per macOS. I file di origine e il codice possono essere firmati digitalmente, come qualsiasi altro file può essere, ma questo non ha alcun impatto sul modo in cui l'applicazione o il binario risultante viene trattato da macOS.

Come codice ad hoc firmare un'applicazione per Mac

Per codificare un'app su macOS con una firma ad-hoc, imposta il flag -s identità su - :

codesign --force -s - </path/to/application>

Tutte le altre regole, i requisiti e le permutazioni del comando codesign rimangono invariati.

Il flag --force è usato qui per sovrascrivere qualsiasi firma esistente.

Potrebbe essere necessario aggiungere il flag --deep al comando codesign per firmare sub-risorse come framework e servizi incorporati.

    
risposta data 27.11.2018 - 13:47
fonte
5

Firmare il programma da soli non sta rovinando lo scopo della firma del codice. Lo scopo generale della firma del codice è di consentire di verificare che il programma sia una copia non modificata originariamente creata da una specifica entità (persona o azienda). Quando firmi da solo un programma solo per essere eseguito sul tuo computer, puoi fare in modo che il sistema verifichi che sei tu a creare il file binario e che non è stato modificato da altri.

La differenza qualitativa tra la firma del file binario dell'applicazione e la semplice autorizzazione di app da sviluppatori non identificati in GateKeeper è che nel primo caso si consente l'esecuzione di una singola app specifica, mentre quest'ultima apre la possibilità che sia possibile apri molte app diverse facendo semplicemente clic con il pulsante destro del mouse su di esse e scegliendo Apri. Cioè è più restrittivo e quindi un po 'più "sicuro" firmando il programma specifico da solo.

La responsabilità della firma è interamente tua. Lo sviluppatore open source non può firmare il codice sorgente - è possibile solo firmare i binari compilati. Mentre stai producendo i binari compilati da te, ti viene in mente di firmarli.

Puoi registrare un account sviluppatore sul sito Web di Apple che ti consentirà di creare un certificato che può essere utilizzato per la firma. Se sei uno sviluppatore e compendi regolarmente i binari per l'esecuzione su Mac, questo è il modo preferito di fare le cose. Se questa è una cosa una tantum che probabilmente non farai mai più, è probabilmente eccessivo procedere attraverso questo processo. YMMV.

Altre risposte per la tua domanda qui consiglia di utilizzare la firma ad hoc per il tuo binario. Non funzionerà. Dovrai generare una firma valida per far eseguire l'esecuzione binaria con GateKeeper sulla sua impostazione più sicura.

    
risposta data 27.11.2018 - 14:57
fonte
1

Should I sign open source code myself?

Se non sei lo sviluppatore, allora no.

La firma del codice, in poche parole, è un metodo per dire che tu (lo sviluppatore) sei tu dì di essere e il codice non è cambiato dall'ultima volta che l'hai firmato.

Is there any qualitative difference in signing code from the internet and allowing apps from unidentified developers in the "This app was downloaded from the internet" dialog box?

Sembra la tua confusa firma del codice (cosa richiesta dagli sviluppatori per pubblicare app sull'app store) e gatekeeper (cosa protegge il tuo Mac dall'installazione di software da sviluppatori non identificati).

Se consenti al tuo Mac di installare il software sia dall'App Store che dagli sviluppatori identificati, riceverai comunque il popup che ti avviserà del fatto che il software verrà installato

E se proviene da uno sviluppatore non identificato, otterrai lo stesso popup con una "icona di avviso"

È ancora possibile installare il software. Questo è solo un meccanismo che costringe l'interazione dell'utente a installare effettivamente il software offrendoti un livello di sicurezza contro il malware autoinstallato.

    
risposta data 27.11.2018 - 10:41
fonte

Leggi altre domande sui tag