魔兽世界中招:一条命令行就能劫持你的游戏!
最近出现了一种涉及社工技术的新型游戏攻击骗局,攻击者利用了魔兽世界(World of Warcraft,WoW)游戏插件中一个隐藏的功能。
新型攻击
想象一下这种场景:游戏中一个貌似某知名公会的角色成员,接近你在游戏中的角色,和你套近乎,并声称要和你分享一些很酷的东西,如稀有坐骑、武器等。但最终结果可能是,骗子根本没有这些东西和兑换码,当然,你也会落得两手空空。
陷阱
攻击者说服玩家在聊天窗口中输入一条命令行:
/run RemoveExtraSpaces=RunScript
WoW的客户端界面(动作切换条,聊天窗口,其它图形化的2D模式元素)和插件(图像增强工具)都是用Lua脚本语言编写的。以上命令行中涉及的RemoveExtraSpaces和RunScript都是WoW Lua API的合法函数,这条命令行一旦被执行,WoW界面的操作将被改变,被攻击者劫持。
这条命令实际上是干啥的?
/run 是解释执行Lua脚本命令
为什么这会是个威胁?
当游戏玩家接收到一个新的聊天信息之后,函数RemoveExtraSpaces就会被调用,而上面所提到的那条命令功能是用RunScript函数代替RemoveExtraSpaces函数,这种替换动作,就类似于软件开发中的钩子程序。
结果就是,玩家收到的聊天信息将被当做 Lua 代码命令执行,这就是所谓的“界面劫持”。
骗子攻击者会说这段代码是某个绝版坐骑的兑换码,一些大意的玩家在被“说服”、“蛊惑“甚至是引诱下运行上述命令行之后,就陷入了骗局当中。
攻击者此时就可以远程控制玩家的聊天界面,通过让玩家迷惑的Lua代码执行界面,隐藏执行其恶意操作,效果就像利用远程木马控制受害者电脑一样。以下就是我们的Test测试实例,但是真实骗局中,执行代码是会比Test更具危害性的命令。
图:执行命令行
图:攻击者向受害玩家发送消息
图:聊天消息通过Lua编程语言解释执行
短暂持久性和隐藏代码
受害者玩家执行上述命令行后,聊天系统不管用了,别人发来的信息都会变为Lua代码报错界面显示,但只要玩家重启游戏,前述的劫持功能就会失效。
所以,骗子攻击者接着发送下面这段代码命令给玩家,实现远程重启玩家聊天程序,让其恢复正常聊天功能。之后,攻击者再以隐蔽方式继续执行“更具危害性的代码”。
图:攻击者远程发送代码重启受害者聊天程序
功能说明
以上命令行和代码能实现的原因,就是因为WOW插件”CHAT_MSG_ADDON“事件功能内置了一种隐藏通信接口(或插件通信接口),该通信接口可以在本地和远程使用。攻击者利用该接口发送给受害者的信息,不会在聊天窗口显示,只会在其后台执行。
更具危害性的代码
以下就是攻击者实现完全控制受害者玩家游戏界面的完整代码样例。脚本第2行创建了一个可设置不同属性的frame,脚本通过向事件功能CHAT_MSG_ADDON注册了一个特定的命名空间前缀 (第6行和第25行)。
图:实现完全劫持受害者玩家游戏界面的代码样例
就这样,攻击者可以把所有代码发送到对方的聊天客户端里,由于利用了CHAT_MSG_ADDON隐藏通信功能,代码命令默认在后台执行,不会显示。最终实现无声无息完全劫持玩家游戏界面。
影响
由于WOW中可以彼此进行物品交易,如果攻击者实现完全控制受害者玩家的游戏界面之后,就可以查看并靠近对方在虚拟地图中的准确位置,通过远程启动和控制对方的交易窗口,输入交易物品或金额,点击”接受交易“,真正实现对玩家的“抢劫”。
攻击者控制了受害者玩家之后,向其它熟悉玩家发送具有说服力的恶意信息,可以实现控制更多游戏角色。看吧,就是这么简单而有效的脚本,就可能让你在游戏中一无所有。
暴雪发布在线修正版本
近期,暴雪游戏运营商针对该Bug推出了一个修正版本,新版本在命令行中输入以 /run 或其他字段开头的脚本命令,会弹出一个询问对话框,提示玩家正在使用自定义脚本,可能会导致游戏金币损失,是否继续执行。
图:修正版本的聊天窗口命令执行情况
如何保护自己
1、删除以下文件代码段:
删除字段:SET AllowDangerousScripts "1"
2、不要在聊天窗口中运行脚本命令,尤其是以 /run 开头的脚本命令;
3、看清与你交流或交易的游戏角色名称,小心被钓鱼攻击;
4、下载第三方插件时请小心,2014年时WoW就曾出现过“ElvUI Backdoor”事件,请尽量使用暴雪自带插件。
视频:模拟场景
模拟引诱受害者玩家执行劫持命令后的效果:http://v.youku.com/v_show/id_XMTY2NTU1NTkwMA==.html
劫持代码
wowhijackcode (提取码:e7f0)代码仅供研究,请勿非法使用。
*本文译者:clouds,编译来源:Gdata,本文禁止转载
- 不用@微信官方了,Python20行自动戴帽!
- BAT人工智能生态时局图:全面战争爆发前夜
- AI博弈论:DeepMind让智能体在非对称博弈中找纳什均衡
- 斯坦福吴恩达团队公布最大医学影像数据集
- Rokid祝明铭:大腿我们不抱,人机交互产品形态未定 | 变局者
- 腾讯AI让二子,柯洁还是输了
- AI创业者的“英雄联盟”,腾讯AI加速器二期项目招募开启
- PyTorch发布一周年:盘点社区和工程大事件,后来者居上态势已显?
- 2018年AI如何发展?普华永道做出了8点预测 | 报告下载
- 不正之风!机器学习论文里都有哪四大投机取巧的写作手法?
- 前端写一个月的原生 Android 是怎样一种体验?
- 给人挖矿还不自知 电脑已变黑客肉鸡
- 反序列化漏洞屡被黑客利用,危害巨大,代码怎样写才安全?
- Mifa 主题微信编辑器
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- ubuntu中python调用C/C++办法之动态链接库详解
- linux中使用boost.python调用c++动态库的办法
- 在Linux系统下上传项目到码云的办法
- PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】 原创
- Linux(Ubuntu 18.04)上安装Anaconda步骤详解
- php web环境和命令行环境下查找php.ini的位置
- PHP大文件分块上传功能实例详解
- Linux 命令行通配符及转义符的实现
- Python爬虫抓取指定网页图片代码实例
- PHP变量作用域(全局变量&局部变量)&global&static关键字用法实例分析
- CentOS 7 安装Chrome浏览器的方法
- PHP高级编程之消息队列原理与实现方法详解
- thinkphp5.1框架模板布局与模板继承用法分析
- Linux内核设备驱动之内存管理笔记整理
- Matplotlib 绘制饼图解决文字重叠的方法