第二次写批处理……Windows的一键安检,最后只返回成功或失败+原因。

PS:

1、这玩意对普通人没啥用,对管理很多服务器的运维同学有用。

2、安检和加固是两码事,安检只管检,不过如果你想顺便加固,应该随便改改这个脚本就可以了,里面提供了加固的思路。

3、这个批处理依赖Sysinternals的两个小工具,以及windows自带的WMIC。

用于检测启动项的autorunsc64.exe: https://docs.microsoft.com/zh-cn/sysinternals/downloads/autoruns

用于检查文件数字签名的sigcheck64.exe: https://docs.microsoft.com/zh-cn/sysinternals/downloads/sigcheck

4、我测试下来支持2008和2012、2012R2,我的都是64位版本,32位版本不清楚……

5、执行完后,文件都拷贝到c:\tool目录,c:\tool\backup中会留下原始记录,便于后续来查看。

6、为什么不用powershell? 因为我不会。

脚本如下:

::查询用户(Administrator是否改名、是否有其他启用的Administrators组用户)
::查询启动项(是否有非系统默认的启动项)
::查询进程(是否有非白名单进程)
::查询防火墙(是否开启,是否屏蔽了某些特殊端口,仅对必要的ip开放)
::查询TCP监听(是否仅监听了必要的端口)
::密码和日志审计策略设置
::--------------------------------------------------------
::input: null
::output: Success|Failed\r\nReason
::--------------------------------------------------------
::有问题请联系http://blog.csdn.net/liv2005,谢谢!::关闭命令回显,执行时不显示每条命令的命令行,@表示本行也不显示
@echo off
if not exist "c:\tool\backup\" (mkdir c:\tool\backup\)
del /f /q c:\tool\securitycheck.lock > nul 2>&1ver | find "5.2" > nul
if %ERRORLEVEL% == 0 goto ver_2003
ver | find "6.1" >nul
if %ERRORLEVEL% == 0 goto ver_2008
ver | find "6.2" > nul
if %ERRORLEVEL% == 0 goto ver_2012
ver | find "6.3" > nul
if %ERRORLEVEL% == 0 goto ver_2012R2
goto warnthenexit::--------------------------------------------------------
::-- Function section starts below here
::--------------------------------------------------------  :echofail
if not exist "c:\tool\securitycheck.lock" (echo Failedecho 1 > c:\tool\securitycheck.lock
)
goto:eof:checksign
::检查文件签名
::call:checksign "c:\windows\system32\notepad.exe" buff
::return: unsigned | microsoft signed
if not exist "c:\tool\sigcheck64.exe" (copy sigcheck64.exe c:\tool\ >nul)set "filepath=%~f1"if not "%filepath%" EQU "" (if exist "%filepath%" (for /f "usebackq tokens=2,4 delims=," %%i in (`c:\tool\sigcheck64.exe /accepteula /c /nobanner "%filepath%" ^| find /i "signed"`) do (if %%i EQU "Signed" (if /i %%j EQU "Microsoft Corporation" (set "%2=microsoft signed"goto:eof)if /i %%j EQU "Microsoft Windows" (set "%2=microsoft signed"goto:eof)if /i %%j EQU "Microsoft" (set "%2=microsoft signed"goto:eof)) else (set "%2=unsigned"goto:eof))) else ( set "%2=file not exist" ))
goto:eof:checkuser
::查询用户(Administrator是否改名、Guest是否禁用、是否有其他启用的Administrators组用户)
setlocal enabledelayedexpansion
set flag=0
::因为wmic输出的是unicode格式,其他命令输出ASCII的,两个放一块就乱码了。
wmic useraccount list full | more >> c:\tool\backup\backup.log
for /f "tokens=1 delims= " %%i in ('wmic useraccount list status^|find "OK"') do (set domainusername=%%iset username=!domainusername:*\=!::echo !username!if /i "!username!" EQU "administrator" (call:echofailecho you should rename administrator exit /b 1)if /i "!username!" EQU "guest" (call:echofailecho you should deny guestexit /b 1)for /f "usebackq tokens=1 delims= " %%a in (`net user !username!^|find /i "Administrator"`) do (if "%%a" NEQ "" (set flag=!flag!+1))
)
if !flag! GTR 1 (call:echofailecho not only one adminexit /b 1
)
setlocal disabledelayedexpansion
goto:eof:checkstartup
::查询启动项(是否有非系统默认的启动项)
setlocal enabledelayedexpansion
set flag=0
if not exist "c:\tool\autorunsc64.exe" (copy autorunsc64.exe c:\tool\ >nul)
c:\tool\autorunsc64.exe /accepteula /m /s /nobanner | more>> c:\tool\backup\backup.log
for /f "tokens=10 delims=," %%i in ('c:\tool\autorunsc64.exe /accepteula /m /s /nobanner /c^| find /i "exe" ^| find /v "winvnc.exe" ^| find /v "rdpclip.exe"^| find /v "WinMail.exe" ^|find /v "AlternateShell"') do (if "%%i" GTR "" (if !flag! EQU 0 (set /A flag=1call:echofail)echo startup NOT in whitelist: %%i)
)
if !flag! EQU 1 (exit /b 1
)
setlocal disabledelayedexpansion
goto:eof:ProcessWhiteList
::保存进程白名单,并且与传入的进程名进行对比,增加需要修改list[]和list_length
set list[0]=c:\SSHD\bin\cygrunsrv.exe
set list[1]=C:\SSHD\sbin\sshd.exe
set list[2]=C:\Program Files\GCloud\gcloudagent.exe
set list_length=3set list_index=0
:loopstart
if !list_index! EQU !list_length! (::循环匹配白名单结束,检查签名开始set buff=call:checksign "%~f1" buffif "!buff!" EQU "microsoft signed" (set buff=goto:eof)::签名也不是微软的,报错吧set buff=process NOT in whitelist: "%~f1"set /A list_index=0goto:eof
)
for /f "usebackq tokens=2 delims==" %%a in (`set list[!list_index!]`) do (if /i "%~f1" == "%%~fa" (::echo process in whitelist: "%~f1"set buff=set /A list_index=0goto:eof )
)
set /A list_index=!list_index!+1
goto:loopstart:checkprocess
::查询进程(是否有非白名单进程)
setlocal enabledelayedexpansion
set flag=0
wmic process get ExecutablePath | more >> c:\tool\backup\backup.log
for /f "usebackq tokens=* delims= " %%i in (`wmic process get ExecutablePath^|findstr -v "ExecutablePath"`) do (set "name=%%i"set "name=!name:~,-1!"if /i not "!name!" == "" (set "name=%%~fi"call :ProcessWhiteList "!name!"if not "!buff!" == "" (if !flag! EQU 0 (set /A flag=1call:echofail)echo !buff!set buff=))
)
if !flag! EQU 1 (exit /b 1
)
setlocal disabledelayedexpansion
goto:eof:checkfirewall
::查询防火墙(是否开启,某些端口是否做了IP限制)
setlocal enabledelayedexpansion
set flag=0
netsh advfirewall firewall show rule name=all dir=in type=dynamic status=enabled >> c:\tool\backup\backup.log
for /f "usebackq tokens=1,2 delims= " %%i in (`netsh advfirewall show currentprofile ^| findstr "状态.*启用"`) do (::英文系统会有问题if not "%%j"=="启用" (set /A flag=1           )
)
for /f "usebackq tokens=1,2,3 delims= " %%i in (`netsh advfirewall firewall show rule name^=all dir^=in type^=dynamic status^=enabled ^| findstr "IP"`) do (::批处理的坑是如果findstr没找到内容,是不执行for循环内的代码的echo %%k  | findstr "8.8.8.8 !!!这里换成你的公司出口ip!!!" >nul && set "a=yes" || set "a=no"if "!a!" EQU "yes" (set /A flag=2         )
)
if !flag! EQU 1 (call:echofailecho firewall is offexit /b 1
)
if !flag! EQU 0 (call:echofailecho firewall config errorexit /b 1
)
setlocal disabledelayedexpansion
goto:eof:PortWhiteList
set "portwhitelist=135 445 3389 47001 end"
set tmp=!portwhitelist!
:tcploop
::循环匹配白名单
for /f "tokens=1,*" %%m in ("!tmp!") do (if "%%m" EQU "%~1" (set buff=goto:eof) set tmp=%%n
)
if not "!tmp!" EQU "end" goto tcploop
::动态或私有端口:49152to65535或1025to103X只能checksign,微软的签名就不管,不是微软签名的就报出来
set "pid=%2"
for /f "usebackq tokens=*" %%a in (`wmic process where processid^=!pid! get ExecutablePath /value`) do (set "line=%%a"set "line=!line:~,-1!"if "!line!" GTR "" ((echo !line!|findstr -i "ExecutablePath">nul)&&(set "filepath=!line:~15!")if "!filepath!" GTR "" (set buff=call:checksign !filepath! buffif "!buff!" EQU "microsoft signed" (set buff=goto:eof)))
)
set buff=port NOT in whitelist: %~1
goto:eof:checktcp
::查询TCP监听(是否仅监听了必要的端口)
setlocal enabledelayedexpansion
set flag=0
netstat -ano | find "LISTEN" | find "0.0.0.0" | find /v "127.0.0.1" >> c:\tool\backup\backup.log
for /f "usebackq tokens=2,5 delims= " %%i in (`netstat -ano ^| find "LISTEN" ^| find "0.0.0.0" ^| find /v "127.0.0.1"`) do (set "port=%%i"       set "port=!port:*:=!"set "pid=%%j"call :PortWhiteList !port! !pid!if not "!buff!" == "" (if !flag! EQU 0 (set /A flag=1call:echofail)echo !buff!set buff=)
)
if !flag! EQU 1 (exit /b 1
)
setlocal disabledelayedexpansion
goto:eof:secedit
::密码和日志审计策略设置
setlocal enabledelayedexpansion
reg add HKLM\System\CurrentControlSet\Services\Tcpip\Parameters /v MaxUserPort /t REG_DWORD /d 65534 /f >nul
if not exist "c:\tool\celue.inf" (copy celue.inf c:\tool\ >nul)
secedit /configure /db c:\tool\celue.sdb /CFG c:\tool\celue.inf >nul
setlocal disabledelayedexpansion
goto:eof::--------------------------------------------------------
::-- System section starts below here
::--------------------------------------------------------  :ver_2012
::Run Windows Server 2012 specific commands here.
::echo 2012
set flag=0
::buff全局变量 用来接收各种函数的返回值
set buff=call:checkuser
if %ERRORLEVEL% GTR 0 (set /A flag=%flag%+1)
call:checkstartup
if %ERRORLEVEL% GTR 0 (set /A flag=%flag%+1)
call:checkprocess
if %ERRORLEVEL% GTR 0 (set /A flag=%flag%+1)
call:checkfirewall
if %ERRORLEVEL% GTR 0 (set /A flag=%flag%+1)
call:checktcp
if %ERRORLEVEL% GTR 0 (set /A flag=%flag%+1)
call:secedit
if %ERRORLEVEL% GTR 0 (set /A flag=%flag%+1)if %flag% GTR 0 goto exit
goto succ:ver_2012R2
::Run Windows Server 2012 R2 specific commands here.
goto:ver_2012
echo Failed
echo Win2012R2
goto exit:ver_2008
::Run Windows Server 2008 specific commands here.
goto:ver_2012
echo Failed
echo Win2008
goto exit:ver_2003
::Run Windows Server 2003 specific commands here.
echo Failed
echo Win2003
goto exit::--------------------------------------------------------
::-- Bye!
::--------------------------------------------------------
:warnthenexit
echo Failed
echo system unknown
goto exit:succ
echo Success
goto end:exit
del /f /q c:\tool\securitycheck.lock > nul 2>&1
goto end:end

其中,用于加固的chelue.inf我是这么写的,仅供参考:

[version]
signature="$CHICAGO$"
[Event Audit]
AuditSystemEvents = 3
AuditLogonEvents = 3
AuditObjectAccess = 2
AuditPrivilegeUse = 2
AuditPolicyChange = 3
AuditAccountManage = 3
AuditProcessTracking = 0
AuditDSAccess = 2
AuditAccountLogon = 3
[System Access]
PasswordComplexity = 1
MinimumPasswordLength = 12
MaximumPasswordAge = 90

用法:

1、把这四个文件放到任意目录中

2、命令行或者远程调用s.bat,执行结果形如:

好了,发到你的若干台服务器上去,然后集中统计结果吧……

日常用用还可以,对安全有高精尖要求的还是算了.....

Windows安全检查脚本 bat 批处理相关推荐

  1. android批处理脚本,BAT批处理一键生成APK包脚本分享

    BAT批处理一键生成APK包脚本分享 将本bat放到cocos2dx目录下你的工程的project.android下(需修改变量). ASmaker 用来将Resources文件夹下的lua文件批量加 ...

  2. Windows脚本 - Bat批处理命令使用教程

    原文url:  http://www.x5dj.com/Blog/00534041/00389984.shtml 这是一篇技术教程,我会用很简单的文字表达清楚自己的意思,你要你识字就能看懂,就能学到知 ...

  3. windows脚本bat批处理 关闭显示器 关闭显示器脚本bat

    新建记事本 复制下面代码 保存为后缀 .bat 双击打开即可屏幕关闭 powershell (Add-Type '[DllImport(\"user32.dll\")]^publi ...

  4. windows常用脚本bat合集

    1.端口号被占用时 @echo off setlocal enabledelayedexpansion set /p port=请输入端口号: for /f "tokens=1-5" ...

  5. bat延时100ms_Windows命令行bat批处理延迟sleep方法(批处理延时)

    Windows下批处理文件没有像Linux一样的Sleep函数进行延时处理,这里有2种较为实用的方法实现延迟: 1.使用WScirpt的sleep功能,精度0.001秒 创建vbs延迟文件,然后在批处 ...

  6. windows的cmd与bat批处理脚本(batch script)

    目录 序:批处理看这一篇就够了 一.前言 二.使用技巧 1.查看帮助 2.命令的执行 3.变量 4.条件语句 5.循环 6.参数 7.函数(过程调用) 8.调用外部脚本 9.命令执行结果和错误判断 1 ...

  7. windows批处理脚本bat命令解析【6】常用命令整理

    原文地址:点击打开 预定义的变量 下面是些已经被底层定义好可以直接使用的变量:不会出现在 SET 显示的变量列表中 %CD% - 扩展到当前目录字符串. %DATE% - 用跟 DATE 命令同样的格 ...

  8. 【bat批处理脚本命令】2分钟看懂,一键主机windows系统远程连接控制阿里云等windows系统的云服务器(保姆级图文+实现代码)

    目录 1.实现效果 2.实现代码 3.使用代码新建一个bat脚本文件 总结 欢迎关注 『bat批处理脚本命令』 系列,持续更新中 欢迎关注 『bat批处理脚本命令』 系列,持续更新中 本来阿里云服务器 ...

  9. Windows下bat批处理脚本常用场景整理,持续更新中。。。

    Windows下bat批处理脚本常用场景整理,持续更新中... 一.Winodws下使用bat脚本对结果进行筛选 例如:在筛选出来的结果中,筛选是否有"$G"字段 adb shel ...

最新文章

  1. tableau必知必会之使用参数操作在同一视图切换指标
  2. [转] ubuntu 无线网络 配置 virtualbox
  3. oracle之 oracle database vault(数据库保险库)
  4. JAVA SE、EE、ME,JRE、JDK,基本数据类型,访问修饰符、函数、封装的概念、UML类图、构造方法、this关键字、static关键字、方法重载、方法重写、包(packahe)
  5. DHCP租用信息导出方案
  6. FreeEIM通讯软件无论是画面风格还是游戏内容
  7. 【干货】神策数据朱德康:用户中台建设实践解析(附PPT下载链接)
  8. 学习微信小程序之css7
  9. 二叉树的概念和基本术语
  10. 百度文库下载工具(所有源码)
  11. python -- 判断给定的参数是否是地理位置的经度和纬度
  12. mysql +cobar_转:阿里开源Mysql分布式中间件:Cobar
  13. qq农场 html5,登陆qq农场 QQ浏览器怎么登陆QQ农场
  14. mysql等级保护_网络安全等级保护测评-MYSQL篇
  15. angularjs textarea 剩余字数统计
  16. 基于麒麟座开发板2.0的MQTT实现例程
  17. mysql级联更新_Mysql实现级联操作(级联更新、级联删除)(转)
  18. WPS的JS宏设置页边距方法
  19. 《说服力-让你的PPT会说话》9月上海公开课简章
  20. 如何把C盘下用户的中文用户名改成英文用户名

热门文章

  1. Java化小数为分数_杭电oj1717——小数化分数(java实现)
  2. 免费网贷大数据_免费查网贷大数据的app
  3. 如何用电脑控制手机屏幕,写工作日志
  4. 华为内部的关于IC验证的经验总结
  5. win10清理c盘_系统C盘磁盘空间不够用的解决办法
  6. 六轴机器人运动学正解
  7. WeChat Patch 电脑微信多开消息防撤回补丁通用版
  8. Javascript异常(exception)处理机制详解 JS、异常Error属性
  9. ngrok域名申请使用外网访问
  10. 32位操作系统升级为64位步奏