Au fur et à mesure que le dépassement de capacité augmente, nous commençons à examiner de près nos journaux IIS pour identifier les clients HTTP problématiques - des objets tels que des spiders Web malveillants , des utilisateurs qui ont une grande page à actualiser à la seconde, des scrapers web uniques mal écrits, des astuces les utilisateurs qui essaient d'incrémenter la page comptent un zillion de fois, et ainsi de suite.
J'ai proposé quelques requêtes LogParser qui nous aident à identifier la plupart des bizarreries et des anomalies signalées par 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 servi ------------------------------------------------- - ---- ------- ------- /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
Bande passante maximale 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
agent utilisateur client totalise les 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 maximale 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 totalise les 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 utilisateur-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} serait bien sûr un chemin d'accès à 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 je n'ai trouvé que très peu de ressources. Ces 5, ci-dessus, nous ont énormément aidés à identifier les clients problématiques graves. Mais je me demande - qu'est-ce qui nous manque?
Quels autres moyens existe-t-il pour trancher et dés les journaux IIS (de préférence avec des requêtes LogParser ) pour les extraire à la recherche d'anomalies statistiques? Avez-vous de bonnes requêtes IIS LogParser que vous exécutez sur vos serveurs?
Réponses:
Le nombre d'erreurs par heure est un bon indicateur des activités de piratage ou d'autres attaques. Le script suivant renvoie les dates et heures associées à plus de 25 codes d'erreur . Ajustez la valeur en fonction du volume de trafic sur le site (et de la qualité de votre application Web ;-)).
Le résultat pourrait ressembler à ceci:
La requête suivante détecte un nombre inhabituellement élevé de hits sur une seule URL à partir d'une adresse IP . Dans cet exemple, j'ai choisi 500, mais vous devrez peut-être modifier la requête pour les cas d'extrémité (à l'exception de l'adresse IP de Google London par exemple ;-).)
la source
having
par unLimit n
peut constituer un bon moyen de régler la première requêteUne chose que vous pouvez envisager pour filtrer le trafic légitime (et élargir votre portée) est d'activer
cs(Cookie)
dans vos journaux IIS, d'ajouter un peu de code qui définit un petit cookie à l'aide de javascript, puis d'ajouterWHERE cs(Cookie)=''
.En raison de votre petite quantité de code, chaque utilisateur devrait avoir un cookie à moins qu'il ne le désactive manuellement (ce qu'un pourcentage faible de personnes pourrait créer) ou à moins que cet utilisateur ne soit en réalité un bot qui ne prend pas en charge Javascript (par exemple, wget, httpclient). , etc. ne supporte pas Javascript).
Je soupçonne que si un utilisateur a un volume d'activité élevé, mais qu'il accepte les cookies et que javascript est activé, il est plus probable qu'il soit un utilisateur légitime, alors que si vous trouvez un utilisateur avec un volume d'activité élevé mais sans support des cookies / javascript , ils sont plus susceptibles d'être un bot.
la source
Désolé, je ne peux pas encore commenter, je suis donc obligé de répondre.
Il y a un bug mineur avec la requête 'Utilisation de la bande passante maximale par URL'. Même si la plupart du temps, vous seriez en mesure de prendre vos demandes de page et de les multiplier par la taille du fichier, dans ce cas, puisque vous ne prêtez pas attention aux paramètres de la requête, vous rencontrerez des difficultés légèrement -très nombres inexacts.
Pour une valeur plus précise, faites simplement un SUM (sc-bytes) au lieu de MUL (Hits, AvgBytes) comme ServedBytes .
la source
Anders Lundström a écrit une série d'articles sur des requêtes courantes dans LogParser.
J'ai utilisé ceux-ci:
la source
Ce gars a environ une douzaine de requêtes utiles:
http://logparserplus.com/Examples/Queries.aspx
la source
Vous voudrez peut-être rechercher vos requêtes les plus longues (souches et / ou requêtes) et celles contenant le plus d'octets reçus par le serveur. J'essayerais également celui qui regroupe les octets reçus et l'adresse IP afin de voir si un format de demande particulier est probablement répété par une adresse IP.
Je compte également les hits pour le groupe d'adresses IP demandées pendant une heure et une minute de la journée ou le groupe avec la minute qui précède pour rechercher les visites récurrentes pouvant être des scripts. Ce serait une petite modification sur le script hits par heure.
Sur tous les sites hors programmation, à la recherche des mots - clés de vos journaux SQL est aussi une bonne idée, des choses comme
SELECT
,UPDATE
,DROP
,DELETE
et d' autres bizarreries commeFROM sys.tables
, ORing qui ensemble et le comptage par IP semblent à portée de main. Pour la plupart des sites incluant ces sites, les mots apparaîtront rarement, voire jamais, dans la partie requête de l'URI, mais ici, ils pourraient apparaître légitimement dans le radical d'URI et les parties de données. J'aime inverser les adresses IP des hits pour voir qui exécute des scripts prédéfinis. Je tends à voir.ru
,.br
,.cz
et.cn
. Je ne veux pas en juger, mais j'ai tendance à les bloquer désormais. Dans leur défense, ces pays estiment généralement la plupart du temps peuplés, bien que je jusqu'ici je ne suis pas beaucoup de dire.in
,.fr
,.us
ou.au
faire la même chose.PS je ne peux pas vérifier que ces requêtes fonctionneraient correctement. Veuillez les éditer librement s'ils ont besoin d'être réparés.
la source
Ceux-ci ont tous été trouvés ici (qui est un excellent guide pour analyser vos fichiers journaux IIS, en passant):
20 derniers fichiers sur votre site web
logparser -i: FS "chemin TOP 20 sélectionné, heure de création depuis c: \ inetpub \ wwwroot *. * ORDER BY CreationTime DESC" -rtp: -1
Les 20 derniers fichiers modifiés
logparser -i: FS "chemin TOP 20 choisi, LastWriteTime de c: \ inetpub \ wwwroot *. * ORDER BY LastWriteTime DESC" -rtp: -1
Fichiers ayant généré 200 codes d'état (au cas où des chevaux de Troie auraient été supprimés)
logparser "SELECT DISTINCT TO_LOWERCASE (cs-uri-stem) AS URL, Count ( ) AS hits de ex .log WHERE sc-status = 200 GROUPEMENT PAR URL ORDER PAR URL" -rtp: -1
Afficher n'importe quelle adresse IP qui a frappé la même page plus de 50 fois en un jour
logparser "SELECT DISTINCT date, cs-uri-stem, c-ip, Count ( ) AS hits de ex .log GROUP BY date, c-ip, cs-uri-stem AYANT hits> 50 ORDER BY Hits Desc" - rtp: -1
la source
Je ne sais pas comment faire avec LogParser, mais rechercher des chaînes de requêtes pour des choses telles que "phpMyAdmin" (ou d'autres vulnérabilités courantes) qui obtiennent des 404 pourrait être un bon moyen d'identifier les attaques par script.
la source