web-dev-qa-db-ja.com

Webサーバーでのコードインジェクションの検出

最近、ホストされているWebサイトに挿入された悪意のあるコードでハッキングされたWebサーバーの1つを見つけました。私がサーバーを他の人と共有し、誰かがサーバーに安全でないスクリプト/ウェブサイトを置いたので、それは私のせいではありませんでした。幸いにも、損傷やデータの損失はありませんでした。しかし、それは私に考えさせられました。私は完全にその違反について偶然知りました。私は単にGitリポジトリから別のスクリプトにいくつかの更新をプルしようとしただけで、作業コピーのコミットされていない変更されたファイルに関するエラーが返されました。

ほとんどの場合、Webサーバー(共有ホスティング)上のシェルにはアクセスできず、FTP経由でアップロードしてWebサイトを更新し、単にファイルを上書きします。 コードインジェクションを検出する方法はそのような状況ですか?

また、Webサーバー上のシェルにアクセスできる状況についてはどうでしょうか。 あるかその他(より良い)コードインジェクションを検出するための方法/ツール

4
Michal M

概要コードインジェクションに対する最善の防御策は、最初に防止するにすることです。一般的に、悪意のあるコードがシステムに侵入すると、それを検出する信頼できる方法はありません。検出についてお伺いしたことは承知しておりますが、検出ではなく予防に重点を置くをお勧めします。

防止。では、コードインジェクションをどのように防止しますか?一般的に言って、アクセス制御、優れたセキュリティ衛生、および安全なソフトウェア開発プロセスを通じて。

  • Webサーバーがある場合は、他の人と共有しないでください。仮想化を使用して複数のテナントを分離するのは簡単です。たとえば、商用の共有ホスティングサービスから共有ホスティングを購入した場合、彼らは何らかの形の仮想化を使用して、顧客を互いに分離します。 (これはFTPアクセスとシェルアクセスとは関係ありません。顧客が互いに隔離されている限り、ホスティングプロバイダーがシェルアクセスまたはFTPアクセスのどちらを提供するかは問題ではありません。他の顧客が確実にアクセスできるようにする必要があります。仮想コンテナのみにアクセスし、仮想コンテナにはアクセスしないでください。同様に、パスワードや暗号化キーを他のユーザーと共有しないでください。

  • サーバーのセキュリティ侵害を防ぐために、適切なシステム管理方法を実践してください。ソフトウェアを完全に更新してパッチを当ててください。ファイアウォールを使用して、公開したいサービスのみへのアクセスを制限します。リモートログインには、公開鍵認証でSSHを使用します。パスワードを使用する必要がある場合は、長くて強力なパスワードを選択し、決して共有しないで、暗号化されたチャネルでのみ送信するようにしてください。

  • 適切なソフトウェア開発プロセスを実践する。作成するソフトウェアにセキュリティの脆弱性を導入しないでください。本全体がその方法について書かれているので、ここでは詳しく説明しません。ソフトウェアにセキュリティの脆弱性がないことを確認するために、重要なフラグを立てます。

5
D.W.

一部、私は D.W。 に同意します。防止は検出よりも優れていますが、機能する場合はのみです。マシンが危険にさらされると、適切な(または他の)検出メカニズムが導入されていないことに気付くでしょう。一般的に、私は両方に焦点を当てようとしますが、いくつかの点で検出はもう少し注意を引くかもしれません。

あなたのリスクプロファイルを持つ誰か(基本的な共有ホスティングプロバイダーを持つ中小企業の所有者など)は、通常、時間、お金、労力を費やしたり、セキュリティソリューションに完全に投資するために必要な変更を行ったりすることができません。 予防検出、およびrecovery

注、これはこれらの「プロング」のそれぞれについての完全な議論ではなく、思考のジュースを動かすためにここにあります。他の人と一緒に、あなたが実装することにしたことを聞いてみたいです!

予防

予防に多くの時間を費やすことはありません。 D.W.彼の post のいくつかの出発点を指摘し、安全なコーディングに関するオンラインのリソースがたくさんあります。 OWASPおよびMozillaガイドから始めることをお勧めします。

https://www.owasp.org/index.php/Category:OWASP_Guide_Project

https://www.owasp.org/index.php/Cheat_Sheets

http://code.google.com/p/owasp-development-guide/wiki/Introduction

https://wiki.mozilla.org/WebAppSec/Secure_Coding_Guidelines

検出

最新のマルウェア(および侵入者)の中には、被害者のOSの内部に深く侵入し、検証可能な削除が不可能になる可能性があるものもあります。ただし、予防にのみ焦点を当てるなど、すべての卵を1つのバスケットに入れることはお勧めしません。防止のみに焦点を合わせると、アーチファクトや証拠を収集している可能性がある妥協点が多く残されます。

共有ホスティング環境は、セキュリティイニシアチブで何をする必要があるかという点で、カスタマイズ性が常に最適であるとは限らないため、プロバイダーに大きく依存しています。 (参照 共有Webホスティングサーバーを安全に保つ方法は?

インシデントは、OSの侵害につながる共有ホスト上のサイトのSQLインジェクションなど、大規模な侵害の一部である可能性が高いです。次に、そのスクリプトは* .phpを検索して自分自身を挿入します。感染すると、ワーム/攻撃者は次のホストに移動します。これは正確には何が起こったのかもしれませんが、それは一般的なケースであり、一般的な攻撃パターンであり、高度な攻撃や検出およびクリーンアップが不可能なタスクではありません。

ローカルに展開できるものに応じて、感染の兆候を探すサードパーティのサービスを使用することをお勧めします。たとえば、

http://www.qualys.com/products/qg_suite/malware_detection/

http://www.stopthehacker.com/

別のオプションは、単純なスクリプトを使用してすべてのファイルのチェックサムを比較し、異なる場合はメールを送信することです。次に、gitフックを使用して、スクリプト構成を現在の「適切な」チェックサムで更新できます。 SSL証明書の確認、ヘッダーの検証など、他のことについても、このような単純なスクリプトでうまくいきました。

回復

検出メカニズムが整ったところで、午前3時に恐ろしいメールを受信するとどうなりますか?明確なプロセスを設けることで、ダウンタイムと白髪を大幅に減らすことができます。

あなたの質問でgitについて述べたように、私はあなたが現在のユーザーであると仮定します。 Gitを使用してWebサイトを管理する方法についての良い投稿がいくつかあります。以下に詳述されているようなプロセスを使用することをお勧めします。

http://danielmiessler.com/study/git/#website

https://stackoverflow.com/a/2129286/8566

http://feed.nixweb.com/2008/11/24/using-git-to-sync-a-website/

覚えておいてください、それはあなたのコードだけであり、必ずしもデータベースやアップロードされたコンテンツなどのすべてのデータではありません。

1
Gerry