pengembangan-web-mp-pd.com

Kueri LogParser yang disarankan untuk IIS pemantauan?

Ketika Stack Overflow tumbuh, kami mulai melihat dengan cermat pada log IIS kami untuk mengidentifikasi masalah klien HTTP - hal-hal seperti laba-laba web jahat , pengguna yang memiliki besar set halaman untuk me-refresh setiap detik, pencakar web sekali saja yang ditulis dengan buruk, pengguna yang licik yang mencoba menambah halaman menghitung jutaan kali, dan sebagainya.

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 dengan 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 

Hits teratas dengan 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 dan hits teratas oleh 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
 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 teratas berdasarkan jam oleh 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
 jam klien-agen jumlah pengguna 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 

Top hit per jam oleh 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
 jam agen pengguna klien mencapai 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 path ke logfile IIS, seperti

c:\working\sologs\u_ex090708.log

Saya melakukan banyak pencarian web untuk IIS pertanyaan LogParser yang baik dan menemukan sedikit yang berharga. 5 ini, di atas, telah sangat membantu kami dalam mengidentifikasi klien masalah serius. Tapi saya bertanya-tanya - apa yang kita hilang?

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

86
Jeff Atwood

Indikator yang baik untuk aktivitas peretasan atau serangan lainnya adalah jumlah kesalahan per jam. Script berikut mengembalikan tanggal dan jam yang memiliki lebih dari 25 kode kesalahan dikembalikan. Sesuaikan nilainya 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:

 Tanggal Jam 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 hit yang luar biasa tinggi pada satu URL dari satu alamat IP. Dalam contoh ini saya memilih 500, tetapi Anda mungkin harus mengubah permintaan untuk kasus Edge (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
 URL Tanggal Kunjungan IPAddress 
 ---------- -------------------------- --------- --------------- ---- 
 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 571 
 ... 
19
splattne
6

Maaf, belum bisa berkomentar jadi saya terpaksa menjawab.

Ada bug kecil dengan kueri 'Penggunaan bandwidth atas menurut 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 kueri, Anda akan mengalami beberapa ke Nomor -sangat tidak akurat.

Untuk nilai yang lebih akurat, lakukan saja SUM (sc-bytes) daripada MUL (Hits, AvgBytes) as ServedBytes.

6
James Skemp

Satu hal yang dapat Anda pertimbangkan untuk menyaring lalu lintas yang sah (dan memperluas cakupan Anda) adalah mengaktifkan cs(Cookie) dalam 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 menonaktifkan cookie secara manual (yang mungkin dilakukan 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 aktivitas volume tinggi, tetapi mereka menerima cookie dan mengaktifkan javascript, mereka lebih cenderung menjadi pengguna yang sah, sedangkan jika Anda menemukan pengguna dengan volume aktivitas tinggi tetapi tidak ada dukungan cookie/javascript , mereka lebih cenderung menjadi bot.

6
Adam Brand

Orang ini memiliki sekitar selusin pertanyaan berguna:

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

5
Portman

Anda mungkin ingin mencari permintaan terpanjang Anda (batang dan/atau pertanyaan), dan permintaan dengan sebagian besar byte yang diterima oleh server. Saya juga mencoba yang mengelompokkan berdasarkan byte yang diterima dan IP, sehingga Anda dapat melihat apakah format permintaan tertentu yang kemungkinan diulang dengan 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 hit untuk grup yang meminta IP selama satu jam dan menit dalam sehari, atau mengelompokkan IP yang meminta dengan menit dari jam untuk menemukan apakah ada kunjungan berulang yang secara teratur dapat berupa skrip. Ini akan menjadi modifikasi kecil pada hits dengan skrip jam.

Di sembarang situs non-pemrograman, mencari log kata kunci SQL Anda juga merupakan ide yang bagus, hal-hal seperti SELECT, UPDATE, DROP, DELETE dan lainnya keanehan seperti FROM sys.tables, ATAU itu bersama-sama dan menghitung dengan IP akan tampak mudah. Untuk sebagian besar situs termasuk ini, kata-kata akan jarang jika pernah muncul di bagian permintaan URI, tetapi di sini mereka mungkin muncul secara sah di batang URI dan bagian data. Saya suka membalikkan IP dari setiap klik hanya untuk melihat siapa yang menjalankan skrip premade. Saya cenderung melihat .ru, .br, .cz dan .cn. Saya tidak bermaksud menghakimi, tetapi saya agak cenderung memblokir mereka untuk selanjutnya. Dalam pembelaan mereka, negara-negara tersebut umumnya berpenduduk kebanyakan, meskipun sejauh ini saya tidak melihat banyak yang mengatakan .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 pertanyaan ini benar-benar akan berjalan dengan benar. Harap edit secara bebas jika perlu diperbaiki.

4
dlamblin

Ini semua ditemukan di sini (yang merupakan panduan yang sangat baik untuk mem-parsing IIS logfiles Anda, btw):

20 file terbaru di situs web Anda

logparser -i: FS "SELECT 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 terakhir dimodifikasi

logparser -i: FS "SELECT TOP 20 Path, LastWriteTime dari c:\inetpub\wwwroot *. * PESANAN OLEH 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 KELOMPOK DENGAN PESAN URL DENGAN PESAN DENGAN 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 mengenai halaman yang sama lebih dari 50 kali dalam satu hari

logparser "SELECT DISTINCT date, cs-uri-stem, c-ip, Hitung () SEBAGAI Hits DARI ex. log KELOMPOK Berdasarkan tanggal, c-ip, cs-uri-stem MEMILIKI Hits> 50 ORDER DENGAN 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
GregD

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

0
BCS