Verificare firma applicazioni macOS Terminale

Verificare firma applicazioni macOS Terminale permette di controllare se un’app è stata firmata digitalmente, da quale sviluppatore proviene e se macOS la considera attendibile. Il comando codesign esamina la firma e l’integrità dei file contenuti nel pacchetto .app. Il comando spctl applica invece le regole di Gatekeeper e indica se macOS accetta l’app per l’apertura o l’installazione. L’analisi è utile prima di eseguire software scaricato da Internet, soprattutto quando Finder mostra avvisi di sicurezza. Una firma valida non dimostra però che il programma sia sicuro o privo di funzioni indesiderate: conferma soltanto l’identità crittografica del firmatario e l’integrità dei file firmati.

Qual è la differenza tra codesign e spctl su macOS

codesign verifica direttamente la firma del codice. Il comando controlla che l’app non sia stata modificata dopo la firma e può mostrare l’autorità certificatrice, il nome del firmatario, il Team ID e l’identificatore dell’applicazione.

spctl controlla invece la decisione di Gatekeeper. Oltre alla firma, può considerare la notarizzazione Apple, il tipo di contenuto e le regole di sicurezza applicate da macOS. Per questo un’app può avere una firma tecnicamente valida, ma non risultare accettata da spctl.

La firma digitale non equivale a una certificazione di sicurezza del software. Un’app firmata può comunque contenere vulnerabilità, pubblicità indesiderata o codice malevolo; la firma serve a verificare chi l’ha firmata e se il contenuto è cambiato.

Prima dell’analisi è necessario conoscere il percorso dell’app. Per un programma nella cartella Applicazioni, il percorso tipico è il seguente:

/Applications/NomeApp.app

Se il nome contiene spazi, racchiudere il percorso tra virgolette. In alternativa, trascinare l’app dalla finestra del Finder dentro il Terminale per inserire automaticamente il percorso corretto.

Come verificare la firma di un’app con codesign

Passo 1: controllare l’integrità della firma

Aprire Terminale dalla cartella Applicazioni > Utility ed eseguire il comando seguente, sostituendo il percorso con quello dell’app da esaminare:

codesign --verify --deep --strict --verbose=4 "/Applications/NomeApp.app"

L’opzione --verify esegue la verifica, --strict applica controlli più rigorosi e --verbose=4 mostra maggiori dettagli in caso di errore. L’opzione --deep estende il controllo ai componenti annidati dell’app, come framework, helper e plug-in.

Se il controllo termina senza messaggi e il Terminale restituisce il prompt, la verifica è terminata con esito positivo. Se la firma non è valida, macOS può mostrare messaggi come code object is not signed at all, a sealed resource is missing or invalid oppure code has no resources but signature indicates they must be present.

Per un controllo più essenziale si può usare anche:

codesign --verify --strict --verbose=2 "/Applications/NomeApp.app"

Il risultato di codesign va interpretato insieme a quello di spctl, perché il primo verifica principalmente la struttura della firma mentre il secondo valuta l’accettazione da parte di Gatekeeper.

Passo 2: visualizzare sviluppatore, Team ID e autorità

Per leggere i dati della firma senza limitarsi all’esito positivo o negativo, usare:

codesign --display --verbose=4 "/Applications/NomeApp.app"

L’output può contenere informazioni come:

  • Identifier, cioè l’identificatore univoco assegnato all’app;
  • TeamIdentifier, cioè il Team ID Apple associato allo sviluppatore;
  • Authority, cioè la catena dei certificati usati per firmare il codice;
  • Sealed Resources, relativo alle risorse incluse nella firma;
  • Executable, che indica il file eseguibile principale.

Una voce come Developer ID Application: Nome sviluppatore (TEAMID) indica una firma destinata alla distribuzione fuori dal Mac App Store. La presenza di Apple Distribution o di certificati legati allo sviluppo non significa necessariamente che l’app sia installabile liberamente: il tipo di certificato e la decisione di Gatekeeper devono essere valutati nel contesto.

Per visualizzare anche i requisiti associati alla firma, è possibile usare:

codesign --display --verbose=4 --requirements - "/Applications/NomeApp.app"

Un’identità indicata con un semplice trattino, spesso chiamata firma ad hoc, non fornisce la stessa garanzia di provenienza di una firma associata a un certificato Apple valido.

Come verificare la provenienza con spctl e Gatekeeper

Passo 1: controllare se macOS accetta l’app

Il comando principale per analizzare un’applicazione è:

spctl --assess --type execute --verbose=4 "/Applications/NomeApp.app"

Quando l’app è accettata, l’output include generalmente accepted e può riportare informazioni come source=Notarized Developer ID, source=App Store oppure origin=Developer ID Application: Nome sviluppatore (TEAMID).

Quando l’app non supera il controllo, il Terminale mostra rejected insieme a una motivazione. Il rifiuto può dipendere da firma assente, firma modificata, notarizzazione non riconosciuta, certificato revocato o regole di Gatekeeper.

La verifica della provenienza con spctl non richiede l’apertura dell’app. Il comando valuta il pacchetto già presente sul disco, quindi è adatto a un controllo preliminare prima dell’esecuzione.

Passo 2: analizzare un installer PKG

Per un pacchetto di installazione .pkg, usare il tipo di valutazione install:

spctl --assess --type install --verbose=4 "/Users/nomeutente/Downloads/NomeInstaller.pkg"

Per un’app già installata, il tipo corretto è normalmente execute. Il tipo install serve invece a valutare un pacchetto destinato all’installazione, mentre il tipo open può essere utile per alcuni documenti o contenuti che macOS deve aprire con un’app.

Il comando spctl --status mostra se la valutazione automatica di Gatekeeper è attiva:

spctl --status

L’output indica lo stato del servizio di valutazione, ma non certifica una specifica applicazione. Per conoscere l’esito relativo a un’app è necessario usare spctl --assess.

Passo 3: verificare un eventuale ticket di notarizzazione

La notarizzazione Apple è una verifica automatizzata del software distribuito fuori dal Mac App Store. Quando l’app contiene un ticket di notarizzazione associato, il comando stapler può controllarne la validità locale:

xcrun stapler validate "/Applications/NomeApp.app"

Questo controllo è complementare a codesign e spctl. Un’app può essere validamente firmata senza avere un ticket di notarizzazione incorporato, perché macOS può verificare alcune informazioni attraverso la rete. Per questo l’assenza del ticket locale non dimostra da sola che il software sia contraffatto.

Come interpretare un risultato negativo

Un errore di codesign richiede attenzione soprattutto quando l’app proviene da un sito ufficiale e dovrebbe essere distribuita firmata. In quel caso il pacchetto potrebbe essere stato alterato, scaricato in modo incompleto oppure modificato da un processo di estrazione o aggiornamento.

Un risultato rejected di spctl non identifica sempre un malware. Può indicare un’app vecchia, non notarizzata, distribuita per test, firmata con un certificato non più valido oppure proveniente da uno sviluppatore non riconosciuto da Gatekeeper.

Non bisogna eliminare gli avvisi di sicurezza usando comandi trovati casualmente online. Disattivare Gatekeeper o rimuovere attributi di quarantena può consentire l’esecuzione di software non verificato, ma non risolve il problema della provenienza.

L’attributo di quarantena può essere visualizzato con:

xattr -l "/Applications/NomeApp.app"

La presenza o l’assenza dell’attributo com.apple.quarantine non sostituisce la verifica della firma. La provenienza va confrontata con il sito ufficiale dello sviluppatore, il nome visualizzato in Authority o origin e l’eventuale firma del codice.

Per una valutazione prudente, è utile controllare tutti questi elementi:

  • codesign deve confermare l’integrità del codice;
  • codesign --display dovrebbe mostrare un firmatario coerente con lo sviluppatore atteso;
  • spctl dovrebbe restituire accepted quando l’app è destinata alla distribuzione normale;
  • il nome del file e il dominio di download devono corrispondere alla fonte ufficiale;
  • un’app firmata non deve essere considerata automaticamente sicura.

La sequenza più affidabile consiste quindi nel verificare prima la firma con codesign, poi la decisione di Gatekeeper con spctl, senza confondere un controllo tecnico con una garanzia assoluta sull’affidabilità del programma.

Potrebbe interessarti anche:

FAQ

No. codesign verifica principalmente firma e integrità del codice, mentre spctl valuta se Gatekeeper considera accettabile l’app in base anche a notarizzazione e criteri di sicurezza.

Esegui codesign --display --verbose=4 "/percorso/NomeApp.app" e cerca le righe Authority e TeamIdentifier. Il valore origin mostrato da spctl offre un’ulteriore indicazione sul firmatario.

No. Una firma valida dimostra che il codice proviene dal titolare del certificato e non è stato modificato dopo la firma, ma non certifica l’assenza di vulnerabilità o comportamenti indesiderati.

L’app può essere vecchia, non notarizzata, firmata con un certificato non riconosciuto o avviata tramite un’eccezione autorizzata manualmente. Il risultato di spctl segnala comunque che non supera la valutazione standard di Gatekeeper.

Sì. codesign e spctl sono disponibili anche su Mac con chip Apple; la firma e la valutazione di Gatekeeper vengono controllate indipendentemente dall’architettura del processore.

Altri articoli di questa serie:

PDF Strumenti PDF gratis Nel browser, senza upload Apri gli strumenti