.bat
文件是DOS下的批处理文件。批处理文件是无格式的文本文件,它包含一条或多条命令。它的文件扩展名为.bat
或.cmd
。在命令提示下输入批处理文件的名称,或者双击该批处理文件,系统就会调用cmd.exe
按照该文件中各个命令出现的顺序依次运行它们。使用批处理文件或脚本,可以简化日常或重复性任务。攻击者通常通过批处理文件的编写来实现多工具的组合入侵、自动入侵及结果提取等功能。
1. 批处理病毒机理
1.1 修改密码和定时关机脚本
编写并运行批处理脚本的基本步骤如下:
- 新建文本文档
- 输入批处理命令
- 将扩展名改为
.bat
- 双击批处理文件运行
关机命令为shutdown
,基本命令为:
1 | //现在让系统600s后关机 |
更多有关shutdown
的用法可通过CMD查看。
运用在批处理脚本中,也是一样的。如果需要终止关机需在CMD输入相应命令。
了解了基本的批处理脚本的运行方式后,接下来进行一个比较完整的bat脚本制作过程,这些代码对批处理功能熟悉和脚本病毒逆向分析都有帮助。
新建一个v5le0n9.bat
,程序编写如下所示:
1 | @echo off |
其中“@echo off”表示关闭回显,“color 0a”表示设置颜色。双击文件显示如下:
继续完善代码,可以让用户进行选择,达到交互目的。
1 | @echo off |
“set /p num=您的选择是:”表示设置变量num等待用户输入,其中“/p”表示暂停并等待用户输入,“num=您的选择是:”表示用户在“您的选择是:”后输入的值赋给num。
接下来就是选择选项后要执行的命令:
1 | //修改管理员密码为123456 |
知道这些命令后再将这些命令放入到批处理脚本中。其中“>nul”表示不输出运行提示信息。虽然goto语句不提倡使用,但某些情况还是挺便捷的。
1 | @echo off |
显示拒绝访问,并且重启发现密码没有修改成功,这是因为普通用户没有权限。需要“以管理员身份运行”批处理脚本才能修改成功。
继续完善脚本功能:
- 增加“cls”命令清屏
- 为了避免输入其它数字会从头执行到尾,补充一个提示信息
- 最后补充设置的用户名和新密码,关机时间等
1 | @echo off |
1.2 脚本病毒防御机制
上面主要介绍了批处理脚本实现关机和修改管理员密码的功能,但在真正的网络攻防过程中,脚本病毒和宏病毒更常见,这里分享下它们的防御方法。
脚本病毒主要采用脚本语言设计的计算机病毒。现在流行的脚本病毒大都是利用JavaScript和VBScript脚本语言编写。实际上在早期的系统中,病毒就已经开始利用脚本进行传播和破坏,不过专门的脚本型病毒并不常见。但是在脚本应用无所不在的今天,脚本病毒却成为危害大、传播广的病毒,特别是当它们和一些传统的进行恶性破坏的病毒如CIH相结合时,其危害就更严重了。
随着计算机系统软件技术的发展,新的病毒技术也应运而生,特别是结合脚本技术的病毒更让人防不胜防,比如在APT中鱼叉式钓鱼邮件结合宏病毒(Office文档)就很常见。由于脚本语言的易用性,并且脚本在现有应用系统中特别是Internet应用中占据了重要地位,脚本病毒也成为互联网病毒中最为流行的网络病毒之一。常见脚本文件后缀有:.VBS
、.VBE
、.JS
、.BAT
、.CMD
。
常见的防御措施包括:
- 防范VBS(Visual Basic Script)脚本病毒,比如禁用文件系统对象
regsvr32 scrrun.dll/u
- 在浏览器设置中将ActiveX插件和控件以及JS相关功能禁止掉,这样可以避免一些恶意代码的攻击,不过也会限制一些制作精美的动态网页
- 及时升级系统和浏览器补丁,选择一款好的防病毒软件并做好及时升级
- 防止鱼叉式钓鱼邮件攻击,不要轻易去浏览或点击一些来历不明的网站、邮件、文件,这样大部分的恶意代码都会被我们拒之“机”外
- 小心处理Office文档,除非确认文档来源可靠,充分了解打开文档的后果,否则务必不要开启Office启用宏代码
- 使用云沙箱和本地安全软件对可疑文件进行检测
- 提升安全意识,尤其内部人员的安全意识
2. 自启动恶意攻击机理
当计算机重启后,病毒自启动是一个重要的功能。常用方法包括:
病毒融合Autoruns自启动机制
利用系统自动播放机制
Autorun.inf
比如U盘病毒或光盘病毒就是利用U盘或光盘的自动播放功能。目前,也有一些U盘插入后,不需要双击U盘,里面的程序就会自启动。
在其它可执行文件嵌入少量触发代码
修改引入函数节启动DLL病毒文件(添加相应结构,初始化代码触发),在特定PE文件代码段插入触发代码等(只需定位可执行程序并运行)。
DLL劫持:替换已有DLL文件
很多应用程序或操作系统执行时,都会去执行DLL文件,如果病毒将自身做成一个DLL文件,同时将系统DLL文件替换。可想而知,系统启动时,它是根据文件名启动的,此时病毒DLL文件就会拿到控制权,如果拿到控制权之后再进一步装载原始DLL文件,这样系统的本身机制也不会受影响,隐蔽性更强。该方法非常常见,甚至有一些病毒程序将反病毒软件可依赖的DLL文件替换。
利用0day或1day漏洞实现自启动
2.1 BAT脚本实现自启动
现在尝试编写一个伪装成“系统垃圾清理”的程序,它其实是一个导致系统死机的程序,其原理是不断打开CMD程序,占用系统资源从而导致死机,并且每次开机都会自启动。
创建批处理文件clean.bat
,“::”表示注释,“>”表示清空重写,“>>”表示追加命令到文件末尾,“%0”表示再次执行该程序。
1 | ::每次运行clean.bat都重写自身,写入命令start cmd |
如果是命令1与命令3结合,第一次运行到命令1后,clean.bat
被重写,命令3被清掉了,无法实现“不断打开CMD程序”。如果是命令2与命令3结合,第一次运行到命令2后,在文件末尾追加“start cmd”命令并打开CMD窗口,运行到命令3后,在文件末尾追加“C:\Users\Leong\Desktop\clean.bat”命令并打开clean.bat
。此时clean.bat
文件内容如下,但读入内存的旧的clean.bat
已经执行完了。
1 | ::每运行一次clean.bat增加一条start cmd命令 |
因为旧的clean.bat
在执行结束前将新的clean.bat
读入内存,紧接着从头开始运行新的clean.bat
文件,到命令2后,在文件末尾追加“start cmd”命令并打开CMD窗口,运行到命令3后,在文件末尾追加“C:\Users\Leong\Desktop\clean.bat”命令并打开最新的clean.bat
,此时程序更新为:
1 | ::每运行一次clean.bat增加一条start cmd命令 |
但新的clean.bat
还有两条指令没执行完,在打开最新的clean.bat
后继续往下执行。最新的clean.bat
从头开始执行。以此类推,程序不断打开CMD窗口,占用系统资源,导致系统瘫痪。
当然也可以不用那么复杂,直接在批处理脚本中输入以下命令即可实现破坏功能:
1 | start cmd |
以上只能让用户死机一次,重启系统后,用户不再打开这个文件就不会中招。所以为了跳过用户启动的步骤,可以把程序放在自启动中。
errorlevel为预定义变量,随着系统变化而变化。如果为0表示上一条命令执行成功,如果为1表示上一条命令执行失败。
1 | @echo off |
血的教训,最好把路径用引号括起来,否则可能执行不成功。
“以管理员身份运行”,在Win 7中其实普通用户也可以。
检查自启动目录是否创建了批处理脚本,双击它的确能不断打开CMD占用系统资源。
现在重启电脑测试是否能实现自启动。完美!
2.2 WinRAR恶意劫持自启动(CVE-2018-20250)
2.2.1 漏洞描述
WinRAR漏洞(CVE-2018-20250)是Check Point团队于2019年2月爆出的严重安全漏洞,该漏洞已存在于WinRAR中19年,是APT攻击中非常经典的漏洞。它是由于WinRAR使用一个陈旧的UNACEV2.dll
动态链接库造成的。当我们解压任意ACE文件时,由于没有对文件名进行充分过滤,导致其可实现目录穿越,将恶意软件写入操作系统自启动文件夹,导致电脑重启时会自动运行该程序,从而造成恶意软件劫持。
2.2.2 影响范围
该漏洞会对多种压缩软件造成影响,版本如下:
- WinRAR < v5.70 Beta 1
- Bandizip <= v6.2.0.0
- 好压(245压缩) <= v5.9.8.10907
- 360压缩 <= v4.0.0.1170
2.2.3 漏洞复现
2.2.3.1 环境配置
攻击机:Windows 10 家庭版 x64
靶机:Windows 10 教育版 x64
利用工具:https://github.com/backlion/CVE-2018-20250
2.2.3.2 复现准备
在靶机上下载好WinRAR v5.4(提取码:lo3r),安装之后可以看到本地WinRAR目录下的UNACEV2.dll
动态链接库,这个就是被利用的入口。
下载CVE-2018-20250漏洞利用工具。解压出来如下:
README.md
是漏洞利用说明书,告诉我们哪些参数可以修改、如何运行exp以及漏洞被利用的后果hello.txt
和world.txt
是需要压缩的文件calc.exe
是计算器,可以替换成恶意软件,它会被定向植入系统自启动目录exp.py
是运行的Python代码,它会将hello.txt
和world.txt
压缩,并隐藏恶意软件acefile.py
是利用UNACEV2.dll
漏洞的代码,共4000多行
2.2.3.3 复现过程
如果想要修改恶意文件、压缩文件名称、放在启动目录的文件名称等等,可以通过编辑exp.py
实现。
1 | ... |
运行exp.py
,将生成的test.rar
发送到靶机中。
笑死,被发现了。为了实验,将它从隔离区拿出来。
查看压缩包发现里面不仅有hello.txt
和world.txt
,还有一个本地磁盘路径,点进去发现就是在自启动目录下放置的hi.exe
。(这真的太明显了吧!!)
注意:当用户解压文件时,其解压目录必须是C:\Users\当前用户
目录下。
当用户解压完后,会在自启动目录生成一个hi.exe
,也就是calc.exe
。在系统重启后会自动打开calc.exe
。
2.3 恶意自启动防御
自启动防御可以看熊猫烧香病毒的行为机理分析 3.2 检查启动项,在WinRAR恶意劫持自启动漏洞中,可通过删除自启动目录下的恶意软件实现防御。
3. 进程关闭脚本
继续编写一个伪装成“系统垃圾清理”的程序,它其实是一个进程关闭程序,试着关闭桌面进程。
1 | @echo off |
运行该批处理程序,桌面会消失,过一会儿桌面又会恢复。
4. 蓝屏攻击机理
蓝屏死机称为BSOD(Blue Screen of Death),也是常见的攻击行为,尤其是某些CVE漏洞复现过程,在进行提权尝试前都会先实现蓝屏攻击功能,危害极大。
4.1 批处理脚本实现蓝屏攻击
实现蓝屏的命令:
1 | ntsd -c q -pn winlogon.exe |
ntsd是一个用户态进程调试工具,从Windows 2000就开始被附随在System32目录下。它能够结束除System
、smss.exe
、csrss.exe
、lsass.exe
及各种rootkit
程序外所有的程序。但在Windows Vista(06年发布)及以上版本的Windows中不含ntsd,必须手动下载至电脑中才可使用。
为了方便,直接使用Windows 2003实验。制作成批处理脚本或直接在CMD窗口输入命令,主机直接蓝屏并重启。(重启太快了没有蓝屏截图)
Windows Logon Process(即winlogon.exe
),是Windows NT 用户登录程序,用于管理用户登录和退出。该进程的正常路径应是C:\Windows\System32
,且是以 SYSTEM 用户运行。
4.2 ntsd命令常用参数
-c “
4.3 结束进程的几种方法
1 | //利用进程的PID结束进程 |
5. 简单的扩展名修改恶意攻击
将文件格式修改或文档加密都是常见的病毒,比如永恒之蓝、勒索病毒等,它们就是将电脑内的所有资料、文档加密。当用户打开文件时需要密码,此时通过比特币付费进行勒索。
编写批处理脚本,当遇到可执行的EXE文件认为它是一个TXT文档,系统默认用记事本打开导致可执行文件运行不起来。
1 | assoc.exe=txtfile |
“以管理员身份运行”,EXE文件被当作TXT文件打开。
其它格式文件转换为TXT文件如下所示:
1 | assoc .htm=txtfile |
此时,如果用户隐藏文件扩展名,甚至可以修改图标伪装成目标应用,当用户点击时会执行这些破坏。但由于不知道目标是否有隐藏扩展名,还是不建议这种“笨”方法。