*本文原创作者:“无。”,本文属FreeBuf原创奖励计划,未经许可禁止转载
SACL(System Access Control List),和DACL(Discretionary Access Control List)一样,是访问控制列表(ACL)的一类。利用SACL,我们可以记录系统中对特定安全对象的访问细节,如访问时间、访问类型和访问进程等信息。本文将以文件为例,阐述该如何利用SACL实现对安全对象的访问审核。
DACL和SACL
SACL(System Access Control List),和DACL(Discretionary Access Control List)一样,是访问控制列表(ACL)的一类。ACL在Windows的访问控制中起到了非常重要的作用。我在此借用ondrej uzovic的图片来阐述ACL在Windows安全模型中的作用。
DACL
DACL相信大家已经很熟悉了,它由多个条目组成(Access Control Entry, ACE),每个ACE代表着某SID(Security Identifier)对于目标安全对象有着怎样的权限。我们可以在一个文件上通过右键-属性-安全-高级来直观地查看其对应的DACL,如下所示。
DACL中的ACE可以设置为两种模式,允许模式和阻止模式。顾名思义,允许模式的ACE就是指若SID的操作匹配了本条ACE,则运行此次访问;而SID的操作若匹配上了阻止模式的ACE,则此次访问就会被拒绝。也因为此,ACE的先后顺序很重要,系统在找到匹配的ACE之后将不会再检查后续的ACE。一般地,阻止模式的ACE将排在前面。
SACL
相比于DACL,SACL受重视的程度似乎要低很多,但其实它对于操作系统也也一样重要。根据MSDN的解释,'SACL可以赋予管理员记录对安全对象访问尝试的能力'。SACL和DACL在总体上是很相似的,它同样是由ACE组成,并且每条ACE也对应着一个SID。不同的是,SACL中的ACE并不进行权限的控制,而是对应着审计规则。是当一个主体尝试访问该安全对象时,若该主体的操作匹配了SACL中定义的规则,操作系统会生成一个事件,并对这次访问动作做出记录。根据ACE中不同的配置,操作系统可以有选择的去记录那些失败的访问尝试,或者记录成功的访问,当然也可以无论成功与否都进行记录。
可以看到,SACL向我们提供了强大的安全审计功能。本文将仅仅以文件系统的审核作为例子,但是SACL完全可以被用来打造一个终端入侵检测系统。
创建SACL
要使用SACL的审计功能,我们需要创建合适的SACL。我们可以通过Powershell脚本进行大规模的SACL部署,不过为了方便理解,本文还是直接在图形界面上进行相关操作。
选择安全对象
选择你想要进行审计的安全对象。例如,本文直接在桌面上建立了一个名为'TopSecret.txt'的文件。
进入审核选项卡
在'TopSecret.txt'上点击右键,依次选择属性-安全-高级,然后在弹出的界面中选择'审核'选项卡,如下所示:
添加ACE
在'审核'选项卡中选择'添加'。在弹出的'选择用户或组'中填入Everyone, 依次单击'检查名称'和'确定'。
在新出现的窗口中分别选中'成功'和'失败'两列中的'完全控制', 剩下的内容会被自动全选,如下。
最后在所有的窗口中选择'确定'以应用修改。这样我们就创建了一个SACL,它将审核系统中任何人对于该文件的任意操作。
打开文件系统审计功能
操作系统的文件系统审计功能是默认关闭的。为了使用SACL进行文件系统方面的审计,我们需要打开此功能。用以下步骤可以打开文件系统审计。
win+r, 运行'secpol.msc'.
双击底部的'高级审核策略配置', 然后依次双击'系统审核策略-本地组策略对象'-'对象访问', 在右边的窗口中双击'审核文件系统'。并在弹出的窗口中依次勾选'配置以下审核事件'、'成功'、'失败'。
最后确认所有的窗口以应用更改。
查询审计结果
上述操作完成后有关SACL的配置就结束了。我们接下来可以对TopSecret.txt文件进行一些操作,例如用各种不同的软件打开,或者进行删除。操作系统会自动记录我们的操作,并生成相应的事件记录在Windows中。
我们可以通过Windows事件查看器查询这些事件。首先,我们通过win+r, 运行eventvwr.exe打开事件查看器。然后在左侧选择'Windows'日志-'安全'选项卡。然后在右侧的事件列表中随意翻阅一下就能很容易地找到对应事件了。
若事件列表过于庞大,你也可以通过事件ID来更方便的查找对应事件。本例的文件系统审核对应着事件ID 4663。
我们可以双击某事件查看细节。从图中可以清晰地看到文件名,文件被访问的时间以及访问的进程。
我们还可以将该事件绑定到系统的计划任务,这样当事件发生时,我们可以自动地进行一些处理,例如杀掉读取文件的进程等等。可以通过最右边的'将任务附加到此事件'按钮完成这个操作。文本用一个弹框作为例子:
总结
SACL向我们提供了强大的审核功能,可以被用来记录安全对象的访问信息。除了本文举例的文件系统审核之外,利用SACL还可以审核对注册表、内核对象、系统句柄等安全对象的各种访问。希望本文对SACL的简介可以激发读者对它的兴趣,而进行更深入的研究。
*本文原创作者:“无。”,本文属FreeBuf原创奖励计划,未经许可禁止转载