当前位置: 首页 > 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;使得对已有的系统的新需求浮现出来。由于…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...