当前位置: 首页 > news >正文

Windows基线自动化检查脚本

本批处理脚本的主要目的是对Windows系统进行安全性检查。检查了多个安全参数和设置,以确保系统符合特定的安全标准。当然也可能有些检查项不是很准确,需要根据实际环境再调试一下,以下是该脚本的详细描述和功能分析:

1. 脚本初始化
使用 @echo off 禁用命令回显,以便输出更清晰。
setlocal enabledelayedexpansion 启用延迟变量扩展,以便在循环中使用变量。
2. 变量设置
定义了一些变量用于计数:
totalChecks: 总检查项目数量(设为60),如果有新增或删减可以改变这个定量。
passCount: 通过检查的计数。
failCount: 未通过检查的计数。
skippedCount: 被跳过的检查计数。

3. 收集IP地址
通过ipconfig命令获取IPv4地址,特别是以192.168.开头的地址,并将其存储在变量ip中,用于输出确认我们在批量检查的时候知道这是那个主机的结果。

4. 导出安全策略
使用 secedit /export 导出安全策略到临时文件,并用PowerShell将其编码为UTF-8格式。便于一些检查安全策略的项目可以直接去导出的文件里面检索。

5. 安全检查
脚本接下来执行一系列安全检查,主要包括:
(1) 检查密码长度最小值:验证最小密码长度是否小于12。
(2) 检查是否已启用密码复杂性要求:确认密码复杂性设置是否启用。
(3) 检查是否已禁用来宾 (Guest) 帐户:检查来宾账户状态是否为禁用。
(4) 检查“强制密码历史”个数:验证密码历史的数量是否小于5。
(5) 检查已启用的本地用户的个数:确认本地启用用户是否少于2。
(6) 检查密码最长使用期限:验证密码最大有效期是否少于90天。
(7) 检查密码最长使用期限是否不为0:确认密码有效期是否为0。
(8) 检查帐户锁定阈值:验证帐户锁定阈值是否小于6。
(9) 检查帐户锁定阈值是否不为0:确认锁定阈值是否为0。
(10) 检查“取得文件或其它对象的所有权”的帐户和组:检查管理员组的配置。
(11) 检查可从远端关闭系统的帐户和组:同样检查管理员组的配置。
(12) 检查是否已禁止 SAM 帐户的匿名枚举:检查注册表设置。
(13) 检查是否已禁止 SAM 帐户和共享的匿名枚举:同样检查注册表设置。
(14) 检查可远程访问的注册表路径:检查注册表是否可远程访问。
(15) 检查可远程访问的注册表路径:再一次检查远程访问设置(重复检查,实际应为一个检查)。
(16) 检查可匿名访问的共享:检查是否有共享文件夹可以匿名访问。
(17) 检查可匿名访问的命名管道:检查命名管道的访问权限。
(18) 检查允许从网络访问此计算机的用户和组:检查网络访问权限设置。
(19) 检查允许本地登录的用户和组:检查本地登录权限设置。
(20) 检查应用程序日志文件达到最大大小时的动作:确认日志文件溢出处理设置。
(21) 检查应用程序日志文件最大大小:确认日志文件的最大大小设置。
(22) 检查“审核对象访问”级别:检查文件系统的审核策略。
(23) 检查“审核特权使用”级别:检查特权使用的审核策略。
(24) 检查“审核进程跟踪”级别:检查进程创建的审核策略。
(25) 检查“审核登录事件”级别:检查登录事件的审核策略。
(26) 检查“审核目录服务访问”级别:检查目录服务访问的审核策略。
(27) 检查“审核系统事件”级别:检查系统事件的审核策略。
(28) 检查“审核帐户登录事件”级别:检查帐户登录事件的审核策略。
(29) 检查“审核策略更改”级别:检查审核策略变更的审核策略。
(30) 检查“审核帐户管理”级别:检查用户账户管理的审核策略。
(31) 检查 Windows 防火墙状态:确认Windows防火墙是否启用。
(32) 检查远程桌面 (RDP) 服务端口:确认RDP端口是否为默认设置。
(33) 检查源路由配置:确认源路由是否被禁用。
(34) 检查 TCP 连接请求阈值:确认TCP连接请求阈值设置。
(35) 检查是否已启用 SYN 攻击保护:确认SYN攻击保护是否启用。
(36) 检查取消尝试响应 SYN 请求之前要重新传输 SYN-ACK 的次数:确认设置正确。
(37) 检查处于 SYN_RCVD 状态下的 TCP 连接阈值:确认连接阈值设置。
(38) 检查处于 SYN_RCVD 状态下,且至少已经进行了一次重新传输的 TCP 连接阈值:确认设置正确。
(39) 检查是否已删除 SNMP 服务的默认 public 团体:确认SNMP设置。
(40) 检查是否已启用 TCP 最大传输单元 (MTU) 大小自动探测:确认MTU探测设置。
(41) 检查 Remote Access Connection Manager 服务状态:确认该服务是否停止。
(42) 检查 Message Queuing 服务状态:确认该服务是否停止。
(43) 检查 DHCP Server 服务状态:确认该服务是否停止。
(44) 检查 DHCP Client 服务状态:确认该服务是否停止。
(45) 检查 Simple Mail Transport Protocol (SMTP) 服务状态:确认该服务是否停止。
(46) 检查 Windows Internet Name Service (WINS) 服务状态:确认该服务是否停止。
(47) 检查 Simple TCP/IP Services 服务状态:确认该服务是否停止。
(48) 检查 Windows 自动登录设置:确认自动登录是否禁用。
(49) 检查是否已安装青藤云主机安全 agent:确认TitanAgent是否安装。
(50) 检查共享文件夹的共享权限:确认共享文件夹权限设置。
(51) 检查所有磁盘分区的文件系统格式:确认所有磁盘是否为NTFS格式。
(52) 检查是否已对所有驱动器关闭 Windows 自动播放:确认自动播放设置。
(53) 检查是否已禁用 Windows 硬盘默认共享:确认硬盘共享设置。
(54) 检查服务器在暂停会话前所需的空闲时间量:确认设置是否正确。
(55) 检查是否正确配置 NTP 时间同步服务器:确认NTP服务器设置。
(56) 检查是否正确配置 DNS 服务器:确认DNS设置。
(57) 检查是否已关闭 IPv6 协议:确认IPv6是否禁用。
(58) 检查是否已开启数据 DEP 功能:确认DEP设置。
(59) 检查主机名是否已符合主机命名规范:确认主机名是否符合标准。
(60) 检查是否已开启 UAC 安全提示:确认UAC设置是否启用。

6. 输出结果
最后,脚本输出总的检查数量、通过的数量、未通过的数量和跳过的数量。
清理临时生成的文件。

脚本代码如下:

@echo off
setlocal enabledelayedexpansion:: 初始化计数器
set totalChecks=60
set passCount=0
set failCount=0
set skippedCount=0 for /f "tokens=2 delims=:" %%f in ('ipconfig ^| findstr "IPv4 Address" ^| findstr "192.168."') do (for /f "tokens=1" %%g in ("%%f") do (set "ip=%%g")
)
echo IP:%ip%:: 先执行一次PowerShell命令,导出安全策略到secpol.cfg
:: powershell -Command "secedit /export /areas SECURITYPOLICY /cfg C:\secpol.cfg > $null 2>&1"
secedit /export /areas SECURITYPOLICY /cfg C:\temp_secpol.cfg > nul 2>&1
powershell -Command "Get-Content C:\temp_secpol.cfg | Out-File -FilePath C:\secpol.cfg -Encoding utf8"
:: 1. 检查密码长度最小值
set minPwdLength=""
for /f "tokens=2 delims== " %%a in ('findstr /i "MinimumPasswordLength" C:\secpol.cfg') do set minPwdLength=%%a
if !minPwdLength! LSS 12 (echo Not Pass: [1] MinimumPasswordLength is !minPwdLength!set /a failCount+=1
) else (set /a passCount+=1
):: 2. 检查是否已启用密码复杂性要求
set pwdComplexity=""
for /f "tokens=2 delims== " %%b in ('findstr /i "PasswordComplexity" C:\secpol.cfg') do set pwdComplexity=%%b
if /i "!pwdComplexity!" == "" (echo Not Pass: [2] PasswordComplexity is not setset /a failCount+=1
) else (set /a passCount+=1
):: 3. 检查是否已禁用来宾 (Guest) 帐户
net user Guest | find "Account active" > result.txt
set /p guestStatus=<result.txt
if /i "!guestStatus!" == "Yes" (echo Not Pass: [3] Guest account is enabledset /a failCount+=1
) else (set /a passCount+=1
):: 4. 检查“强制密码历史”个数
set pwdHistorySize=""
for /f "tokens=2 delims== " %%c in ('findstr /i "PasswordHistorySize" C:\secpol.cfg') do set pwdHistorySize=%%c
if !pwdHistorySize! LSS 5 (echo Not Pass: [4] PasswordHistorySize is !pwdHistorySize!set /a failCount+=1
) else (set /a passCount+=1
):: 5. 检查已启用的本地用户的个数
for /f %%d in ('net user ^| find /c /v "-----"') do set enabledUsers=%%d
if !enabledUsers! LSS 2 (echo Not Pass: [5] Enabled local users count is !enabledUsers!set /a failCount+=1
) else (set /a passCount+=1
):: 6. 检查密码最长使用期限
set maxPwdAge=""
for /f "usebackq tokens=2 delims== " %%e in (`findstr /i "MaximumPasswordAge" C:\secpol.cfg ^| findstr /v "MACHINE"`) do (set maxPwdAge=%%erem 只取数字部分,确保没有其他字符影响set maxPwdAge=!maxPwdAge: =!rem 找到第一行后就退出循环goto :done
)
:done
if !maxPwdAge! LSS 90 (echo Not Pass: [6] MaximumPasswordAge is !maxPwdAge!set /a failCount+=1
) else (set /a passCount+=1
):: 7. 检查密码最长使用期限是否不为 0
if !maxPwdAge! == 0 (echo Not Pass: [7] MaximumPasswordAge is !maxPwdAge!set /a failCount+=1
) else (set /a passCount+=1
):: 8. 检查帐户锁定阈值
set lockoutBadCount=""
for /f "tokens=2 delims== " %%f in ('findstr /i "LockoutBadCount" C:\secpol.cfg') do set lockoutBadCount=%%f
if !lockoutBadCount! LSS 6 (echo Not Pass: [8] LockoutBadCount is !lockoutBadCount!set /a failCount+=1
) else (set /a passCount+=1
):: 9. 检查帐户锁定阈值是否不为 0
if !lockoutBadCount! == 0 (echo Not Pass: [9] LockoutBadCount is !lockoutBadCount!set /a failCount+=1
) else (set /a passCount+=1
):: 10. 检查“取得文件或其它对象的所有权”的帐户和组
whoami /groups | findstr /i "Administrators" > result.txt
set /p adminGroups=<result.txt
set excludeGroups=NT AUTHORITY\Local:: 检查是否包含排除项
echo "!adminGroups!" | findstr /i "!excludeGroups!" >nul
if not errorlevel 1 (set /a skippedCount+=1
) else (if /i "!adminGroups!" NEQ "Administrators" (echo Not Pass: [10] Other groups found: !adminGroups!set /a failCount+=1) else (set /a passCount+=1)
):: 11. 检查可从远端关闭系统的帐户和组
whoami /groups | findstr /i "Administrators" > result.txt
set /p adminRemoteGroups=<result.txt
set excludeRemoteGroups=NT AUTHORITY\Local:: 检查是否包含排除项
echo "!adminRemoteGroups!" | findstr /i "!excludeRemoteGroups!" >nul
if not errorlevel 1 (set /a skippedCount+=1
) else (if /i "!adminRemoteGroups!" NEQ "Administrators" (echo Not Pass: [11] Other groups found: !adminRemoteGroups!set /a failCount+=1) else (set /a passCount+=1)
):: 12. 检查是否已禁止 SAM 帐户的匿名枚举
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v "RestrictAnonymous" | findstr /i "0x1" > result.txt
if errorlevel 1 (echo Not Pass: [12] RestrictAnonymous is not enabledset /a failCount+=1
) else (set /a passCount+=1
):: 13. 检查是否已禁止 SAM 帐户和共享的匿名枚举
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v "RestrictAnonymousSam" | findstr /i "0x1" > result.txt
if errorlevel 1 (echo Not Pass: [13] RestrictAnonymousSam is not enabledset /a failCount+=1
) else (set /a passCount+=1
):: 14. 检查可远程访问的注册表路径
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v RemoteRegistry > result.txt 2>&1
set /p remoteRegistry=<result.txt
if errorlevel 1 (set /a passCount+=1
) else (if "!remoteRegistry!" NEQ "" (echo Not Pass: [14] RemoteRegistry is accessibleset /a failCount+=1) else (set /a passCount+=1)
):: 15. 检查可远程访问的注册表路径
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v RemoteRegistry > result.txt 2>&1
set /p remoteRegistryPath=<result.txt
if errorlevel 1 (set /a passCount+=1
) else (if "!remoteRegistryPath!" NEQ "" (echo Not Pass: [15] RemoteRegistry is accessibleset /a failCount+=1) else (set /a passCount+=1)
):: 16. 检查可匿名访问的共享
reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v "NullSessionShares" > result.txt
set /p nullSessionShares=<result.txt
if "!nullSessionShares!" NEQ "" (echo Not Pass: [16] NullSessionShares is accessibleset /a failCount+=1
) else (set /a passCount+=1
):: 17. 检查可匿名访问的命名管道
reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v "NullSessionPipes" > result.txt 2>&1
set /p nullSessionPipes=<result.txt
if errorlevel 1 (set /a passCount+=1
) else (if "!nullSessionPipes!" NEQ "" (echo Not Pass: [17] NullSessionPipes is accessibleset /a failCount+=1) else (set /a passCount+=1)
):: 18. 检查允许从网络访问此计算机的用户和组
whoami /priv | findstr /i "SeRemoteInteractiveLogonRight" > result.txt
set /p remoteInteractiveLogonRight=<result.txt
if /i "!remoteInteractiveLogonRight!" NEQ "SeRemoteInteractiveLogonRight" (if defined remoteInteractiveLogonRight (echo Not Pass: [18] Other users found: !remoteInteractiveLogonRight!set /a failCount+=1) else (set /a passCount+=1)
) else (set /a passCount+=1
):: 19. 检查允许本地登录的用户和组
whoami /priv | findstr /i "SeInteractiveLogonRight" > result.txt
set /p interactiveLogonRight=<result.txt
if /i "!interactiveLogonRight!" NEQ "SeInteractiveLogonRight" (if defined interactiveLogonRight (echo Not Pass: [19] Other users found: !interactiveLogonRight!set /a failCount+=1) else (set /a passCount+=1)
) else (set /a passCount+=1
):: 20. 检查应用程序日志文件达到最大大小时的动作
wevtutil get-log Application /format:xml | findstr /i "OverflowAction" > result.txt
set /p overflowAction=<result.txt
if "!overflowAction!" == "" (set /a passCount+=1
) else (echo Not Pass: [20] OverflowAction found: !overflowAction!set /a failCount+=1
):: 21. 检查应用程序日志文件最大大小
wevtutil get-log Application /format:xml | findstr /i "maxSize" > result.txt
set /p maxSize=<result.txt
if "!maxSize!" == "" (echo Not Pass: [21] maxSize is not setset /a failCount+=1
) else (set /a passCount+=1
):: 22. 检查“审核对象访问”级别
auditpol /get /subcategory:"File System" > result.txt
set /p fileSystemAuditPolicy=<result.txt
if "!fileSystemAuditPolicy!" == "" (echo Not Pass: [22] File System audit policy is not setset /a failCount+=1
) else (set /a passCount+=1
):: 23. 检查“审核特权使用”级别
auditpol /get /subcategory:"Sensitive Privilege Use" > result.txt
set /p sensitivePrivilegeUseAuditPolicy=<result.txt
if "!sensitivePrivilegeUseAuditPolicy!" == "" (echo Not Pass: [23] Sensitive Privilege Use audit policy is not setset /a failCount+=1
) else (set /a passCount+=1
):: 24. 检查“审核进程跟踪”级别
auditpol /get /subcategory:"Process Creation" > result.txt
set /p processCreationAuditPolicy=<result.txt
if "!processCreationAuditPolicy!" == "" (echo Not Pass: [24] Process Creation audit policy is not setset /a failCount+=1
) else (set /a passCount+=1
):: 25. 检查“审核登录事件”级别
auditpol /get /subcategory:"Logon" > result.txt
set /p logonAuditPolicy=<result.txt
if "!logonAuditPolicy!" == "" (echo Not Pass: [25] Logon audit policy is not setset /a failCount+=1
) else (set /a passCount+=1
):: 26. 检查“审核目录服务访问”级别
auditpol /get /subcategory:"Directory Service Access" > result.txt
set /p directoryServiceAccessAuditPolicy=<result.txt
if "!directoryServiceAccessAuditPolicy!" == "" (echo Not Pass: [26] Directory Service Access audit policy is not setset /a failCount+=1
) else (set /a passCount+=1
):: 27. 检查“审核系统事件”级别
auditpol /get /subcategory:"Other System Events" > result.txt
set /p otherSystemEventsAuditPolicy=<result.txt
if "!otherSystemEventsAuditPolicy!" == "" (echo Not Pass: [27] Other System Events audit policy is not setset /a failCount+=1
) else (set /a passCount+=1
):: 28. 检查“审核帐户登录事件”级别
auditpol /get /subcategory:"Credential Validation" > result.txt
set /p credentialValidationAuditPolicy=<result.txt
if "!credentialValidationAuditPolicy!" == "" (echo Not Pass: [28] Credential Validation audit policy is not setset /a failCount+=1
) else (set /a passCount+=1
):: 29. 检查“审核策略更改”级别
auditpol /get /subcategory:"Audit Policy Change" > result.txt
set /p auditPolicyChange=<result.txt
if "!auditPolicyChange!" == "" (echo Not Pass: [29] Audit Policy Change audit policy is not setset /a failCount+=1
) else (set /a passCount+=1
):: 30. 检查“审核帐户管理”级别
auditpol /get /subcategory:"User Account Management" > result.txt
set /p userAccountManagementAuditPolicy=<result.txt
if "!userAccountManagementAuditPolicy!" == "" (echo Not Pass: [30] User Account Management audit policy is not setset /a failCount+=1
) else (set /a passCount+=1
):: 31. 检查 Windows 防火墙状态
netsh advfirewall show allprofiles | findstr /i "State" | findstr /i "ON" > result.txt
if errorlevel 1 (echo Not Pass: [31] Windows Firewall is not enabledset /a failCount+=1
) else (set /a passCount+=1
):: 32. 检查远程桌面 (RDP) 服务端口
for /f "tokens=3" %%a in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v "PortNumber"') do set PortNumber=%%a
if "!PortNumber!" NEQ "0x1188" (echo Not Pass: [32] RDP port is not setset /a failCount+=1
) else (set /a passCount+=1
):: 33. 检查源路由配置
for /f "tokens=3" %%a in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v "DisableIPSourceRouting"') do set DisableIPSourceRouting=%%a
if "!DisableIPSourceRouting!" NEQ "0x2" (echo Not Pass: [33] IP Source Routing is enabledset /a failCount+=1
) else (set /a passCount+=1
):: 34. 检查 TCP 连接请求阈值
for /f "tokens=3" %%a in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v "TcpMaxPortsExhausted"') do set TcpMaxPortsExhausted=%%a
if "!TcpMaxPortsExhausted!" NEQ "0x5" (echo Not Pass: [34] TcpMaxPortsExhausted is not set correctlyset /a failCount+=1
) else (set /a passCount+=1
):: 35. 检查是否已启用 SYN 攻击保护
for /f "tokens=3" %%a in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v SynAttackProtect') do set SynAttackProtect=%%a
if "!SynAttackProtect!" NEQ "0x1" (echo Not Pass: [35] SynAttackProtect is not enabledset /a failCount+=1
) else (set /a passCount+=1
):: 36. 检查取消尝试响应 SYN 请求之前要重新传输 SYN-ACK 的次数
for /f "tokens=3" %%a in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v TcpMaxConnectResponseRetransmissions') do set TcpMaxConnectResponseRetransmissions=%%a
if "!TcpMaxConnectResponseRetransmissions!" NEQ "0x2" (echo Not Pass: [36] TcpMaxConnectResponseRetransmissions is not set correctlyset /a failCount+=1
) else (set /a passCount+=1
):: 37. 检查处于 SYN_RCVD 状态下的 TCP 连接阈值
for /f "tokens=3" %%a in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v TcpMaxHalfOpen') do set TcpMaxHalfOpen=%%a
set TcpMaxHalfOpen=!TcpMaxHalfOpen: =!
if "!TcpMaxHalfOpen!" NEQ "0x1f4" (echo Not Pass: [37] TcpMaxHalfOpen is not set correctlyset /a failCount+=1
) else (set /a passCount+=1
):: 38. 检查处于 SYN_RCVD 状态下,且至少已经进行了一次重新传输的 TCP 连接阈值
for /f "tokens=3" %%a in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v TcpMaxHalfOpenRetried') do set TcpMaxHalfOpenRetried=%%a
set TcpMaxHalfOpenRetried=!TcpMaxHalfOpenRetried: =!
if "!TcpMaxHalfOpenRetried!" NEQ "0x190" (echo Not Pass: [38] TcpMaxHalfOpenRetried is not set correctlyset /a failCount+=1
) else (set /a passCount+=1
):: 39. 检查是否已删除 SNMP 服务的默认 public 团体
reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities" > result.txt 2>&1
if %errorlevel% NEQ 0 (set /a passCount+=1
) else (echo Not Pass: [39] SNMP ValidCommunities is setset /a failCount+=1
):: 40. 检查是否已启用 TCP 最大传输单元 (MTU) 大小自动探测
for /f "tokens=3" %%a in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v EnablePMTUDiscovery') do set EnablePMTUDiscovery=%%a
if "!EnablePMTUDiscovery!" NEQ "0x0" (echo Not Pass: [40] EnablePMTUDiscovery is enabledset /a failCount+=1
) else (set /a passCount+=1
):: 41. 检查 Remote Access Connection Manager 服务状态
sc query "RemoteAccess" | find "STATE" > result.txt
set /p remoteAccessStatus=<result.txt
if /i "!remoteAccessStatus!" NEQ "STOPPED" (echo Not Pass: [41] RemoteAccess service is runningset /a failCount+=1
) else (set /a passCount+=1
):: 42. 检查 Message Queuing 服务状态
sc query "MSMQ" | find "STATE" > result.txt
set /p msmqStatus=<result.txt
if /i "!msmqStatus!" NEQ "STOPPED" (echo Not Pass: [42] MSMQ service is runningset /a failCount+=1
) else (set /a passCount+=1
):: 43. 检查 DHCP Server 服务状态
sc query "DHCPServer" | find "STATE" > result.txt
set /p dhcpServerStatus=<result.txt
if /i "!dhcpServerStatus!" NEQ "STOPPED" (echo Not Pass: [43] DHCPServer service is runningset /a failCount+=1
) else (set /a passCount+=1
):: 44. 检查 DHCP Client 服务状态
sc query "Dhcp" | find "STATE" > result.txt
set /p dhcpClientStatus=<result.txt
if /i "!dhcpClientStatus!" NEQ "STOPPED" (echo Not Pass: [44] Dhcp service is runningset /a failCount+=1
) else (set /a passCount+=1
):: 45. 检查 Simple Mail Transport Protocol (SMTP) 服务状态
sc query "SMTPSVC" | find "STATE" > result.txt
set /p smtpStatus=<result.txt
if /i "!smtpStatus!" NEQ "STOPPED" (echo Not Pass: [45] SMTPSVC service is runningset /a failCount+=1
) else (set /a passCount+=1
):: 46. 检查 Windows Internet Name Service (WINS) 服务状态
sc query "WINS" | find "STATE" > result.txt
set /p winsStatus=<result.txt
if /i "!winsStatus!" NEQ "STOPPED" (echo Not Pass: [46] WINS service is runningset /a failCount+=1
) else (set /a passCount+=1
):: 47. 检查 Simple TCP/IP Services 服务状态
sc query "SimpleTCP" | find "STATE" > result.txt
set /p simpleTcpStatus=<result.txt
if /i "!simpleTcpStatus!" NEQ "STOPPED" (echo Not Pass: [47] SimpleTCP service is runningset /a failCount+=1
) else (set /a passCount+=1
):: 48. 检查 Windows 自动登录设置
reg query "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon > result.txt 2>&1
if %errorlevel% NEQ 0 (set /a passCount+=1
) else (for /f "tokens=3" %%a in ('reg query "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon') do (if "%%a" NEQ "0x0" (echo Not Pass: [48] AutoAdminLogon is enabledset /a failCount+=1) else (set /a passCount+=1))
):: 49. 检查是否已安装青藤云主机安全 agent
tasklist | findstr TitanAgent.exe > result.txt
if not exist result.txt (echo Not Pass: [49] TitanAgent is not installedset /a failCount+=1
) else (set /a passCount+=1
):: 50. 检查共享文件夹的共享权限
sc query "server" | find "RUNNING" >nul
if errorlevel 1 (REM 如果服务没有运行,算作符合条件set /a passCount+=1
) else (REM 如果服务在运行,检查共享文件夹for /f "tokens=1" %%a in ('net share') do (set "shareName=%%a"if not "!shareName!"=="" (echo Checking share: !shareName!set "foundEveryone=0"for /f "tokens=*" %%b in ('net share !shareName! ^| find "Everyone"') do (if not "%%b"=="" (echo Not Pass: [50] !shareName! contains "Everyone"set /a failCount+=1set "foundEveryone=1"))if !foundEveryone!==0 (set /a passCount+=1)))
):: 51. 检查所有磁盘分区的文件系统格式
wmic logicaldisk get name, filesystem > result.txtREM 定义一个变量来保存所有文件系统格式
set "filesystems="REM 处理结果文件
for /f "skip=1" %%c in (result.txt) do (if "%%c"=="" (set /a skippedCount+=1) else (set "line=%%c"REM 解析驱动器和文件系统for /f "tokens=1,2" %%d in ("!line!") do (set "filesystem=%%e"REM 添加文件系统到列表if not "!filesystem!"=="" (set "filesystems=!filesystems! !filesystem!")))
)REM 删除多余空格
set "filesystems=!filesystems: =!"REM 检查所有文件系统是否都是 NTFS
set "allNTFS=true"for %%f in (!filesystems!) do (if /i "%%f" neq "NTFS" (set "allNTFS=false")
)REM 判断所有检查是否符合条件
if "!allNTFS!"=="true" (set /a passCount+=1
) else (set /a failCount+=1echo Not Pass: [51] Some drives are not NTFS or empty.
):: 52. 检查是否已对所有驱动器关闭 Windows 自动播放
reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoDriveTypeAutoRun > result.txt 2>&1
if %errorlevel% NEQ 0 (set /a passCount+=1
) else (for /f "tokens=3" %%a in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoDriveTypeAutoRun') do set noDriveTypeAutoRun=%%aif "!noDriveTypeAutoRun!" NEQ "0xff" (echo Not Pass: [52] NoDriveTypeAutoRun is not correctly setset /a failCount+=1) else (set /a passCount+=1)
):: 53. 检查是否已禁用 Windows 硬盘默认共享
for /f "tokens=3" %%a in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v AutoShareServer') do set autoShareServer=%%a
if "!autoShareServer!" NEQ "0x0" (echo Not Pass: [53] AutoShareServer is enabledset /a failCount+=1
) else (set /a passCount+=1
):: 54. 检查服务器在暂停会话前所需的空闲时间量
for /f "tokens=3" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v "autodisconnect"') do set autodisconnect=%%a
if "!autodisconnect!" NEQ "0xf" (echo Not Pass: [54] autodisconnect is not set correctlyset /a failCount+=1
) else (set /a passCount+=1
):: 55. 检查是否正确配置 NTP 时间同步服务器
w32tm /query /configuration | findstr "NtpServer" > result.txt
set /p ntpServer=<result.txt
if /i "!ntpServer!" == "" (echo Not Pass: [55] NtpServer is not configuredset /a failCount+=1
) else (set /a passCount+=1
):: 56. 检查是否正确配置 DNS 服务器
netsh interface ip show config | findstr "DNS" > result.txt
set dnsConfigured=0
for /f "tokens=*" %%h in (result.txt) do (echo %%h | findstr "114.114.114.114" >nul && set dnsConfigured=1echo %%h | findstr "114.114.114.115" >nul && set dnsConfigured=1
)
if !dnsConfigured! == 0 (echo Not Pass: [56] DNS server is not configured correctlyset /a failCount+=1
) else (set /a passCount+=1
):: 57. 检查是否已关闭 IPv6 协议
netsh interface ipv6 show interfaces > result.txt
if !errorlevel! NEQ 0 (echo Not Pass: [57] IPv6 is enabledset /a failCount+=1
) else (set /a passCount+=1
):: 58. 检查是否已开启数据 DEP 功能
bcdedit | find "nx" > result.txt
set /p depStatus=<result.txt
if "!depStatus!" == "" (echo Not Pass: [58] DEP is not enabledset /a failCount+=1
) else (set /a passCount+=1
):: 59. 检查主机名是否已符合主机命名规范
hostname > result.txt
set /p hostname=<result.txt
if /i "!hostname!" NEQ "cn-lotus" (echo Not Pass: [59] Hostname is incorrect: !hostname!set /a failCount+=1
) else (set /a passCount+=1
):: 60. 检查是否已开启 UAC 安全提示
for /f "tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v "EnableLUA"') do set EnableLUA=%%a
if "!EnableLUA!" NEQ "0x1" (echo Not Pass: [60] UAC is not enabledset /a failCount+=1
) else (set /a passCount+=1
):: 输出结果
echo Total checks: !totalChecks!
echo Total passes: !passCount!
echo Total failures: !failCount!
echo Total skippedCount: !skippedCount!del "C:\temp_secpol.cfg" /q
del "C:\secpol.cfg" /q
del "C:\result.txt" /qendlocal
pause

执行示例:
在这里插入图片描述

相关文章:

Windows基线自动化检查脚本

本批处理脚本的主要目的是对Windows系统进行安全性检查。检查了多个安全参数和设置&#xff0c;以确保系统符合特定的安全标准。当然也可能有些检查项不是很准确&#xff0c;需要根据实际环境再调试一下&#xff0c;以下是该脚本的详细描述和功能分析&#xff1a; 1. 脚本初始…...

离谱的梯形滤波器——增加过渡点

增加过渡点 频率采样法&#xff08;Frequency Sampling Method&#xff09;是一种设计FIR滤波器的方法&#xff0c;通过在频域中指定希望的频率响应&#xff0c;然后利用逆离散傅里叶变换&#xff08;IDFT&#xff09;来获得滤波器的脉冲响应。然而&#xff0c;这种方法容易导…...

tauri下的两个常用rust web框架:Leptos和Trunk

tauri下有两个常用rust web框架&#xff0c;就是Leptos和Trunk Leptos Leptos 是一个基于 Rust 的 Web 框架。您可以在他们的官方网站上了解更多关于 Leptos 的信息。本指南适用于 Leptos 的 0.6 版本。 Leptos Leptos 是一个用 Rust 编写的现代、高效且安全的 Web 框架。它…...

pubmed关键词搜索技能1:待更新

1&#xff0c;白话变为领域内学术词&#xff1a; 例如&#xff0c;我想要做蛋白质糖基化修饰以功能&#xff0c;这个领域课题&#xff0c;则 第一性原理&#xff0c;首先是拆分词汇&#xff1a;糖基化&#xff08;一般比蛋白质、修饰、功能要在title中更常见&#xff0c;或者是…...

【技巧】Mac上如何显示键盘和鼠标操作

在制作视频教程时&#xff0c;将键盘和鼠标的操作在屏幕上显示出来&#xff0c;会帮助观众更容易地理解。 推荐Mac上两款开源的小软件。 1. KeyCastr 这款工具从2009年至今一直在更新中。 https://github.com/keycastr/keycastr 安装的话&#xff0c;可以从Github上下载最…...

ISO26262-(Timing Monitoring)在多核MCU的TPU上功能安全ASILB与ASILD有什么区别

在多核微控制器(MCU)的时间保护方面,针对功能安全ASIL B与ASILD等级的设计和实施存在显著差异,这些差异主要体现在系统对时间关键性操作的保障程度、故障检测能力、以及系统响应的严格性上。 ASIL B 级别: 时间关键性:在ASIL B等级,系统设计注重于识别并处理大部分可能…...

图像处理插件:让小程序焕发视觉新生的秘密武器

在小程序开发中&#xff0c;图像处理是一个重要的环节&#xff0c;它涉及到图片的加载、显示、裁剪、压缩等多个方面。为了简化这一复杂过程&#xff0c;开发者通常会使用图像处理插件。这些插件不仅提供了丰富的图像处理功能&#xff0c;还封装了底层的图像操作逻辑&#xff0…...

项目代码第2讲:从0实现LoginController.cs,UsersController.cs、User相关的后端接口对应的前端界面

一、User 1、使用数据注解设置主键和外键 设置主键&#xff1a;在User类的U_uid属性上使用[Key]注解。 设置外键&#xff1a;在Order类中&#xff0c;创建一个表示外键的属性&#xff08;例如UserU_uid&#xff09;&#xff0c;并使用[ForeignKey]注解指定它引用User类的哪个…...

【linux 查看网卡设备信息命令记录】

查看设备信息命令 查看网卡芯片相关platform类型网卡(gmac网卡为例)PCI网卡(rtl8125为例) 查看网卡芯片相关 platform类型网卡(gmac网卡为例) gmac 属于CPU资源的一部分&#xff0c;属于平台设备。下面以FT2004 的CPU为例&#xff0c;自带GMAC0和GMAC1。 1、通过平台设备查看…...

springboot事务手动回滚报错

捕捉异常之后手动标记回滚事务 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); 没有嵌套事务&#xff0c;还是报Transaction rolled back because it has been marked as rollback-only异常错误 查看错误堆栈&#xff0c;service调用的方法外层还套…...

SQL 算术运算符:加法、减法、乘法、除法和取模的用法

什么是存储过程&#xff1f; 存储过程是一段预先编写好的 SQL 代码&#xff0c;可以保存在数据库中以供反复使用。它允许将一系列 SQL 语句组合成一个逻辑单元&#xff0c;并为其分配一个名称&#xff0c;以便在需要时调用执行。存储过程可以接受参数&#xff0c;使其更加灵活…...

C#是Unity 3D的默认语言,Unity 3D是一种领先的游戏引擎

C#或C-Sharp是一种比C更现代和灵活的编程语言&#xff0c;它也在游戏开发中广受欢迎。C#是Unity 3D的默认语言&#xff0c;Unity 3D是一种领先的游戏引擎&#xff0c;它为各种游戏提供动力&#xff0c;例如《口袋妖怪围棋》、《超级马里奥跑》和《神庙跑》。 Unity 3D也在虚拟…...

[创业之路-173]:《BLM战略规划》- 战略洞察 (战略能力中最最核心的能力) - 市场洞察 -3- 看竞争对手-要比你的竞争对手跟了解他们自己

目录 一、五看三定 二、看竞争 2.1 概述 1、分析竞争对手 2、进行价值链分析 3、紧盯标杆对手 4、关注新进入者和替代产品 5、制定竞争策略 2.2 看竞争的主要内容&#xff1a;背景信息、战略、价值定位、价值链、价值交付、组织架构、财务绩效 1、背景信息 2、战略 …...

Spark实训

实训目的: 介绍本实训的基本内容,描述知识目标、,以及本实训的预期效果等。 1、知识目标 (1)了解spark概念、基础知识、spark处理的全周期,了解spark技术是新时代对人才的新要求。 (2)掌握Linux、hadoop、spark、hive集群环境的搭建、HDFS分布文件系统的基础知识与应用…...

Linux之信号集基础

目录 前言一、信号集基础API浅析1.1 sigemptyset1.2 sigfillset1.3 sigaddset1.4 sigdelset1.5 signismember1.6 sigprocmask1.7 sigpending1.8 sigwait 二、demo演练2.1 sigismember检查信号2.2 主线程pthread_sigmask阻塞后无法捕捉到特定信号2.3 主线程pthread_sigmask阻塞后…...

unity3d—demo(实现给出图集名字和图片名字生成对应的图片)

目录 实现给出图集名字和图片名字生成对应的图片&#xff1a; 代码示例&#xff1a; dic: 键 是图集名称 值是一个字典 该字典键是图片名称 值是图片&#xff0c;结构如图&#xff1a; 测试代码&#xff1a; 结果&#xff1a; SpriteRenderer 讲解&#xff1a; Resour…...

烟草行业通过Profinet转EthernetIP网关打通数据壁垒

在工业自动化领域&#xff0c;Profinet转Ethernet/IP是两种广泛应用的工业以太网协议。它们各自具有独特的特点和优势&#xff0c;而在实际应用中&#xff0c;经常需要实现这两种协议之间的互通&#xff0c;这时就需要使用到开疆智能Profinet转Ethernet/IP网关KJ-EIP-108。同时…...

2020年国赛高教杯数学建模E题校园供水系统智能管理解题全过程文档及程序

2020年国赛高教杯数学建模 E题 校园供水系统智能管理 原题再现 校园供水系统是校园公用设施的重要组成部分&#xff0c;学校为了保障校园供水系统的正常运行需要投入大量的人力、物力和财力。随着科学技术的发展&#xff0c;校园内已经普遍使用了智能水表&#xff0c;从而可以…...

ip地址显示本地局域网什么意思?ip地址冲突怎么解决

在日常使用网络的过程中&#xff0c;我们可能会遇到IP地址显示“本地局域网”的情况&#xff0c;同时&#xff0c;局域网内IP地址冲突也是一个常见且令人头疼的问题。本文将首先解释IP地址显示本地局域网的含义&#xff0c;随后详细探讨局域网IP地址冲突的解决方法&#xff0c;…...

[软件工程]八.软件演化

8.1什么是软件演化 由于种种不可避免的原因&#xff0c;系统开发完成后的软件需要进行修改来适应变更的需求&#xff0c;我们对软件的修改就叫软件演化。 8.2为什么软件会演化 由于业务的变更或者为了满足用户期待的改变&#xff0c;使得对已有的系统的新需求浮现出来。由于…...

【大数据学习 | 面经】yarn的资源申请和分配的单位-Container

在yarn中&#xff0c;资源的申请和分配是以container为单位进行的&#xff0c;而不是直接以application和task为单位。 每个提交到yarn上的应用程序&#xff08;application&#xff09;都有一个对应的ApplicationMaster&#xff08;AM&#xff09;。这个AM负责与ResourceMana…...

WiFi受限不再愁,电脑无网络快速修复指南

有时在试图连接WiFi时&#xff0c;会发现网络连接受限&#xff0c;或无法正常访问互联网。这种情况不仅影响了工作效率&#xff0c;还可能错过重要的信息。那么&#xff0c;究竟是什么原因导致了电脑WiFi连接受限呢&#xff1f;又该如何解决这一问题呢&#xff1f;小A今天就来教…...

【组件封装】uniapp vue3 封装一个完整的Tabs(标签页)组件教程,功能由简到杂实现讲解。

文章目录 前言一、简单版Tabs代码实现&#xff1a; 二、下划线带动画的TabsAPI回顾&#xff1a;代码实现&#xff1a; 三、内容区域滑动切换切换动画代码实现&#xff1a;&#xff08;2&#xff09;禁用手势滑动切换&#xff08;3&#xff09;内容区域换为插槽 四、标签栏可滚动…...

TDesign:Picker 选择器

Picker 选择器 API文档地址 单列选择器用法 /// view onTap:(){TDPicker.showMultiPicker(context,data: [controller.coinList],title: ,rightTextStyle: TextStyle(color: AppColors.ColorMain),onConfirm: (selected) {controller.onTapCoin(selected);Navigator.of(contex…...

【AI赋能心理学论文创作策略】第十二章 AI辅助临床启示撰写指南

AI赋能心理学论文创作策略-系列文章目录 第十二章 AI辅助临床启示撰写指南 文章目录 AI赋能心理学论文创作策略-系列文章目录第十二章 AI辅助临床启示撰写指南 前言基础分析框架第一阶段&#xff1a;核心要素分析第二阶段&#xff1a;应用场景展开 关键环节提示第三阶段&#x…...

Pynsist 打包应用 和 PyWebIO 构建Web 应用

Pynsist&#xff1a;一键打包Python 应用代码为Windows 安装程序。 项目地址&#xff1a; https://github.com/takluyver/pynsist PyWebIO&#xff1a;为Python 开发者提供了一种快速、简洁的方式来创建Web 应用&#xff0c;无需学习前端技术 项目地址&#xff1a;https://g…...

git 使用配置

新拿到机器想配置git 获取代码权限&#xff0c;需要的配置方法 1. git 配置用户名和邮箱 git config --global user.name xxxgit config --global user.email xxemail.com 2. 生成ssh key ssh-keygen -t rsa -C "xxemail.com" 3. 获取ssh key cat ~/.ssh/id_rsa.…...

记一次Mysql的SELECT command denied to user...报错(非权限问题)

java.sql.SQLSyntaxErrorException: SELECT command denied to user ‘user_name’‘1.1.1.1’ for table ‘table_name’。错误信息的字面意思是&#xff1a;表“table_name”拒绝用户“user_name”“1.1.1.1”的SELECT命令 。 比较多的情况是&#xff1a;用户没有查看user表…...

element-plus的el-tree的双向绑定

el-tree改造了下 可选可取消 有默认值 不包含父级id 默认展开 点击节点也可触发选择 节点内容自定义 <template>{{ childKeys }}<!--default-checked-keys:默认展开值&#xff08;正常来说需要包含父级id的 但是我们后端不要后端id &#xff09;show-checkbox&#x…...

代码随想录-算法训练营day41(动态规划04:01背包,01背包滚动数组,分割等和子集)

第九章 动态规划part04● 01背包问题&#xff0c;你该了解这些&#xff01; ● 01背包问题&#xff0c;你该了解这些&#xff01; 滚动数组 ● 416. 分割等和子集 正式开始背包问题&#xff0c;背包问题还是挺难的&#xff0c;虽然大家可能看了很多背包问题模板代码&#xf…...