【问题标题】:Trusted application execution可信的应用程序执行
【发布时间】:2010-12-11 23:25:35
【问题描述】:

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

主应用

SlaveApp

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

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

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

【问题讨论】:

    标签: algorithm hash console-application trust


    【解决方案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
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2018-07-09
          • 2018-04-06
          • 1970-01-01
          • 2011-02-05
          • 2022-01-21
          • 2018-07-08
          • 2012-07-21
          • 2016-08-17
          • 2017-07-31
          相关资源
          最近更新 更多