2009-04-08 5 views
0

アップデート2:?入力用勧告[今すぐSourceforgeの上]

感謝。私はアルゴリズムを実装しており、それはSourceForgeでダウンロードできます。それは私の最初のオープンソースプロジェクトです。

更新:

私は十分に明確だったか、これに対応し、誰もが、シェルは#を消費する方法を理解してわかりません!タイプの入力。見るべき素晴らしい本はAdvanced Unix Programmingです。

私たちのスクリプトは、多くのユーザーに高度な分散環境で実行:here.

元の質問を実証したように、popenを呼び出し、その標準入力を供給するのに十分です。権限を使用してそれらを非表示にすることは、多くの理由で問題があります。

最初の行は最初の行は、私は適切に暗号化して配置するスクリプトを書くことができることを考えるとAA解読

#!/bin/decryptandrun 
*(&(*S&DF(*SD(F*SDJKFHSKJDFHLKJHASDJHALSKJD 
SDASDJKAHSDUAS(DA(S*D&(ASDAKLSDHASD*(&A*SD&AS 
ASD(*A&SD(*&AS(D*&AS(*D&A(SD&*(A*S&D(A*&DS 

を定義するために使用することができますスクリプトの「通訳」を指定するために使用することができますので、ヘッダー私は一時ファイルに書き出すような何もせずにスクリプト(それ自体は#!/ bin/perlのようなインタプリタ行を持つかもしれません)を解読したいと思います。私はこれを行うためにいくつかの愚かな商用製品を見つけました。私はこれが数時間で達成できると思います。システムコールをコーディングするのではなく、パイプでこれを行う方法はよく知られていますか?私はexecvpを使用することを考えていましたが、現在のプロセスを置き換えるか、子プロセスを作成する方が良いでしょうか?

+0

これはどのような状況で下降しますか? – ojblass

答えて

8

ユーザーがdecryptandrunプログラムを実行できる場合、ユーザーはそのプログラムを読むことができます(復号鍵などの読み込みが必要なファイル)。だから彼らはスクリプト自体を解読するコードを抽出することができます。

これを回避するには、decrtyptandrunをsuidにします。しかし、その中にバグがあると、ユーザーはroot特権(または少なくとも解読鍵を保持するアカウントへの特権)を取得する可能性があります。それはおそらく良い考えではないでしょう。もちろん、これらの解読スクリプトの内容やキーをユーザーに読めないようにして隠してしまった場合は、スクリプトの内容で同じことをすることができません隠そうとしているの?

また、別の#!解釈実行可能ファイルの場合は、#!解釈プログラムを解釈プログラムとして使用することはできません。

暗号の基本的なルールの1つは、経験のある暗号解析者でない限り、独自の暗号化アルゴリズム(またはツール)を作成しないことです。

私は、なぜユーザーが実行するスクリプトを暗号化する必要があるのか​​疑問に思います。スクリプトの内容を見て何か間違っていますか?

+0

これはまったく間違っています。 – ojblass

+0

シェルは#!で特別に動作します。入力。最初のインタプリタでシェルを生成し、それを2番目のインタプリタに送る簡単な方法があります。 – ojblass

+0

目的はユーザーからのものを隠すことではなく、スクリプトの変更を禁止することです。これらのスクリプトは何千ものサーバに配備されており、チェーンを更新することなくこれらのスクリプトが不平等になると(別名はサーバの1つで変更されます)、頭痛が発生します。パッケージ化と展開のプロセスの一部は、アクセス許可が適切ではないように見えるため、(今のように)アクセス許可を設定し、追加の手順を実行する必要があります。 – ojblass

0

メモリのアドレスではなく、ファイル名を受け入れるためにリンクするすべての機能です。つまり、復号化ルーチンで「フック」して、復号化されたスクリプトの#にリダイレクトするなど、あなたが望むことをやり遂げる方法についてはわかりません。通訳。

これは、スクリプトを一時ファイルに復号化し、そのファイル名をexec()コールに渡す必要がありますが、スクリプトを一時ファイルに入れて公開することを望まないと言っています(非常に合理的に)。

新しいプロセスをメモリ内の既存のプロセスに置き換えるようにカーネルに指示することができれば、それに続くパスがありますが、わかっている限り、そうではありません。だから私はこれを "連鎖"するのは非常に簡単だとは思わない!以下。

+0

popenのような呼び出しの中には、stdinとstdoutがうまく設定された別のプロセスを作成するものがあります。それはあなたのプロセスを置き換えるものではありませんが、同じ効果があります。 – ojblass

3

Brian Campbell's answerは正しい考えを持って、私はそれを綴るます:

あなたはユーザー(jbloggs)によってスクリプトが読めないが、実行可能にするために、そしてdecodeandrunのsetuidをする必要があります。 setuidをrootにすることもできますが、代わりにグループdecodegroupにsetgidを設定してから、スクリプトファイルのグループをdecodegroupに設定するほうがはるかに安全です。 decodegroupにスクリプトファイルの読み取りと実行の両方の権限があり、jbloggsがこのグループのメンバーでないことを確認する必要があります。

decodegroupには、decodeandrunがスクリプトファイルのテキストを読み取るための読み取り許可が必要です。

この設定では、jbloggs(Linuxでは少なくとも)ではスクリプトを実行できますが、それを見ることはできません。しかし、は復号化プロセス自体が不要であることを確認してください。 - jbloggsは読むことができないので、スクリプトファイルも平文かもしれません。

[更新:この戦略は、暗号化されたコンテンツ自体が#!で始まるスクリプトである場合を処理しないことに気付きました。ああ。]

+0

これがなぜ落とされたのか不思議で... –

+0

あなたの更新によって、内容を別のインタプリタに供給するのは簡単です。 http://stackoverflow.com/questions/790475/how-can-a-shell-encryption-program-use-less-user-time – ojblass

+0

@ojblass:うーん、私はあなたのdecryptandrun.cのpopen()と思う。そのページでは、(ネストされた)#!少なくとも実行中の "/ bin/sh

2

あなたは間違った問題を解決しています。問題は、ユーザーにアクセスさせたくないデータがあり、そのデータがユーザーがアクセスできる場所に格納されていることです。彼らが必要とするより多くのアクセス権を持つユーザーの問題を解決しようとすることから始めてください。

スクリプト全体を保護できない場合は、データを保護するだけでよいでしょう。別の場所に移動し、暗号化します。特定のID(rootでないことが望ましい)によってのみアクセス可能なキーでデータを暗号化し、データにアクセスするための小さなsuidプログラムを作成します。あなたのsetuidプログラムでは、誰がプログラムを実行すべきかを検証し、呼び出し元プログラムの名前/チェックサムを比較します(呼び出しプロセスのcwdと組み合わせてプロセスのコマンドラインを調べてlsofまたは/ procファイルシステム)を復号化する前に期待値で置き換えます。

それ以上のものが必要な場合は、システム上のユーザーの状態を再評価する必要があります。アクセスが多すぎるか、信頼性が低いです。 :)

関連する問題