web-dev-qa-db-ja.com

PHP eval(gzinflate(base64_decode(..)))ハック-再発を防ぐ方法は?

最近、Webサイトがハッキングされ、次のようなPHPコードがindex.phpファイルに挿入されました。

eval(gzinflate(base64_decode( 's127ezsS/... bA236UA1')));

このコードにより、別のphpファイル(cnfg.php)が含まれ、医薬品関連のスパムが表示されていました(ただし、googlebot et alにのみ表示されていました)。これはワードプレスの製薬会社のハックのように見えますが、上記のソフトウェアを実行していない点が異なります。その後、コードは削除されましたが、今後このような事態が発生しないようにしたいと思います。

これはかなり広範囲の問題であり、原因となる無数のセキュリティホールが存在する可能性があることを理解していますが、過去にこのような問題の経験がある人がいる場合に備えて、これを公開したいと思いました。

これらのphpファイルのアップロードを可能にする潜在的なセキュリティホールは何ですか?そして、これが将来起こらないようにするにはどうすればよいですか?

乾杯

2
1nsane

それがどのようにしてそこに到達したかを知る必要があります。

  • 攻撃者はsftp/scpを介してファイルシステムにアクセスしましたか?
    • これが発生した場合は、リモートアクセスメソッドをロックする必要があります。
  • 攻撃者は、ファイルの変更を許可するアップローダースクリプトまたは既存のスクリプトのバグを使用しましたか?
    • スクリプトを修正し、スクリプトとWebコンテンツのアクセス許可を変更して、Webサーバープロセスがそれらを変更できないようにします。 Webサーバーは、データディレクトリ内のファイルの変更に限定する必要があります。スクリプトとファイルは、通常、Webサーバーによって所有または書き込み可能であってはなりません。
  • スクリプトは、あなたが知らない悪意のあるソフトウェアの一部として提供されましたか?
    • wordpressテンプレートの一部として含まれているようなものを見てきました。無作為にユーザーがいくつかのランダムなサイトからテンプレートをダウンロードしました。これらのテンプレートには、外部Webサーバーからコードを実行する機能が含まれていました。これと不十分な権限設定により、攻撃者は他のものを変更することができました。
3
Zoredache

ただの警告。

FTPクライアントとしてFileZillaを使用している場合、FilezillaプレーンテキストファイルからFTP資格情報を取得し(そうです!)、その情報を使用してそのマルウェアコード(#b58b6f#タイプのコードで示されます)を挿入するマルウェアがあります。 「gzinflate(base64_decode)」コマンドの周り。これにより、ファイルが攻撃/侵害されます。

%APPDATA%/ Roaming/Filezillaフォルダーを調べます。そこにあるXMLファイルの1つには、すべてのFTP Webサイトの資格情報(ユーザー/パスワード/その他)がプレーンテキストで含まれています!そして、FileZillaの人々はその明らかなセキュリティホールを修正することを拒否します。

私の推奨事項:コンピューターからFileZillaを削除します(APPDATAフォルダー内のフォルダーを手動で削除する必要があります)。

安全なFTPクライアントが必要な場合は、WinSCP(www .winscp .net)を使用します。マスターパスワードを設定すると、サイトのすべての資格情報が暗号化されます。

ただの警告....リック... J

3
Rick Hellewell

これがどのようにして発生する可能性があるかについては、非常に大きな可能性があります。これを制限するのに役立つ情報の1つは、所有しているホスティングのタイプ(共有、専用、仮想)とホストの種類です。いくつかの潜在的なエントリポイントは

  • 管理者アカウントの侵害
  • your ftp/ssh/web console/etcアカウントのプロバイダーとの侵害。暗号化されていないプロトコル(FTPなど)を介してパスワードを送信したことがある場合は、それをやめてください。
  • your独自のローカル開発マシンの妥協
  • 脆弱性は、Apacheやそのモジュールなど、サーバー上の任意のサーバーソフトウェアです。
  • サイトのPHP)におけるアプリケーションレベルの脆弱性:

    • サードパーティのソフトウェアを使用していますか?使用している場合は、すべて最新ですか?
    • このサイトでかなりの量の独自のプログラミングを作成しましたか?もしそうなら、あなたが穴を書くことができたかもしれない百万の方法があります。ユーザー入力(REQUEST/GET/POST/COOKIES/FILES)から発信されたデータに触れるメソッドを確認します。ファイルのアップロードを許可する場合、それらのファイルをフィルタリングせずにWebで表示可能なディレクトリに保存しますか?もしそうなら、誰かが.phpスクリプトをアップロードして、それを表示することができます。 include/requireステートメントは、次のようなテンプレートソリューションを使用する場合、特にホットターゲットです。

    <?php include $_GET['page'] . '.php'; ?>

再発を防ぐ方法は?

  • ホストのセキュリティを絶対に信頼していることを確認してください。それらを呼び出して、セキュリティポリシー、脆弱性が発生したときにサービスにパッチを適用する速度などについてグリルします。
  • Cheapo共有ホスティングをスキップし、専用または仮想専用の料金を支払います。サーバーを使用する人が少ないということは、攻撃するベクトルが少ないことを意味します
  • 独自のサードパーティアプリケーション/ライブラリを最新の状態に保ちます。メーリングリストやRSSフィードなどにアクセスして、リリースの最新情報を入手してください。
  • 独自のコードを監査します。あなたがこれについて十分に経験されていないならば、それの代償である誰かを見つけてください。
  • GitやSubversionなどのバージョン管理でサイトを維持します。プロダクションディレクトリを作業コピーとして保持し、コードベースからの変更を簡単に検出できるようにします(ただし、.gitや.svn dirsなどのメタデータへのアクセスは必ずブロックしてください)。
2

このコードのアップロードを許可した脆弱性を見つける必要があります。

私は同様のハッキングを経験しましたが、FTPアップロードを許可するサードパーティのJoomla拡張機能によってアップロードされていることが確認されました。

私の場合、Joomla拡張機能を削除し、Web開発者に再度インストールしないように指示しました。

状況によっては、eval、base64_decode、gzinflateを無効にすることをお勧めします。

あなたは行を探すことによってphp.iniでこれを行うことができます

disable_functions = 

に設定します

disable_functions = eval, base64_decode, gzinflate

変更を有効にするには、Webサーバーを再起動する必要があります。

感染したファイルをclamscanでスキャンしたところ、マルウェアであると識別されたことにも言及する価値があります。 ClamAVバージョン0.96.1を実行しています

現在、手元にあるメモがないため、正確な結果をお伝えすることはできません。

そうすることが現実的である場合は、コードに対してclamscanを定期的に(おそらく1時間ごとに)実行して、将来の感染を監視するジョブをスケジュールできます。

2

http://www.hardened-php.net/suhosin/ を試してみることもできます。これにより、とりわけeval()が無効になる可能性があります。 cnfg.phpがリモートでホストされていた場合、それが含まれることもできなかった可能性があります。

可能であれば、phpファイルへの書き込みアクセスとしてWebサーバーが実行されているユーザーを許可しないでください。

1
Mark Wagner