it-swarm.cn

推荐的LogParser查询IIS监视?

随着Stack Overflow的增长,我们开始仔细查看IIS日志,以​​识别有问题的HTTP客户端- rogue web spider 之类的用户,页面设置每秒刷新一次,写得不好的一次性Web抓取工具,试图增加页面数以千计的棘手用户,等等。

我提出了一些 LogParser 查询,当指向IIS)日志文件时,这些查询可帮助我们识别大多数异常情况。

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 hits 
 -------------------------------------- ----------- ----- 
/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
客户端用户代理总字节数
 ------------- --------------------- ------------------------ --------- ----- 
 66.249.68.47 Mozilla/5.0 + (兼容; + Googlebot/2.1; 135131089 16640 
 194.90.190.41 omgilibot/0.3 ++ omgili.com 133805857 6447 

按IP/User-Agent按小时计算的最高带宽

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客户端用户代理总字节数
-------------- ------------------ ----------------------- -------- ---- 
 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/User-Agent按小时排序的热门歌曲

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客户端用户代理达到了十亿字节
-------------- ------------------ ----------------------- ---- -------- 
 10 194.90.190.41 omgilibot/0.3 ++ omgili .com 1503 29070370 
 12 66.249.68.47 Mozilla/5.0 +(兼容; + Googlebot/2.1 1363 13186302 

{filename}当然是IIS=日志文件的路径,例如

c:\working\sologs\u_ex090708.log

我在网上大量搜索了不错的IIS LogParser查询,却发现了很少的东西。上面的这5个,极大地帮助我们识别了严重的问题客户。但是我想知道-什么是我们失踪了吗?

还有什么其他方法可以将IIS)日志切片和切块(最好是使用LogParser查询)以将其挖掘为统计异常?您在服务器上运行的LogParser查询是否有IIS)?

86
Jeff Atwood

黑客活动或其他攻击的一个很好的指标是每小时错误的数量。以下脚本返回返回错误代码超过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

结果可能是这样的:

日期小时状态错误计数
 ---------- -------- ------ ------ 
 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 
 ... 

下一个查询检测到来自一个IP地址的单个URL上的点击量异常高。在此示例中,我选择了500,但您可能必须更改Edge案例的查询(例如,不包括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
 Date URL IPAddress Hits 
 ---------- -------------------------- --------- --------------- ---- 
 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 
 ... 
19
splattne
6
Christopher_G_Lewis

抱歉,还不能发表评论,所以我不得不回答。

“ URL最大带宽使用率”查询存在一个小错误。大多数情况下,您可以接受页面请求并乘以文件大小,但是在这种情况下,由于您不关注任何查询参数,因此您会遇到一些-非常不准确的数字。

为了获得更准确的值,只需执行SUM(sc-bytes)而不是MUL(Hits,AvgBytes)作为ServedBytes

6
James Skemp

您可以考虑过滤掉合法流量(并扩大范围)的一件事是在IIS)日志中启用cs(Cookie),并添加一些设置一个小cookie的代码使用javascript,并添加WHERE cs(Cookie)=''

由于您的代码很少,每个用户都应该有一个cookie,除非他们手动禁用了cookie(一小部分人可能会这样做),或者除非该用户实际上是不支持Javascript的机器人(例如,wget,httpclient) ,等等。不支持Javascript)。

我怀疑如果用户的活动量很大,但是他们接受cookie并启用了javascript,则他们更有可能是合法用户,而如果您发现用户的活动量很大却没有cookie/javascript支持,他们更有可能成为机器人。

6
Adam Brand

这个人有大约十二个有用的查询:

http://logparserplus.com/Examples/Queries.aspx

5
Portman

您可能要查找最长的请求(词根和/或查询),以及服务器接收到的最大字节的请求。我也尝试将接收到的字节和IP分组,以便您查看某个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的组的匹配次数,或者将请求IP与一小时中的分钟进行分组,以查找是否有可能是脚本的定期重复访问。这将是对点击数小时脚本的小修改。

在任何非编程站点上,在日志中搜索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

附言我无法验证这些查询是否会正确运行。如果需要修复,请自由编辑。

4
dlamblin

所有这些都被发现 这里 (这是解析IIS logfiles,btw)的绝佳指南):

您网站上的20个最新文件

logparser -i:FS“从c:\ inetpub\wwwroot *。* ORDER BY CreationTime DESC选择SELECT TOP 20路径,CreationTime” -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“从c:\ inetpub\wwwroot *。* ORDER BY LastWriteTime DESC订购SELECT TOP 20路径,LastWriteTime” -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命中来自ex。log,其中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

显示一天中点击同一页面超过50次的任何IP地址

logparser“选择不同的日期,cs-uri-stem,c-ip,Count()AS命中来自ex。log GROUP BY日期,c-ip,cs-uri-stem具有命中> 50的订单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
3
GregD

我不知道如何使用LogParser做到这一点,但是寻找诸如phpMyAdmin之类的请求字符串(或其他常见漏洞)来获取404可能是识别脚本攻击的好方法。

0
BCS