Question

Supposons que nous avons deux applications:

MasterApp

SlaveApp

MasterApp est en cours d'exécution SlaveApp avec quelques arguments, fe: slaveapp --param1 100 param2 "hello"

Vous ne pouvez pas voir que directement, mais quelqu'un peut essayer d'examiner les arguments fournis à slaveapp, et l'exécuter à partir de la console.

Je veux slaveapp devenir exécutable seulement par masterapp, de sorte que l'utilisateur ne peut pas l'exécuter en mode console (ou comme esclave ou une autre application). Je pensais à fournir une unique_string et md5(unique_string + salt), mais si quelqu'un va inspecter les arguments qu'il peut comprendre ce qui se passe-t. Est-il possible de le faire seulement en fournissant une unique argument de confiance qui ne peut pas être utilisé deux fois (et il n'y a pas de partage des ressources comme des fichiers avec des clés privées / publiques, etc.)?

Était-ce utile?

La solution

Il est pratiquement impossible d'éviter les attaques par rejeu si votre canal de communication va seul maître -> esclave. La signature de la demande avec un horodatage en elle pourrait aider, mais même cela n'est pas parfait (surtout si l'attaquant a un certain contrôle de l'horloge).

La stratégie mieux est d'établir une communication bidirectionnelle entre le maître et l'esclave. Je ne sais pas quelle langue vous travaillez, mais généralement il y a un moyen pour le maître de parler à l'esclave après est fourchue, autre que juste la ligne de commande.

En utilisant ce canal, vous pouvez l'esclave générer un nonce aléatoire, envoyer que le maître, ont le signe maître, l'envoyer de nouveau à l'esclave, et vérifier la signature dans l'esclave.

Autres conseils

Que diriez-vous simplement chiffrer les paramaters passés avec une clé de chiffrement prédéfini et comprenant un check_string d'un certain type (à savoir le temps de EPOCH). décoder ensuite les paramaters dans salveapp et vérifier la check_string (dans cet exemple que le temps EPOCH) est dans une certaine plage ou une certaine valeur.

Voici un exemple simple rubis, son dans un seul fichier si vous devez modifier les arguments de ligne de commande handel 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

Assurez-vous que l'application esclave appartient au même utilisateur l'application maître fonctionne comme et assurez-vous qu'il est pas accessible en lecture ou exécutable.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top