0

2 つのアプリケーションがあるとします。

マスターアプリ

SlaveApp

MasterApp は、いくつかの引数 fe を使用して SlaveApp を実行しています。slaveapp --param1 100 param2 "hello"

直接見ることはできませんが、誰かが slaveapp に提供された引数を調べて、コンソールから実行しようとする可能性があります。

ユーザーがコンソールモードで(またはスレーブまたは別のアプリとして)実行できないように、slaveappをmasterappによってのみ実行可能にしたい。unique_string私はいくつかのとを提供することを考えていましmd5(unique_string + salt)たが、誰かが引数を調べれば、何が起こっているのか理解できるかもしれません. 2回使用できない一意の信頼できる引数を提供することによってのみそれを行う方法はありますか(秘密鍵/公開鍵などを持つファイルのようなリソース共有はありません)?

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-13T03:54:28.197 に答える
0

通信チャネルがマスター -> スレーブのみになる場合、リプレイ攻撃を回避することは基本的に不可能です。タイムスタンプを使用してリクエストに署名することは役立つかもしれませんが、それでも完全ではありません (特に、攻撃者が時計をある程度制御している場合)。

より良い戦略は、マスターとスレーブ間の双方向通信を確立することです。あなたがどの言語で作業しているかはわかりませんが、通常、コマンド ライン以外に、フォークされた後にマスターがスレーブと通信する方法があります。

そのチャネルを使用して、スレーブにランダムナンスを生成させ、それをマスターに送信し、マスターに署名させ、スレーブに送り返し、スレーブで署名を確認できます。

于 2010-12-12T04:46:14.763 に答える