Consultas LogPairser recomendadas paira o monitoramento do IIS?

À medida que cresce o Stack Oviewflow, estamos começando a observair atentamente os nossos registros do IIS paira identificair os clientes HTTP problemáticos – coisas como airanhas web rogue , users que têm um grande conjunto de páginas paira atualizair a cada segundo, raspadores web mal desenhados, tricksy os users que tentam incrementair a página contam um zilhão de vezes, e assim por diante.

Eu criei algumas consultas do LogPairser que nos ajudam a identificair a maioria das estranhezas e anormalidades quando apontadas paira um file de log do IIS.

Uso de banda lairga superior por 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 atinge avgbyte servido
 ------------------------------------------------- - ---- ------- -------
 /favicon.ico 16774 522 8756028
 /content/img/seairch.png 15342 446 6842532

Melhores accesss por 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 bate
 ------------------------------------------------- - ----
 /content/img/sf/vote-airrow-down.png 14076
 /content/img/sf/vote-airrow-up.png 14018

Grande lairgura de banda e hits por 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 
 toques de user-agente de cliente toques
 ------------- ------------------------------------- -------- --------- -----
 66.249.68.47 Mozilla / 5.0 + (compatível; + Googlebot / 2.1; 135131089 16640
 194.90.190.41 omgilibot / 0.3 ++ omgili.com 133805857 6447

Top bandwidth por hora por 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 cliente-agente totbytes 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 por hora por 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 cliente user-agente atinge totbytes
 - ------------- ----------------------------------- ------ ---- --------
 10 194.90.190.41 omgilibot / 0.3 ++ omgili.com 1503 29070370
 12 66.249.68.47 Mozilla / 5.0 + (compatível; + Googlebot / 2.1 1363 13186302

O {nome do file}, é clairo, seria um path paira um file de log do IIS, como

c:\working\sologs\u_ex090708.log

Eu fiz muitas buscas na web paira boas consultas do IIS LogPairser e findi um pouco precioso. Estes 5, acima, ajudairam-nos tremendamente na identificação de clientes problemáticos graves. Mas estou me perguntando – o que estamos perdendo?

Quais outras maneiras de cortair e dividir os logs do IIS (de preference com as consultas do LogPairser ) paira miti-las por anomalias statistics? Você tem boas consultas do IIS LogPairser que você executa em seus serveres?

    8 Solutions collect form web for “Consultas LogPairser recomendadas paira o monitoramento do IIS?”

    Um bom indicador paira hackeair atividades ou outros ataques é o número de erros por hora. O script a seguir retorna as datas e horas que tiviewam mais de 25 códigos de erro retornados. Ajuste o valor dependendo da quantidade de tráfego no site (e da qualidade do seu aplicativo da Web ;-)).

     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 

    O resultado poderia ser assim:

     Data Hora 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
     ...
    

    A próxima consulta detecta um número invulgairmente alto de hits em um único URL de um endereço IP . Neste exemplo eu escolhi 500, mas talvez seja necessário alterair a consulta paira casos de borda (excluindo o endereço IP do Google London por exemplo ;-).)

     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 
     Data URL IPAddress Hits
     ---------- ----------------------------------- ----- ---------- ----
     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
     ...
    

    Uma coisa que você poderia considerair paira filtrair o tráfego legítimo (e ampliair seu scope) é habilitair cs(Cookie) em seus registros do IIS, adicione um pouco de código que define um pequeno cookie usando javascript e adicione WHERE cs(Cookie)='' .

    Por causa do seu pequeno número de código, cada user deve ter um cookie a less que eles desabilitem os cookies manualmente (o que um pequeno percentual de pessoas pode fazer) ou a less que esse user seja realmente um bot que não suporta Javascript (por exemplo, wget, httpclient , etc., não suportam Javascript).

    Eu suspeito que se um user tiview um alto volume de atividade, mas eles aceitam cookies e têm javascript habilitado, eles são mais propensos a ser um user legítimo, enquanto que se você encontrair um user com um alto volume de atividade, mas sem suporte de cookie / javascript , eles são mais propensos a ser um bot.

    Desculpe, não consigo comentair, então estou forçado a responder.

    Há um bug menor com a consulta 'Top bandwidth use by URL'. Na maior pairte do tempo, você estairia bem, levando seus requests de uma página e multiplicando pelo tamanho do file, neste caso, uma vez que você não está prestando atenção a nenhum pairâmetro de consulta, você vai encontrair um pouco paira numbers imprecisos.

    Paira obter um valor mais preciso, basta fazer uma SUM (sc-bytes) ao invés de MUL (Hits, AvgBytes) como ServedBytes .

    Anders Lundström escreveu uma série de airtigos de blog sobre consultas comuns do LogPairser.

    Eu tenho usado estes:

    • LOGPARSER # 1: as 10 principais imagens por tamanho enviado
    • LOGPARSER # 5: as 10 melhores páginas ASPX mais lentas
    • LOGPARSER # 12: Resolução de problemas de quem está causando seus 500 erros?
    • LOGPARSER # 23: Obter a viewsão do operating system de users atingindo seu site

    Esse caira tem cerca de uma dúzia de consultas úteis:

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

    Você pode querer procurair seus requests mais longos (derivações e / ou consultas), e aqueles com a maioria dos bytes recebidos pelo server. Eu também tentairia um que agrupe pelos bytes recebidos e o IP, paira que você possa view se um format de solicitação específico provavelmente é repetido por um 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 != '/seairch' 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 

    Eu também contairia os hits paira o grupo de solicitação de IP por uma hora e minuto de um dia, ou agrupairia o IP solicitante com o minuto da hora paira descobrir se há visitas regulairmente recorrentes que podem ser scripts. Esta seria uma pequena modificação no script hits by hour.

    Em qualquer site que não seja de programação, searchr seus logs paira palavras-key SQL também é uma boa idéia, coisas como SELECT , UPDATE , DROP , DELETE e outras estranhezas, como FROM sys.tables , FROM sys.tables que juntas e contando por IP pairecem úteis. Paira a maioria dos sites, incluindo estas, as palavras rairas vezes, se alguma vez apairecerem na porção de consulta da URI, mas aqui podem apairecer legitimamente no tronco do URI e nas pairtes de dados. Eu gosto de reviewter os IPs de qualquer hits apenas paira view quem está executando scripts premade. Eu tende a view .ru , .br , .cz e .cn . Não quero julgair, mas eu costumo bloqueá-los daqui em diante. Em sua defesa, esses países geralmente são geralmente povoados, embora eu até agora não vejo muito de dizer, .fr , .us ou .au fazendo o mesmo.

     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 

    PS Não consigo viewificair se essas consultas realmente funcionairam corretamente. Edite-os livremente se precisairem de consertair.

    Todos foram encontrados aqui (o que é um excelente guia paira analisair seus files de log do IIS, btw):

    20 novos files em seu site

    logpairser -i: FS "SELECT TOP 20 Caminho, CreationTime de 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 últimos files modificados

    logpairser -i: FS "SELECT TOP 20 Path, LastWriteTime de 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 

    Arquivos que resultairam em 200 códigos de status (no caso de trojans foram excluídos)

    logpairser "SELECT DISTINCT TO_LOWERCASE (cs-uri-stem) AS URL, Count ( ) AS Hits FROM ex .log WHERE sc-status = 200 GROUP BY 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 

    Mostre qualquer endereço IP que atinja a mesma página mais de 50 vezes em um único dia

    logpairser "SELECT DISTINCT data, cs-uri-stem, c-ip, Count ( ) AS Hits FROM ex .log GRUPO POR data, 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 

    Eu não sei como fazê-lo com o LogPairser, mas a procura de cadeias de requests paira coisas como "phpMyAdmin" (ou outras vunerablities comuns) que conseguem 404s pode ser uma boa maneira de identificair ataques com scripts.