Authenticode funziona ancora offline e con un certificato "falso"

4

Ecco la nostra storia: stiamo sviluppando alcuni software (scritti in C # /. NET) e stiamo già firmando gli assembly con nomi forti, lo faccio in Visual Studio con un file pfx che è protetto da una password.

Come ulteriore passo di sicurezza vorrei firmare gli assembly o almeno l'eseguibile con Authenticode.

Il problema è: gli obiettivi per la nostra implementazione non avranno accesso a Internet e non siamo in grado di ottenere il nostro certificato CA verificato al momento. Abbiamo il controllo completo sull'obiettivo di distribuzione durante la fase di distribuzione, scegliamo l'hardware, installiamo il sistema operativo ecc., Ma una volta che il nostro prodotto (che è quindi una combinazione di hardware e software) è "là fuori" ci piacerebbe fornire più sicurezza possibile.

Ovviamente comprendiamo che non possiamo controllare ciò che accade in natura, ma abbiamo anche preso delle misure per essere in grado di vedere se l'hardware è stato manomesso. Se è così, sappiamo che non possiamo fidarci del software e non lo faremo.

Per tornare al nostro problema principale: ha senso creare il proprio certificato "falso" (non verificabile) per firmare gli assembly? Abbiamo bisogno di mettere questi certificati nell'archivio di Windows? Sto cercando di proteggere i nostri eseguibili da essere sostituiti da altri eseguibili, ad esempio tramite un'unità flash USB o qualcosa di simile.

Qual è il modo migliore per affrontare questo problema? Grazie in anticipo.

    
posta Davio 04.01.2013 - 14:51
fonte

1 risposta

8

Quando il codice è firmato con Authenticode, Windows controlla la firma per quanto riguarda la chiave pubblica contenuta nel certificato incorporato e il quel certificato viene convalidato rispetto alla "CA attendibile" che il sistema operativo conserva nel negozio "Root". L'aggiunta di una CA personalizzata a quell'archivio è altamente fattibile per chiunque abbia diritti di amministratore sulla macchina (e questo include più o meno chiunque abbia accesso fisico alla macchina). La firma del tuo codice protegge da qualsiasi cosa solo se ipotizziamo che l'autore dell'attacco non sarà in grado di ricalcolare una firma falsa relativa a un certificato falso che si collegherà a una delle CA attendibili.

Ergo , la firma del codice non impedisce le modifiche da parte di persone che hanno accesso alla macchina. Questa è una situazione molto generica, tra l'altro: impedire l'alterazione del software da parte delle persone che possiedono fisicamente l'hardware è stato il Santo Graal per i venditori di videogiochi e gli editori di contenuti multimediali. Un successo un po 'limitato è stato ottenuto con hardware chiuso (ad esempio console di gioco) ma su un PC, questo è condannato. (Alcune persone stanno lavorando su un modo per farlo ma si rivela difficile, sia dal punto di vista tecnico che politico.)

Al meglio, la tua firma del codice può impedire l'alterazione silenziosa degli autori di attacchi che non si preoccupano di produrre certificati falsi (ad esempio malware di bassa qualità), ma gli aggressori determinati non saranno scoraggiati.

Nota: la firma del codice potrebbe avere vantaggi legali , tuttavia: se viene applicata la firma del codice, questo potrebbe aiutare a dimostrare, durante una prova , che chiunque abbia modificato il codice era pienamente consapevole del fatto che era proibito dalla licenza. Non credetemi, perché non sono un avvocato e qualsiasi risposta di legge è improbabile che sia valida per tutti i sistemi giuridici che esistono in tutto il mondo (ci sono circa 200 stati sovrani, dopotutto, quindi almeno che molti sistemi giuridici che sono nominalmente indipendenti l'uno dall'altro).

    
risposta data 04.01.2013 - 15:19
fonte

Leggi altre domande sui tag