• windows基线检测脚本编写指南-powershell版


    前言:

      因为工作的原因,要写windows下的基线检查脚本。之前没接触过,在网上找了半天也没找到现成的,无奈只好自己研究,最后还是成功完成了工作。

      在我编写之后发现windows下的基线基本就是检查注册表表项。但也有例外。windows组策略有些并不存在于注册表中,那么就要用到组策略命令行工具secedit

     在powershell中获取secedit用法

     举个例子:如果需要对审核策略进行检查,那我们的思路是先读取审核策略,然后判断是否符合策略,通过

    secedit /export /cfg config.cfg /quiet

    读取组策略到该目录下的config.cfg文件中,截取一部分config.cfg文件如下

    那么我们只需知道这里面的参数名和对应的值所代表的含义就能够编写检查脚本,我在网上找了一下关于参数的含义,只找到一篇,不过也够用了

    [Unicode]
    Unicode=yes
    [System Access]
    MinimumPasswordAge = 0    //密码最短留存期
    MaximumPasswordAge = 42    //密码最长留存期
    MinimumPasswordLength = 0    //密码长度最小值
    PasswordComplexity = 0    //密码必须符合复杂性要求
    PasswordHistorySize = 0    //强制密码历史 N个记住的密码
    LockoutBadCount = 5    //账户锁定阈值
    ResetLockoutCount = 30    //账户锁定时间
    LockoutDuration = 30    //复位账户锁定计数器
    RequireLogonToChangePassword = 0 *下次登录必须更改密码
    ForceLogoffWhenHourExpire = 0    *强制过期
    NewAdministratorName = "Administrator" *管理员账户名称
    NewGuestName = "Guest"    *来宾账户名称
    ClearTextPassword = 0
    LSAAnonymousNameLookup = 0
    EnableAdminAccount = 1    //administrator是否禁用
    EnableGuestAccount = 0    //guest是否禁用
    [Event Audit]
    AuditSystemEvents = 3    //审核系统事件 成功、失败
    AuditLogonEvents = 3    //审核登录事件 成功、失败
    AuditObjectAccess = 3    //审核对象访问 成功、失败
    AuditPrivilegeUse = 2    //审核特权使用 失败
    AuditPolicyChange = 3    //审核策略更改 成功、失败
    AuditAccountManage = 3    //审核账户管理 成功、失败
    AuditProcessTracking = 2    //审核过程追踪 失败
    AuditDSAccess = 2    //审核目录服务访问 失败
    AuditAccountLogon = 3    //审核账户登录事件 成功、失败
    
    ---------------------
    
    本文来自 yongping8204 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/yongping8204/article/details/7471627?utm_source=copy 

    那么现在就简单了,如果我们审核账户登录事件的标准策略为失败。那么只要AuditAccountLogon = 2就满足策略标准了

    代码如下:

     $config = Get-Content -path config.cfg
     for ($i=0; $i -lt $config.Length; $i++)
     {
        $config_line = $config[$i] -split "="
        if(($config_line[0] -eq "AuditAccountLogon "))
        {
            $config_line[1] = $config_line[1].Trim(' ')
            if($config_line[1] -eq "2")
            { 
                $projectdata = @{"msg"="审核账户登录事件策略符合标准";}
                $data['project']+=$projectdata
            }
            else
            {
                $projectdata = @{"msg"="审核账户登录事件策略不符合标准";}
                $data['project']+=$projectdata
            }
        }
    }

    而不在secedit组策略中的基线要求可以读注册表,这里很简单,先百度一下该策略所在的注册表的位置,使用powershell读取注册表,判断是否符合标准即可。

    举个例子:

    #安全日志查看器大小设置
    $Key = 'HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventlogSecurity'
    $name = "MaxSize"
    $config = (Get-ItemProperty -Path "Registry::$Key" -ErrorAction Stop).$name
    if($config -ge "8192")
            {
                $projectdata = @{"msg"="安全日志查看器大小设置策略符合标准";}
                $data['project']+=$projectdata
            }
    else
            {
                $projectdata = @{"msg"="安全日志查看器大小设置策略不符合标准";}
                $data['project']+=$projectdata
            }

     除了windows之外还有windows下中间件基线脚本的编写,思路比较清楚。

    无非就是读取配置文件,通过正则匹配确认策略是否符合标准。

    或是通过Test-Path判断是否存在敏感目录或文件:

    if(Test-Path %systemroot%system32inetsrviisadmpwd){
            $projectdata = @{"msg"="删除风险实例文件%systemroot%system32inetsrviisadmpwd策略不符合标准";}
            $data['project']+=$projectdata
    }

    2019/11/26 update

    把去年写的基线放在github上了

    https://github.com/Echox1/windows_baseline
    
  • 相关阅读:
    Streams那些事之概述与原理
    ORA12514: ORACLE 监听错误
    使用软件工具插件 备忘
    jquery 弹出遮罩插件 prettyPhoto 参数说明
    SQL 9位随机码
    向上下左右不间断无缝滚动的效果(兼容火狐和IE)[转]
    SQL 将一串字符串转换为列插入临时表
    jQuery插件开发全解析[转]
    DIV+CSS命名规范
    ASP.NET中Session跨站点共享实现方式
  • 原文地址:https://www.cnblogs.com/escape-w/p/9688103.html
Copyright © 2020-2023  润新知