IIS監視に推奨されるLogParserクエリ?


86

Stack Overflowが拡大するにつれて、IISログを詳しく調べて、問題のあるHTTPクライアント(不正なWebスパイダー、1秒ごとに更新するように設定された大きなページを持つユーザー、不十分な記述の1回限りのWebスクレーパーなど)を特定し始めていますページをインクリメントしようとするユーザーは、何百万回もカウントされます。

IISログファイルをポイントしたときに奇妙な点や異常な点のほとんどを特定するのに役立つLogParserクエリをいくつか作成しました。

URLごとの上位帯域幅使用量

SELECT top 50 DISTINCT 
SUBSTR(TO_LOWERCASE(cs-uri-stem), 0, 55) AS Url, 
Count(*) AS Hits, 
AVG(sc-bytes) AS AvgBytes, 
SUM(sc-bytes) as ServedBytes 
FROM {filename} 
GROUP BY Url 
HAVING Hits >= 20 
ORDER BY ServedBytes DESC
urlがavgbyteにヒットした
-------------------------------------------------- ---- ------- -------
/favicon.ico 16774 522 8756028
/content/img/search.png 15342 446 6842532

URLによる上位ヒット

SELECT TOP 100 
cs-uri-stem as Url, 
COUNT(cs-uri-stem) AS Hits 
FROM {filename} 
GROUP BY cs-uri-stem 
ORDER BY COUNT(cs-uri-stem) DESC
URLヒット
-------------------------------------------------- ----
/content/img/sf/vote-arrow-down.png 14076
/content/img/sf/vote-arrow-up.png 14018

IP / User-Agentによる上位帯域幅とヒット

SELECT TOP 30
c-ip as Client, 
SUBSTR(cs(User-Agent), 0, 70) as Agent, 
Sum(sc-bytes) AS TotalBytes, 
Count(*) as Hits 
FROM {filename} 
group by c-ip, cs(User-Agent) 
ORDER BY TotalBytes desc
クライアントユーザーエージェントtotbytesヒット
------------- ------------------------------------- -------- --------- -----
66.249.68.47 Mozilla / 5.0 +(compatible; + Googlebot / 2.1; 135131089 16640
194.90.190.41 omgilibot / 0.3 ++ omgili.com 133805857 6447

IP /ユーザーエージェント別の時間別のトップ帯域幅

SELECT TOP 30
TO_STRING(time, 'h') as Hour, 
c-ip as Client, 
SUBSTR(cs(User-Agent), 0, 70) as Agent, 
Sum(sc-bytes) AS TotalBytes, 
count(*) as Hits 
FROM {filename} 
group by c-ip, cs(User-Agent), hour 
ORDER BY sum(sc-bytes) desc
hrクライアントユーザーエージェントtotbytesヒット
-------------- ----------------------------------- ------ -------- ----
9 194.90.190.41 omgilibot / 0.3 ++ omgili.com 30634860 1549
10 194.90.190.41 omgilibot / 0.3 ++ omgili.com 29070370 1503

IP /ユーザーエージェント別の時間別上位ヒット

SELECT TOP 30
TO_STRING(time, 'h') as Hour, 
c-ip as Client, 
SUBSTR(cs(User-Agent), 0, 70) as Agent, 
count(*) as Hits, 
Sum(sc-bytes) AS TotalBytes 
FROM {filename} 
group by c-ip, cs(User-Agent), hour 
ORDER BY Hits desc
hrクライアントユーザーエージェントがtotbytesをヒット
-------------- ----------------------------------- ------ ---- --------
10 194.90.190.41 omgilibot / 0.3 ++ omgili.com 1503 29070370
12 66.249.68.47 Mozilla / 5.0 +(compatible; + Googlebot / 2.1 1363 13186302

もちろん、{filename}は次のようなIISログファイルへのパスになります。

c:\working\sologs\u_ex090708.log

IISの優れたLogParserクエリのために多くのWeb検索を行いましたが、貴重なものはほとんど見つかりませんでした。上記の5は、深刻な問題のあるクライアントを特定するのに非常に役立ちました。しかし、私は疑問に思っています-私たちは何が欠けていますか?

IISのログを(できればLogParserクエリを使用して)スライスおよびダイス処理して、統計的な異常を調べるために他にどのような方法がありますか?サーバーで実行するIIS LogParserクエリはありますか?



最上位の帯域幅使用状況クエリには、DISTINCTキーワードがあります。それは何の役に立つのですか?
ヤクブシュトゥルク

回答:


19

ハッキング活動やその他の攻撃の良い指標は、1時間あたりのエラー数です。次のスクリプトは、25を超えるエラーコードが返された日付と時間を返します。サイトのトラフィック量(およびWebアプリケーションの品質;-))に応じて値を調整します。

SELECT date as Date, QUANTIZE(time, 3600) AS Hour, 
       sc-status as Status, count(*) AS ErrorCount
FROM   {filename} 
WHERE  sc-status >= 400 
GROUP BY date, hour, sc-status 
HAVING ErrorCount > 25
ORDER BY ErrorCount DESC

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

日付時間ステータスErrorCount
---------- -------- ------ ------
2009-07-24 18:00:00 404 187
2009-07-17 13:00:00 500 99
2009-07-21 21:00:00 404 80
2009-07-03 04:00:00 404 45
...

次のクエリは、1つのIPアドレスからの単一のURLで異常に多数のヒットを検出します。この例では500を選択しましたが、エッジケースのクエリを変更する必要がある場合があります(たとえば、Google LondonのIPアドレスを除く;-))。

SELECT DISTINCT date AS Date, cs-uri-stem AS URL,
      c-ip AS IPAddress, Count(*) AS Hits
FROM  {filename}
GROUP BY date, c-ip, cs-uri-stem
HAVING Hits > 500
ORDER BY Hits Desc
日付URL IPアドレスヒット
---------- ----------------------------------- ----- ---------- ----
2009-07-24 /Login.aspx 111.222.111.222 1889
2009-07-12 /AccountUpdate.aspx 11.22.33.44 973
2009-07-19 /Login.aspx 123.231.132.123 821
2009-07-21 /Admin.aspx 44.55.66.77 571
...

2番目のクエリについては、既に行っています。いくつかのクエリのグループ化に注意してください。IPとユーザーエージェントでは、これは両方の長所です。ユーザーエージェントがnullの場合、IPと同じであり、そうでない場合、それはより多くの情報です。
ジェフアトウッド

わかりました、ジェフ、ユーザーエージェントを追加するのは理にかなっています。申し訳ありませんが、悪い短期記憶と注意欠陥障害の組み合わせ。:-)
飛び散る

交換havingLimit n調整する良い方法のための最初のクエリを作るかもしれない
BCS

6

正当なトラフィックを除外(および範囲を拡大)するためcs(Cookie)に検討できることの1つは、IISログで有効にし、javascriptを使用して小さなCookieを設定するコードを少し追加し、を追加することWHERE cs(Cookie)=''です。

ほんの少しのコードのため、すべてのユーザーは手動でCookieを無効にしない限り(一部の人はそうする可能性があります)、そのユーザーが実際にJavascriptをサポートしないボット(たとえば、wget、httpclientなどはJavascriptをサポートしていません)。

ユーザーが大量のアクティビティを行っているが、Cookieを受け入れてJavaScriptを有効にしている場合、正当なユーザーである可能性が高いと思われます。 、ボットである可能性が高くなります。


6

申し訳ありませんが、まだコメントできませんので、私は回答を余儀なくされました。

「URLによる上位帯域幅使用」クエリには小さなバグがあります。ほとんどの場合、ページのリクエストを受け取ってファイルサイズを掛けても問題ありませんが、この場合、クエリパラメータに注意を払っていないため、わずかに-非常に不正確な数字。

より正確な値を得るには、MUL(Hits、AvgBytes)の代わりにServedBytesとしてSUM(sc-bytes )を実行します。


6


4

最長のリクエスト(ステムやクエリ)、およびサーバーが受信したバイト数が最も多いリクエストを探したい場合があります。また、受信したバイトとIPでグループ化するものも試してみます。これにより、特定の要求形式が1つのIPで繰り返される可能性が高いかどうかを確認できます。

SELECT TOP 30
cs-uri-stem,
cs-uri-query,
c-ip as Client, 
SUBSTR(cs(User-Agent), 0, 70) as Agent, 
cs-bytes,
c-ip,
FROM {filename} 
WHERE cs-uri-stem != '/search'
ORDER BY LEN(cs-uri-query) desc

SELECT TOP 30
COUNT(*) AS Hits
cs-uri-stem,
cs-uri-query,
c-ip as Client, 
SUBSTR(cs(User-Agent), 0, 70) as Agent, 
cs-bytes,
c-ip,
FROM {filename} 
GROUP BY c-ip, cs(User-Agent), cs-bytes 
ORDER BY Hits desc

また、リクエストIPの1時間と1日のグループのヒット数をカウントするか、リクエストIPをその時間とグループ化して、スクリプトである可能性のある定期的な訪問があるかどうかを確認します。これは、1時間ごとのヒットの小さな変更です。

任意の非プログラミングのサイトでは、SQLのキーワードのログを検索することも良いアイデア、のようなものであるSELECTUPDATEDROPDELETEのようなおよび他の奇妙FROM sys.tables論理和、一緒にIPのカウントが便利と思われます。これらを含むほとんどのサイトでは、単語がURIのクエリ部分に表示されることはめったにありませんが、ここでは、URIステムおよびデータ部分に正当に表示される場合があります。ヒットのIPを逆にして、作成済みのスクリプトを実行している人を確認するのが好きです。私が見る傾向がある.ru.br.cz.cn。判断するつもりはありませんが、今後はブロックする傾向があります。私はこれまで私が言うのはあまり見ませんが彼らの防衛では、これらの国々は、一般的に主に移入され.in.fr.usまたは.au同じことをやって。

SELECT TOP 30
c-ip as Client, 
SUBSTR(cs(User-Agent), 0, 70) as Agent, 
cs-uri-stem,
LOWER(cs-uri-query) AS q,
count(*) as Hits,
SUM(sc-bytes) AS BytesSent,
SUM(cs-bytes) AS BytesRecv
FROM {filename} 
WHERE q like '%select%' OR q like '%sys.tables%' OR etc... 
GROUP BY c-ip, cs(User-Agent) 
ORDER BY Hits desc

PSこれらのクエリが実際に正しく実行されることを確認できません。修正が必要な場合は自由に編集してください。


3

これらはすべてここにあります(IISログファイルを解析するための優れたガイドです)。

Webサイトの最新ファイル20個

logparser -i:FS "SELECT TOP 20 Path、CreationTime from c:\ inetpub \ wwwroot *。* ORDER BY CreationTime DESC" -rtp:-1

Path                                                        CreationTime
----------------------------------------------------------- ------------------
c:\inetpub\wwwroot\Default.asp                              6/22/2003 6:00:01
c:\inetpub\wwwroot\About.asp                                6/22/2003 6:00:00
c:\inetpub\wwwroot\global.asa                               6/22/2003 6:00:00
c:\inetpub\wwwroot\Products.asp                             6/22/2003 6:00:00

最近変更されたファイル20個

logparser -i:FS "SELECT TOP 20 Path、LastWriteTime from c:\ inetpub \ wwwroot *。* ORDER BY LastWriteTime DESC" -rtp:-1

Path                                                        LastWriteTime
----------------------------------------------------------- ------------------
c:\inetpub\wwwroot\Default.asp                              6/22/2003 14:00:01
c:\inetpub\wwwroot\About.asp                                6/22/2003 14:00:00
c:\inetpub\wwwroot\global.asa                               6/22/2003 6:00:00
c:\inetpub\wwwroot\Products.asp                             6/22/2003 6:00:00

200個のステータスコードになったファイル(トロイの木馬が削除された場合)

logparser "SELECT DISTINCT TO_LOWERCASE(cs-uri-stem)AS URL、Count()AS Hits FROM ex .log WHERE sc-status = 200 GROUP BY URL ORDER BY URL" -rtp:-1

URL                                      Hits
---------------------------------------- -----
/About.asp                               122
/Default.asp                             9823
/downloads/setup.exe                     701
/files.zip                               1
/Products.asp                            8341
/robots.txt                              2830

同じページに1日で50回以上ヒットするIPアドレスを表示する

logparser「SELECT DISTINCT date、cs-uri-stem、c-ip、Count()AS Hits from ex .log GROUP BY date、c-ip、cs-uri-stem HAVING Hits> 50 ORDER BY Hits Desc」-rtp: -1

date       cs-uri-stem                         c-ip            Hits
---------- ----------------------------------- --------------- ----
2003-05-19 /Products.asp                       203.195.18.24   281
2003-06-22 /Products.asp                       210.230.200.54  98
2003-06-05 /Products.asp                       203.195.18.24   91
2003-05-07 /Default.asp                        198.132.116.174 74

私はそれらを見たが、それらは特に役立つとは思わなかった。それらはほとんどが「妥協点を見つける」ことであり、それは私たちの目標ではありません(妥協していません)
ジェフアトウッド

0

LogParserでそれを行う方法はわかりませんが、404を取得する「phpMyAdmin」(または他の一般的な脆弱性)のようなリクエストの文字列を探すことは、スクリプト攻撃を識別するための良い方法です。


目標は、そのタイプのスクリプト攻撃を見つけることではなく、帯域幅とトラフィックに関連する無責任/問題クライアントを見つけることです。
ジェフアトウッド

2
私を傷つけようとしているクライアントは問題のあるクライアントだと思うし、帯域幅を使わないようにしたい。
BCS
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.