可信应用程序执行

时间:2010-12-11 23:25:36

标签: algorithm hash console-application trust

假设我们有两个应用程序:

MasterApp

SlaveApp

MasterApp正在使用一些参数执行SlaveApp,fe:slaveapp --param1 100 param2 "hello"

你无法直接看到,但是有人可能会尝试检查提供给slaveapp的参数,并从控制台执行它。

我希望slaveapp只能由masterapp变为可执行文件,因此用户无法在控制台模式下运行(或作为slave或其他应用程序)。我正在考虑提供一些unique_stringmd5(unique_string + salt),但如果有人会检查参数,他可能会理解什么是在进行中。是否有某种方法可以通过提供一些不能使用两次的独特可信参数来实现它(并且没有像私有/公共密钥等文件那样的资源共享)?

3 个答案:

答案 0 :(得分:1)

如何加密使用预定义加密密钥传递的参数,并包括某种类型的check_string(即EPOCH时间)。然后解码salveapp中的参数并验证check_string(在此示例中EPOCH时间)是否在某个范围内或是某个值。

这是一个简单的ruby示例,它在一个文件中,因此您需要将其修改为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

答案 1 :(得分:0)

如果你的沟通渠道只是主人,基本上不可能避免重播攻击 - &gt;奴隶。使用时间戳对请求进行签名可能有所帮助,但即使这样也不完美(特别是如果攻击者对时钟有一定的控制权)。

更好的策略是在主站和从站之间建立双向通信。我不确定你在使用什么语言,但通常有一种方法让主机在分叉后与奴隶对话,而不仅仅是命令行。

使用该通道,您可以让从站生成随机的随机数,将其发送给主站,让主站签名,将其发送回从站,并检查从站中的签名。

答案 2 :(得分:0)

确保从属应用程序由主应用程序运行的同一用户拥有,并确保它不是世界可读或可执行的。