以编程方式查询新的 Windows 审核策略






4.08/5 (7投票s)
此示例演示如何访问运行 Auditpol 获取的信息。
引言
在 Windows 7 和 Windows Server 2008 中,管理员对单个审核策略的控制权限可能比早期版本的 Windows 操作系统更多。这些平台上添加了额外的**类别**和**子类别**,以实现更细致的审核控制。
现有工具
不幸的是,这些新的**子类别**在组策略管理控制台 (GPMC) 接口中没有公开。GPMC 接口只允许我们在类别级别配置审核策略。管理员必须使用 Windows 内置的**Auditpol**命令行工具来处理基于 Windows 7 和 Windows Server 2008 的计算机的自定义审核策略。
**Auditpol**策略命令行工具可用于
- 设置和查询系统审核策略
- 设置和查询每个用户的审核策略
- 设置和查询审核选项
- 设置和查询用于将访问权限委派给审核策略的安全描述符
- 将审核策略报告或备份到 CSV 文件
- 从 CSV 文件加载审核策略
- 清除审核策略
- 删除所有每个用户的审核策略设置
- 禁用所有系统审核策略设置
Windows 审核可能非常冗长。使用子类别,管理员可以更好地控制对非常具体的事件进行审核。这减少了大量无关事件的生成,并隐藏了重要的事件。结合 Windows 事件收集器服务,我们可以构建一个检测工具,该工具仅聚合最适合特定入侵检测任务的重要事件。
上面的快照显示了**Auditpol**在检索所有子类别及其审核策略方面的作用。同样,我们可以使用**Auditpol /set**命令启用粒度审核。更多帮助,只需在提示符下键入**Auditpol /?**。
示例
此处介绍的工具(我称之为“审核策略浏览器”)部分弥补了缺少新审核策略子类别的用户界面的不足。使用此工具,管理员可以枚举所有可用的审核策略类别及其关联的子类别。对于任何选定的子类别,都会显示相应的审核策略设置(不审核 - 审核成功尝试 - 审核失败尝试)。
此工具没有使用 Auditpol 的全部潜力,该潜力也存在于稍后提到的 API 中。这项练习留给读者。
编程模型
据我所知,管理此新的审核策略框架的唯一可用 API 是所谓的“授权函数”,它是“审核策略函数”的一部分,可在http://msdn.microsoft.com/en-us/library/aa375742(VS.85).aspx找到。
只有一部分“授权函数”在 .NET 中可用。“审核策略函数”在 .NET 或 COM 中(尚未)可用。
为了实现这个项目,我将可用的 Windows API 包装在一组 C++ 类中,这些类管理审核策略基础结构的不同逻辑级别。下面的快照中没有显示错误处理。
下面的对象模型显示了类层次结构。
访问子类别策略分三个步骤进行
- 枚举审核策略类别
- 枚举审核策略子类别
- 检索关联子类别的策略
// Enumerate the categories
GUID* pGuid = NULL;
ULONG uCount = 0;
AuditEnumerateCategories(&pGuid, &uCount)
GUID* pCurrentGuid = pGuid;
for(ULONG i=0; i<uCount; i++)
{
m_vAuditPolicyCategories.push_back(
new CAuditPolicyCategory(pCurrentGuid));
pCurrentGuid++;
}
// Enumerate the subcategories.
GUID* pGuid = NULL;
ULONG uCount = 0;
AuditEnumerateSubCategories(
m_pGuid,
/*return only the Subcategories for this Category*/
FALSE ,
&pGuid,
&uCount);
GUID* pCurrent = pGuid;
for(ULONG i=0; i<uCount; i++)
{
m_vAuditPolicySubCategories.push_back(
new CAuditPolicySubCategory(pCurrent));
pCurrent++;
}
// Enumerate the System Policy for the given subcategory GUID.
ULONG uCount = 1;
PAUDIT_POLICY_INFORMATION pAudit_Policy_Information = NULL;
AuditQuerySystemPolicy(m_pGuid, uCount, &pAudit_Policy_Information);
m_policy = new CAuditPolicy(m_pGuid,
pAudit_Policy_Information->AuditingInformation);
环境
代码是使用 Visual Studio 2008 开发的,并在 Windows 7 上进行了测试。
由于应用程序读取与管理相关的资料,用户帐户控制 (UAC) 期望它以提升的令牌运行。因此,应用程序的清单已标记为需要管理凭据。因此,当从非管理员帐户启动应用程序时,启动应用程序时会要求提升权限。不用担心,此工具仅查询系统。尽管可以使用 Microsoft API 实现此功能,但此工具不会对系统进行任何修改。
事实上,使用**Auditpol /get /category:***检索策略设置时,也需要管理员凭据。
建议
为了充分利用这项技术,可以实现以下项目
- 调用 API 时管理潜在的运行时错误
- 将内容导出到 XML 文件,以便其他组件使用
- 检索有效的用户策略
- 修改用户和系统策略设置
链接
- 授权函数:http://msdn.microsoft.com/en-us/library/aa375742(VS.85).aspx#audit_policy_functions
- 规划和部署高级安全审核策略:http://technet.microsoft.com/en-us/library/ee513968(WS.10).aspx
历史
- 2010 年 2 月 26 日:第一个版本。