Während der Stapelüberlauf zunimmt, untersuchen wir unsere IIS-Protokolle genau, um problematische HTTP-Clients zu identifizieren - Dinge wie betrügerische Web-Spider , Benutzer, die jede Sekunde eine große Seite aktualisieren müssen, schlecht geschriebene einmalige Web-Scraper, trickreich Benutzer, die versuchen, die Anzahl der Seiten zu erhöhen, zählen zig Mal und so weiter.
Ich habe mir ein paar LogParser- Abfragen ausgedacht , mit denen wir die meisten Unregelmäßigkeiten und Abnormalitäten identifizieren können, wenn wir auf eine IIS-Protokolldatei verweisen.
Höchste Bandbreitennutzung nach 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 geliefert ------------------------------------------------- - ---- ------- ------- /favicon.ico 16774 522 8756028 /content/img/search.png 15342 446 6842532
Top-Treffer nach 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 trifft ------------------------------------------------- - ---- /content/img/sf/vote-arrow-down.png 14076 /content/img/sf/vote-arrow-up.png 14018
Top Bandbreite und Treffer durch 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-Benutzer-Agent-Gesamttreffer ------------- ------------------------------------- -------- --------- ----- 66.249.68.47 Mozilla / 5.0 + (kompatibel; + Googlebot / 2.1; 135131089 16640 194.90.190.41 omgilibot / 0.3 ++ omgili.com 133805857 6447
Spitzenbandbreite pro Stunde nach 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 Gesamttreffer - ------------- ----------------------------------- ------ -------- ---- 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 pro Stunde von 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
Der Benutzeragent des hr-Clients schlägt insgesamt Byte zu - ------------- ----------------------------------- ------ ---- -------- 10 194.90.190.41 omgilibot / 0.3 ++ omgili.com 1503 29070370 12 66.249.68.47 Mozilla / 5.0 + (kompatibel; + Googlebot / 2.1 1363 13186302
Der {Dateiname} wäre natürlich ein Pfad zu einer IIS-Protokolldatei, wie z
c:\working\sologs\u_ex090708.log
Ich habe viele Websuchen nach guten IIS-LogParser-Abfragen durchgeführt und dabei wertvolle Kleinigkeiten gefunden. Diese 5 oben haben uns enorm dabei geholfen, Kunden mit schwerwiegenden Problemen zu identifizieren. Aber ich frage mich - was fehlt uns?
Welche anderen Möglichkeiten gibt es, um die IIS-Protokolle (vorzugsweise mit LogParser-Abfragen ) aufzuschlüsseln und auf statistische Anomalien zu untersuchen? Haben Sie gute IIS LogParser-Abfragen, die Sie auf Ihren Servern ausführen?
Antworten:
Ein guter Indikator für Hacking-Aktivitäten oder andere Angriffe ist die Anzahl der Fehler pro Stunde. Das folgende Skript gibt die Daten und Stunden zurück, für die mehr als 25 Fehlercodes zurückgegeben wurden. Passen Sie den Wert abhängig von der Anzahl der Zugriffe auf der Website (und der Qualität Ihrer Webanwendung ;-)) an.
Das Ergebnis könnte ungefähr so aussehen:
Die nächste Abfrage erkennt eine ungewöhnlich hohe Anzahl von Treffern auf einer einzelnen URL von einer IP-Adresse . In diesem Beispiel habe ich 500 gewählt, aber Sie müssen möglicherweise die Abfrage für Edge-Cases ändern (ausgenommen die IP-Adresse von beispielsweise Google London ;-).)
quelle
having
durch einLimit n
könnte eine gute Möglichkeit sein, die erste Abfrage abzustimmenEine Sache, die Sie in Betracht ziehen könnten, um legitimen Datenverkehr herauszufiltern (und Ihren Bereich zu erweitern), ist die Aktivierung
cs(Cookie)
in Ihren IIS-Protokollen, das Hinzufügen eines kleinen Codes, der mithilfe von Javascript ein kleines Cookie setzt, und das HinzufügenWHERE cs(Cookie)=''
.Aufgrund Ihres kleinen Codes sollte jeder Benutzer ein Cookie haben, es sei denn, er hat Cookies manuell deaktiviert (was ein kleiner Prozentsatz der Leute tun könnte) oder es ist tatsächlich ein Bot, der kein Javascript unterstützt (z. B. wget, httpclient) etc. unterstützen kein Javascript).
Ich vermute, dass ein Benutzer mit einem hohen Aktivitätsvolumen, der Cookies akzeptiert und Javascript aktiviert hat, eher ein legitimer Benutzer ist, während Sie einen Benutzer mit einem hohen Aktivitätsvolumen, aber ohne Cookie- / Javascript-Unterstützung finden Sie sind eher ein Bot.
quelle
Leider kann ich noch keinen Kommentar abgeben, daher bin ich gezwungen zu antworten.
Es gibt einen kleinen Fehler bei der Abfrage "Höchste Bandbreitennutzung nach URL". Während Sie die meiste Zeit in Ordnung sind, Ihre Anforderungen für eine Seite zu beantworten und mit der Dateigröße zu multiplizieren, werden Sie in diesem Fall auf einige geringfügige Probleme stoßen, da Sie keine Abfrageparameter berücksichtigen -sehr ungenaue Zahlen.
Für einen genaueren Wert führen Sie einfach eine SUMME (SC -Bytes) anstelle der MUL (Hits, AvgBytes) als ServedBytes aus .
quelle
Anders Lundström hat eine Reihe von Blog-Artikeln zu häufigen LogParser-Abfragen verfasst.
Ich benutze diese:
quelle
Dieser Typ hat ungefähr ein Dutzend nützliche Fragen:
http://logparserplus.com/Examples/Queries.aspx
quelle
Möglicherweise möchten Sie nach Ihren längsten Anforderungen (Stems und / oder Abfragen) und denjenigen mit den meisten vom Server empfangenen Bytes suchen. Ich würde auch versuchen, eine, die nach den empfangenen Bytes und der IP gruppiert, damit Sie sehen können, ob ein bestimmtes Anforderungsformat, das wahrscheinlich von einer IP wiederholt wird.
Ich würde auch die Treffer entweder für die Gruppe anfordernder IP für eine Stunde und eine Minute eines Tages zählen oder die anfordernde IP mit der Minute der Stunde gruppieren, um festzustellen, ob es regelmäßig wiederkehrende Besuche gibt, bei denen es sich möglicherweise um Skripte handelt. Dies wäre eine kleine Modifikation des Skripts für Treffer pro Stunde.
Auf allen nicht-Programmierung - Sites, ist Ihre Protokolle für SQL - Schlüsselwörter sucht auch eine gute Idee, Dinge wie
SELECT
,UPDATE
,DROP
,DELETE
und andere Merkwürdigkeiten wieFROM sys.tables
, ORing , die zusammen und Zählen von IP praktisch scheinen. Für die meisten Sites, einschließlich dieser Sites, werden die Wörter selten oder nie im Abfrageteil der URI angezeigt, aber hier werden sie möglicherweise legitimerweise im URI-Stamm und in den Datenteilen angezeigt. Ich mag es, die IPs von Treffern umzukehren, nur um zu sehen, wer vorgefertigte Skripte ausführt. Ich neige dazu , zu sehen.ru
,.br
,.cz
und.cn
. Ich will nicht urteilen, aber ich neige dazu, sie von nun an zu blockieren. In ihrer Verteidigung, werden diese Länder im Allgemeinen meist bevölkert, obwohl ich mich nicht so weit viel sagen sehen.in
,.fr
,.us
oder.au
das gleiche zu tun.PS Ich kann nicht überprüfen, ob diese Abfragen tatsächlich korrekt ausgeführt werden. Bitte bearbeiten Sie sie frei, wenn sie repariert werden müssen.
quelle
Diese wurden alle hier gefunden (was eine hervorragende Anleitung zum Parsen Ihrer IIS-Protokolldateien ist, übrigens):
20 neueste Dateien auf Ihrer Website
logparser -i: FS "SELECT TOP 20 Path, CreationTime from c: \ inetpub \ wwwroot *. * ORDER BY CreationTime DESC" -rtp: -1
20 zuletzt geänderte Dateien
logparser -i: FS "SELECT TOP 20-Pfad, LastWriteTime von c: \ inetpub \ wwwroot *. * ORDER BY LastWriteTime DESC" -rtp: -1
Dateien, die zu 200 Statuscodes geführt haben (falls Trojaner gelöscht wurden)
logparser "SELECT DISTINCT TO_LOWERCASE (cs-uri-stem) ALS URL, Count ( ) ALS Treffer VON ex .log WHERE sc-status = 200 GROUP BY URL ORDER BY URL" -rtp: -1
Zeigen Sie alle IP-Adressen an, die an einem Tag mehr als 50 Mal dieselbe Seite aufgerufen haben
logparser "SELECT DISTINCT date, cs-uri-stamm, c-ip, Count ( ) ALS Treffer VON ex .log GROUP BY date, c-ip, cs-uri-stamm HAVING Hits> 50 ORDER BY Hits Desc" -rtp: -1
quelle
Ich weiß nicht, wie ich das mit LogParser machen soll, aber das Suchen nach Anforderungszeichenfolgen für Dinge wie "phpMyAdmin" (oder andere gängige Fehlerquellen), die 404-Werte erhalten, ist möglicherweise eine gute Möglichkeit, Skriptangriffe zu identifizieren.
quelle