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

MasterApp

奴隶

MasterApp正在用一些参数执行Slaveapp,FE: slaveapp --param1 100 param2 "hello"

您无法直接看到,但是有人可以尝试检查提供给Slavepp的论点,并从控制台执行它。

我希望SlaveApp仅通过MasterApp才能执行,因此用户不能以控制台模式(或从属或其他应用程序)运行它。我正在考虑提供一些 unique_stringmd5(unique_string + salt), ,但是,如果有人检查论点,他可能会理解正在发生的事情。有什么方法只能通过提供一些无法使用两次的独特,可信赖的参数(并且没有私有/公共键等文件的资源共享)?

有帮助吗?

解决方案

如果您的通信通道仅使用主人 - >从属,则基本上不可能避免重播攻击。用时间戳签署请求可能会有所帮助,但这并不完美(尤其是如果攻击者可以控制时钟)。

更好的策略是在大师和奴隶之间建立双向交流。我不确定您正在使用哪种语言,但是通常有一种方法可以在分叉后与奴隶交谈,而不仅仅是命令行。

使用该频道,您可以让从属生成一个随机的nonce,将其发送给主人,将主符号发送给主符号,将其发送回从属,然后检查从属中的签名。

其他提示

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

这是一个简单的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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top