Pertanyaan Query LogParser yang direkomendasikan untuk pemantauan IIS?


Ketika Stack Overflow tumbuh, kami mulai melihat secara dekat log IIS kami untuk mengidentifikasi masalah klien HTTP - hal-hal seperti spider web jahat, pengguna yang memiliki laman besar disetel untuk menyegarkan setiap detik, pencakar web satu kali yang tidak ditulis dengan baik, pengguna tipuan yang mencoba menambah jumlah laman satu miliar kali, dan seterusnya.

Saya telah datang dengan beberapa LogParser pertanyaan yang membantu kami mengidentifikasi sebagian besar keanehan dan kelainan ketika menunjuk pada file log IIS.

Penggunaan bandwidth teratas menurut 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 disajikan
------------------------------------------------- - ---- ------- -------
/favicon.ico 16774 522 8756028
/content/img/search.png 15342 446 6842532

Klik populer berdasarkan 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

Bandwidth atas dan klik menurut IP / Agen-Pengguna

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
klien pengguna-agen totbytes hit
------------- ------------------------------------- -------- --------- -----
66.249.68.47 Mozilla / 5.0 + (kompatibel; + Googlebot / 2.1; 135131089 16640
194.90.190.41 omgilibot / 0.3 ++ omgili.com 133805857 6447

Bandwidth atas berdasarkan jam oleh IP / Agen-Pengguna

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 klien pengguna-agen totbytes hit
- ------------- ----------------------------------- ------ -------- ----
9 194.90.190.41 omgilibot / 0.3 ++ omgili.com 30634860 ​​1549
10 194.90.190.41 omgilibot / 0.3 ++ omgili.com 29070370 1503

Hitungan teratas berdasarkan jam oleh IP / Agen-Pengguna

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 menekan totbytes
- ------------- ----------------------------------- ------ ---- --------
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

{Filename} tentu saja akan menjadi jalur ke file log IIS, seperti

c:\working\sologs\u_ex090708.log

Saya melakukan banyak pencarian web untuk pertanyaan IIS LogParser yang bagus dan menemukan sedikit yang berharga. Kelima, di atas, telah sangat membantu kami dalam mengidentifikasi klien masalah serius. Tapi aku bertanya-tanya - apa yang kita lewatkan?

Apa cara lain yang ada untuk memotong dan memotong log IIS (sebaiknya dengan kueri LogParser) untuk menambang mereka untuk anomali statistik? Apakah Anda memiliki pertanyaan IIS LogParser baik yang Anda jalankan di server Anda? 


86
2017-07-25 11:19




Direferensikan oleh blog.stackoverflow.com/2009/07/podcast-63 - Brad Gilbert
Dalam kueri penggunaan bandwidth teratas ada kata kunci DISTINCT. Apa gunanya itu? - Jakub Šturc


Jawaban:


Indikator yang baik untuk tindakan peretasan atau serangan lainnya adalah jumlah kesalahan per jam. Skrip berikut mengembalikan tanggal dan jam yang memiliki lebih dari 25 kode kesalahan dikembalikan. Sesuaikan nilai tergantung pada jumlah lalu lintas di situs (dan kualitas aplikasi web Anda ;-)).

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

Hasilnya bisa seperti ini:

Date Hour Status ErrorCount
---------- -------- ------ ------
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
...

Kueri berikutnya mendeteksi jumlah klik yang sangat tinggi pada satu URL dari satu alamat IP. Dalam contoh ini saya memilih 500, tetapi Anda mungkin harus mengubah kueri untuk kasus tepi (tidak termasuk alamat IP Google London misalnya ;-).)

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
Tanggal Tanggal IPAddress Hit
---------- ----------------------------------- ----- ---------- ----
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
2017-07-25 11:47



kueri kedua, sudah kami lakukan - perhatikan pengelompokan di beberapa kueri. Dengan IP dan User Agent, ini adalah yang terbaik dari kedua dunia, karena jika Agen Pengguna adalah null, itu sama dengan IP, dan jika tidak, itu info lebih lanjut. - Jeff Atwood
Oke Jeff, menambahkan agen-pengguna masuk akal. Maaf, kombinasi dari memori jangka pendek yang buruk dan Attention Deficit Disorder. :-) - splattne
mengganti having dengan Limit n mungkin membuat cara yang baik untuk menyetel kueri pertama - BCS


Satu hal yang dapat Anda pertimbangkan untuk memfilter lalu lintas yang sah (dan memperluas cakupan Anda) adalah dengan mengaktifkannya cs(Cookie) di log IIS Anda, tambahkan sedikit kode yang menetapkan cookie kecil menggunakan javascript, dan tambahkan WHERE cs(Cookie)=''.

Karena sedikit kode Anda, setiap pengguna harus memiliki cookie kecuali mereka secara manual menonaktifkan cookie (yang dapat dilakukan oleh sebagian kecil orang) atau kecuali pengguna itu sebenarnya adalah bot yang tidak mendukung Javascript (misalnya, wget, httpclient , dll. tidak mendukung Javascript).

Saya menduga bahwa jika pengguna memiliki volume aktivitas yang tinggi, tetapi mereka menerima cookie dan mengaktifkan javascript, mereka lebih cenderung menjadi pengguna yang sah, sedangkan jika Anda menemukan pengguna dengan volume aktivitas yang tinggi tetapi tidak ada dukungan cookie / javascript , mereka lebih cenderung menjadi bot.


6
2017-07-25 17:26





Maaf, belum bisa berkomentar, jadi saya terpaksa menjawab.

Ada bug kecil dengan kueri 'Penggunaan bandwidth atas berdasarkan URL'. Sementara sebagian besar waktu Anda akan baik-baik saja mengambil permintaan Anda untuk halaman dan mengalikan dengan ukuran file, dalam hal ini, karena Anda tidak memperhatikan parameter permintaan, Anda akan mengalami sedikit-ke -sangat tidak akurat.

Untuk nilai yang lebih akurat, cukup lakukan a SUM (sc-bytes) bukannya MUL (Hits, AvgBytes) sebagai ServedBytes.


6
2017-09-10 13:11





Anders Lundström telah menulis serangkaian artikel blog tentang query LogParser umum.

Saya telah menggunakan ini:


6
2017-10-28 14:12





Orang ini memiliki selusin pertanyaan yang berguna:

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


5
2017-08-09 15:07



Dan orang itu (saya) adalah selalu mencari lebih banyak pertanyaan untuk dikirim. - James Skemp


Anda mungkin ingin mencari permintaan terpanjang Anda (batang dan / atau pertanyaan), dan yang dengan sebagian besar byte yang diterima oleh server. Saya juga akan mencoba salah satu yang dikelompokkan berdasarkan byte yang diterima dan IP, sehingga Anda dapat melihat apakah format permintaan tertentu yang kemungkinan diulangi oleh satu 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

Saya juga menghitung klik untuk kelompok yang meminta IP selama satu jam dan menit dalam sehari, atau mengelompokkan IP yang meminta dengan menit dari jam untuk menemukan apakah ada kunjungan rutin berulang yang mungkin skrip. Ini akan menjadi modifikasi kecil pada hit oleh skrip jam.

Pada situs non-pemrograman, mencari log Anda untuk kata kunci SQL juga merupakan ide yang baik, hal-hal seperti SELECT, UPDATE, DROP, DELETE dan keanehan lainnya seperti FROM sys.tables, ORing yang bersama-sama dan dihitung oleh IP akan tampak berguna. Untuk sebagian besar situs termasuk ini, kata-kata akan jarang jika pernah muncul di bagian query URI, tetapi di sini mereka mungkin sah muncul di batang URI dan bagian data. Saya suka membalik IP dari setiap klik hanya untuk melihat siapa yang menjalankan skrip premade. Saya cenderung melihat .ru, .br, .cz dan .cn. Saya tidak bermaksud untuk menilai, tetapi saya agak cenderung memblokir mereka untuk selanjutnya. Dalam pembelaan mereka, negara-negara itu umumnya sebagian besar penduduknya, meskipun sejauh ini saya tidak banyak bicara .in, .fr, .us atau .au melakukan hal yang sama.

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. Saya tidak dapat memverifikasi bahwa kueri ini benar-benar berjalan dengan benar. Harap edit dengan bebas jika perlu diperbaiki.


4
2017-07-30 17:06





Semua ini ditemukan sini (yang merupakan panduan yang sangat baik untuk menguraikan file log IIS Anda, btw):

20 file terbaru di situs web Anda

logparser -i: FS "PILIH TOP 20 Path, CreationTime dari 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 file yang paling baru dimodifikasi

logparser -i: FS "PILIH 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

File yang menghasilkan 200 kode status (seandainya trojan dihapus)

logparser "SELECT DISTINCT TO_LOWERCASE (cs-uri-stem) AS URL, Hitung () AS Hits DARI ex.log WHERE sc-status = 200 GROUP DENGAN 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

Tampilkan alamat IP apa pun yang mencapai halaman yang sama lebih dari 50 kali dalam satu hari

logparser "SELECT DISTINCT date, cs-uri-stem, c-ip, Hitung () AS Hits DARI ex.log GROUP OLEH tanggal, 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

3
2017-08-06 20:58



Saya telah melihat mereka dan tidak menemukan mereka sangat membantu. Mereka kebanyakan "menemukan kompromi" dan itu tidak benar-benar tujuan kami (kami belum dikompromikan) - Jeff Atwood


Saya tidak tahu bagaimana melakukannya dengan LogParser tetapi mencari string permintaan untuk hal-hal seperti "phpMyAdmin" (atau vunerablities umum lainnya) yang mendapatkan 404 mungkin merupakan cara yang baik untuk mengidentifikasi serangan skrip.


0
2017-08-06 19:32



Tujuannya bukan untuk menemukan serangan skrip dari jenis itu, tetapi klien tidak bertanggung jawab / bermasalah terkait dengan bandwidth dan lalu lintas. - Jeff Atwood
Saya akan mengatakan klien apa pun yang MENCOBA untuk menyakiti saya adalah masalah klien dan saya lebih suka tidak memiliki mereka menggunakan bandwidth saya. - BCS