0

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

大师应用

奴隶应用

MasterApp 正在执行带有一些参数 fe 的 SlaveApp:slaveapp --param1 100 param2 "hello"

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

我希望 slaveapp 只能由 masterapp 执行,以便用户无法在控制台模式下运行它(或作为从属或其他应用程序)。我正在考虑提供一些unique_stringand md5(unique_string + salt),但如果有人会检查论点,他可能会理解发生了什么。有没有办法只通过提供一些不能重复使用的独特的、受信任的参数来做到这一点(并且没有资源共享,比如带有私钥/公钥的文件等)?

4

3 回答 3

1

如何仅使用预定义的加密密钥加密传递的参数并包含某种类型的 check_string(即 EPOCH 时间)。然后对salveapp中的参数进行解码,验证check_string(本例中为EPOCH时间)是否在一定范围内或一定值。

这是一个简单的 ruby​​ 示例,它在一个文件中,因此您需要对其进行修改以处理命令行参数等。

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
于 2010-12-11T23:34:11.607 回答
0

如果你的通信通道只是主 -> 从,那么基本上是不可能避免重放攻击的。使用时间戳对请求进行签名可能会有所帮助,但即使这样也不完美(特别是如果攻击者可以控制时钟)。

更好的策略是在主从之间建立双向通信。我不确定您使用的是哪种语言,但通常主节点在分叉后可以与从节点对话,而不仅仅是命令行。

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

于 2010-12-12T04:46:14.763 回答
0

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

于 2010-12-13T03:54:28.197 回答