W miarę wzrostu przepełnienia stosu zaczynamy uważnie przyglądać się naszym dziennikom IIS w celu zidentyfikowania problematycznych klientów HTTP - takich jak nieuczciwe pająki internetowe , użytkownicy, którzy mają duży zestaw stron do odświeżania co sekundę, źle napisane jednorazowe skrobaki internetowe, podstępne użytkownicy, którzy próbują zwiększyć stronę, liczą zillion razy i tak dalej.
Wymyśliłem kilka zapytań LogParser, które pomagają nam zidentyfikować większość osobliwości i nieprawidłowości po wskazaniu pliku dziennika IIS.
Najlepsze wykorzystanie przepustowości według adresu 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
adres URL trafił do avgbyte ------------------------------------------------- - ---- ------- ------- /favicon.ico 16774 522 8756028 /content/img/search.png 15342 446 6842532
Najczęściej wyszukiwane według adresu 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
adresy URL trafień ------------------------------------------------- - ---- /content/img/sf/vote-arrow-down.png 14076 /content/img/sf/vote-arrow-up.png 14018
Najwyższa przepustowość i trafienia według 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
klient użytkownik-klient sumuje trafienia ------------- ------------------------------------- -------- --------- ----- 66.249.68.47 Mozilla / 5.0 + (kompatybilny; + Googlebot / 2.1; 135131089 16640 194.90.190.41 omgilibot / 0.3 ++ omgili.com 133805857 6447
Najwyższa przepustowość według godziny według 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 klient użytkownik-klient sumuje liczbę trafień - ------------- ----------------------------------- ------ -------- ---- 9 194,90.190.41 omgilibot / 0.3 ++ omgili.com 30634860 1549 10 194,90.190,41 omgilibot / 0,3 ++ omgili.com 29070370 1503
Największe trafienia według godziny według 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
Klient kliencki hr uderza totbytes - ------------- ----------------------------------- ------ ---- -------- 10 194,90.190,41 omgilibot / 0,3 ++ omgili.com 1503 29070370 12 66.249.68.47 Mozilla / 5.0 + (kompatybilny; + Googlebot / 2.1 1363 13186302
{Nazwa pliku} oczywiście byłaby ścieżką do pliku dziennika IIS, takiego jak
c:\working\sologs\u_ex090708.log
Przeprowadziłem wiele wyszukiwań w sieci w poszukiwaniu dobrych zapytań IIP LogParser i znalazłem niewiele cennego. Powyższe 5 punktów pomogło nam ogromnie w identyfikacji poważnych klientów. Ale zastanawiam się - czego nam brakuje?
Jakie są inne sposoby dzielenia i krojenia dzienników IIS (najlepiej za pomocą zapytań LogParser ) w celu ich wydobycia pod kątem anomalii statystycznych? Czy masz jakieś dobre zapytania IIS LogParser uruchamiane na twoich serwerach?
Odpowiedzi:
Dobrym wskaźnikiem dla działań hakerskich lub innych ataków jest liczba błędów na godzinę. Poniższy skrypt zwraca daty i godziny, w których zwrócono ponad 25 kodów błędów . Dostosuj wartość w zależności od natężenia ruchu w witrynie (i jakości aplikacji internetowej ;-)).
Wynik może być taki:
Następne zapytanie wykrywa niezwykle wysoką liczbę trafień pod jednym adresem URL z jednego adresu IP . W tym przykładzie wybrałem 500, ale może być konieczna zmiana zapytania o przypadki skrajne (na przykład z wyłączeniem adresu IP Google London ;-).)
źródło
having
przezLimit n
może być dobrym sposobem na dostrojenie pierwszego zapytaniaJedną rzeczą, którą możesz rozważyć, aby odfiltrować prawidłowy ruch (i rozszerzyć zakres), jest włączenie
cs(Cookie)
dzienników IIS, dodanie kodu, który ustawia małe ciasteczko przy użyciu javascript, i dodanieWHERE cs(Cookie)=''
.Z powodu małego fragmentu kodu każdy użytkownik powinien mieć plik cookie, chyba że ręcznie wyłączy pliki cookie (co może zrobić mały procent osób) lub jeśli ten użytkownik nie jest botem, który nie obsługuje Javascript (na przykład wget, httpclient itp. nie obsługują Javascript).
Podejrzewam, że jeśli użytkownik ma dużą aktywność, ale akceptuje pliki cookie i ma włączoną obsługę JavaScript, istnieje większe prawdopodobieństwo, że będzie uprawnionym użytkownikiem, natomiast jeśli znajdziesz użytkownika o dużej aktywności, ale bez obsługi plików cookie / JavaScript , częściej są botem.
źródło
Przepraszamy, nie mogę jeszcze komentować, więc jestem zmuszony odpowiedzieć.
Wystąpił drobny błąd w zapytaniu „Wykorzystanie największej przepustowości według adresu URL”. Podczas gdy przez większość czasu nie miałbyś nic przeciwko przyjmowaniu żądań strony i mnożeniu przez rozmiar pliku, w tym przypadku, ponieważ nie zwracasz uwagi na żadne parametry zapytania, natkniesz się na nieco -bardzo niedokładne liczby.
Aby uzyskać dokładniejszą wartość, po prostu wykonaj SUMĘ (sc-bytes) zamiast MUL (Hits, AvgBytes) jako ServedBytes .
źródło
Anders Lundström pisze serię artykułów na blogu dotyczących typowych zapytań LogParser.
Korzystałem z tych:
źródło
Ten facet ma około tuzina przydatnych zapytań:
http://logparserplus.com/Examples/Queries.aspx
źródło
Możesz poszukać najdłuższych żądań (rdzeni i / lub zapytań) oraz tych o największej liczbie bajtów odebranych przez serwer. Spróbowałbym również takiego, który grupuje według odebranych bajtów i adresu IP, abyś mógł zobaczyć, czy określony format żądania jest prawdopodobnie powtarzany przez jeden adres IP.
Liczę również trafienia dla grupy żądającej adresu IP przez godzinę i minutę dziennie lub grupuję żądający adres IP z minutą godziny, aby sprawdzić, czy są jakieś regularnie powtarzające się wizyty, które mogą być skryptami. Byłaby to niewielka modyfikacja skryptu trafień według godziny.
Na jakichkolwiek witryn bez programowania, szukając dzienników SQL słów kluczowych jest również dobrym pomysłem, rzeczy takie jak
SELECT
,UPDATE
,DROP
,DELETE
oraz inne dziwactwa jakFROM sys.tables
, Oring że razem i liczenia przez IP wydaje się przydać. W przypadku większości witryn, w tym tych, słowa rzadko pojawiałyby się w części zapytania identyfikatora URI, ale w tym przypadku mogą one występować w rdzeniu identyfikatora URI i częściach danych. Lubię odwracać adresy IP wszystkich trafień, aby zobaczyć, kto uruchamia gotowe skrypty. I mają tendencję, aby zobaczyć.ru
,.br
,.cz
i.cn
. Nie mam zamiaru osądzać, ale mam tendencję do blokowania ich odtąd. W ich obronie, kraje te są na ogół głównie zaludnionych, choć do tej pory nie widzę dużo powiedzmy.in
,.fr
,.us
lub.au
robi to samo.PS Nie mogę zweryfikować, czy te zapytania faktycznie działałyby poprawnie. Edytuj je dowolnie, jeśli wymagają naprawy.
źródło
Wszystkie zostały znalezione tutaj (który jest doskonałym przewodnikiem do parsowania plików logów IIS, btw):
20 najnowszych plików na twojej stronie
logparser -i: FS "WYBIERZ TOP 20 Ścieżka, CreationTime z c: \ inetpub \ wwwroot *. * ZAMÓWIENIE BY CreationTime DESC" -rtp: -1
20 ostatnio zmodyfikowanych plików
logparser -i: FS "WYBIERZ TOP 20 Ścieżka, LastWriteTime z c: \ inetpub \ wwwroot *. * ORDER BY LastWriteTime DESC" -rtp: -1
Pliki, których wynikiem jest 200 kodów stanu (w przypadku usunięcia trojanów)
logparser "SELECT DISTINCT TO_LOWERCASE (cs-uri-stem) AS URL, Count ( ) AS HITS FROM ex np. log WHERE sc-status = 200 GROUP BY URL ORDER BY URL" -rtp: -1
Pokaż dowolny adres IP, który trafił na tę samą stronę więcej niż 50 razy w ciągu jednego dnia
logparser "WYBIERZ ODLEGŁOŚĆ data, cs-uri-stem, c-ip, Count ( ) AS Hits Z np. log GROUP GROUP według daty, c-ip, cs-uri-stem POSIADAJĄC Trafienia> 50 ORDER BY Hits Desc" -rtp: -1
źródło
Nie wiem, jak to zrobić za pomocą LogParser, ale szukanie ciągów żądań takich rzeczy jak „phpMyAdmin” (lub innych typowych błędów), które dostają 404, może być dobrym sposobem na identyfikację ataków skryptowych.
źródło