86 votes

Requêtes LogParser recommandées pour la surveillance de IIS ?

Au fur et à mesure que Stack Overflow se développe, nous commençons à examiner de près nos journaux IIS pour identifier les clients HTTP problématiques - des choses comme araignées malhonnêtes Les utilisateurs qui ont configuré une grande page pour qu'elle se rafraîchisse toutes les secondes, les racleurs de sites web mal écrits, les utilisateurs rusés qui essaient d'incrémenter le nombre de pages un million de fois, et ainsi de suite.

J'en ai trouvé quelques-uns LogParser qui nous aident à identifier la plupart des bizarreries et des anomalies lorsqu'on pointe sur un fichier journal IIS.

Utilisation maximale de la bande passante par 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                                                   hits  avgbyte  served
-------------------------------------------------     ----- -------  -------
/favicon.ico                                          16774 522      8756028
/content/img/search.png                               15342 446      6842532

Top hits par 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

Top bande passante et hits par 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

client         user-agent                                      totbytes   hits
-------------  ---------------------------------------------   ---------  -----
66.249.68.47   Mozilla/5.0+(compatible;+Googlebot/2.1;         135131089  16640
194.90.190.41  omgilibot/0.3++omgili.com                       133805857  6447

Bande passante la plus élevée par heure par 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   client        user-agent                                  totbytes   hits
--   ------------- -----------------------------------------   --------   ----
9    194.90.190.41 omgilibot/0.3++omgili.com                   30634860   1549
10   194.90.190.41 omgilibot/0.3++omgili.com                   29070370   1503

Top hits par heure par 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   client         user-agent                                  hits  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

Le {nom du fichier} est bien sûr un chemin vers un fichier journal IIS, tel que

c:\working\sologs\u_ex090708.log

J'ai fait beaucoup de recherches sur le web pour trouver de bonnes requêtes IIS LogParser et j'en ai trouvé très peu. Ces 5 éléments, ci-dessus, nous ont énormément aidés à identifier les clients à problèmes sérieux. Mais je me demande : que nous manque-t-il ?

Quels sont les autres moyens de découper les journaux IIS en tranches (de préférence avec les requêtes LogParser ) pour les exploiter à la recherche d'anomalies statistiques ? Avez-vous de bonnes requêtes IIS LogParser que vous exécutez sur vos serveurs ?

4voto

dlamblin Points 929

Vous pouvez rechercher vos requêtes les plus longues (tiges et/ou requêtes), et celles dont le serveur reçoit le plus d'octets. J'en essaierais également une qui regroupe les octets reçus et l'IP, afin de voir si un format de requête particulier est susceptible d'être répété par une 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

Je compterais également les hits soit pour le groupe d'IP requérant pour une heure et une minute d'un jour, soit pour le groupe d'IP requérant avec la minute de l'heure pour trouver s'il y a des visites récurrentes régulières qui peuvent être des scripts. Ce serait une petite modification sur les visites par heure scripts.

Sur tous les sites non programmés, il est également utile de rechercher des mots-clés SQL dans les journaux, comme par exemple SELECT , UPDATE , DROP , DELETE et d'autres bizarreries comme FROM sys.tables Il serait pratique de faire un OU et de compter par IP. Pour la plupart des sites, y compris ceux-ci, les mots n'apparaissent que rarement, voire jamais, dans la partie requête de l'URI, mais ici ils peuvent légitimement apparaître dans les parties tige et données de l'URI. J'aime inverser les IPs de tous les hits juste pour voir qui exécute des scripts prémâchés. J'ai tendance à voir .ru , .br , .cz y .cn . Je ne veux pas juger, mais j'ai en quelque sorte tendance à les bloquer dorénavant. Pour leur défense, ces pays sont en général majoritairement peuplés, même si je ne vois pas beaucoup de choses à dire jusqu'à présent .in , .fr , .us o .au qui font de même.

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

P.S. Je ne peux pas vérifier que ces requêtes s'exécutent correctement. Veuillez les modifier librement si elles ont besoin d'être corrigées.

3voto

GregD Points 8703

Ils ont tous été trouvés aquí (qui est un excellent guide pour l'analyse des fichiers journaux de votre IIS, d'ailleurs) :

20 fichiers les plus récents sur votre site web

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 fichiers les plus récemment modifiés

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

Fichiers qui ont donné lieu à des codes d'état 200 (en cas de suppression de chevaux de Troie)

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

Afficher toute adresse IP qui a consulté la même page plus de 50 fois en un seul jour.

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

0voto

d4nt Points 4486

Je ne sais pas comment le faire avec LogParser mais chercher des chaînes de requêtes pour des choses comme "phpMyAdmin" (ou d'autres vunerablities communes) qui obtiennent 404s pourrait être un bon moyen d'identifier des attaques scriptées.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X