Server 2008 кто редактировал файл

от admin

Аудит удаления и доступа к файлам и запись событий в лог-файл средствами Powershell


Я думаю, многие сталкивались с задачей, когда к Вам приходят и спрашивают: «У нас тут файл пропал на общем ресурсе, был и не стало, похоже кто-то удалил, Вы можете проверить кто это сделал?» В лучшем случае вы говорите, что у вас нет времени, в худшем пытаетесь найти в логах упоминание данного файла. А уж когда включен файловый аудит на файловом сервере, логи там, мягко говоря «ну очень большие», и найти что-то там — нереально.
Вот и я, после очередного такого вопроса (ладно бекапы делаются несколько раз в день) и моего ответа, что: «Я не знаю кто это сделал, но файл я Вам восстановлю», решил, что меня это в корне не устраивает…

Начнем.

Для начала включим к групповых политиках возможность аудита доступа к файлам и папкам.
Локальные политики безопасности->Конфигурация расширенной политики безопасности->Доступ к объектам
Включим «Аудит файловой системы» на успех и отказ.
После этого на необходимые нам папки необходимо настроить аудит.
Проходим в свойства папки общего доступа на файловом сервере, переходим в закладку «Безопасность», жмем «Дополнительно», переходим в закладку «Аудит», жмем «Изменить» и «Добавить». Выбираем пользователей для которых вести аудит. Рекомендую выбрать «Все», иначе бессмысленно. Уровень применения «Для этой папки и ее подпапок и файлов».
Выбираем действия над которыми мы хотим вести аудит. Я выбрал «Создание файлов/дозапись данных» Успех/Отказ, «Создание папок/дозапись данных» Успех/отказ, Удаление подпапок и файлов и просто удаление, так же на Успех/Отказ.
Жмем ОК. Ждем применения политик аудита на все файлы. После этого в журнале событий безопасности, будет появляться очень много событий доступа к файлам и папкам. Количество событий прямопропорционально зависит от количества работающих пользователей с общим ресурсом, и, конечно же, от активности использования.

Итак, данные мы уже имеем в логах, остается только их оттуда вытащить, и только те, которые нас интересуют, без лишней «воды». После этого акурратно построчно занесем наши данные в текстовый файл разделяя данные симовлами табуляции, чтобы в дальнейшем, к примеру, открыть их табличным редактором.

А теперь очень интересный скрипт.

Скрипт пишет лог об удаленных файлах.

Как оказалось при удалении файлов и удалении дескрипторов создается одно и тоже событие в логе, под При этом в теле сообщения могут быть разные значения «Операции доступа»: Запись данных (или добавление файла), DELETE и т.д.
Конечно же нас интересует операция DELETE. Но и это еще не все. Самое интересное, то что, при обычном переименовании файла создается 2 события с ID 4663, первое с Операцией доступа: DELETE, а второе с операцией: Запись данных (или добавление файла). Значит если просто отбирать 4663 то мы будем иметь очень много недостоверной информации: куда попадут файлы и удаленные и просто переименованные.
Однако мной было замечено, что при явном удалении файла создается еще одно событие с ID 4660, в котором, если внимательно изучить тело сообщения, содержится имя пользователя и еще много всякой служебной информации, но нет имени файла. Зато есть код дескриптора.

Однако предшествующим данному событию было событие с ID 4663. Где как раз таки и указывается и имя файла, и имя пользователя и время, и операция как не странно там DELETE. И самое главное там имеется номер дескриптора, который соответствует номеру дескриптора из события выше (4660, помните? которое создается при явном удалении файла). Значит теперь, чтобы точно знать какие файлы удалены, необходимо просто найти все события с ID 4660, а так же предшествующие каждому этому событию, событие с кодом 4663, в котором будет содержаться номер нужного дескриптора.

Эти 2 события генерируются одновременно при удалении файла, но записываются последовательно, сначала 4663, потом 4660. При этом их порядковые номера различаются на один. У 4660 порядковый номер на единицу больше чем у 4663.
Именно по этому свойству и ищется нужное событие.

Т.е. берутся все события с ID 4660. У них берется 2 свойства, время создания и порядковый номер.
Далее в цикле по одному берется каждое событие 4660. Выбирается его свойства, время и порядковый номер.
Далее в переменную $PrevEvent заносится номер нужного нам события, где содержится нужная информация об удаленном файле. А так же определяются временные рамки в которых необходимо искать данное событие с определенным порядковым номером (с тем самым который мы занесли в $PrevEvent). Т.к. событие генерируется практически одновременно, то поиск сократим до 2х секунд: + — 1 секунда.
(Да, именно +1 сек и -1 сек, почему именно так, не могу сказать, было выявлено экспериментально, если не прибавлять секунду, то некоторые может не найти, возможно связано с тем, что возможно два эти события могут создаваться один раньше другой позже и наоборот).
Сразу оговорюсь, что искать только по порядковому номеру по всем событиям в течении часа — очень долго, т.к. порядковый номер находиться в теле события, и чтобы его определить, нужно пропарсить каждое событие — это очень долго. Именно поэтому необходим такой маленький период в 2 секунда (+-1сек от события 4660, помните?).
Именно в этом временном промежутке ищется событие с необходимым порядковым номером.
После того как оно найдено, работают фильтры:

Т.е. не записываем информацию об удаленных временных файлах (.*tmp), файлах блокировок документов MS Office (.*lock), и временных файлах MS Office (.*

$*)
Таким же образом берем необходимые поля из этого события, и пишем их в переменную $BodyL.
После нахождения всех событий, пишем $BodyL в текстовый файл лога.

Для лога удаленных файлов я использую схему: один файл на один месяц с именем содержащим номер месяца и год). Т.к. удаленных файлов в разы меньше чем файлов к которым был доступ.

В итоге вместо бесконечного «рытья» логов в поисках правды, можно открыть лог-файл любым табличным редактором и просмотреть нужные нам данные по пользователю или файлу.

Рекомендации

Вам придется самим определить время в течении которого вы будете искать нужные события. Чем больше период, тем дольше ищет. Все зависит от производительности сервера. Если слабенький — то начните с 10 минут. Посмотрите, как быстро отработает. Если дольше 10 минут, то либо увеличьте еще, вдруг поможет, либо наоборот уменьшите период до 5 минут.

После того как определите период времени. Поместите данный скрипт в планировщик задач и укажите, что выполнять данный скрипт необходимо каждые 5,10,60 минут (в зависимости какой период вы указали в скрипте). У меня указано каждый 60 минут. $time = (get-date) — (new-timespan -min 60).

Server 2008 кто редактировал файл


Я думаю, многие сталкивались с задачей, когда к Вам приходят и спрашивают: «У нас тут файл пропал на общем ресурсе, был и не стало, похоже кто-то удалил, Вы можете проверить кто это сделал?» В лучшем случае вы говорите, что у вас нет времени, в худшем пытаетесь найти в логах упоминание данного файла. А уж когда включен файловый аудит на файловом сервере, логи там, мягко говоря «ну очень большие», и найти что-то там — нереально.
Вот и я, после очередного такого вопроса (ладно бекапы делаются несколько раз в день) и моего ответа, что: «Я не знаю кто это сделал, но файл я Вам восстановлю», решил, что меня это в корне не устраивает…

Как оказалось при удалении файлов и удалении дескрипторов создается одно и тоже событие в логе, под При этом в теле сообщения могут быть разные значения «Операции доступа»: Запись данных (или добавление файла), DELETE и т.д.
Конечно же нас интересует операция DELETE. Но и это еще не все. Самое интересное, то что, при обычном переименовании файла создается 2 события с ID 4663, первое с Операцией доступа: DELETE, а второе с операцией: Запись данных (или добавление файла). Значит если просто отбирать 4663 то мы будем иметь очень много недостоверной информации: куда попадут файлы и удаленные и просто переименованные.
Однако мной было замечено, что при явном удалении файла создается еще одно событие с ID 4660, в котором, если внимательно изучить тело сообщения, содержится имя пользователя и еще много всякой служебной информации, но нет имени файла. Зато есть код дескриптора.

Однако предшествующим данному событию было событие с ID 4663. Где как раз таки и указывается и имя файла, и имя пользователя и время, и операция как не странно там DELETE. И самое главное там имеется номер дескриптора, который соответствует номеру дескриптора из события выше (4660, помните? которое создается при явном удалении файла). Значит теперь, чтобы точно знать какие файлы удалены, необходимо просто найти все события с ID 4660, а так же предшествующие каждому этому событию, событие с кодом 4663, в котором будет содержаться номер нужного дескриптора.

Эти 2 события генерируются одновременно при удалении файла, но записываются последовательно, сначала 4663, потом 4660. При этом их порядковые номера различаются на один. У 4660 порядковый номер на единицу больше чем у 4663.
Именно по этому свойству и ищется нужное событие.

Аудит доступа к файлам и папкам в windows server 2008 r2

Аудит доступа к файлам и папкам в Windows Server 2008 R2

Для ведения аудита доступа к файлам и папкам в Windows Server 2008 R2, необходимо включить функцию аудита, а также указать папки и файлы, доступ к которым необходимо фиксировать. После настройки аудита, в журнале сервера будет содержаться информация о доступе и других событиях на выбранные файлы и папки. Стоит заметить, что аудит доступа к файлам и папкам может вестись только на томах с файловой системой NTFS.

Включаем аудит на объекты файловой системы в Windows Server 2008 R2

Аудит доступа на файлы и папки включается и отключается при помощи групповых политик: доменный политик для домена Active Directory либо локальных политик безопасности для отдельно стоящих серверов. Чтобы включить аудит на отдельном сервере, необходимо открыть консоль управления локальный политик Start -> All Programs -> Administrative Tools -> Local Security Policy. В консоли локальной политики нужно развернуть дерево локальный политик (Local Policies) и выбрать элемент Audit Policy.

В правой панели нужно выбрать элемент Audit Object Access и в появившемся окне указать какие типы событий доступа к файлам и папкам нужно фиксировать (успешный/ неудачный доступ):


После выбора необходимой настройки нужно нажать OK.

Выбор файлов и папок, доступ к которым будет фиксироваться

После того, как активирован аудит доступа к файлам и папкам, необходимо выбрать конкретные объекты файловой системы, аудит доступа к которым будет вестись. Так же как и разрешения NTFS, настройки аудита по-умолчанию наследуются на все дочерние объекты (если не настроено иначе). Точно так же, как при назначении прав доступа на файлы и папки, наследование настроек аудита может быть включено как для всех, так и только для выбранных объектов.

Чтобы настроить аудит для конкретной папки/файла, необходимо щелкнуть по нему правой кнопкой мыши и выбрать пункт Свойства (Properties). В окне свойств нужно перейти на вкладку Безопасность (Security) и нажать кнопку Advanced. В окне расширенных настроек безопасности (Advanced Security Settings) перейдем на вкладку Аудит (Auditing). Настройка аудита, естественно, требует прав администратора. На данном этапе в окне аудита будет отображен список пользователей и групп, для которых включен аудит на данный ресурс:

Чтобы добавить пользователей или группы, доступ которых к данному объекту будет фиксироваться, необходимо нажать кнопку Add… и указать имена этих пользователей/групп (либо указать Everyone – для аудита доступа всех пользователей):

Далее нужно указать конкретные настройки аудита (такие события, как доступ, запись, удаление, создание файлов и папок и т.д.). После чего нажимаем OK.

Сразу после применения данных настроек в системном журнале Security (найти его можно в оснастке Computer Management -> Events Viewer), при каждом доступе к объектам, для которых включен аудит, будут появляться соответствующие записи.

Альтернативно события можно просмотреть и отфильтровать с помощью командлета PowerShell — Get-EventLog Например, чтобы вывести все события с eventid 4660, выполним комманду:

UPD от 06.08.2012 (Благодарим комментатора Roman).

В Windows 2008/Windows 7 для управления аудитом появилась специальная утилита auditpol. Полный список типов объектов, на который можно включить аудит можно увидеть при помощи команды:

Как вы видите эти объекты разделены на 9 категорий:

  • System
  • Logon/Logoff
  • Object Access
  • Privilege Use
  • Detailed Tracking
  • Policy Change
  • Account Management
  • DS Access
  • Account Logon

И каждая из них, соответственно, делиться на подкатегории. Например, категория аудита Object Access включает в себя подкатегорию File System и чтобы включить аудит для объектов файловой системы на компьютере выполним команду:

Отключается он соответственно командой:

Т.е. если отключить аудит ненужных подкатегорий, можно существенно сократить объем журнала и количества ненужных событий.

После того, как активирован аудит доступа к файлам и папкам, нужно указать конкретные объекты которые будем контролировать (в свойствах файлов и папок). Имейте в виду, что по-умолчанию настройки аудита наследуются на все дочерние объекты (если не указано иное ).

Все собранные события можно сохранять во внешнюю БД для ведения истории. Пример реализации системы: Простая система аудита удаления файлов и папок для Windows Server.

Аудит доступа к файлам и папкам Windows на примере Windows server 2012R2

Иногда бывает необходимо понять кто удалил/изменил/переименовал конкретный файл или папку. В ОС Windows для этого используется аудит доступа к объектам.

Аудит это запись в специальные журналы информации об определенных событиях (источник, код события, успешность, объект и т.д. ). Объектом аудита может являться как любой файл или папка, так и определенное событие, например вход в систему или выход из нее, то есть можно записывать все события происходящие с конкретным файлом или папкой — чтение, запись, удаление и т.д., можно события входа в систему и т.д.

Необходимо понимать, что аудит забирает на себя.

Для того, чтобы можно было настраивать аудит файлов и папок необходимо предварительно включить эту возможность через локальные (или в случае если у Вас используется Microsoft AD групповые) политики безопасности.

В случае локальных политик необходимо запустить оснастку “Локальная политика безопасности”, для этого необходимо нажать комбинацию клавиш Win+R, в открывшееся поле ввести secpol.msc и нажать клавишу Enter.

В открывшейся оснастке в дереве слева необходимо перейти в раздел “Локальные политики” — “Политика аудита”.

Далее необходимо выбрать необходимую нам политику — в данном случае это “Аудит доступа к объектам”. Именно этой политикой регулируется доступ к объектам файловой системы (файлам и папкам) и раскрыть ее двойным щелчком мыши. В открывшемся окне необходимо выбрать какие именно типы событий будут регистрироваться — “Успех” (разрешение на операцию получено) и/или “Отказ” — запрет операции и проставить соответствующие галочки, после чего нажать “Ок”.

Теперь когда включена возможность ведения аудита интересующих нас событий и их тип можно переходить к настройке самих объектов — в нашем случае файлов и папок.

Для этого необходимо открыть свойства файла или папки, перейти на вкладку “Безопасность”, нажать “Дополнительно” и “Аудит”.

Нажимаем “Добавить” и начинаем настраивать аудит.

Сначала выбираем субъект — это чьи действия будут аудироваться (записываться в журнал аудита).

Можно вписать туда имя пользователя или группы, если имя заранее неизвестно, то можно воспользоваться кнопкой “Дополнительно” которая открывает форму поиска где можно выбрать интересующих нас пользователей и группы. Чтобы контролировались действия всех пользователей необходимо выбрать группу “Все”.

Далее необходимо настроить тип аудируемых событий (Успех, Отказ, Все), также область область применения для аудита папок — только эта папка, папка с подпапками, только подпапки. только файлы и т.д., а также сами события аудита.

Для папок поля такие:

А такие для файлов:

После этого начнется сбор данных аудита. Все события аудита пишутся в журнал “Безопасность”. Открыть его проще всего через оснастку “Управление компьютером” compmgmt.msc.

В дереве слева выбрать “Просмотр событий” — “Журналы Windows” — “Безопасность”.

Каждое событие ОС Windows имеет свой код события. Список событий достаточно обширен и доступен на сайте Microsoft либо в интернете. Например события аудита можно посмотреть здесь.

Попробуем например найти событие удаления файла, для этого удалим файл на котором предварительно настроен аудит (если это не тестовые файл, то не забываем сделать его копию, так как аудит это всего лишь информация о действиях, а не разрешение/запрет этих действий). Нам нужно событие с кодом 4663 — получение доступа к объекту, у которого в поле Операции доступа Написано “DELETE” . Поиск событий в журналах Windows достаточно сложен, поэтому обычно используются специализированные средства анализа — системы мониторинга, скрипты и т.д.

Вручную можно, например, задать например такой фильтр:

Далее в отфильтрованных событиях необходимо найти интересующее нас по имени объекта.

Открыть его двойным щелчком мыши и увидеть кто удалил данный файл в поле субъект.

Аудит доменных служб Active Directory в Windows Server 2008 R2

Аудит доменных служб Active Directory в Windows Server 2008 R2

ИТ среда не является статичной. Ежеминутно в системах происходят тысячи изменений, которые требуется отследить и запротоколировать. Чем больше размер и сложность структуры, тем выше вероятность появления ошибок в администрировании и раскрытия данных. Без постоянного анализа изменений (удачных или неудачных) нельзя построить действительно безопасную среду. Администратор всегда должен ответить, кто, когда и что изменил, кому делегированы права, что произошло в случае изменений (удачных или неудачных), каковы значения старых и новых параметров, кто смог или не смог зайти в систему или получить доступ к ресурсу, кто удалил данные и так далее. Аудит изменений стал неотъемлемой частью управления ИТ инфраструктурой, но в организациях не всегда уделяют внимание аудиту, часто из-за технических проблем. Ведь не совсем понятно, что и как нужно отслеживать, да и документация в этом вопросе не всегда помогает. Количество событий, которые необходимо отслеживать, уже само по себе сложность, объемы данных велики, а штатные инструменты не отличаются удобством и способностью упрощать задачу отслеживания. Специалист должен самостоятельно настроить аудит, задав оптимальные параметры аудита, кроме того, на его плечи ложится анализ результатов и построение отчетов по выбранным событиям. Учитывая, что в сети запущено нескольких служб – Active Directory/GPO, Exchange Server, MS SQL Server, виртуальные машины и так далее, генерирующих очень большое количество событий, отобрать из них действительно необходимые, следуя лишь описаниям, очень тяжело.
Как результат, администраторы считают достаточными мероприятия резервного копирования, предпочитая в случае возникновения проблем просто произвести откат к старым настройкам. Решение о внедрении аудита часто принимается только после серьезных происшествий. Далее рассмотрим процесс настройки аудита Active Directory на примере Windows Server 2008 R2.

Аудит Active Directory штатными средствами

В Windows Server 2008 по сравнению с предыдущей Windows Server 2003 обновлены возможности подсистемы аудита, настраиваемые через политики безопасности, а количество отслеживаемых параметров увеличено на 53. В Windows Server 2003 существовала только политика Аудит доступа к службе каталогов, контролировавшая включение и отключение аудита событий службы каталогов. Теперь управлять аудитом можно на уровне категорий. Например, политики аудита Active Directory разделены на 4 категории, в каждой из которых настраиваются специфические параметры:

Directory Service Access (доступ к службе каталогов);
Directory Service Changes (изменения службы каталогов);
Directory Service Replication (репликация службы каталогов);
Detailed Directory Service Replication (подробная репликация службы каталогов).

При включении глобальной политики аудита Аудит доступа к службе каталогов автоматически активируются все подкатегории политики служб каталогов.
Система аудита в Windows Server 2008 отслеживает все попытки создания, изменения, перемещения и восстановление объектов. В журнал записывается предыдущее и текущее значения измененного атрибута и учетная запись пользователя, выполнившего операцию. Но если при создании объектов для атрибутов использовались параметры по умолчанию, их значения в журнал не заносятся.

ПРИМЕЧАНИЕ: В Windows Server 2003 аудит регистрировал только имя измененного атрибута.

В Windows Server 2008 R2 аудит внедряется при помощи:

— глобальной политики аудита (Global Audit Policy, GAP);
— списка управления доступом (System access control list, SACL) — определяет операции, для которых будет производиться аудит;
— схемы – используется для окончательного формирования списка событий.

По умолчанию для клиентских систем аудит отключен, для серверных активна подкатегория Доступ к службе каталогов Active Directory, остальные отключены. Для включения глобальной политики “Аудит доступа к службе каталогов” (Audit directory service access) необходимо вызвать Редактор управления групповыми политиками перейти в ветку Параметры безопасности/Локальные политики/Политика аудита, где активировать политику и установить контролируемые события (успех, отказ).


Рис.1 Включение политики аудита Directory Service Access

Второй путь — использовать для настройки утилиту командной строки auditpol, получить полный список GAP с установленными параметрами. При помощи auditpol достаточно ввести команду:
> auditpol /list /subcategory:*


Рис.2 Получаем список установок при помощи auditpol

Активируем политику “directory service access”:

> auditpol /set /subcategory:»directory service changes» /success:enable

ПРИМЕЧАНИЕ: Подробные сведения о команде можно получить, запустив ее в виде
auditpol /h

Чтобы не ждать, обновим политику контролера домена:

Подкатегория политики аудита Доступ к службе каталогов формирует события в журнале безопасности с кодом 4662, которые можно просмотреть при помощи консоли Просмотр событий (Event Viewer) вкладка Журналы Windows – Безопасность.


Рис.3 Просмотр событий при помощи Event Viewer

В качестве альтернативного варианта просмотра событий можно использовать командлет Get-EventLog оболочки PowerShell. Например:

PS> Get-EventLog security | ?

ПРИМЕЧАНИЕ: Командлет Get-EventLog может принимать 14 параметров, позволяющих отфильтровать события по определенным критериям: After, AsBaseObject, AsString, Before, ComputerName, EntryType, Index, InstanceID, List, LogName, Message, Newest, Source и UserName.


Рис.4 Получаем список событий при помощи Get-EventLog

Кроме этого, регистрируется ряд других событий 5136 (изменение атрибута), 5137 (создание атрибута), 5138 (отмена удаления атрибута) и 5139 (перемещение атрибута).
Для удобства отбора определенных событий в консоли Просмотр событий используют фильтры и настраиваемые представления, а также подписку, позволяющую собирать данные журналов и с других серверов.

Таблица 1. Список событий аудита событий Active Directory в Windows Server 2008

Проверка учетных данных
ИДЕНТИФИКАТОР Сообщение
4774 Учетная запись была сопоставлена для входа в систему.
4775 Не удалось сопоставить учетную запись для входа в систему.
4776 Предпринята попытка проверить учетные данные для учетной записи контроллера домена.
4777 Не удается проверить учетные данные для учетной записи контроллера домена.

Управление учетной записью компьютера
ИДЕНТИФИКАТОР Сообщение
4741 Создана учетная запись компьютера.
4742 Изменена учетная запись компьютера.
4743 Удалена учетная запись компьютера.

Управление группами рассылки
ИДЕНТИФИКАТОР Сообщение
4744 Создана локальная группа с отключенной проверкой безопасности.
4745 Изменена локальная группа с отключенной проверкой безопасности.
4746 Добавлен пользователь к локальной группе с отключенной проверкой безопасности.
4747 Удален пользователь из локальной группы с отключенной проверкой безопасности.
4748 Удалена локальная группа с отключенной проверкой безопасности.
4749 Создана глобальная группа с отключенной проверкой безопасности.
4750 Изменена глобальная группа с отключенной проверкой безопасности.
4751 Добавлен пользователь к глобальной группе с отключенной проверкой безопасности.
4752 Удален пользователь из глобальной группы с отключенной проверкой безопасности.
4753 Удалена глобальная группа с отключенной проверкой безопасности.
4759 Создана универсальная группа с отключенной проверкой безопасности.
4760 Изменена универсальная группа с отключенной проверкой безопасности.
4761 Член добавлен к универсальной группы с отключенной проверкой безопасности.
4762 Удален пользователь из универсальной группы с отключенной проверкой безопасности.
Другие события управления учетными записями
ИДЕНТИФИКАТОР Сообщение
4739 Изменена политика домена.
4782 Хэш пароля учетной записи доступа к нему.
4793 Был вызван API проверку политики паролей.
Управление группой безопасности
ИДЕНТИФИКАТОР Сообщение
4727 Создана глобальная группа с включенной безопасностью.
4728 Добавлен пользователь к глобальной группе с включенной безопасностью.
4729 Удален пользователь из глобальной группы с включенной безопасностью.
4730 Удалена глобальная группа с включенной безопасностью.
4731 Создана локальная группа с включенной безопасностью.
4732 Добавлен пользователь в локальную группу с включенной безопасностью.
4733 Удален пользователь из локальной группы с включенной безопасностью.
4734 Удалена локальная группа с включенной безопасностью.
4735 Изменена локальная группа с включенной безопасностью.
4737 Изменена глобальная группа с включенной безопасностью.
4754 Создана универсальная группа с включенной безопасностью.
4755 Изменена универсальная группа с включенной безопасностью.
4756 Добавлен пользователь к универсальной группе с включенной безопасностью.
4757 Удален пользователь из универсальной группы с включенной безопасностью.
4758 Удалена универсальная группа с включенной безопасностью.
4764 Изменен тип группы.

Управление учетными записями пользователей
ИДЕНТИФИКАТОР Сообщение
4720 Учетная запись пользователя создана.
4722 Учетная запись пользователя включена.
4723 Изменен пароль учетной записи.
4724 Сброс пароля пользователя.
4725 Учетная запись пользователя отключена.
4726 Учетная запись пользователя удалена.
4738 Изменена учетная запись пользователя.
4740 Учетная запись пользователя заблокирована.
4765 Журнал SID был добавлен к учетной записи.
4766 Не удалось добавить журнал SID учетной записи.
4767 Учетная запись пользователя была разблокирована.
4780 Список управления Доступом был установлен на учетные записи, которые являются членами группы администраторов.
4781 Было изменено имя учетной записи.
4794 Была предпринята попытка задать режим восстановления служб каталогов.
5376 Диспетчер учетных данных: учетные данные были сохранены.
5377 Диспетчер учетных данных: учетные данные были восстановлены из резервной копии.

Другие события
ИДЕНТИФИКАТОР Сообщение
1102 Очищен журнал безопасности
4624 Успешный вход в систему
4625 Не удачный вход в систему

В ветке Политика аудита также активируются и другие возможности (см.рис.1): аудит входа/выхода в систему, аудит управления учетными записями, доступ к объектам, изменения политик и так далее. Например, настроим аудит доступа к объектам на примере папки с общим доступом. Для этого активируем, как рассказано выше, политику Audit object access, затем выбираем папку и вызываем меню Свойства папки, в котором переходим в подпункт Безопасность и нажимаем кнопку Дополнительно. Теперь в открывшемся окне “Дополнительные параметры безопасности для ..” переходим во вкладку Аудит и нажимаем кнопку Изменить и затем Добавить и указываем учетную запись или группу, для которой будет осуществляться аудит. Далее отмечаем отслеживаемые события (выполнение, чтение, создание файлов и др.) и результат (успех или отказ). При помощи списка “Применять” указываем область применения политики аудита. Подтверждаем изменения.


Рис.5 Настраиваем аудит папки с общим доступом

Теперь все указанные операции будут отображаться в журнале безопасности.
Чтобы упростить настройку аудита при большом количестве объектов, следует активировать флажок Наследование параметров от родительского объекта. При этом в поле Унаследовано от будет показан родительский объект, от которого взяты настройки.
Больший контроль событий, записываемых в журнал, достигается применением политики детализированного аудита (Granular Audit Policy), которая настраивается в Параметры безопасности/Локальные политики/Advanced Audit Policy Configuration. Здесь 10 подпунктов:

— Вход учетной записи – аудит проверки учетных данных, службы проверки подлинности Kerberos, операции с билетами службы Kerberos, другие события входа;
— Управление учетными записями – аудит управления группами приложений, учетными записями компьютеров и пользователей, группами безопасности и распространения;
— Подробное отслеживание – событий RPC и DPAPI, создания и завершения процессов;
— Доступ к службе каталогов DS – аудит доступа, изменений, репликации и подробной репликации службы каталогов;
— Вход/выход – аудит блокировки учетных записей, входа и выхода в систему, использования IPSec, сервера политики сети;
— Доступ к объектам – аудит объектов ядра, работы с дескрипторами, событий создаваемых приложениями, служб сертификации, файловой системы, общих папок, платформой фильтрации;
— Изменение политики – изменения политики аудита, проверки подлинности, авторизации, платформы фильтрации, правил службы защиты MPSSVC и другие;
— Использование прав – аудит прав доступа к различным категориям данных;
— Система – аудит целостности системы, изменения и расширения состояния безопасности, драйвера IPSec и других событий;
— Аудит доступа к глобальным объектам – аудит файловой системы и реестра.


Рис.6 Доступные настройки Advanced Audit Policy Configuration
Активация аудита управления учетными записями пользователей позволит отслеживать: создание, изменение, удаление, блокировку, включение и прочие настройки учетных записей, в том числе пароль и разрешения. Посмотрим, как она работает на практике — выбираем подкатегорию User Account Management и активируем. Команда для auditpol выглядит так:
> auditpol /set /subcategory:»User Account Management» /success:enable /failure:enable
> gpudate

Система аудита в консоли Просмотр события сразу покажет событие с номером 4719 Изменение параметров аудита, в котором показаны название политики и новые значения.

Читать:
Что означает ent hdd hpe


Рис.7 Фиксация изменения политики системой аудита

Чтобы создать событие, откроем консоль Active Directory – пользователи и компьютеры и изменим один из параметров любой учетной записи — например, добавим пользователя в группу безопасности. В консоли Просмотра события сразу будут сгенерировано несколько событий: события с номером 4732 и 4735, показывающие изменение состава группы безопасности, и добавление учетной записи новой группы безопасности (на рис.8 выделены фиолетовым).
Создадим новую учетную запись – система генерирует несколько событий: 4720 (создание новой учетной записи), 4724 (попытка сброса пароля учетной записи), несколько событий с кодом 4738 (изменение учетной записи) и, наконец, 4722 (включение новой учетной записи). По данным аудита администратор может отследить старое и новое значение атрибута — например, при создании учетной записи меняется значение UAC.


Рис.8 При создании новой учетной записи система аудита Windows Server 2008 генерирует несколько событий

Недостатки штатной системы аудита

Штатные инструменты операционной системы часто предлагают лишь базовые наборы средств анализа. Официальная документация (http://technet.microsoft.com/ru-ru/library/dd772623(WS.10).aspx) очень подобно расписывает возможности самого инструмента, практически мало помогая в выборе параметров, изменения которых необходимо отслеживать. В итоге решение этой задачи целиком ложится на плечи системного администратора, который должен полностью разбираться в технических аспектах аудита, и зависит от уровня его подготовки, а значит, велика вероятность ошибки. Кроме того, на его плечи ложится анализ результата, построение разнообразных отчетов.
Для удобства выбора определенных событий интерфейс консоли Event Viewer позволяет создавать фильтры и настраиваемые представления. В качестве параметров для отбора данных можно указать: дату, журнал и источник событий, уровень (критическое, предупреждение, ошибка и т.д.), код, пользователя или компьютер и ключевые слова. В организации может быть большое количество пользователей, объединенных в группы и подразделения, для которых аудит необходимо настроить персонально, но данная возможность в интерфейсе не предусмотрена.


Рис. 9 Настройка фильтра событий в консоли Event Viewer

В случае срабатывания правил в настраиваемом представлении можно создать задачу (меню Привязать задачу к событию): запустить программу, отправить сообщение по электронной почте или отобразить сообщение на рабочем столе.


Рис.10 Создание задачи в консоли Event Viewer

Но, опять же, реализация оповещений, в частности выбор событий, полностью лежит на администраторе.
В случае необходимости отката измененного атрибута к предыдущему значению это действие выполняется вручную – консоль лишь показывает значение параметров.


Рис.11 Система аудита Windows Server 2008 только выдает старое и новое значение атрибута, не предоставляя средств для удобного отката

Некоторые стандарты безопасности требуют хранения данных, собранных в процессе аудита, в течение продолжительного времени (например, SOX до 7 лет). Системными средствами реализовать это можно, но очень сложно. Размер журнала безопасности (как и других) ограничен 128 Мб, и при большом количестве событий данные могут быть перезаписаны (т.е. утеряны) уже через несколько часов. Чтобы этого избежать, необходимо вызвать окно свойств журнала в Event Viewer, где увеличить размер журнала и активировать его архивацию, установив флажок в “Архивировать журнал при заполнении. Не перезаписывать события”.


Рис.12 Чтобы не потерять старые события безопасности, следует увеличить размер журнала и включить архивацию

Но теперь необходимо будет решить проблему поиска событий во множестве архивов.
Также стоит отметить, что к недостаткам штатной системы аудита относятся ограниченные возможности мониторинга групповых политик. При том, что факт этого изменения штатными средствами можно отслеживать, не фиксируются значения измененных параметров и, таким образом, нельзя ответить на вопрос, что же именно было изменено и каким стало новое значение. В некоторых ситуациях этого достаточно, но назвать это полноценным аудитом затруднительно.

***
Данная статья является частью «Полного руководства по аудиту Active Directory в Windows Server 2008 R2» [PDF]. Вы можете скачать его по данной ссылке, заполнив небольшую форму.

Аудит удаления файлов в сетевой папке на Windows Server

date16.11.2022
useritpro
directoryWindows Server 2012 R2
commentsкомментариев 59

С помощью аудита событий доступа к объектам файловой системы вы можете определить конкретного пользователя, который создал, удалил или изменил определенный файл. В этой статье мы покажем, как настроить аудит событий удаления объектов в общей сетевой папке на Windows Server 2016. После настройки аудита, вы можете с помощью информации в журнале событий найти пользователя, который удалил на файловом сервере.

Включаем политику аудита доступа к файлам и папкам в Windows

По умолчанию в Windows Server не включен аудит событий доступа к объектам на файловой системе. Вы можете включить и настроить аудит событий с помощью групповой политики. Если нужно включить политики аудита на нескольких серверах или компьютера, можно использовать доменные GPO (настраиваются с помощью консоли управления gpmc.msc). Если нужно настроить аудит только на одном сервере, можно воспользоваться локальной групповой политикой.

  1. Запустите консоль редактора локальной политики – gpedit.msc ;
  2. Перейдитевраздел GPO срасширенными политиками аудитаWindows Settings -> Security Settings -> Advanced Audit Policy Configuration -> Object Access;
  3. Откройте политику Audit File System и укажите, что вы хотите сохранять в журнал только успешные события доступа к объектам файловой системы (Configure the following audit events -> Success);

Настройка аудита событий удаления файлов из конкретной папки

Теперь нужно настроить аудит в свойствах общей сетевой папки, доступ к которой вы хотите отслеживать. Запустите проводник и откройте свойства общей папки. Перейдите на вкладку Security. Нажмите кнопку Advanced -> вкладка Auditing.

Если появится сообщение You must be an administrator or have been given the appropriate privileges to view the audit properties of this object, нажмите кнопку Continue.

настройка аудита доступа к сетевой папке в windows

Затем нажмите кнопку Add чтобы указать пользователя или группу, для которых нужно записывать все события аудита. Если вы хотите отслеживать события для всех пользователей, укажите группу Everyone.

Затем нужно указать использование каких разрешений доступа к объекту нужно записывать в лог. Чтобы сохранять в Event Log только события удаления файлов, нажмите кнопку Show advanced permissions. В списке событий оставьте аудит только для событий удаления папок и файлов — Delete и Delete subfolders and files.

отслеживание удаления файлов в сетевой папке

$Path = «D:\Public»
$AuditChangesRules = New-Object System.Security.AccessControl.FileSystemAuditRule(‘Everyone’, ‘Delete,DeleteSubdirectoriesAndFiles’, ‘none’, ‘none’, ‘Success’)
$Acl = Get-Acl -Path $Path
$Acl.AddAuditRule($AuditChangesRules)
Set-Acl -Path $Path -AclObject $Acl

Теперь, если пользователь удалит любой файл или папку в сетевой папке, в журнале безопасности системы появляется событие File System -> Audit Succes c Event ID 4663 от источника Microsoft Windows security auditing.

Откройте mmc консоль Event Viewer ( eventvwr.msc ), разверните секцию Windows Logs -> Security. Включите фильтр событий по EventID 4663.

событие с кодом 4663 - удаление файла

Откройте любой их оставшихся событий в Event Viewer. Как вы видите, в нем есть информация об имени удаленного файла и учетной записи пользователя, который удалил файл.

кто удалил общий файл в сетевой папке

После настройки аудита, найдите в журнале Security вы сможете найти с:

  • Кто и когда удалил файл в сетевой папке;
  • Из какого приложения удален файл;
  • На какой момент времени нужно восстанавливать бэкап данного каталога.

Запись событий удаления файлов в SQL базу (MySQL/MSSQL)

Если после включения аудита удаления файлов в сетевой папке, вы видите в журнале много событий, найти что-то в логах бывает проблематично. Во-первых, найти нужную запись среди тысячи событий довольно сложно (в Windows отсутствуют вменяемые средства поиска интересующего события с возможностью гибкой фильтрации), а во-вторых, если файл был удален давно, это событие может просто отсутствовать в журнале, т.к. было перезатерто более новыми.

Вы можете записывать все нужные событий в отдельную SQL базу данных. Для хранения событий можно использовать Microsoft SQL Server, Elasticsearch или MySQL/MariaDB.

В этом примере мы покажем, как записывать события аудита в отдельную таблицу БД на сервере MySQL. Формат таблицы:

  • Имя сервера;
  • Имя удаленного файла
  • Время удаления;
  • Имя пользователя, удалившего файл.

MySQL запрос на создание такой таблицы будет выглядеть так:

CREATE TABLE track_del (id INT NOT NULL AUTO_INCREMENT, server VARCHAR(100), file_name VARCHAR(255), dt_time DATETIME, user_name VARCHAR(100), PRIMARY KEY (ID));

Если вы хотите использовать Microsoft SQL, обратите внимание на статью “Как выполнить запрос к MSSQL Server из скрипта PowerShell?”.

Для получения событий с EventID 4663 из журнала Security за текущий день можно использовать такой PowerShell скрипт:

$today = get-date -DisplayHint date -UFormat %Y-%m-%d
Get-WinEvent -FilterHashTable @ | Foreach <
$event = [xml]$_.ToXml()
if($event)
<
$Time = Get-Date $_.TimeCreated -UFormat «%Y-%m-%d %H:%M:%S»
$File = $event.Event.EventData.Data[6].»#text»
$User = $event.Event.EventData.Data[1].»#text»
$Computer = $event.Event.System.computer
>
>

Имеющиеся данные в событии удаления файла

Следующий PowerShell скрипт запишет полученные данные в БД MySQL на удаленном сервере:

Set-ExecutionPolicy RemoteSigned
Add-Type –Path ‘C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.8\Assemblies\v4.5\MySql.Data.dll’
$Connection = [MySql.Data.MySqlClient.MySqlConnection]@
$Connection.Open()
$sql = New-Object MySql.Data.MySqlClient.MySqlCommand
$sql.Connection = $Connection
$today = get-date -DisplayHint date -UFormat %Y-%m-%d
Get-WinEvent -FilterHashTable @ | Foreach <
$event = [xml]$_.ToXml()
if($event)
<
$Time = Get-Date $_.TimeCreated -UFormat «%Y-%m-%d %H:%M:%S»
$File = $event.Event.EventData.Data[6].»#text»

$File = $File.Replace(‘\’,’|’)
$User = $event.Event.EventData.Data[1].»#text»
$Computer = $event.Event.System.computer
$sql.CommandText = «INSERT INTO track_del (server,file_name,dt_time,user_name ) VALUES (‘$Computer’,’$File’,’$Time’,’$User’)»
$sql.ExecuteNonQuery()
>
>
$Reader.Close()
$Connection.Close()

Теперь, чтобы узнать, кто удалил файл «document1 — Copy.DOC». Достаточно в консоли PowerShell выполнить следующий скрипт.

$DeletedFile = «%document1 — Copy.DOC%»
Set-ExecutionPolicy RemoteSigned
Add-Type –Path ‘C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.8\Assemblies\v4.5\MySql.Data.dll’
$Connection = [MySql.Data.MySqlClient.MySqlConnection]@
$Connection.Open()
$MYSQLCommand = New-Object MySql.Data.MySqlClient.MySqlCommand
$MYSQLDataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter
$MYSQLDataSet = New-Object System.Data.DataSet
$MYSQLCommand.Connection=$Connection
$MYSQLCommand.CommandText=»SELECT user_name,dt_time from track_del where file_name LIKE ‘$DeletedFile'»
$MYSQLDataAdapter.SelectCommand=$MYSQLCommand
$NumberOfDataSets=$MYSQLDataAdapter.Fill($MYSQLDataSet, «data»)
foreach($DataSet in $MYSQLDataSet.tables[0])
<
write-host «User:» $DataSet.user_name «at:» $DataSet.dt_time
>
$Connection.Close()

В результате в консоли PS появится имя пользователя и время удаления файла.

Запрос PowerShell к mysql БД для получении инфомации о пользователе, удалившем файл

Скрипт сброса данных из журнала в БД можно выполнять один раз в конце дня по планировщику или повесить триггер на событие удаления (On Event), что более ресурсоемко. Все зависит от требования к системе.

Можно создать реагировать простую веб страницу на php для получения информации о событиях удаления файлов в более удобном виде. Задача решается силами любого php программиста за 1-2 часа.

Запись информации о событиях удаления файлов в текстовый файл

Если вы не хотите вести отдельную БД, можно сохранять события аудита удалений файлов в текстовый лог файл. Воспользуйтесь таким PowerShell скриптом:

$Outfile = «C:\ps\delete-file-log.txt»
$today = get-date -DisplayHint date -UFormat %Y-%m-%d
Get-WinEvent -FilterHashTable @ | Foreach <
$event = [xml]$_.ToXml()
if($event)
<
$Time = Get-Date $_.TimeCreated -UFormat «%Y-%m-%d %H:%M:%S»
$File = $event.Event.EventData.Data[6].»#text»
$User = $event.Event.EventData.Data[1].»#text»
$strLog = $Computer + » » + $File + » » + $Time + » » + $User
$strLog | out-file $Outfile –append
>
>

лог со списком удаленных файлов в windows

Итак, мы предложили идею и некий общий каркас системы аудита и хранения информации об удаленных файлах в сетевых шарах, при желании ее с лёгкостью можно будет модифицировать под ваши нужды.

Предыдущая статьяПредыдущая статья Следующая статья Следующая статья

page

page

page

alt=»Схема работы KMS активации» width=»58″ height=»56″ /> FAQ по KMS активации продуктов Microsoft
alt=»Установка FSRM в Windows 2012 R2″ width=»58″ height=»56″ /> Защита от шифровальщиков с помощью FSRM в Windows Server
alt=»tsadmin.msc не работет на Windows Server 2012 R2″ width=»58″ height=»56″ />Использование TSADMIN.msc и TSCONFIG.msc для управления RDS в Windows Server 2019/2016/2012R2
alt=»Windows ACME Simple скачать с github» width=»58″ height=»56″ />Установка бесплатного TLS/SSL сертификата Let’s Encrypt в IIS/RDS в Windows Server 2016/2012 R2

Предполагается, видимо, что MySQL уже установлен и настроен?
100 лет уже не имел дела с «мускулом»…

Да, конечно. Причем он даже под Windows ставится несколькими кликами.
В общем-то код и всю технику можно легко адаптировать и под MSSql, но с точки зрения зрения легкости, отдаю предпочтению мусклу.

Извини если туплю, но из статьи НЕ очевтдно

куда засунуть и как запустить скрипт
«Скрипт сбора информации из журнала событий. Мы фильтруем журнал по событию с ID 4663 за текущий день»

а за ним все остальные

Подразумевал, что раз в сутки планировщик (допустим в 23:58) запускает powershell скрипт, который получает все события за прошедшие сутки и пишет из в базу.
Т.е. в создаем задание планировщика, которое запускет программу C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe с аргументом в виде имени файла со вторым скриптом C:\myscripts\WriteDelEventDB.PS1

«Скрипт сбора информации из журнала событий» — это просто пример работы с журналом событий, фильтрации и получения значений определенных полей. Он используется внутри следующего скрипта.

Что-то пошло не так. Или — что я сделал не так?
На первой же строке скрипта вылезает матершина:
(все делается под одним из Domain Admin аккаунтов)

PS C:\Users\admin> Get-WinEvent -FilterHashTable @

Get-WinEvent : Could not retrieve information about the Security log. Error: Attempted to perform
an unauthorized operation..
At line:1 char:1
+ Get-WinEvent -FilterHashTable @
+

+ CategoryInfo : NotSpecified: (:) [Get-WinEvent], Exception
+ FullyQualifiedErrorId : LogInfoUnavailable,Microsoft.PowerShell.Commands.GetWinEventCommand

Get-WinEvent : There is not an event log on the localhost computer that matches «Security».
At line:1 char:1
+ Get-WinEvent -FilterHashTable @
+

+ CategoryInfo : ObjectNotFound: (Security:String) [Get-WinEvent], Exception
+ FullyQualifiedErrorId : NoMatchingLogsFound,Microsoft.PowerShell.Commands.GetWinEventCommand

+ CategoryInfo : NotSpecified: (:) [Get-WinEvent], EventLogException
+ FullyQualifiedErrorId : System.Diagnostics.Eventing.Reader.EventLogException,Microsoft.Power
Shell.Commands.GetWinEventCommand

Пардону просим
Run As Administrator забыл сделать Ж-)

Здравствуйте, отличная статья. Решал подобную задачу для сбора статистики с KMS сервера, но использовал связку PS и MSSQL Express. Через год работы наткнулся на проблему, что превысил лимит базы данных в 10Гб, в итоге сделал ротацию данных в БД Наверное в вашем случае тоже было бы неплохо предусмотреть удаление старых данных? Могу поделиться наработками, если интересно. ��

Приветствую,
Насчет удаления старых данных пока не думал. Сложно оценить насколько будет большой база и за какой период нужна информация. Здесь больше идея рассматривается, какие-то выводы и усовершенствования можно делать только после опыта более продолжительного использования.

А инфой конечно, делитесь! Можно оформить отдельной статьей, думаю тема сбора и хранения статистики использования KMS сервера будет многим интересна.
Мой емайл есть на странице https://winitpro.ru/index.php/o-bloge/

Странно как-то себя MySQL повел ….
Поставил, для удобства, Navicat Premium Enterprise 11.2.4
)
и получается как-то странно
если делать, этим Navicat, Export всей таблицы из базы, то в поле file_name попадает имя файла целиком (правда отделенное пробелом почему-то от всего остального)

а когда делаешь select … то имя файла обрезается до полного пути до него
SELECT track_del.file_name,track_del.dt_time,track_del.user_name FROM track_del
а на выходе
file_name dt_time user_name
DeviceHarddiskVolume2TEST 2016-05-05 12:12:24 name

Если присмотреться, то в поле file_name попадается пробел. И, походу, по нему и режется. А пока оно так себя ведет, дальше ничего не работает. То есть невозможно сделать LIKE по значению, которое не показывается

Починил.
В скрипте, который заполняет таблицу в БД, вставил строку, которая меняет в имени файла, получаемого из Security Even Log’a все ‘\’ на ‘|’ Вот здесь:

После этого имя файла перестало «теряться» и попадает в БД как надо ��

И потом, слегка «доработал» скрипт, который выдает результат. Мне плказалось так и красивее, и правильнее. Добавлен вывод имени файла с полным путем. с обратной заменой ‘|’ на ‘\’

foreach($DataSet in $MYSQLDataSet.tables[0])
<
write-host «File:» $DataSet.file_name.Replace(‘|’,’\’) — «User:» DataSet.user_name «at:» $DataSet.dt_time
>

А ведь это был _очень_неприятный баг MySQL, на самом деле

Файл, на котором я «тренировался», я назвал 00000.txt (5 нулей) и, в итоге, в базу из Event Log’a попадало вот что
DeviceHarddiskVolume2TEST 0000.txt
То есть при выполнении INSERT MySQL «выгрызал» все символы ‘\’ и, более того делал из подстроки 0000.txt такое вот «[SPACE]0000.txt» типа пытался «интерпретировать по своему»?
А после того как я, предварительно, заменял все ‘\’ на ‘|’ — все проходило как надо

Дмитрий, думаю не лишним будет или упомянуть об этой «особенности» или поправить скрипт, который заносит имя файла в таблицу БД.

Видимо проблема в сочетании «\»+»0» , которое как-то интерпретируется mysql, то ли пустая строка, то ли что-то в этом роде.
Согласен, в скрипте лучше всего заменить ‘\’ на ‘|’, а при выборке делать обратную замену.
Сейчас внесу изменения в статью. Спасибо!

А что скажете про [regex]::Escape(‘c:\’) ?
Я подобную штуку сейчас проворачиваю, но отправляю пошиком не напрямую в базу, а через пхп, так вот эскейп работает как надо. Мне интересно как будут обстоять дела, если пошиком напрямую в базу лить, но сам пробовать не хочу ))

Коллеги кто нибуть настраивал данную возможность с помощью SCOM?
Есть ли информация по данному вопросу,может быть кто то уже имел опыт,заранее спасибо за ответ.

Для настройки мониторинга данного EventID нужно в SCOM создать новое правило (Rule).
Правило создаём тут: Authoring -> Management Pack Objects -> Rules.
При создании указываем Type: Alert Generating Rules -> Event Based -> NT Event Log (Alert); Rule target: Windows Domain controller, Log Name: Security, Event ID eq 4663. Затем нужно привязаться к новому правилу действие в Subscription.

Странная команда в скрите
«Следующий скрипт запишет полученные данные в БД MySQL на удаленном сервере:»
вот эта

PowerShell ругается на нее. Наверное и правильно. Ведь закрывается то, что не открывалось.

А для Win2k как сделать подобное?

В нем аудит естьт, политика безопасности — есть, а события 4663 не выдается (((

Может кто сталкивался?

ID события скорее всего другие, да и не факт что PowerShell вообще заведется на W2k..
ЗЫ. Закапывайте мамонта

MySQL запрос на создание такой таблицы будет выглядеть так:

CREATE TABLE track_del (id INT NOT NULL AUTO_INCREMENT, server VARCHAR(100), file_name VARCHAR(255), dt_time DATETIME, user_name VARCHAR(100), PRIMARY KEY (ID));
результат.
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near ‘AUTO_INCREMENT’.

Здраствуйте. Никогда раньше ни делал ничего подобного. Со второго раза вроде получилось. У меня вопрос в событии у меня есть строка » 192.168.201.153″ как добавть дополнительный столбец в таблицу и как в него записывать Ip адресс?

добрый день.
собран кластер на WS2016.
Есть CSV. Эту шару я и хочу логировать. Делаю все по инструкции, но когда что-либо оттуда удаляю, нет записи в логах Security.
Был ли опыт проведения аудита на кластерной шаре?
Спасибо. Хорошая статья.

Под рукой такой конфигурации нет. Могу посоветовать
1) проверить, что политики аудита применяются для обычных шар (записи в логе появляются).
2) в случае CSV возможно стоит проверять все логи на всех нодах кластера

1) работает, идеально.
2) проверяю на всех, к сожалению нет.

Запускай на каждой ноде. В Скрипте проверяй кто владеет нодой:
$ClusterRoleOwner = (Get-ClusterGroup | Where-Object <($_.Name -eq «ИМЯ ТВОЕЙ РОЛИ»)>).OwnerNode
если тот кто надо, то читаешь логи:
if ($ClusterRoleOwner -eq $env:computername)

Отличный каркас для работы с логами. После лёгкой косметической допилки всё полетело на MSSQL Express 2014 ADV (ставить на сервер вторую СУБД смысла нет). Бага с чир-символом в этой версии MSSQL нет. Всё загружается и выгружается чётко. ��
Спасибо автору))

Спасибо! Очень полезная вещь!
Пожалуйста подскажите, как быть с кириллицей в имени каталогов и файлов? В таблице вместо кириллицы знаки вопроса «…. |. docx».

Что делать с русской кодировкой в именах файлах, к сожалению, не знаю. Как вариант — экспортировать журналы в csv файлы. А потом при загружать их через Get-Content -Encoding UTF8. Но это на уровне идеи…

Для правильного сохранения кириллицы добавьте в конец строки «charset=utf8»
Должно получится так
$Connection = [MySql.Data.MySqlClient.MySqlConnection]@

Отлично! Спасибо за полезную инфу!

Доброго времени суток. Попробовал, все равно «. |. pdf» ��

Спасибо огромное. Разобрался. Нужно было сменить кодировку в самой БД на utf8_unicode_ci.

Для работы с любыми логами использую graylog community edition можно купить enterprise edition , и там делаю с логами что угодно

А что для визуализации данных и логов используете (графические дашборды, отчеты)?
С Elasticsearch обычно используют Kibana. А что у graylog как аналог?

PS C:\WINDOWS\system32> $event = [xml]$_.ToXml()
Невозможно вызвать метод для выражения со значением NULL.
строка:1 знак:1
+ $event = [xml]$_.ToXml()
+

+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull

Какая ОС и версия PowerShell?

Windows Server 2012 R2 6.3.9600.18969 64-разрядная
Version PS : 5.1.14409.1018

Странно у меня в такой же конфигурации все работает. Windows Server случайно не русская? Я такую принципиально не пользую, только eng.

Нет. Проверил в 10-ке (правда «русской») — тоже такая же «петрушка»

Ну вот у меня код работает даже в русской Windows….
Запускаете в PowerShell ISE под админом?

Да, под админом
Не работает

А если удалять файлы с помощью Shift+DEL, то регистрируется только событие с id 4659. По крайней мере у меня на Windows Server 2012 так.

Здравствуйте, у нас стоят 2 сервера с Windows 2019, и на них установлен DFS с авторепликацией на оба сервера.
В результате у нас нет нормального аудита: в списках по событию 4663 (мы используем дополнительно фильтр по маске 0х10000, что предположительно соответствует операции DELETE) есть файлы с названиями типа
D:\System Volume Information\DFSR\Private\\Installing\Teil-of-name-<123..>-v123456.doc
(это после удаления всех файлов типа .log, .tmp и \

$ ). Причём в качестве пользователя стоит имя сервера.
Ещё есть удаления целых каталогов (?!), тоже с именем сервера. В поле ProzessName стоит C:\Windows\System32\dfsrs.exe
Есть и удаления от конкретных пользователей, но от них идут несколько удалений одних и тех же файлов — это вероятно результаты неоднократных редактирований того же файла… При этом поле ProzessName вообще пустое!

Вопрос: каким образом можно обнаружить удаления при использовании DFS ?

Колеги а как очистить журнал после того, как витянул данные с журнала?
Я же буду на постой дозаписывать то, что уже есть.

Нужно искать пару : id 4663 а потом 4660 с аналогичным кодом дескриптора в двух событиях. Тогда это будет реальное удаление.
https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4660

Доброго времени, уважаемые коллеги!
У меня сервер 2008. Сделал всё как тут написано, получилось на ура. Но хотелось бы задать вопрос. В событиях по коду 4663 регистрируется только пользователь и действия с файлом, которые он инициировал. Но хотелось бы в событиях поиметь или имя компа или его айпишник. Думал, на 2008 серваке такого нет, а есть в более поздних серверных версиях, но нет. На работе посмотрел, также без айпишников логи ведутся.
Есть ли возможность добавить в событие 4663 IP или имя компа? Хочу вычислить, откуда вирусня прёт, а то в этой организации многие сидят под одним логином. Я говорю, давайте каждому учётку заведём. Нет, говорят. Нам так удобнее. Ну что с такими делать?

Имеено это событие вы никак не расширите. Тут нужно скорре всего нужно дополнительно анализировать события логона компьютера на ваш сервере из журнала Security. Скорее всего они будут связаны по logonID или handleID. И уже из события логона вытягивать имя компьютера.
Сначала попробуйте вручную разобраться с ID события и их связью с 4663 . Пришлите инфу сюда, может помогу в чем.

Спасибо за статью. Пришлось исправить, т.к. у меня Server 2008 R2 (соответственно там старая версия Powershell), данные выгружаются в MySQL 5.0.95, который находится на другом старом Linux сервере:

1) В базе выполнил SQL-запрос:
SET SESSION old_passwords=0;
SET PASSWORD FOR db_user_name=PASSWORD(‘db_user_password’);

2) Скрипт выглядит так:
Set-ExecutionPolicy RemoteSigned
Add-Type –Path ‘C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.8\Assemblies\v2.0\MySql.Data.dll’
$connectionString = «server=server_IP;uid=db_user_name;pwd=db_user_password;database=db_name;»
$connection = New-Object MySql.Data.MySqlClient.MySqlConnection
$connection.ConnectionString = $connectionString
$connection.Open()
$sql = New-Object MySql.Data.MySqlClient.MySqlCommand
$sql.Connection = $Connection
$today = get-date -DisplayHint date -UFormat %Y-%m-%d
Get-WinEvent -FilterHashTable @ | Foreach <
$event = [xml]$_.ToXml()
if($event)
<
$Time = Get-Date $_.TimeCreated -UFormat «%Y-%m-%d %H:%M:%S»
$File = $event.Event.EventData.Data[6].»#text»
$File = $File.Replace(‘\’,’|’)
$User = $event.Event.EventData.Data[1].»#text»
$Computer = $event.Event.System.computer
$sql.CommandText = «INSERT INTO track_del (server,file_name,dt_time,user_name ) VALUES (‘$Computer’,’$File’,’$Time’,’$User’)»
$sql.ExecuteNonQuery()
>
>
$Connection.Close()

3) Создал задание в планировщике с такими параметрами:
Вкладка Общие:
-выполнять вне зависимости от регистрации пользователя
-выполнять с наивысшими правами
-выполнять от учетки админа домена

Вкладка Триггеры:
-начать задачу при событии
-Параметры: Простое, Журнал — Безопасность, Источник — Microsoft Windows security auditing, Код события — 4663
-внизу галочка — Включено

Вкладка Действия:
-Действие — Запуск программы
-Программа или сценарий: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
-Добавить аргументы: E:\scripts\file_del_to_db.ps1 (путь к скрипту)

Вкладка Параметры:
-Разрешать выполнение задачи по требованию
-Останавливать задачу, выполняемую дольше: 3 дн.
-Принудительная остановка задачи, если она не прекращается по запросу
-Если задача уже выполняется, то применять правило: Не запускать новый экземпляр.

Ну и при сохранении задачи естественно нужно будет ввести пароль пользователя, от имени которого она будет выполняться (у меня учетка админа домена).

Теперь особенность. За 1,5 дня у меня в базе 8000 записей. Как бы много, и не очень удобно в случае чего искать нужные.

Просьба к автору статьи, не могли бы Вы изменить скрипт так, чтобы данные в базу писались каждый день в отдельные таблицы или как-то по-другому их отделить, а также сделать исключение файлов, например, по расширению (а то пользователи напрямую открывают по сети файлы Microsoft Office и в базу потом пишутся записи об удалённых файлах *.tmp). Спасибо))).

За инфу спасибо.
1) Писать в разные таблицы? а зачем, не проще фильтровать записи по дате.
2) Чтобы писать инфу только по нужным расширениям файлам, просто сделайте дополнительную проверку содержимого $File на соответствие нужным расширениям файлов перед запись в базу:

$allowedext = @(‘.doc’,’.docx’,’.xlsx’,’.xls’)
$fileext=[System.IO.Path]::GetExtension($file)
if ($allowedext -match $fileext’)
<
write to db
>

Спасибо за ответ. Не могу точно знать какие типы файлов там есть, т.к. структура папок огромная, всего примерно 2 млн. файлов))) Конечно и ненужные есть, но рыться там у меня нет желания, у каждого отдела своя папка… короче там чёрт ногу сломит))). Поэтому вышел из положения так:

1) Перенес базу на новый Linux сервер, там 10.3.28-MariaDB. В ней есть уже планировщик заданий.
2) В phpmyadmin создал задачу, которая каждый день в 00:00 удаляет из базы записи о файлах *.tmp.
Параметры задачи такие:

Название события: file_del_tmp_every_day
Состояние: ENABLED
Тип события: RECURRING
Выполнять каждые: 1 DAY
Начало: 2021-05-14 00:00:00
Конец: (Пусто)
Определение: delete from `db_name`.`track_del` where file_name like ‘%.tmp’
Сохранить при окончании: (Поставил галочку)
Определитель: [email protected]

Также нужно не забыть:
Статус планировщика событий: Включить

Пока пусть будет так. Правда с 14 мая 2021 до сегодня (21 мая 2021) размер базы 114 МБ и количество строк примерно 530000))). Жесть конечно, пока не знаю что с этим делать))).

Из личных наблюдений. События 4660 и 4663 появляются при локальном удалении из локальной или сетевой папки, т.е. пользователь совершил локальный вход на сервер и удаляет файл с диска или из папки в общем доступе. Событие 4659 — при сетевом удалении из сетевой папки. Так что как применять статью не понятно.

Скрипт записи в текстовый файл дополненный выборкой только по удаленным файлам:

$Outfile = «C:\ps\delete-file-log.txt»
$today = get-date -DisplayHint date -UFormat %Y-%m-%d
Get-WinEvent -FilterHashTable @ | Foreach <
$event = [xml]$_.ToXml()
if($event.Event.EventData[9].’#text’ -eq ‘0x10000’)
<
$Time = Get-Date $_.TimeCreated -UFormat «%Y-%m-%d %H:%M:%S»
$File = $event.Event.EventData.Data[6].»#text»
$User = $event.Event.EventData.Data[1].»#text»
$strLog = $Computer + » » + $File + » » + $Time + » » + $User
$strLog | out-file $Outfile –append
>
>

Корректировка) пропустил Data[9]
$event.Event.EventData.Data[9]

Статья нужная, но нам нужно было на создание файлов в обмене и отправлялся отчет. Добавили в планировщик задачу с выполнением скрипта. Если кому нужно сам скрипт:

$Outfile = «D:\audit.txt» #$(Get-Date -UFormat «%d-%m-%Y_%H_%M_%S»).txt» — у меня сохраняет в единый файл, но кому надо будет создавать ежедневный отчет.
$today = [datetime]::Today.AddDays(-5) #Get-Date -DisplayHint date -UFormat %d-%m-%Y Указал за последние 5 дней сбор данных
$strLog = @()
Get-WinEvent -FilterHashTable @ < LogName = "Security"; starttime = $today; | Foreach <
$event = [xml]$_.ToXml()
if($event) <
$Time = Get-Date $_.TimeCreated -UFormat «%d-%m-%Y %H:%M:%S»
$File = $event.Event.EventData.Data[6].»#text»
$User = $event.Event.EventData.Data[1].»#text»
If ($User -notmatch «SERVER\$|LOCAL SERVICE» -and $File -match «F:\\obmen») < # исключаем наименование сервера SERVER\$|LOCAL SERVICE (у вас будет имя иначе) и включать только записи с расположением папки obmen
$strLog += $Time + » » + $User + » » + $Computer + » » + $File
>
>
>
$strLog | out-file $Outfile

#Отправляем письмо с отчетом о проведении аудита

$ToAddress /cdn-cgi/l/email-protection» data-cfemail=»83cac1e2e7eec3f3ece0ebf7e2adf1f6″>[email protected]»
$CcAddress /cdn-cgi/l/email-protection» data-cfemail=»58111a393c35691828373b302c39762a2d»>[email protected]»
$FromAddress /cdn-cgi/l/email-protection» data-cfemail=»523d303f373c12223d313a26337c2027″>[email protected]»
$SmtpServer = «mail.pochta.ru»
$sabj = «Аудит обмена»
$text = «text»

$mailparam = @ <
To = $ToAddress
Cc = $CcAddress
From = $FromAddress
Subject = $sabj
Body = $text
SmtpServer = $SmtpServer
Attachments = «d:\audit.txt»

>
Send-MailMessage @mailparam -Encoding UTF8

А можно пример скрипта который в текстовой файл записывает удаленные и редактируемые объекты
(вывод в формате расположение файла-время-пользователь-действие)

Отличная статья, спасибо!

Правда у меня не всё получилось. На некоторых подпапках отключено наследование прав по аудиту и устанавливая аудит на родительскую папку, внутри на часть папок аудит так и не доезжает. Пробовал рекурсией пройтись по всем каталогам, но в таком случае права аудит выставляются на каждый каталог в отдельности.

Может есть идеи, как найти все подпапки с отключённым наследованием прав аудита и включить наследование на них?

Похожие статьи