前言:

  因为工作的原因,要写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_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Security'
$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%\system32\inetsrv\iisadmpwd){
$projectdata = @{"msg"="删除风险实例文件%systemroot%\system32\inetsrv\iisadmpwd策略不符合标准";}
$data['project']+=$projectdata
}

2019/11/26 update

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

https://github.com/Echox1/windows_baseline

最新文章

  1. Emmet 使用说明。
  2. php建立MySQL数据表
  3. unity3d Human skin real time rendering 真实模拟人皮实时渲染(转)
  4. IT新人养成与蘑菇理论
  5. Eclipse的下载和安装
  6. cgdb调试postgresql
  7. Oracle归档日志定时删除任务
  8. python之numpy库[2]
  9. 【Appnium+C#+Winform自动化测试系列】前言
  10. HDU-5340 Three Palindromes(字符串哈希)
  11. AES对称加密
  12. zabbix监控elasticsearch
  13. Web 前端编程运维必备
  14. python day27--常用模块 time,random,os,序列化
  15. 将应用代码由eclipse导入Android studio的方法NDK-Build和Cmake两种方法(以android_serialport_api为例)
  16. CentOS7 命令笔记
  17. 用Go语言实现一个简单的聊天机器人
  18. 001-快速搭建Spring web应用【springboot 2.0.4】-gradle、springboot的启动过程分析、gradle多模块构建
  19. 岭回归、LASSO与LAR的几何意义
  20. 深入浅出MS SQL——编辑table 出错

热门文章

  1. LianLianKan HDU - 4272 状压dp
  2. Redis全面解析
  3. 继承自List<T>的类通过NewtonJson的序列化问题
  4. Kubernets二进制安装(6)之部署主控节点服务--etcd
  5. PyQt5 问题集
  6. React Hooks: useContext All In One
  7. TypeScript Learning Paths
  8. Azure 信用卡扣款 1 美元 & Azure 中国客服
  9. css & background-image & full page width & background-size
  10. V8 & ECMAScript & ES-Next