2009-05-01 13 views
4

私は世界中にオフィスを構える金融機関で使用されている大規模なPython/Windows/Excelアプリケーションの開発を担当しています。最近、ある国の規制が変更され、その結果、配布物の「ロックダウン」版を作成する必要があると言われています。ロックダウンされたPython環境を作成するにはどうしたらいいですか?

私の外国の相手と少し不快な会話をした後、彼らはセキュリティを迂回するために使用される非標準のアプリケーションを生成するために、自分のコンピュータ上でPythonインタプリタを誤用する可能性があるようです。

私の最初の提案は、python.exeとpythonw.exeの実行権を取り除くことでした。私たちのアプリケーションは、Python DLLのみを使用するExcelプラグインとして動作します。これらのexeファイルは決して実際には使用されません。

私の同僚は、誰かがPython DLLに対して電話をかけることに懸念を抱いていました。たとえば、VBAなどのWindows DLLで関数を呼び出すことができる別のプログラミング言語や仮想マシンなどの「exec」関数を悪用する可能性があります。

インストールしたいDLLが悪用されるのを防ぐためにできることはありますか?この時点で、アイデアがなくなりました。私は、Pythonが私たちの認定プログラムだけを実行する方法を見つける必要があります。

もちろん、この質問には不条理な要素があります。コンピュータにはすべてExcelとWordがあるため、すべてがVBAを持っています.VBAはPythonと同等の機能を持つよく知られたスクリプト言語です。

ExcelのVBAが広く開かれているときは、Pythonについて心配するのは明らかに意味がありませんが、これは企業の政治であり、私のチームはPythonを使用することを提案しているので、安全。

答えて

9

"安全に"合理的に "ExcelとVBAよりも安全"と任意に定義されています。

あなたはその戦いに勝つことはできません。戦いが間違っているからです。誰でも任意のEXEまたはDLLを使用できます。

「ロックダウン」を別の方法で定義する必要があります。成功する方法で定義する必要があります。

"ロックダウン"を ".PYファイルを変更できません"または ".PYファイルのすべての変更を監査できます"と定義する必要があります。あなたがコントロールすることができる何かに競技場をシフトする場合、あなたは勝つ小さなチャンスを立てる。

規制を取得してください - あなたのために誰かを解釈することを信用しないでください。

規制が何を必要としているかを絶対に確認してください。他人の解釈を聞かないでください。

+0

良い点:コンピュータにはすべてJREが実行されているため、理論上誰でも自分のJARファイルを持ち込み、Java VMを利用することができます。この場合、Javaサンドボックスは適用されません。おそらく、私がこれを解決できる方法の1つは、既にシステム上にあるものと比較してリスクを定量化することです。リスクは銀行家が理解できる言語です。 –

+0

定量化には役立ちません。私たちが言うように、あなたは「弁護士」を立ち上げ、実際の規制を読む必要があります。しばしば、彼らはかなり簡単で要約がかなり簡単です。 –

3

悲しいことに、Pythonはこのようにあまり安全ではありません。これはかなりよく知られています。標準的なOSの機能よりも非常に薄い層と組み合わされたそのダイナミックな性質は、物事を縛るのを困難にします。通常、最善の選択肢は、アプリを実行しているユーザーの権利が限られていることを確認することですが、実用的ではないと思います。もう1つは、潜在的な被害が少なくともその環境に限定されている仮想マシンで実行することです。

PythonのC APIに関する知識を持っている人は、特定のPythonインタプリタのスコープを明示的に制限し、インポートやファイル書き込みなどを徹底的に制限する特注の.dllを作成できます。あなたが必要としていない機能、そして事実の後に同様に徹底したテストを行うことができます。

+0

私が知る限り、PyPyは最終的にはロックダウンされたPythonインタプリタを提供することができますが、CPythonでは決して実用的ではないと思います。 –

+0

仮想マシン(PyPy、Jython、IronPythonなど)上のPythonの実装は、明らかに環境が提供するどんなサンドボックス化の利点も提供します。しかし、ネイティブコードを使用するライブラリは常に問題になります。 – Kylotan

3

アイデアは、IronPythonを.NET上のAppDomain内で実行することです。 David W.のコメントhereを参照してください。

また、インタプリタがファイルを書き込むのを制限するためにインポートできるモジュールもあります。それはsafeliteと呼ばれています。

これを使うと、Pythonの発明者であっても、そのモジュールのセキュリティを破ることができなかったことを指摘できます。 (2回以上)

私が知っているのは、あなたが心配している唯一のセキュリティではありません。しかし、あなたがしなければならないことは愚かです。だから頼まれた人は "安全なPython"を見て満足するでしょう。

0

私は、実際に何が必要なのかを確認するために、規制を検討することに同意します。本当に「ロックダウンされた」Python DLLが必要な場合は、ここでそれを行う方法があります。それはおそらくしばらく時間がかかり、正しいことを得るのは簡単ではありません。ところで、これは理論的なものなので、私は大仕事から些細な仕事まで手を振っています:-)。

アイデアはPython.DLLを変更して、秘密鍵で署名された.pyモジュールしかインポートしないようにすることです。これは、パブリックキーと、コーディング署名ツールを使用して信頼する各.pyに追加する変数に格納されているコード署名を使用して検証します。

したがって、あなたは持っている:

  1. は、Pythonのソースからのプライベートビルドをビルドします。
  2. ビルドで、import文を変更して、インポート時にすべてのモジュールのコード署名を確認します。
  3. 使用するすべてのモジュールに署名し、アサートすることが安全な(信頼できるコードと呼ばれる)コード署名ツールを作成します。 __code_signature__ = "ABD03402340"のようなもの。各モジュールの__init__.pyファイルでは暗号的に安全です。
  4. コードに署名するための秘密/公開鍵のペアを作成し、秘密鍵を保護します。
  5. おそらく、exec()またはeval()型の機能を持つモジュールには署名したくないでしょう。

IronPythonを使用できる場合は、.NETのコード署名モデルが役立ちます。

私はその素晴らしいアイデアを追求していませんが、最終的にPython.DLLのビルドでは自分の秘密鍵で署名したコードだけを実行すると主張できます。

1

geordiの方法に従います。

それぞれの疑わしいプログラムは、独自の投獄されたアカウントで実行されます。プロセスからのシステムコールを監視する(Windowsでこれを行う方法はわかっているが、この質問の範囲外である)、必要に応じてプロセスを終了する。

関連する問題