Come posso assicurarmi che la mia DLL non sia stata modificata?

19

Ho un vecchio progetto in VB che ha creato un codice pc univoco da indirizzo MAC e ID disco. Questo è stato utilizzato per identificare un PC in modo che le credenziali non possano essere utilizzate tra i PC.

Questo progetto è migrato in C # e ho incapsulato questa logica in una DLL che chiama semplicemente un metodo che restituisce il pc_id.

Il problema che ho ora è che è dannatamente facile creare una nuova DLL che abbia lo stesso nome di classe e la stessa firma del metodo e restituisca qualsiasi pc_id che desiderano.

Come posso assicurarmi che la DLL del mio programma faccia riferimento sia effettivamente mia?

Ho pensato di confrontare l'hash della mia DLL con uno codificato, ma questo è sicuro tra diversi SO? L'hash del file cambierà tra i file system?

O quale metodo è preferito per garantire l'integrità / origine dei file?

    
posta Vallo 21.04.2015 - 13:36
fonte

5 risposte

41

Per i binari di Windows, suggerisco di firmare digitalmente il file.

Dove utilizzi i certificati, quasi la stessa tecnologia di HTTPS.

Introduzione alla firma del codice

SignTool

Quindi dovresti utilizzare le API crittografiche di Windows per verificare la firma delle DLL caricate.

So che per fare questo, hai bisogno di molto lavoro. Ma, per Windows, questo è il percorso più sicuro . Se gli hash SHA non sono sufficienti, questa è l'alternativa.

    
risposta data 21.04.2015 - 20:54
fonte
30

Con il basso livello di protezione offerto dall'indirizzo MAC, non mi preoccuperei. È meno difficile modificare l'indirizzo MAC piuttosto che scambiare la DLL.

    
risposta data 21.04.2015 - 19:11
fonte
16

Gli hash non cambiano tra i file system. Verifica l'hash SHA1 del file rispetto al valore "buono" noto nel tuo codice e dovresti essere assente!

    
risposta data 21.04.2015 - 13:42
fonte
7

Se il tuo obiettivo è impedire l'uso delle credenziali su altri PC, dai un'occhiata a API di protezione dei dati di Windows . Con esso, puoi crittografare le tue credenziali, o qualsiasi altro dato, e sarà decifrabile solo su questo computer (o solo sotto l'attuale account utente di Windows, se necessario).

    
risposta data 21.04.2015 - 23:00
fonte
0

Non solo l'indirizzo MAC non è molto protetto, ma l'inserimento di un ID disco è una cosa negativa - non tutti i "dischi" restituiscono un ID disco coerente. Il problema è che alcuni controller RAID rispondono a una richiesta di un ID disco acquisendolo da qualunque unità sia disponibile.

Per non parlare di cosa succede se qualcuno aggiorna un po 'di hardware.

    
risposta data 23.04.2015 - 04:18
fonte

Leggi altre domande sui tag