这是基线检查系列的文章,之前发了一篇Centos7基线检查脚本,本次发的是可以应用在Windows10、windows201(未在其他版本上进行测试)服务器上的检查脚本,起初使用bat脚本进行编写,然而太过复杂,所以转而使用powershell进行编写,所以运行起来会有一些限制。需要先以管理员权限运行set-ExecutionPolicy RemoteSigned
命令,使得可以运行ps脚本。
实现功能如下:
- 可以单独在Windows计算机上运行,并呈现出不符规范的项目
- 将基线扫描后的结果以json串的形式发送给后端服务器
运行截图:代码:SecurityBaselineCheck
后端截图:代码:AssetManage
后端服务器的代码还在制作中,下面是摘录了部分CIS的规范:
0x01 账户策略#
1.1 密码策略
[+]确保强制密码历史
值为5或更高
PasswordHistorySize=5
[+]确保密码最长使用期限
值为90天或更少,但不为0
MaximumPasswordAge=90
[+]确保密码最短使用期限
值为1或更多
MinimumPasswordAge=1
[+]确保密码必须符合复杂性要求
值为enabled
PasswordComplexity=1
[+]确保用可还原的加密来存储密码
值为Disabled
ClearTextPassword=0
[+]确保密码长度最小值
值为8或更高
MinimumPasswordLength=8
1.2 账户锁定策略
[+]确保账户锁定时间
值为15分钟或更长
LockoutDuration=15
[+]确保账户锁定阈值
值为5或更少,但不为0
LockoutBadCount=5
[+]确保重置账户锁定计数器
值为15分钟或更多,但值要小于Account lockout duration
的值
ResetLockoutCount=15
0x02 审计策略#
[+]审核策略更改:成功
AuditPolicyChange
[+]审核登录事件:成功,失败
AuditLogonEvents
[+]审核对象访问:成功
AuditObjectAccess
[+]审核进程跟踪:成功,失败
AuditProcessTracking
[+]审核目录服务访问:成功,失败
AuditDSAccess
[+]审核系统事件:成功,失败
AuditSystemEvents
[+]审核帐户登录事件:成功,失败
AuditAccountLogon
[+]审核帐户管理:成功,失败
AuditAccountManage
值的含义:
Setting value | Explanation |
---|---|
0 | Indicates that this setting is set to None. |
1 | Indicates that this setting is set to Success Audits Only. |
2 | Indicates that this setting is set to Failure Audits Only. |
3 | Indicates that this setting is set to Success and Failure Audits. |
4 | Indicates that this setting is set to None. |
0x03 用户权限分配#
[+]确保作为受信任的呼叫方访问凭据管理器
值为空,没有设置任何用户
SeTrustedCredManAccessPrivilege
[+]确保以操作系统方式执行
值为空,没有设置任何用户。
SeTcbPrivilege
[+]确保将工作站添加到域
值仅为特定的用户或用户组,不能有513,514,515
SeMachineAccountPrivilege
[+]确保创建全局对象
值为空
SeCreateGlobalPrivilege
[+]确保拒绝作为批处理作业登录
包含Guests
SeDenyBatchLogonRight
[+]确保拒绝以服务身份登录
包含Guests
SeDenyServiceLogonRight
[+]确保拒绝本地登录
包含Guests
SeDenyInteractiveLogonRight
[+]确保从远程系统强制关机
值为administrators
本地组和s-1-5-32-549
(域控的一个内置组)
SeRemoteShutdownPrivilege
[+]确保修改对象标签
值为空
SeRelabelPrivilege
[+]确保同步目录服务数据
值为空
SeSyncAgentPrivilege
0x04 安全选项#
[+]确保账户:来宾账户状态
值为已禁用
EnableGuestAccount=0
[+]确保账户:限制使用空密码的本地账户只能使用控制台登录
值为Enabled
MACHINE\System\CurrentControlSet\Control\Lsa\LimitBlankPasswordUse=4,1
[+]配置账户:重命名系统管理员账户
NewAdministratorName="NewAdministrator"
[+]配置账户:重命名来宾账户
NewGuestName="NewGuestName"
[+]确保交互式登录:不显示上次登录用户名
值为Enabled
MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\DontDisplayLastUserName=4,1
[+]确保交互式登录:无须按Ctrl+Alt+Del
值为Disabled
MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableCAD=4,0
[+]确保交互式登录:计算机不活动限制
值为900秒或更少
MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\InactivityTimeoutSecs=4,900
[+]确保Microsoft 网络客户端: 将未加密的密码发送到第三方 SMB 服务器
值为Disabled
MACHINE\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\EnablePlainTextPassword=4,0
[+]确保Microsoft网络服务器:暂停会话前所需的空闲时间数量
值为15分钟或更少,但不为0
MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\AutoDisconnect=4,15
[+]确保网络安全:再下一次改变密码时不存储LAN管理器哈希值
值为Enabled
MACHINE\System\CurrentControlSet\Control\Lsa\NoLMHash=4,1
[+]确保网络访问:允许匿名SID/名称转换
值为Disabled
LSAAnonymousNameLookup = 0
[+]确保网络访问:不允许SAM账户的匿名枚举
值为Enabled
MACHINE\System\CurrentControlSet\Control\Lsa\RestrictAnonymousSAM=4,1
[+]确保网络访问:不允许SAM账户和共享的匿名枚举
值为Enabled
MACHINE\System\CurrentControlSet\Control\Lsa\RestrictAnonymous=4,1
[+]确保关机:允许系统在未登录前关机
值为Disabled
MACHINE\System\CurrentControlSet\Control\Session Manager\Memory Management\ClearPageFileAtShutdown=4,0
0x05 远程访问安全#
[+]确保RDP
端口不为3389
for /f "skip=2 tokens=3" %i in ('REG query HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server\WinStations\RDP-Tcp /v PortNumber') do @echo %i
0x06 系统网络安全#
关闭windows自动播放功能
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer /v NoDriveTypeAutoRun /t REG_DWORD /d 233 /f
参考资料:microsoft安全策略
参考资料:CIS_Microsoft_Windows_Server_2012_R2_Benchmark_v2.3.0
参考资料:自动化组策略配置检查
参考资料:Microsoft审计值含义
参考资料:windows server安全加固指南
参考资料:Windows中已知的安全标识符