65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.08/5 (7投票s)

2010年2月26日

CPOL

3分钟阅读

viewsIcon

55959

downloadIcon

2032

此示例演示如何访问运行 Auditpol 获取的信息。

引言

在 Windows 7 和 Windows Server 2008 中,管理员对单个审核策略的控制权限可能比早期版本的 Windows 操作系统更多。这些平台上添加了额外的**类别**和**子类别**,以实现更细致的审核控制。

现有工具

不幸的是,这些新的**子类别**在组策略管理控制台 (GPMC) 接口中没有公开。GPMC 接口只允许我们在类别级别配置审核策略。管理员必须使用 Windows 内置的**Auditpol**命令行工具来处理基于 Windows 7 和 Windows Server 2008 的计算机的自定义审核策略。

**Auditpol**策略命令行工具可用于

  • 设置和查询系统审核策略
  • 设置和查询每个用户的审核策略
  • 设置和查询审核选项
  • 设置和查询用于将访问权限委派给审核策略的安全描述符
  • 将审核策略报告或备份到 CSV 文件
  • 从 CSV 文件加载审核策略
  • 清除审核策略
  • 删除所有每个用户的审核策略设置
  • 禁用所有系统审核策略设置

autipol_at_the_prompt.png

Windows 审核可能非常冗长。使用子类别,管理员可以更好地控制对非常具体的事件进行审核。这减少了大量无关事件的生成,并隐藏了重要的事件。结合 Windows 事件收集器服务,我们可以构建一个检测工具,该工具仅聚合最适合特定入侵检测任务的重要事件。

上面的快照显示了**Auditpol**在检索所有子类别及其审核策略方面的作用。同样,我们可以使用**Auditpol /set**命令启用粒度审核。更多帮助,只需在提示符下键入**Auditpol /?**。

示例

此处介绍的工具(我称之为“审核策略浏览器”)部分弥补了缺少新审核策略子类别的用户界面的不足。使用此工具,管理员可以枚举所有可用的审核策略类别及其关联的子类别。对于任何选定的子类别,都会显示相应的审核策略设置(不审核 - 审核成功尝试 - 审核失败尝试)。

Audit_Policy_Browser_in_action.png

此工具没有使用 Auditpol 的全部潜力,该潜力也存在于稍后提到的 API 中。这项练习留给读者。

编程模型

据我所知,管理此新的审核策略框架的唯一可用 API 是所谓的“授权函数”,它是“审核策略函数”的一部分,可在http://msdn.microsoft.com/en-us/library/aa375742(VS.85).aspx找到。

只有一部分“授权函数”在 .NET 中可用。“审核策略函数”在 .NET 或 COM 中(尚未)可用。

为了实现这个项目,我将可用的 Windows API 包装在一组 C++ 类中,这些类管理审核策略基础结构的不同逻辑级别。下面的快照中没有显示错误处理。

下面的对象模型显示了类层次结构。

Classes_Hierarchy.png

访问子类别策略分三个步骤进行

  1. 枚举审核策略类别
  2. // 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++;
    }
  3. 枚举审核策略子类别
  4. // 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++;
    }
  5. 检索关联子类别的策略
  6. // 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:***检索策略设置时,也需要管理员凭据。

auditpol_required_privilege.png

建议

为了充分利用这项技术,可以实现以下项目

  • 调用 API 时管理潜在的运行时错误
  • 将内容导出到 XML 文件,以便其他组件使用
  • 检索有效的用户策略
  • 修改用户和系统策略设置

链接

历史

  • 2010 年 2 月 26 日:第一个版本。
© . All rights reserved.