À medida que o estouro de pilha cresce, começamos a examinar atentamente nossos logs do IIS para identificar clientes HTTP problemáticos - coisas como web spiders desonestos , usuários que possuem uma página grande configurada para atualizar a cada segundo, scrapers únicos e mal escritos, complicados os usuários que tentam aumentar a página contam um zilhão de vezes e assim por diante.
Fiz algumas consultas ao LogParser que nos ajudam a identificar a maioria das esquisitices e anormalidades quando apontadas para um arquivo de log do IIS.
Principal uso de largura de banda 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 exibido ------------------------------------------------- - ---- ------- ------- /favicon.ico 16774 522 8756028 /content/img/search.png 15342 446 6842532
Principais hits 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
hits de URL ------------------------------------------------- - ---- /content/img/sf/vote-arrow-down.png 14076 /content/img/sf/vote-arrow-up.png 14018
Largura de banda e hits principais 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
hits de totbytes do agente usuário do cliente ------------- ------------------------------------- -------- --------- ----- 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
Largura de banda superior 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
Principais 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 user user agent 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 {filename}, é claro, seria um caminho para um arquivo de log do IIS, como
c:\working\sologs\u_ex090708.log
Eu fiz muitas pesquisas na Web para obter boas consultas do IIS LogParser e achei muito pouco. Esses 5, acima, nos ajudaram tremendamente a identificar clientes com problemas sérios. Mas eu estou pensando - o que estamos perdendo?
Que outras maneiras existem para dividir e cortar os logs do IIS (de preferência com consultas do LogParser ) para explorá-los em busca de anomalias estatísticas? Você tem alguma consulta boa do IIS LogParser executada em seus servidores?
Respostas:
Um bom indicador para atividades de hackers ou outros ataques é o número de erros por hora. O script a seguir retorna as datas e horas que tiveram 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 ;-)).
O resultado pode ser algo assim:
A próxima consulta detecta um número excepcionalmente alto de ocorrências em um único URL de um endereço IP . Neste exemplo, escolhi 500, mas pode ser necessário alterar a consulta para casos extremos (excluindo o endereço IP do Google London, por exemplo ;-).)
fonte
having
com umLimit n
pode fazer para uma boa maneira de ajustar a primeira consultaUma coisa que você pode considerar para filtrar o tráfego legítimo (e ampliar seu escopo) é ativar
cs(Cookie)
nos logs do IIS, adicionar um pouco de código que defina um pequeno cookie usando javascript e adicionarWHERE cs(Cookie)=''
.Devido ao seu pequeno pedaço de código, todo usuário deve ter um cookie, a menos que tenha desativado manualmente os cookies (o que uma pequena porcentagem de pessoas pode fazer) ou a menos que esse usuário seja realmente um bot que não suporta Javascript (por exemplo, wget, httpclient , etc. não suportam Javascript).
Suspeito que se um usuário tiver um alto volume de atividades, mas aceitar cookies e ativar o javascript, é mais provável que seja um usuário legítimo, enquanto que se você encontrar um usuário com um alto volume de atividades, mas sem suporte a cookies / javascript , é mais provável que sejam um bot.
fonte
Desculpe, não posso comentar ainda, então sou obrigado a responder.
Há um pequeno erro na consulta 'Uso da largura de banda principal por URL'. Embora na maioria das vezes você esteja bem, aceitando suas solicitações de uma página e multiplicando pelo tamanho do arquivo, nesse caso, como você não está prestando atenção a nenhum parâmetro de consulta, encontrará algumas números muito imprecisos.
Para um valor mais preciso, basta fazer um SUM (sc-bytes) em vez de MUL (Hits, AvgBytes) como ServedBytes .
fonte
Anders Lundström tem escrito uma série de artigos de blog sobre consultas comuns do LogParser.
Eu tenho usado estes:
fonte
Esse cara tem cerca de uma dúzia de consultas úteis:
http://logparserplus.com/Examples/Queries.aspx
fonte
Convém procurar as solicitações mais longas (hastes e / ou consultas) e aquelas com mais bytes recebidos pelo servidor. Eu também tentaria um que agrupasse os bytes recebidos e o IP, para que você possa ver se um formato de solicitação específico provavelmente é repetido por um IP.
Também contaria as ocorrências para o grupo de IP solicitante por uma hora e minuto do dia ou agruparia o IP solicitante com o minuto da hora para descobrir se há visitas recorrentes regularmente que possam ser scripts. Isso seria uma pequena modificação no script de hits por hora.
Em sites não-programação, procurando seus logs por palavras-chave SQL também é uma boa idéia, coisas como
SELECT
,UPDATE
,DROP
,DELETE
e outras esquisitices, comoFROM sys.tables
, ORing que juntos e contando por IP parece acessível. Para a maioria dos sites, incluindo esses, as palavras raramente apareceriam na parte de consulta do URI, mas aqui elas podem aparecer legitimamente no tronco e nas partes de dados do URI. Gosto de reverter os IPs de qualquer ocorrência apenas para ver quem está executando scripts pré-fabricados. Eu tendo a ver.ru
,.br
,.cz
e.cn
. Não pretendo julgar, mas tenho tendência a bloqueá-los a partir de agora. Em sua defesa, os países geralmente são maioritariamente habitado, embora, até agora, não vejo muito de, digamos.in
,.fr
,.us
ou.au
fazendo o mesmo.PS Não consigo verificar se essas consultas realmente seriam executadas corretamente. Por favor, edite-os livremente se eles precisarem de correção.
fonte
Todos foram encontrados aqui (que é um excelente guia para analisar seus arquivos de log do IIS, btw):
20 arquivos mais recentes em seu site
logparser -i: FS "SELECIONE 20 caminhos principais, CreationTime de c: \ inetpub \ wwwroot *. * PEDIDO POR CreationTime DESC" -rtp: -1
20 arquivos modificados mais recentemente
logparser -i: FS "SELECT TOP 20 Path, LastWriteTime de c: \ inetpub \ wwwroot *. * ORDER BY LastWriteTime DESC" -rtp: -1
Arquivos que resultaram em 200 códigos de status (no caso de trojans serem excluídos)
logparser "SELECT DISTINCT TO_LOWERCASE (cs-uri-stem) COMO URL, Count ( ) AS Acessado por ex .log WHERE sc-status = 200 GRUPO POR URL ORDEM POR URL" -rtp: -1
Mostrar qualquer endereço IP que chegue à mesma página mais de 50 vezes em um único dia
logparser "SELECT DISTINCT date, cs-uri-stem, c-ip, Count ( ) AS Acessos do ex .log GROUP BY date, c-ip, cs-uri-stem TENDO Hits> 50 ORDER by Hits Desc" -rtp: -1
fonte
Não sei como fazer isso com o LogParser, mas procurar sequências de solicitações para coisas como "phpMyAdmin" (ou outras recompensas comuns) que obtêm 404s podem ser uma boa maneira de identificar ataques com script.
fonte