Webサーバーログ内の疑わしいアクティビティの迅速な分析

最新のホスティングサイトのほとんどでは、ファイルシステムへのFTPアクセスに加えて、SSHアクセスも提供されています(デフォルトまたは技術サポートのリクエストにより)。 SSHを介して端末で(コマンドラインモードで)サイトファイルを操作できるウェブマスターの機能により、時間を大幅に節約できます。 FTPを介して数十分かかる操作は、数秒でコマンドラインから実行されます。 さらに、コマンドラインモードでSSHを介してのみ実行できる多くの操作があります。



Webマスターは、Unixオペレーティングシステムのすべてのツールを学ぶ必要はありません。最初は基本的なコマンドに精通し、SSH経由でコマンドラインを操作するときにファイルをすばやく検索し、属性を変更し、コピー、削除、および実行するための便利なトリックを追加するだけで十分ですテキストデータ付き。



プロトコルの説明と、SSHを介してホスティングアカウントに接続するプロセスをスキップします。ネットワーク上では、このトピックに関する多くのビデオレッスンや記事を見つけることができます。接続するには、Puttyプログラム(Windows OS)/ Terminal(Mac OS X) SSHを介したホスティングへのアクセス:ホスト、ポート、ユーザー名、パスワード(多くの場合、cPanel、ISPManager、またはホスティングコントロールパネルアカウントへのアクセスと同じ名前とパスワードです)。



それでは、コマンドラインで何が役立つのでしょうか? テキストファイル内の部分文字列をすばやく検索し、テキストデータを並べ替え、フィルター処理できます。 たとえば、Webサーバーのログ(ログ)を分析したり、サイトへの疑わしいリクエストを特定したり、サイトがどのようにハッキングされたかを理解したりします。



サイトで不審なアクティビティに気づいたとしましょう(ゆっくりと開き始め、管理パネルへのアクセスが失われた、サイトからスパムが送信されたなど)。 この場合、最初に行うことは、専用のスキャナーを使用してサイトファイルの悪意のあるコードをチェックすることです。 ただし、サイトのスキャン中に、find / grepコマンドを使用してWebサーバーログの高速分析を実行し、疑わしいスクリプトへの呼び出し、ブルートフォース攻撃(パスワード推測)、またはハッカースクリプト呼び出しがあったかどうかを判断できます。 どうやってやるの? それについては以下。



Webサーバーのログ(ログ)を分析するには、これらのログを有効にし、ユーザーディレクトリでアクセスできるようにする必要があります。 デフォルトで無効になっている場合は、ホスティングコントロールパネルで有効にし、そのような設定がある場合は、最大保存期間(ローテーション)を設定する必要があります。 ログはないが、過去数日間にわたって分析を実行する必要がある場合、それらのホスティングサポートからログを要求することができます。 ほとんどの共有ホスティングサイトでは、ログはログディレクトリにあります。ログディレクトリは、public_html(www)ディレクトリの1つまたは2つ上のレベルにあります。 したがって、ホスティングにログがあり、それらへのパスがわかっていると仮定します。



SSHを介して接続し、Webサーバーログのあるディレクトリに移動します。ログは通常、過去5〜7日間は共有ホスティングに保存されます。 ディレクトリ内のファイルを一覧表示すると、おそらく今日のaccess_logとaccess_log.1.gz、access_log.2.gzなどがあります。これらは前日のアーカイブログです。



POSTメソッドによって実行されたリクエストを使用して、ログの分析を開始できます。



grep 'POST /' access_log
      
      





または

 cat access_log | grep 'POST /'
      
      





出力結果は、さらに分析するために新しいテキストファイルに保存できます。



 grep 'POST /' access_log > post_today.txt
      
      





gzipアーカイブログに対して同じことを行う方法は? これにはzcatコマンドがあります(catに似ていますが、アーカイブファイルの内容を出力します)。



 zcat access_log.1.gz | grep 'POST /' > post_today.txt
      
      





不審なアクティビティを分析するには、利用可能なすべてのログのサンプルを使用することをお勧めします。 したがって、以下の例では、findコマンドを使用します。このコマンドは、すべてのファイルを検索し、それぞれに対応するコマンド(zcatなど)を実行します。



ハッキングや脆弱なスクリプトの検索を識別する方法は?

たとえば、使用可能なすべてのログで、存在しない.phpスクリプトへのすべての呼び出しを見つけることができます。



 grep 'php HTTP.* 404' access_log find . -name '*.gz' -exec zcat {} \; | grep 'php HTTP.* 404'
      
      





-execの代わりに、xargを使用してzcatを呼び出すことができます。



また、アクセスが拒否されたphpスクリプトへのすべての失敗した呼び出しを検索することもできます。



 find . -name '*.gz' -exec zcat {} \; | grep 'php HTTP.* 403'
      
      





ここでは、PHP拡張機能とステータス403に遭遇するクエリを探しています。



次に、スクリプトの成功した呼び出しの数について利用可能なすべてのログを調べ、呼び出しの数でソートし、最も人気のあるもののTOP-50を表示します。 3つのステップで選択を行います:最初にaccess_logを検索し、次にすべてのaccess_logを検索します*。Gz、結果をファイルに出力し、それを使用してソートします。



 find . -name '*.gz' -exec zcat {} \; | grep 'php HTTP.* 200' > php.txt grep 'php HTTP.* 200' access_log >> php.txt cut -d '"' -f2 php.txt | cut -d ' ' -f2 | cut -d '?' -f1 | sort | uniq -c | sort -n | tail -50
      
      





Wordpressのサイトでは、結果は次のようになります。

Wordpressの例は、単に説明のために提供されています。実際、説明されたアプローチとコマンドはこのCMSに限定されません。与えられたコマンドは、PHPフレームワークと管理システム(CMS) 。





  1 /wp-admin/edit.php 1 /wp-admin/index.php 1 /wp-admin/update-core.php 1 /wp-admin/upload.php 2 /wp-admin/users.php 3 /wp-admin/plugins.php 4 /wp-includes/x3dhbbjdu.php 4 /wp-admin/profile.php 4 /wp-admin/widgets.php 38 /wp-admin/async-upload.php 58 /wp-admin/post-new.php 1635 /wp-admin/admin-ajax.php 6732 /xmlrpc.php 14652 /wp-login.php
      
      







結果は、wp-login.phpファイルで14,000以上のヒットがあったことを示していますが、これは正常ではありません。 どうやら、管理パネルにアクセスしようとするサイトに対するブルートフォース攻撃があった(またはまだある)。



xmlrpc.phpの多数の呼び出しも、疑わしいアクティビティを示している可能性があります。 たとえば、XML RPC Pingback Vulnerabilityを使用する他のWordpressサイトは、サイトを介して攻撃(DDOS)する可能性があります。



/wp-includes/x3dhbbjdu.phpへの正常な呼び出しも、リスト上で疑わしいように見えます。これは、標準のWordpressのこのようなファイルはそうではないからです。 分析では、彼はハッカーのシェルであることが判明しました。



したがって、わずか数秒で、スクリプトの呼び出しに関する統計情報を取得し、異常を特定し、サイトをスキャンせずにハッカースクリプトの一部を見つけることさえできます。



次に、サイトをハッキングする試みがあったかどうかを見てみましょう。 たとえば、脆弱なスクリプトを検索したり、ハッカーシェルにアクセスしたりします。 ステータスが404 Not Foundの拡張子が.phpのファイルに対するすべてのリクエストを検索します。



 find . -name '*.gz' -exec zcat {} \; | grep 'php HTTP.* 404' > php_404.txt grep 'php HTTP.* 404' access_log >> php_404.txt cut -d '"' -f2 php_404.txt | cut -d ' ' -f2 | cut -d '?' -f1 | sort | uniq -c | sort -n | tail -50
      
      





今回は、結果は次のようになります。



  1 /info.php 1 /license.php 1 /media/market.php 1 /setup.php 1 /shell.php 1 /wp-admin/license.php 1 /wp-content/218.php 1 /wp-content/lib.php 1 /wp-content/plugins/dzs-videogallery/ajax.php 1 /wp-content/plugins/formcraft/file-upload/server/php/upload.php 1 /wp-content/plugins/inboundio-marketing/admin/partials/csv_uploader.php 1 /wp-content/plugins/reflex-gallery/admin/scripts/FileUploader/php.php 1 /wp-content/plugins/revslider/temp/update_extract/revslider/configs.php 1 /wp-content/plugins/ultimate-product-catalogue/product-sheets/wp-links-ompt.php 1 /wp-content/plugins/wp-symposium/server/php/fjlCFrorWUFEWB.php 1 /wp-content/plugins/wpshop/includes/ajax.php 1 /wp-content/setup.php 1 /wp-content/src.php 1 /wp-content/themes/NativeChurch/download/download.php 1 /wp-content/topnews/license.php 1 /wp-content/uploads/license.php 1 /wp-content/uploads/shwso.php 1 /wp-content/uploads/wp-admin-cache.php 1 /wp-content/uploads/wp-cache.php 1 /wp-content/uploads/wp-cmd.php 1 /wp-content/uploads/wp_config.php 1 /wp-content/wp-admin.php 1 /wp-update.php 1 /wso2.php 2 /wp-content/plugins/dzs-zoomsounds/ajax.php 2 /wp-content/plugins/hello.php 2 /wp-content/plugins/simple-ads-manager/sam-ajax-admin.php 3 /wp-content/plugins/dzs-zoomsounds/admin/upload.php 4 /2010/wp-login.php 4 /2011/wp-login.php 4 /2012/wp-login.php 4 /wp-content/plugins/wp-symposium/server/php/index.php
      
      





結果からわかるように、同様の呼び出しがありました。 「幸運な」誰かが、脆弱性の疑いがあるコンポーネントRevolution Slider /wp-content/plugins/revslider/temp/update_extract/revslider/configs.phpのディレクトリにあるハッカーシェルと、サイトのルートにあるWSOシェルおよび他の多くのハッカーにアクセスしようとしました。脆弱なスクリプト。 幸いなことに、無駄に。

同じfind / cat / zcat / grepを使用して、これらのリクエストが実行されたIPアドレス、アクセス日時のリストを取得できます。 しかし、これはほとんど実用的ではありません。



ハッカースクリプトを見つけるのに役立つことが多いため、成功したすべてのPOST要求を選択する方が便利です。



 find . -name '*.gz' -exec zcat {} \; | grep 'POST /.* 200' > post.txt grep 'POST /.* 200' access_log >> post.txt cut -d '"' -f2 post.txt | cut -d ' ' -f2 | cut -d '?' -f1 | sort | uniq -c | sort -n | tail -50
      
      





結果は次のようになります。



  2 /contacts/ 3 /wp-includes/x3dhbbjdu.php 7 / 8 /wp-admin/admin.php 38 /wp-admin/async-upload.php 394 /wp-cron.php 1626 /wp-admin/admin-ajax.php 1680 /wp-login.php/ 6731 /xmlrpc.php 9042 /wp-login.php
      
      





ここでは、wp-login.phpとxmlrpc.phpへの多くの呼び出し、およびWordpressにあるべきではないスクリプト/wp-includes/x3dhbbjdu.phpへの3つの成功したPOSTリクエストを見ることができます。つまり、これはおそらくハッカーシェルです。



POSTによって行われたすべての403禁止されたリクエストの選択を表示すると便利な場合があります



 find . -name '*.gz' -exec zcat {} \; | grep 'POST /.* 403' > post_403.txt grep 'POST /.* 403' access_log >> post_403.txt cut -d '"' -f2 post_403.txt | cut -d ' ' -f2 | cut -d '?' -f1 | sort | uniq -c | sort -n | tail -50
      
      





私の場合、このように見えました。 それほど多くはありませんが、XML RPC Pingbackを悪用する試みである可能性があります。



  8 /xmlrpc.php
      
      





最後に、今日の人気サイトTOP-50を選択できます。



 cut -d '"' -f2 access_log | cut -d ' ' -f2 | cut -d '?' -f1 | sort | uniq -c | sort -n | tail -50
      
      





取得するもの:



  6 /wp-admin/images/wordpress-logo.svg 6 /wp-admin/plugins.php 7 /wp-admin/post-new.php 8 /wp-admin/async-upload.php 9 /sitemap.xml 10 /wp-admin/users.php 13 /feed/ 13 /wp-admin/ 20 /wp-admin/post.php 22 /wp-admin/load-styles.php 38 /favicon.ico 52 /wp-admin/load-scripts.php 58 /wp-cron.php 71 /wp-admin/admin.php 330 /wp-admin/admin-ajax.php 1198 / 2447 /wp-login.php
      
      





access_logの/wp-login.phpの呼び出しの統計により、サイトでブルートフォース攻撃が継続していることが確認されている(誰かがパスワードを見つけようとしている)ため、IPまたはサーバー認証によってwp-adminへのアクセスを制限する必要があります。ユーザー登録なし、wp-login.phpへのアクセスを制限できます。



したがって、特別なアプリケーションや追加ツールなしで、Webサーバーのログをすばやく分析し、疑わしいリクエストとそのパラメーター(IPアドレス、ユーザーエージェント、リファラー、日付/時刻)を見つけることができます。 これに必要なのは、SSH接続と基本的なコマンドラインスキルです。



All Articles