Shaun Clowes と rfp は、プログラミング プロセス中に PHP および CGI プログラムが遭遇する問題と、アプリケーションの脆弱性を通じてシステムを突破する方法を以前に詳しく紹介しました。この記事では、PHP の
サーバー側の機能のいくつかについて説明します。 PHP のセキュリティを設定および強化します。 CGI スクリプトを作成するときは、さまざまなセキュリティ問題に注意し、ユーザー入力を厳密にフィルタリングする必要があります。しかし、どうすれば靴を濡らさずに海岸を歩くことができるのでしょうか。 phpnuke、phpMyAdmin、その他のプログラムで深刻な問題が発生しました
私のようなギャングが書いた脚本は言うまでもなく、問題です。そこで、先ほどのような深刻な問題が php スクリプトにあると仮定します。
phpnuke が php スクリプトをアップロードできることには大きな問題があります。そのような問題がある場合、スクリプトがシステムを突破しないようにサーバーを設定するにはどうすればよいでしょうか。
1. コンパイル時に既知の脆弱性のパッチに注意してください
4.0.5 以降、PHP のメール関数には 5 番目のパラメーターが追加されましたが、適切にフィルターされていないため、PHP アプリケーションはセーフモードの制限を突破できます。したがって、4.0.5 と 4.0.6 を使用する場合は、コンパイルする前に、php ソース コード パッケージ内の ext/standard/mail.c ファイルを変更して、mail 関数の 5 番目のパラメーターを無効にするか、シェル文字をフィルターする必要があります。 mail.c ファイルの 152 行目、これは次の行です:
if (extra_cmd != NULL) {
の後に extra_cmd=NULL を追加するか、extra_cmd = php_escape_shell_cmd(extra_cmd);
次に php をコンパイルし、パッチを適用します。この脆弱性が見つかりました。
2. php.ini設定ファイルを変更する
phpディストリビューションバージョンのphp.ini-distに基づいて変更を加えます。
1)エラー処理とログ
「エラー処理とログ」セクションでいくつかの設定を行うことができます。最初の検索:
display_errors = On
php はデフォルトでエラー メッセージ表示をオンにします。これを次のように変更します:
display_errors = Off
エラー表示をオフにすると、php 関数実行エラー メッセージはユーザーに表示されなくなりますしたがって、攻撃者がエラー メッセージからスクリプトの物理的な場所やその他の有用な情報を知ることをある程度防ぐことができ、少なくとも攻撃者のブラック ボックス検出に対して一定の障害が生じます。これらのエラー メッセージは、指定したファイルに書き込まれるようにして、次のように変更します。
log_errors = Off
に変更します。
log_errors = On
次に、ファイルを指定して、次の行を見つけます。 ;error_log = filename
前のコメントを削除し、ファイル名を指定したファイル (例:
/usr/local/apache/logs/php_error.log) に変更します
error_log = /usr/local/apache/logs/php_error.log
このようにして、すべてのエラーが php_error.log ファイルに書き込まれます。
2)セーフモード
phpのsafe_mode関数は、多くの機能を制限または無効にし、PHPのセキュリティ問題を大幅に解決できます。 [セーフ モード] セクションを見つけます:
safe_mode = Off
次のように変更します:
safe_mode = On
これにより、safe_mode 機能がオンになります。システムコマンドを実行できる Shell_exec() や `` などの一部の関数は禁止されています。また、exec() などの他の実行関数も禁止されています。
システム()、パススルー()、
Popen() は、safe_mode_exec_dir で指定されたディレクトリ内のプログラムの実行に制限されます。いくつかのコマンドまたはプログラムを実際に実行したい場合は、以下を見つけてください:
safe_mode_exec_dir =
次のように、実行するプログラムのパスを指定します:
safe_mode_exec_dir = /usr/local/php/exec
次に、プログラムを次の場所にコピーします。 /usr/local/php/exec ディレクトリなので、上記のような制限された機能もこのディレクトリ内のプログラムを実行できます。
セーフ モードでの制限された機能の詳細については、メインの php Web サイトの手順を参照してください:
[url]http://www.php.net/manual/en/features.safe-mode.php[/url ]
3)disable_functions
一部の機能の有害性が不明で使用しない場合は、単にこれらの機能を無効にしてください。次の行を見つけます:
disable_functions =
無効にする機能を「=」の後に追加し、複数の機能を「,」で区切ります。
3. httpd.conf を変更する
php スクリプト プログラムが Web ディレクトリでのみ動作することを許可する場合は、httpd.conf ファイルを変更して php の操作パスを制限することもできます。たとえば、Web ディレクトリが /usr/local/apache/htdocs の場合、次の行を
httpd.conf に追加します。
php_admin_value open_basedir /usr/local/apache /htdocs
このように、スクリプトが /usr/local/apache/htdocs 以外のファイルを読み込もうとした場合、エラー メッセージが開かれると、
のようなエラーが表示されます。これ:
警告: open_basedir 制限が有効です。ファイルは /usr/local/apache/htdocs/open.php の 4 行目などに間違ったディレクトリにあります。
4. PHPコードをコンパイルします
Zend は PHP に多大な貢献をしており、PHP4 エンジンは Zend を使用しており、ZendOptimizer や ZendEncode などの多くの PHP 拡張コンポーネントも開発しています。オプティマイザー ZendOptimizer は、[url]http://www.zend.com[/url] に登録するだけで無料になりますか?...
ZendOptimizer-1[1].1.0-PHP_4.0.5-FreeBSD4.0-i386.tar.gz
ZendOptimizer-1[1].1.0-PHP_4.0.5 -Linux_glibc21-i386.tar.gz
ZendOptimizer-1[ 1].1.0-PHP_4.0.5-Solaris-sparc.tar.gz
ZendOptimizer-1[1].1.0-PHP_4.0.5-Windows-i386.zip
オプティマイザーのインストールは非常に便利で、次のものがあります。パッケージ内の詳細な説明書。 UNIX バージョンを例として、オペレーティング システムを明確に確認し、パッケージ内の ZendOptimizer.so ファイルをディレクトリに抽出します (/usr/local/lib であると想定) 2 つの文を php.ini に追加します:
zend_optimizer.optimization_level=。 15
zend_extension="/usr/local/lib/ZendOptimizer.so"
以上です。 phpinfo() を使用して、Zend アイコンの左側に次のテキストを表示します。
with Zend Optimizer v1.1.0, Copyright (c) 1998-2000, by Zend Technologies
これで、オプティマイザーは正常に接続されました。
しかし、コンパイラ ZendEncode は無料ではありません。これは [url]http://www.PHPease.com[/url] の Ma Yong によるデザインです。
... Mi Jiantao's Kangmo胗?/a> [url]http://www.zend.com[/url] に連絡してライセンス契約を取得してください。
PHP スクリプトがコンパイルされると、スクリプトの実行速度が大幅に向上します。スクリプト ファイルでは文字化けが確認されるだけで、攻撃者がサーバー上のスクリプト プログラムとパスワードをさらに分析することができなくなります。 PHP スクリプトにクリア テキストで保存された情報 (mysql パスワードなど) も失われます。ただし、サーバー側でスクリプトを変更するのは面倒なので、ローカルで変更してからアップロードする方が良いでしょう。
5. ファイルとディレクトリの権限設定
アップロードディレクトリを除き、Webディレクトリ内の他のディレクトリとファイルの権限は、nobodyユーザーに書き込みを許可してはなりません
権限。そうしないと、攻撃者がホームページ ファイルを変更する可能性があるため、Web ディレクトリのアクセス許可を適切に設定する必要があります。また、ファイルはセーフモードで読み取られるため、PHP スクリプトの所有者は root であってはなりません。
読み込むファイルの所有者が現在実行中のスクリプトの所有者と一致しないと読み込むことができない機能に制限があり、そうでない場合、エラー表示がオンになっている場合、次のようなエラーが表示されます。 :
警告: セーフモードの制限が適用されています。uid が 500 のスクリプトは次のとおりです。
uid 0 が所有する /etc/passwd へのアクセスは許可されていません
3 行目の /usr/local/apache/htdocs/open.php
これにより、/etc/passwd などの多くのシステム ファイルが読み取られるのを防ぐことができます。
アップロード ディレクトリとアップロード スクリプトの所有者も同じに設定する必要があります。そうしないと、safe_mode でエラーが発生します。
6. Mysql の起動許可設定
Mysql は root で起動しないように注意してください。別の mysqladm ユーザーを作成するのが最善です。 /etc/rc.local のような文をシステム起動スクリプトに追加できます:
su mysqladm -c "/usr/local/mysql/share/mysql/mysql.server start"
このようにして、mysqladmin は次のようになります。システムの再起動後に自動的に使用されます。 ユーザーが mysql プロセスを開始します。
7. ログ ファイルとアップロード ディレクトリの確認と
ログの表示は、このような大きなログ ファイルから攻撃の痕跡を見つけるのと大きく関係しており、干し草の山から針を探すようなものです。 1つ。 Web によってアップロードされたディレクトリ内のファイルも頻繁にチェックする必要があります。プログラムに問題があり、ユーザーがスクリプトの実行など、違法なファイルをアップロードした可能性があります。
8. オペレーティング システム自体のパッチ
同様に、システム内の既知の脆弱性にパッチを適用することは、システム管理者の最も基本的な責任であり、最後の防御線でもあります。
上記の設定後は、難攻不落とは言えませんが、PHPスクリプトプログラムに重大な脆弱性があったとしても、攻撃者のテストにある程度の支障をきたすことはありません。実際に損害を与える可能性があります。