2012-03-25 10 views
4

私はWebアプリケーションハニーポット用のPHPサンドボックスを開発中です。 PHPサンドボックスは、RFI攻撃の一部として注入されたかもしれないPHPファイルを解析します。安全な環境でファイルを実行し、結果を返し、PHPスクリプトの出力を埋め込む必要があります。私たちは、これが真の応答であると信じるように攻撃者をだますことを望み、攻撃の次のステップを続行します。PHPサンドボックスのセキュリティ問題

サンドボックスを構築するために、Advance PHP Debugger(ADP)を使用しました。 rename_functionoverride_functionを使用すると、脆弱なPHP関数が書き直されました。 execdisk_free_spaceなどの一部の機能は、偽の返信を送信するために書き直されました。他のすべての関数は何も返さない。 Here'sは、考慮されている機能の完全なリストです。

また、入力スクリプトはサンドボックス内で最大10秒間だけ実行されます。その後、サンドボックスプロセス全体が終了します。

  1. このリストは十分ですか?これによってサンドボックスはWebアプリケーションの一部として十分に安全になりますか?

  2. このようなブロック機能を呼び出すと、さらにセキュリティ対策が講じられますか?

  3. 最後に、これはハニーポットです。だから、私たちの返信をできるだけ真の返答に近づけたいと思っています。だから、dns_check_recordgethostbynameのようなDNS関数呼び出しをブロックすることで、スクリプトの実行範囲が不必要に制限されます。 (なぜ彼らが最初に存在するのかわからない)

    要するに、私はどの要素をリストから追加/削除すべきかを知りたい。

  4. これについてのその他のご提案/アドバイスは高く評価されます。

+0

実際にそれを実行せずにコードの出力?私は、ラウンドアバウトの方法で出力を集めるようにコードの非常に複雑な分析を行うことができると思いますが、それ以外のものはありますか?そして、これはあまり役に立ちませんが、私の提案はあなたがこれをやっていないということです。何かが誤ってあなたのハニーポットをスライドすると、おっと!侵害されたサーバー。それは決して楽しいものではありません。 – Corbin

+0

なぜこれが必要なのか分かりませんか?最初にRFI攻撃を防ぐことはできませんか?または、これは潜在的に既に発生しているし、あなたのサーバー上のどのコードも侵害されていないことを確認しようとしていますか? – rdlowrey

+2

非常に危険なプロジェクトのように聞こえます。私は、このケースで完璧なサンドボックスを確保する唯一の方法は、実際のハニーポットを別のサーバー(おそらく迅速なリロードを可能にするVM)にして、実際のサーバーにフルPHPスクリプトを2番目のサーバーに渡すことです。あなたが何かを忘れた場合、このように深刻なことは損なわれません。 – MitMaro

答えて

2

私はそれは非常に難しい、不可能ではない場合は、すべての可能な有害作用を予測することは、それらの出力(例えば、highlight_fileまたはその別名SHOW_SOURCEはあなたのリストにない)偽の順に呼び出しを考えます。さらに、実際のアプリとハニーポットの両方に同じサーバーを使用すると、その他の問題が発生します。アプリは拡張機能を使用していますか?それ以上の機能があれば、ブロック/偽装する必要があります。これらの内線番号の1つを更新するとどうなりますか?新しいセキュリティホールを再確認する必要があります。また、悪意のあるファイルがハニーポットにアップロードされ、メインアプリケーションからアクセスされるとどうなりますか?それが起こらないように対策をとることは確かですが、ある時点でバグがあった場合、有害なコードはすでにサーバー上にあるでしょう...私には安全ではありません。

私は、MitMaroが推奨されています。その場合、VM自体はサンドボックスと同じくらい良い状態になります。多くの努力をするだけで、メインアプリケーションのセキュリティを損なうことなく、VM内で実行することができます。

+0

+1提案した関数の例に感謝します。また、[Servefault](http://serverfault.com/questions/374663/need-a-vm-for-running-a-php-sandbox)にVMを要求する質問を掲載しました。ご提案があれば、そこにお答えください。 – Phani

関連する問題