AuditObjectAccess (служба Виндоус)

by Admin 27. мая 2009 19:10

Аудит доступа к объектам на файловых серверах - это одна из головных болей администратора. Как часто к вам вбегает взлохмаченный пользователь и в панике спрашивает, кто удалил важный файл с сетевого ресурса?

Думаю, бывает...

Я предлагаю свой способ логирования этих событий, в виде службы Windows и хранением истории в БД MS SQL Server.

 

Сперва в политиках включаем Аудит на доступ к объектам ("Control Panel -> Administrative Tools - > Local Security Settings")

 

Затем на папках, за которыми мы будем "следить", включаем аудит (допустим только удаление)

 

После этого, при удалении файла, в журнале событий Windows (Security) появляется соответствующая запись (EventID=560)

 

 

Прежде, чем приступить к установке моей службы, опишу на какой параметр необходимо смотреть (http://support.microsoft.com/kb/299475/ru):

   Код события: 560 (0x0230)
       Тип: Аудит успехов
Описание: Открытие объекта
             Сервер объекта: %1         Тип объекта: %2
             Имя объекта: %3            Код дескриптора: %4
             Код операции:{%5,%6}       Код процесса: %7
             Основной пользователь: %8     Основной домен: %9
             Основной код входа: %10       Пользователь-клиент: %11
             Домен клиента: %12         Код входа клиента: %13
             Доступ %14               Привилегии %15
 

 

Нам необходимо отслеживать 15-ый параметр "Привилегии".

Вот список основных значений этого параметра:

  • 1537 = Delete
  • 1538 = Read_CONTROL
  • 1541 = synchronize
  • 4416 = ReadData(or List Directory)
  • 4417 = WriteData(or Add File)
  • 4418 = AppendData (or AddSubdirectory or CreatePipeInstance)
  • 4419 = ReadEA
  • 4420 = WriteEA
  • 4423 = ReadAttributes
  • 4424 = WriteAttributes.

 

На этом теории хватит. Приступаем к установке службы:

1) Создаём БД для аудита:

USE master
GO

IF DB_ID('AuditObjectAccess') IS NOT NULL DROP DATABASE AuditObjectAccess
GO

CREATE DATABASE AuditObjectAccess
GO

USE AuditObjectAccess
GO

IF OBJECT_ID('Events', 'U') IS NOT NULL DROP TABLE Events
GO

--Таблица Аудита
CREATE TABLE Events
(
id INT IDENTITY,
[Index] INT,
TimeGenerated DATETIME,
Source VARCHAR(255),
Category VARCHAR(255),
EventID VARCHAR(255),
UserName VARCHAR(255),
MachineName VARCHAR(255),
Message VARCHAR(max),
Mask VARCHAR(max),
DateAt DATETIME default GETDATE(),
HostAt VARCHAR(255) default HOST_NAME(),
UserAt VARCHAR(255) default ORIGINAL_LOGIN()
)
GO

IF OBJECT_ID('AddEvent', 'P') IS NOT NULL DROP PROCEDURE AddEvent
GO

--Процедура на добавление новой записи-события
CREATE PROCEDURE AddEvent
(
@index INT =null,
@TimeGenerated DATETIME =null,
@Source VARCHAR(255) =null,
@Category VARCHAR(255) =null,
@EventID VARCHAR(255) =null,
@UserName VARCHAR(255) =null,
@MachineName VARCHAR(255)= null,
@Message VARCHAR(max)= null,
@Mask VARCHAR(max)=null
)

AS

SET NOCOUNT ON

INSERT INTO Events
(
[Index],
TimeGenerated,
Source,
Category,
EventID,
UserName,
MachineName,
[Message],
Mask
)

SELECT
@Index,
@TimeGenerated,
@Source,
@Category,
@EventID,
@UserName,
@MachineName,
@Message,
@Mask

GO

 

 

2) Теперь создадим в реестре несколько записей для работы службы (settings.reg-файл находится в архиве вместе с ЕХЕ-шником службы):

  • TimeOut-время (мс), через которое служба читает журнал
  • EventID-событие, у нас это значение = 560
  • Mask тот самый 15-ый параметр, если значение равно нулю (0), то записываем все привилегии.
  • MachineName-имя сервера на котором читаем журнал (. - локальный компьютер) ConnectionString-строка коннекции к серверу БД, где храним наши записи.

 

3) Устанавливаем саму службу: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\installutil AuditObjectAccess.exe

 

 

Загрузить установочный архив: AuditObjectAccess.rar

Утилита для работы с логами: http://www.t-sql.ru/post/AuditObjectAccessViewer.aspx

Tags: ,

SQL Server

Pingbacks and trackbacks (1)+

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

  Country flag

biuquote
  • Комментарий
  • Предпросмотр
Loading