По мере роста переполнения стека мы начинаем внимательно следить за нашими журналами IIS для выявления проблемных HTTP-клиентов - таких, как мошеннические веб-пауки , пользователи, у которых большая страница обновляется каждую секунду, плохо написанные одноразовые веб-скребки, хитрость пользователи, которые пытаются увеличить число страниц, считают миллионы раз, и так далее.
Я придумал несколько запросов LogParser, которые помогают нам идентифицировать большинство странностей и отклонений при указании на файл журнала IIS.
Максимальное использование полосы пропускания по 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-адреса хиты Avgbyte служил ------------------------------------------------- - ---- ------- ------- /favicon.ico 16774 522 8756028 /content/img/search.png 15342 446 6842532
Самые популярные хиты по 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 ------------------------------------------------- - ---- /content/img/sf/vote-arrow-down.png 14076 /content/img/sf/vote-arrow-up.png 14018
Максимальная пропускная способность и хиты по 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
клиентский агент-клиент насчитывает хиты ------------- ------------------------------------- -------- --------- ----- 66.249.68.47 Mozilla / 5.0 + (совместимо; + Googlebot / 2.1; 135131089 16640 194.90.190.41 omgilibot / 0.3 ++ omgili.com 133805857 6447
Максимальная пропускная способность по часам по 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 клиентский пользовательский агент хиты всего - ------------- ----------------------------------- ------ -------- ---- 9 194.90.190.41 omgilibot / 0.3 ++ omgili.com 30634860 1549 10 194.90.190.41 omgilibot / 0.3 ++ omgili.com 29070370 1503
Топ попаданий по часам по 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 достигает тотбайтов - ------------- ----------------------------------- ------ ---- -------- 10 194.90.190.41 omgilibot / 0.3 ++ omgili.com 1503 29070370 12 66.249.68.47 Mozilla / 5.0 + (совместимо; + Googlebot / 2.1 1363 13186302
{Имя_файла}, конечно, будет путем к файлу журнала IIS, таким как
c:\working\sologs\u_ex090708.log
Я сделал много поисков в Интернете для хороших запросов IIS LogParser и нашел очень мало. Эти 5 выше очень помогли нам в выявлении серьезных проблемных клиентов. Но мне интересно - чего нам не хватает?
Какие есть еще способы нарезать и нарезать журналы IIS (желательно с запросами LogParser ), чтобы найти их для статистических аномалий? Есть ли у вас хорошие запросы IIS LogParser, которые вы запускаете на своих серверах?
Ответы:
Хорошим показателем для взлома активностей или других атак является количество ошибок в час. Следующий скрипт возвращает даты и часы, когда было возвращено более 25 кодов ошибок . Отрегулируйте значение в зависимости от объема трафика на сайте (и качества вашего веб-приложения ;-)).
Результат может выглядеть примерно так:
Следующий запрос обнаруживает необычно большое количество обращений к одному URL-адресу с одного IP-адреса . В этом примере я выбрал 500, но вам, возможно, придется изменить запрос для крайних случаев (исключая, например, IP-адрес Google London ;-).)
источник
having
сLimit n
может сделать хороший способ настроить первый запросОдна вещь, которую вы могли бы рассмотреть, чтобы отфильтровать законный трафик (и расширить область действия), это включить
cs(Cookie)
в журналы IIS, добавить немного кода, который устанавливает небольшой cookie, используя javascript, и добавитьWHERE cs(Cookie)=''
.Из-за небольшого количества кода у каждого пользователя должны быть файлы cookie, если они не отключили файлы cookie вручную (что может сделать небольшой процент пользователей) или если этот пользователь на самом деле не бот, который не поддерживает Javascript (например, wget, httpclient) и т. д. не поддерживают Javascript).
Я подозреваю, что если у пользователя высокий уровень активности, но он принимает файлы cookie и имеет включенный javascript, он, скорее всего, будет законным пользователем, тогда как если вы обнаружите пользователя с большим объемом активности, но без поддержки cookie / javascript , они, скорее всего, будут ботом.
источник
Извините, пока не могу комментировать, поэтому я вынужден ответить.
Есть небольшая ошибка с запросом «Максимальное использование полосы пропускания по URL». Хотя большую часть времени вы будете в порядке, принимая ваши запросы на страницу и умножая их на размер файла, в этом случае, поскольку вы не обращаете внимания на какие-либо параметры запроса, вы столкнетесь с некоторыми очень неточные цифры.
Для более точного значения просто используйте SUM (sc-bytes) вместо MUL (Hits, AvgBytes) как ServedBytes .
источник
Андерс Лундстрем (Anders Lundström) пишет серию статей в блогах, посвященных распространенным запросам LogParser.
Я использовал это:
источник
У этого парня около десятка полезных запросов:
http://logparserplus.com/Examples/Queries.aspx
источник
Возможно, вы захотите найти ваши самые длинные запросы (основы и / или запросы), а также те, у которых наибольшее количество байтов получено сервером. Я бы также попробовал тот, который группирует по полученным байтам и IP, чтобы вы могли увидеть, есть ли определенный формат запроса, который, вероятно, повторяется одним IP.
Я также посчитал бы количество обращений либо для группы запрашивающих IP по часу и минуте дня, либо по группировке запрашивающего IP по минуте, чтобы узнать, есть ли какие-либо регулярно повторяющиеся посещения, которые могут быть сценариями. Это будет небольшая модификация сценария хитов по часам.
На любых не-программировании сайтов, поиск журналов для ключевых слов SQL также хорошая идея, таких вещи , как
SELECT
,UPDATE
,DROP
,DELETE
и другие странности , какFROM sys.tables
, что вместе операция OR и подсчет голосов по IP могут показаться полезными. Для большинства сайтов, включая эти, слова редко, если вообще появляются, появляются в части запроса URI, но здесь они могут на законных основаниях появляться в части URI и частях данных. Мне нравится менять IP-адреса любых хитов, чтобы посмотреть, кто запускает готовые скрипты. Я склонен видеть.ru
,.br
,.cz
и.cn
. Я не хочу судить, но отчасти склонен их блокировать. В своей защите, эти страны , как правило , в основном заселены, хотя я до сих пор я не вижу много скажу.in
,.fr
,.us
или.au
делать то же самое.PS Я не могу убедиться, что эти запросы будут работать правильно. Пожалуйста, редактируйте их свободно, если они нуждаются в исправлении.
источник
Все они были найдены здесь (это отличное руководство для анализа ваших лог файлов IIS, кстати):
20 новейших файлов на вашем сайте
logparser -i: FS "ВЫБЕРИТЕ TOP 20 Path, CreationTime из c: \ inetpub \ wwwroot *. * ЗАКАЗАТЬ ПО CreationTime DESC" -rtp: -1
20 самых последних измененных файлов
logparser -i: FS "ВЫБЕРИТЕ TOP 20 Path, LastWriteTime из c: \ inetpub \ wwwroot *. * ЗАКАЗАТЬ ПО LastWriteTime DESC" -rtp: -1
Файлы, которые дали 200 кодов состояния (в случае удаления троянов)
logparser "ВЫБЕРИТЕ 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
Показать любой IP-адрес, который посещал одну и ту же страницу более 50 раз за один день
logparser "ВЫБЕРИТЕ DISTINCT date, cs-uri-stem, c-ip, Count ( ) AS Хиты ОТ ex .log GROUP BY date, c-ip, cs-uri-stem HAVING Хиты> 50 ЗАКАЗАТЬ ПО ХИТАМ Desc" -rtp: -1
источник
Я не знаю, как это сделать с LogParser, но поиск строк запросов для таких вещей, как «phpMyAdmin» (или других распространенных уязвимостей), которые получают 404, может быть хорошим способом выявления атак по сценарию.
источник