web-dev-qa-db-ja.com

cgi-bin / phpからサーバーを保護する方法POSTリクエスト攻撃

次の内容を含むPOSTサーバーへのリクエストを受け取りました。

%63%67%69%2D%62%69%6E/%70%68%70?%2D%64+%61%6C%6C%6F%77%5F%75%72%6C%5F%69%6E%63%6C%75%64%65%3D%6F%6E+%2D%64+%73%61%66%65%5F%6D%6F%64%65%3D%6F%66%66+%2D%64+%73%75%68%6F%73%69%6E%2E%73%69%6D%75%6C%61%74%2D%64+%64%69%73%61%62%6C%65%5F%66%75%6E%63%74%69%6F%6E%73%3D%22%22+%2D%64+%6F%70%65%6E%5F%62%61%73%65%64%69%72%3D%6E%6F%6E%65+%2D%64+%61%75%74%6F%5F%70%72%65%70%65%6E%64%5F%66%69%6C%65%3D%70%68%70%3A%2F%2F%64+%63%67%69%2E%66%6F%72%63%65%5F%72%65%64%69%72%65%63%74%3D%30+%2D%64+%63%67%69%2E%72%65%64%69%72%65%63%74%5F%73%74%61%74%75%73%5F%65%6E%76%3D%30+%2D%64+%61%75%74%6F%5F%70%72%65%70%65%6E%64%5F%66%69%6C%65%F%69%6E%70%75%74+%2D%6E

URLデコードを使用すると、これは次のように変換されます。

cgi-bin/php?-d allow_url_include=on -d safe_mode=off -d suhosin.simulation=on -d disable_functions="" -d open_basedir=none -d auto_prepend_file=php://input -d cgi.force_redirect=0 -d cgi.redirect_status_env file=php://input -n

それは buntu 14.04のNginx経由の奇妙なURLリクエスト、悪意のあるユーザーは何をしようとしているのですか? に似ているようです。リクエストはどのシナリオで機能しますか? 404を送信したログを確認しましたが、脆弱性のある他のボックスがないことを確認したいと思います。

5
Dovid Bender

何年も前に、人々はPHPをCGIスクリプトとして(FastCGIでさえも、まだ存在していませんでした!)実行していたため、Apacheを低パフォーマンスのprefork MPMから新しい、ややパフォーマンスの高いワーカーMPM(そしてnginxはまだ知られていない、それはずっと前のことでした。)サーバーがCGIスクリプトとしてPHPを実行するように設定されている場合、 PHPインタプリタは/cgi-bin/phpに直接あります。

PHPは技術的にはまだCGIとしてインストールできますが、人々が望んでいたほどパフォーマンスが良くないことがわかり、FastCGIが発明されました。現在のすべてのハイパフォーマンスPHPサイトはFastCGI/FPMを使用します。一般的にnginxまたはApacheのイベントMPMを使用します。FastCGI/ FPMは許可されていないため、これに対して脆弱ではありませんPHP /cgi-binを介して直接呼び出されます。

サーバーがPHP CGIとして実行される)の古い腐敗した山でない場合は、このリクエストについて心配する必要はありません。

15
Michael Hampton

一般的な問題は コマンドインジェクション です。 404を送信した最新のWebサーバーは特にこれに対して脆弱ではありませんが、phpの実行方向を許可する古い安全でないCGI構成によって簡単になりました。

これを防ぐには、不要な場所でCGIを削除し、ファイル権限とSELinuxでWebサーバーをロックダウンし、Webアプリを保護します。 Open Web Application Security Project Testing Project には、いくつかの一般的なアドバイスがあります。

5
John Mahowald

悪意のある攻撃者、またはバグ報奨金の一部を取得したい侵入者は、Webアプリケーションの作成時またはWebサーバーの構成時に発生する一般的なエラーについてWebサイトをテストします。これらの攻撃は、あなた、あなたのベンダー、Webアプリケーション開発者、またはあなたのITチームが小さなエラーを犯したか、新しく発見されたセキュリティ問題のためにあなたのソフトウェアや設定を最新に保つことを忘れた可能性があるという事実に基づいています。インターネット上のすべてのサーバーに対して多くの既知の問題を悪用しようとしています。システムを最新の状態に維持せず、使用しているプラ​​ットフォームまたはソフトウェアスタックの最新のセキュリティ問題に関する情報を入手しないと、最終的にセキュリティ(または訪問者のセキュリティ)が危険にさらされます。

攻撃の成功に対してWebアプリケーションを強化する方法はいくつかあります。

  • 常に、OWASPが優れた出発点であるように、優れたセキュリティ慣行を使用するようにWeb開発者をトレーニングします。 https://www.owasp.org/index.php/OWASP_Guide_Project
  • アプリケーションをWebアプリケーションファイアウォールの背後に配置します。 (WAF)WAFはすべての受信リクエストをスキャンし、正常に機能していないように見えるリクエストを単にドロップします。使いやすいクラウドソリューションは https://www.cloudflare.com/lp/waf-a/ ですが、クラウド、データセンターにインストールできるアプライアンスなど、他にもたくさんあります。サーバーで実行できるソフトウェア(パロアルト、Fortigate、チェックポイント、ウォッチガードなど)、または https://modsecurity.org (現時点ではパッケージマネージャーのように見える)などの無料のオプションがあります。ディストリビューションはこれのためにnginxプラグイン/モジュールをピックアップする必要がありますが、そこにはApacheモジュールがあります)
  • ペンテスターに​​インフラストラクチャを(定期的に)調査させます。システムに関するドキュメントと情報を提供すると、インターネット上のランダムな攻撃者よりも盲目的にこれらのテストを実行できるようになります。おそらく、ランダムよりも早く問題を発見する可能性があります。攻撃者とあなたはそれらを修正することができます。これを自分でやりたい場合も、OWASPは素晴らしいリソースです https://www.owasp.org/index.php/OWASP_Testing_Project
  • wAFの横に、多くの無効な要求を行うユーザーをブロックするソフトウェアをインストールできます。例えば総当たり(ssh、基本認証、ftp、mysql ...)ログイン、多くの内部サーバーエラー、または多くのページが見つからないことを生成します。このための私のお気に入りのソフトウェアは、fail2ban( https://www.fail2ban.org/ )をインストールすることです。これにより、ログファイルがスキャンされ、ファイアウォールルールを使用して問題のあるIPが数分間ブロックされます。

これらのオプションはどちらも100%の保証はありません。すべてのオプションを実行することをお勧めします。

Centos7システムで実行できるすべてのセキュリティ/強化対策の完全なリストについては、RedHatによる次のガイドに従ってください。 https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/ html/security_guide/index/index

4
Jens Timmerman