Domanda

Si supponga che abbiamo due applicazioni:

masterapp

SlaveApp

masterapp è in esecuzione SlaveApp con alcuni argomenti, fe: slaveapp --param1 100 param2 "hello"

Non è possibile vedere che direttamente, ma qualcuno potrebbe tentare di esaminare gli argomenti forniti al slaveapp, ed eseguirlo da console.

Voglio slaveapp diventi eseguibile solo da masterapp, in modo che l'utente non può essere eseguito in modalità console (o come schiavo o un'altra applicazione). Stavo pensando di fornire alcune unique_string e md5(unique_string + salt), ma se qualcuno controllerà argomenti egli può capire cosa sta goin' on. C'è qualche modo per farlo solo fornendo alcune uniche argomento, di fiducia che non può essere utilizzato due volte (e non c'è la condivisione delle risorse come i file con le chiavi private / pubbliche ecc)?

È stato utile?

Soluzione

E 'praticamente impossibile evitare gli attacchi replay se il canale di comunicazione va unico master -> slave. La firma della richiesta con un timestamp in esso potrebbe aiutare, ma anche questo non è perfetto (soprattutto se l'attaccante ha un certo controllo del clock).

La strategia migliore è quella di stabilire una comunicazione a due vie tra master e slave. Io non sono sicuro di quello che il linguaggio si sta lavorando, ma di solito c'è un modo per il master di parlare con lo schiavo dopo che è biforcuta, diversi dal semplice riga di comando.

Utilizzando quel canale, si può avere lo schiavo generare un nonce casuale, trasmissione che al maestro, ha il segno maestro che, rispedirlo allo slave, e controllare la firma nello slave.

Altri suggerimenti

Come circa appena la crittografia dei paramaters passati con una chiave di crittografia predefinita e comprendente un check_string di un certo tipo (vale a dire il tempo EPOCH). Poi decodificare i paramaters in salveapp e verificare la check_string (in questo esempio che il tempo EPOCH) è entro un certo intervallo o è un certo valore.

Ecco un semplice esempio rubino, la sua in un unico file in modo si avrebbe bisogno di modificarlo per Handel riga di comando argomenti ect.

require 'openssl'
require 'digest/sha1'
c = OpenSSL::Cipher::Cipher.new("aes-256-cbc")
c.encrypt
# your pass is what is used to encrypt/decrypt
c.key = key = Digest::SHA1.hexdigest("1094whfiubf9qwer8y32908u3209fn2032")
c.iv = iv = c.random_iv
e = c.update("#{Time.now.to_i}")
e << c.final
puts "encrypted: #{e}\n"


#sleep(15) #if you uncomment this the validation will fail.
c = OpenSSL::Cipher::Cipher.new("aes-256-cbc")
c.decrypt
c.key = key
c.iv = iv
d = c.update(e)
d << c.final
if(Time.now.to_i - d.to_i < 10)
    puts "decrypted: #{d}\n"
    puts "Validated EPOCH Time"
else
    puts "Validation FAILED."
end

Assicurarsi che l'applicazione degli schiavi è di proprietà dello stesso utente viene eseguito il maestro app come, e assicurarsi che non è in lettura o eseguibile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top