1      场景描述

最近一个客户要对域内所有的域控制器开启日志审核,要审核的内容包括用户的登录、注销”“活动目录账户管理。开启审核后,在用户比较多并且登陆比较频繁的情况下,Windows安全日志会快速的增加,Windows安全日志默认的大小为128MB,可以通过修改安全日志最大大小来增加安全日志的存储量,理论上Windows安全日志的最大值可以设定为4GB,但微软官方指出安全日志在实际中最大的限制为300MB,但是即使我们调整日志最大大小为一个较大的值也避免不了长期日志过大达到该限制的情况。当Windwos安全日志满了后,每次用户登陆到域控制器都会提示如下的错误。

p_w_picpath

鉴于此我们考虑将安全日志每天进行定期的备份与清除,即每天晚上将所有域控制器的安全日志自动备份到文件服务器中,并清空安全日志。默认情况下要清除日志必须要域控Administratos组才可以,但是客户不想给建立的账号那么高的权限,于是我们只好建立一个普通的域用户用来实现此效果。

2      详细操作

2.1    开启审核

通过组策略为所有域控制器开启安全审核

步骤

操作

  1. 1.       

在域控组策略控制台新建一条组策略,组策略名称根据实际情况命名,并打开编辑

  1. 2.       

定位到“计算机配置”>“策略”>Windows设置”>“安全设置”>“本地策略”>“审核策略”

p_w_picpath

  1. 3.       

在右侧的详细策略中可根据需求开启相应的审核,windows默认开启了“审核登录事件”,用户在计算机上的登陆与注销都会被记录。在该客户场景中我们需要开启“审核账户管理”来记录管理员对活动目录用户的操作(创建、更改或删除用户帐户或组。重命名、禁用或启用用户帐户。设置或更改密码。)

双击审核账户管理,在设置窗口勾选定义这些策略设置,在审核这些操作下勾选成功”“失败,点击确定,关闭组策略编辑器

  1. 4.       

将定义好的组策略,链接到域控制器OUDomain Controller

  1. 5.       

在所有域控制器执行GPUPDATE /force强制立即刷新组策略,或者等待90分钟所有域控制器会自动刷新计算机策略应用此更改

  1. 6.       

策略刷新后,使用域管理员打开“Active Directory用户和计算机”管理控制台,进行账户的创建。如下图我在活动目录中创建了一个名为xiaowang的账户,打开安全日志即可看到该账户创建的详细信息,如创建者,创建的用户名,是否启用。

p_w_picpath

7.

同样删除用户、重置用户密码也会被记录

p_w_picpath

p_w_picpath

2.1    日志自动备份

要实现日志的备份与清除必须要执行操作的账户具有读取与删除安全日志的权限。可以通过wevtutil gl security的方式来查看默认对security日志具有操作权限的账户

Windows 安全日志默认的权限如上图中标红的所示。

Windows 日志的操作权限分为:读取、写入、清除。权限与 ACE 字符串的访问权限字段中的以下位对应:

·         1= 读取

·         2 = 写入

·         4 = 清除

安全日志默认有3个用户组具有操作权限:操作权限对应如下表所示:

SDDL(安全描述定义语言)符或SID

操作权限

对应用户组

SY

0xf0005

Local system

BA

0x54+1读取、清除)

Built-in administrators

S-1-5-32-573

0x1(只读)

EventReader

Note:微软SDDL与用户组对应列表https://msdn.microsoft.com/zh-CN/library/aa379602.aspx

通过上面的查询可以得出,具有删除安全日志权限的账户组为域控的Administrators组,只有该组的成员可以删除安全日志。如果我们要直接新建一个账户用来删除的话只能是加入到Administrators组中。

同样微软也提供赋予其他用户组删除安全日志权限的功能,我们可以自己新建一个用户组也可以赋予现有用户组来实现,下面的步骤中我将示范赋予Perfmonce Log Users组以清除日志的权限,并新建一个event.admin用户加入到Perfmonce Log Users组中:

步骤

操作

  1. 1.       

查看Perfmonce Log Users组的SID并记录

  1. 2.       

使用管理员身份打开CMD,运行wevtutil gl security,查看现有的channel access的权限列表

  1. 3.       

输入

wevtutuil sl security /ca:0BAG:SYD: wevtutil sl Security /ca:O:BAG:SYD:(A;;0xf0005;;;SY)(A;;0x5;;;BA)(A;;0x1;;;S-1-5-32-573)(A;;0x7;;;S-1-5-32-559)

其中标红的部分0X7表示赋予(1+2+4)也就是赋予该用户组可读、可写、可清除的权限,后面的SIDPerfmonce Log Users组的SID

赋予成功后可以使用wevtutil gl security进行验证

p_w_picpath

  1. 4.       

新建event.admin域用户,并加入到Perfmonce Log Users组中

  1. 5.       

在本地建立一个临时文件夹用来临时存放导出的日志文件,在文件服务器建立一个共享文件夹用来存放导出的日志文件。两个文件夹都赋予event.admin可读、可写权限

  1. 6.       

编写自动备份脚本,如下所示,将该脚本放到每个控制器的本地文件夹中,在此处我选择放在C盘根目录,本示例脚本为BAT脚本

如下标红的地方,BACKUP_PATH为本地临时存放日志文件夹

sharepath为共享文件夹路径

rem Script start here

rem Timestamp Generator

set BACKUP_PATH=c:\backup

rem Get the datetime in a format that can go in a filename.

set _my_datetime=%date%_%time%

set _my_datetime=%_my_datetime: =_%

set _my_datetime=%_my_datetime::=%

set _my_datetime=%_my_datetime:/=_%

set _my_datetime=%_my_datetime:.=_%

rem Set Share Path

set sharepath=\\172.10.1.10\share   

rem Now use the timestamp by Backup Security EventLog.

wevtutil epl System %BACKUP_PATH%\%Computername%_System_%_my_datetime%.evtx

wevtutil epl Security %BACKUP_PATH%\%Computername%_Security_%_my_datetime%.evtx

rem Now Copy the Log Bak To SharePatch

net use %sharepath% P@ssw0rd /user:event.admin@demo.com

xcopy %BACKUP_PATH% %sharepath% /E /H /k /Y

rem Clear Security File

wevtutil cl Security

  1. 7.       

打开任务计划,建立一个计划任务,在常规页面,按照如下图中进行设置,注意一定要选择不管用户是否登录都要运行使用最高权限运行

  1. 8.       

触发器页面设置执行计划的时间与频率,此处我设置为,每天15:20执行一次

  1. 9.       


  1. 10.    

设置完成后点击确定,会提示要让你输入event.admin的密码,输入即可。

  1. 11.    

根据如上操作为其他控制器做同样的任务计划

  1. 12.    

如下图为自动执行计划后,共享文件夹存在的日志

2.2    为什么要用Perfmonce Log Users

看到上面的操作有的人估计会问了,为什么要使用Perfmonce Log Users组?

其实主要原因是任务计划执行脚本的时候需要赋予用户以脚本方式登录的权限。在本地组策略和域组策略都可以设置,默认有4个用户组可以作为批处理作业登陆,位置如下图所示:

我测试过通过组策略将一个新建的用户组加入到该设置中,并且为新建的用户组赋予了清除日志的权限,但是任务计划总是不生效,为了省事我就直接加入到Perfmonce Log Users组中了

p_w_picpath