Ho creato una piccola applicazione in .NET che funge da loader per le mie altre applicazioni.
Essenzialmente, una volta aperta, questa app otterrà un elenco di applicazioni disponibili e, quando viene selezionata un'opzione, scarica la versione più recente dell'applicazione in memoria e la apre.
L'applicazione stessa è offuscata (anche se dubito che sia importante) e fa quanto segue:
- Passa a una posizione HTTP hard-coded
- Scarica una stringa codificata in base 64 di un messaggio crittografato AES-256 contenente l'elenco delle applicazioni disponibili, i relativi percorsi, le dipendenze e la chiave di decrittografia.
- Una volta selezionata un'applicazione, scarica il file binario crittografato (e tutte le dipendenze) elencate nella configurazione, il tutto in memoria
- Un set base di semplici funzioni di manipolazione delle stringhe viene eseguito sulla chiave di decrittografia trovata nella configurazione e viene generato SecureString
- Questa chiave viene quindi utilizzata per decodificare AES e quindi caricare l'applicazione (ancora una volta, tutto in memoria).
- La chiave viene immediatamente impostata per lo smaltimento
Preoccupazioni per la sicurezza
-
Credo che il punto di ingresso principale sia l'applicazione stessa. Credo che, sebbene offuscato, può essere comunque facilmente analizzato.
- Puoi proteggerti da questo?
-
Usando Fiddler / WireShark o altre applicazioni, si può facilmente determinare da dove viene letta la configurazione, e si può eventualmente impostare una risposta, quindi per le chiamate future, l'app verrà alimentata con lo stesso risultato (senza recuperarla effettivamente da la posizione prevista).
- C'è un modo per verificare che sia stato scaricato dalla destinazione prevista?
-
Il fatto che la chiave per decodificare i file binari possa essere recuperata da un insieme di funzioni di manipolazione delle stringhe, penso possa essere facilmente riprodotta, se l'applicazione è decodificata.
- Suggerisci un altro modo di gestire la chiave specifica dell'applicazione?
-
Quanto è facile / probabile salvare lo stato di un'applicazione in esecuzione in memoria in modo che possa essere riutilizzato senza passare attraverso l'applicazione loader ?
-
Quali altre preoccupazioni prenderesti in considerazione?
Informazioni aggiuntive
L'applicazione controlla attualmente se un proxy è attualmente registrato con il sistema e tenta di recuperarlo bypassando il proxy, tuttavia a me sembra un hack piuttosto che una funzione di sicurezza.