Что-то или Кто-то время от времени меняет права доступа к файлам на моем контроллере домена Windows Server 2003.
Я хочу отслеживать эти изменения. Первоначально я думал, что это можно сделать с помощью аудита с помощью политики контроллеров домена по умолчанию, но, хотя есть аудит доступа к файлам, я не могу найти никакого отслеживания изменений разрешений.
Я хотел бы знать, происходят ли изменения разрешений для определенного набора файлов и каталогов, независимо от того, вносит ли это изменение человек, приложение / служба или даже ошибка диска. Я бы хотел посмотреть, что изменилось, когда изменилось и, возможно, что изменилось.
Это возможно?
Встроенный аудит для изменений разрешений обрабатывается через «Аудит доступа к объекту». Если вы посмотрите на типы аудита, которые вы можете настроить для объекта файловой системы, вы увидите, что «Изменить разрешения» является одним из элементов, подлежащих аудиту.
Вы обнаружите, что данные журнала, созданные с помощью «Аудит доступа к объекту», мучительно многословны и трудны для анализа. Фактическое изменение разрешений (событие «WRITE_DAC» - DAC означает «Дискреционный контроль доступа») будет ссылаться только на идентификатор дескриптора, поэтому вам придется выполнять синтаксический анализ в обратном направлении от WRITE_DAC, чтобы найти событие открытия дескриптора. Это событие сообщит вам имя объекта, изменяемого WRITE_DAC. Довольно утомительно ...
У меня был один клиент, который исследовал использование Журналы аудита файловой системы CPTRAX для Windows утилита для аналогичной ситуации. Я не верю, что они когда-либо реализовали это, но в рамках их исследования я просмотрел документацию и обнаружил, что она, по крайней мере, кажется "разумной". Я не могу дать никаких личных рекомендаций по этому поводу, но похоже, что он будет делать то, что заявлял производитель.
Редактировать:
Сегодня у меня было несколько минут, поэтому я написал безумный и болезненный сценарий CMD для отслеживания изменений разрешений. Анализ журнала событий является болезненным (и действительно требует, чтобы конечный автомат работал правильно), так что это вторая лучшая попытка.
Сценарий ожидает передачи имени файла для отслеживания разрешений, а также пути и «базового» имени файла для хранения наблюдаемых разрешений. Предположим, что это поддельный набор аргументов: perm-track.cmd "C:\Program Files\Some Application\File To Track.exe" "C:\Permission Tracker\File to Track.exe"
При первом запуске сценария (скажем, в 12:51:30 18 июля 2010 г.) разрешения, установленные для «C: \ Program Files \ Some Application \ File To Track.exe», будут сохранены в файле «C : \ Permission Tracker \ Файл для Track.exe.20100718_125130.permissions.txt ".
При следующем запуске сценария с теми же аргументами разрешения, хранящиеся в недавно созданном файле «C: \ Permission Tracker \ File to Track.exe. *. Permissions.txt», будут сравниваться с текущими разрешениями на "C: \ Program Files \ Some Application \ File To Track.exe". В случае изменения новые разрешения будут сохранены в файле с соответствующим названием «Файл для отслеживания.exe.ISODATE.permissions.txt» в «C: \ Permission Tracker».
Подключить это для отправки электронных писем было бы довольно просто. Запускать его как запланированную задачу или в цикле тоже было бы довольно просто.
Это определенно быстро и грязно, и, вероятно, в нем есть ошибки, но этот сценарий может сделать то, что вам нужно.
@echo off
if "%~1"=="" goto syntax
if not exist "%1" goto syntax
if "%~2"=="" goto syntax
rem Get an ISO date (working around shell silliness re: hours earlier than 10:00)
SET YEAR=%DATE:~10,4%
SET MONTH=%DATE:~4,2%
SET DAY=%DATE:~7,2%
SET /A HOUR=%TIME:~0,2%
SET HOUR=0%HOUR%
SET HOUR=%HOUR:~-2%
SET MINUTE=%TIME:~3,2%
SET SECOND=%TIME:~6,2%
SET ISODATE=%YEAR%%MONTH%%DAY%_%HOUR%%MINUTE%%SECOND%
SET TEMPFILE="%TEMP%\%RANDOM%.TXT"
rem Save current permissions into a temporary file
cacls %1 >%TEMPFILE%
rem Get filename of last set of permissions reported
set LASTFILE=
for /f "usebackq delims=" %%f in (`dir /od /b /s "%~2*.permissions.txt"`) do SET LASTFILE=%%f
rem Was there no last file? If so, put current temp file in place
if "%LASTFILE%"=="" (
move %TEMPFILE% "%~2.%ISODATE%.permissions.txt"
) else (
rem Compare current permission to last permission-- if it's different, annotate current permission
fc %TEMPFILE% "%LASTFILE%"
if errorlevel 1 move %TEMPFILE% "%~2.%ISODATE%.permissions.txt"
)
goto end
:syntax
echo Really, really poor man's permission change tracker.
echo.
echo Call with path of file to monitor on command-line as first argument,
echo path and base filename to store "report" files of permission changes
echo as the second argument.
echo.
echo example:
echo.
echo perm-track.cmd "C:\Program Files\Some Application\File To Track.exe" "C:\Permission Tracker\File to Track"
echo.
:end
Использовать IDS на основе хоста, который иногда называют IDS файловой системы. Я использовал Помощник успешно против Windows раньше. Его можно скомпилировать с помощью cygwin.
Альтернативой AIDE является OSSEC, у которого, похоже, есть Порт Windows.
Varonis DatAdvantage для Windows - отличный способ решить эту проблему. Он отслеживает все события файловой системы (создание, открытие, удаление, перемещение, изменение, изменение разрешений) и создает журнал аудита с возможностью поиска. Вы можете настроить повторяющиеся отчеты или оповещения в реальном времени на основе критериев триггера, таких как изменение разрешений на вашем контроллере домена или когда кто-то повышается до уровня администратора домена.
Возможно, лучшая часть заключается в том, что DatAdvantage не требует встроенного аудита (который может быть медленным и утомительным) и никогда не записывает данные на диск на серверах, которые вы отслеживаете, поэтому это сверхнизкие накладные расходы.
(Раскрытие информации: я работаю на Varonis, но не публиковал бы это, если бы не думал, что это подходит.)