Парсим evtx логи

1111111111Rating 4.00 (4 Votes)

Сложилась ситуация - есть огромное количество Windows логов, общий объем чуть больше 36Гб, с сотнями тысяч записей, необходимо найти в этих логах:

  • определенное событие
  • несколько определенных кодов в этом событии
  • определенную учетную запись, из под которой генерировалась данные события

Итак ловить будем событие безопасности, а именно запись \ удаление файла определенным лицом. Изначально пределимся с масками значений доступа:

1537 (0x10000) = Delete
4416 (0x1) = ReadData(or List Directory)
4417 (0x6) = WriteData(or Add File)  (0x2 on Windows 2008 Server)
4418 (0x4) = AppendData (or AddSubdirectory)
4432 (0x1) = Query Key Value
4433 (0x2) = Set Key Value
4434 (0x4) = Create Sub Key

т.е. в данном случае нам нужны маски (Access Mask) 0x6 и 0x10000, отработка события типа File System на данные операции обозначена кодом 4663, имя пользователя так же известна, получается все данные для поиска у нас есть - EventID, маска, имя уч. записи, здесь все в принципе просто, требуемые данные можно отфильтровать по указанным параметрам используя запрос XPath:

<QueryList>
  <Query Id='0' Path='Security'>
    <Select Path='Security'>
            *[System[(EventID="4663")]]
            and
            *[EventData[Data[@Name ='AccessMask'] and (Data='0x1' or Data ='0x10000')]]
            and
            *[EventData[Data[@Name ='SubjectUserName'] and (Data='username')]]
        </Select>
  </Query>
</QueryList>

ниже представлен классический пример, запроса:

<QueryList>
  <Query Id="0" Path="Security">
    <Select Path="Security">
            *[System[(EventID="4663")]]
            and
            *[EventData[Data[@Name ='AccessMask'] and (Data='0x1' or Data ='0x10000')]]
            and
            *[EventData[Data[@Name ='ObjectName'] and (Data='E:\Docs\Document.docx')]]
            and
            *[EventData[Data[@Name ='SubjectUserName'] and (Data='UserName')]]
            and
            *[EventData[Data[@Name ='AdditionalInfo'] and (Data='*')]]
        </Select>
  </Query>
</QueryList>

в результате будут собраны все события с маcкой WriteData т.е. можно будет посмотреть какие файлы "записывал" даный пользователь, спектр можно сузить, зная к примеру имя документа:

*[EventData[Data[@Name ='ObjectName'] and (Data='E:\Test\New Text Document.txt')]]

Все работает, но если файлы большие и данных много, на фильтрацию будет затрачено довольно много времени, к тому же сервер будет в подвешенном режиме, так как операции подобного рода могут утилизировать память до 100%, нужно было что то более "легкое" и такео решение нашлось - Log Parser, помимо всего прочего, данная утилита позволяет производить поиск во всех файлах evtx в каталоге, что значительно упрощает дело:

LogParser.exe -i:evt -o:csv "Select * from e:\test\*.evtx where EventID=4663 and (Message Like '%Access Mask: 0x6%' or Message Like '%Access Mask:0x10000%' and Message Like '%Account Name: username%' and Message Like '%E:\Test\New Text Document.txt%')" > e:\test\Out.csv

Добавить комментарий


Обновить
Защитный код

Сейчас 134 гостей и ни одного зарегистрированного пользователя на сайте

Вверх
Вниз