只要你在电脑上玩过游戏,那你或多或少都听过甚至遇到过游戏中的“战神”——即那些开挂的恶劣用户,他们不仅让游戏失去公平,影响了他人的游戏体验,还使游戏本身失去了乐趣。既然外挂破坏了游戏生态,Windows系统是怎样防止外挂的呢?
一、前言
由于Windows操作系统进程间相对开放,不具有类似移动平台的进程沙箱隔离机制,因此无论是外挂的种类、实现方式,还是打击外挂的手段,都会相对复杂一些。细化地说,像一些常见的杀毒软件、输入法、直播推流软件均存在对外部进程的访问、数据读取甚至是内存修改的行为,若是强行将所有Hook、内存修改等行为都视作是恶意行为进行拦截,势必造成大量误报。
早期的一些原始的反外挂手段,大抵用一些文件哈希特征、内存特征甚至截图的形式,去命中运行中的外挂程序,进而达到对抗的目的。值得注意的是,此类特征不具有普遍性,要用这种方式来打击外挂,往往会陷入被外挂开发者牵着鼻子走的境地。
而从软件分析的角度来看,反外挂系统的误报和漏报难以避免:为了对抗到尽可能多的攻击者,减少漏报,势必要覆盖绝大部分的检测场景,继而衍生出误报。
针对这个痛点,易盾端游反外挂技术NEProtect(下文简称NEP)结合多年外挂对抗经验,产出一套基于数据分析的对抗方法,从多维度监控可疑数据,减少漏报,并结合数据分析,在实施打击前减少误报。本文将围绕这部分内容展开介绍。
二、可疑数据采集
在进行数据对抗之前,相关数据的采集必不可少,NEP针对不同类型的外挂,从不同维度获取对抗需要的信息。这里列举了相对典型的几个点做简单介绍。
01.数据修改
文件修改
部分游戏可能会将部分数据以文件的形式保存或加载,这种情况下文件就很可能成为外挂制作者的突破口,因此有必要对重要文件的状态进行监控。
NEP可以指定保护某个文件不被篡改,若最终文件还是发生了篡改或存在来自外部企图篡改文件内容的行为,则记录可疑
内存修改
修改器类型的外挂,会使用注入、Hook、找偏移、改数据、改指令等手段来实现作弊效果,因此对于游戏内部的数据和指令都要进行保护。
·对游戏相关模块中的代码段做实时监控,做分块完整性校验,若检测到存在变化,记录可疑
·对系统关键API做监控,若API存在被Hook等篡改行为,记录可疑
·监控是否有恶意的外部进程访问了游戏进程,以及是否存在内存读写等行为
·在内存中插桩,若“桩”被访问,则记录可疑
02.代码注入
代码注入一定程度上和内存修改有一定的共性,但行为上可能略有不同,攻击者可以构造一个特定的环境,让系统去加载某一个模块或者一段二进制流,因此要增加一些额外的检测方式来命中这种行为。
·远程线程注入( CreateRemoteThread、APC、 SetThreadContext 等)
·Windows消息Hook
·DLL劫持
·子类化( SetWindowLongPtr等)
·异常处理
·反射注入
·内核回调
03.加速器
加速器,指的是通过一些手段使游戏整体运行速度加快的作弊方式。
·若系统关键时间相关API被篡改或Hook,记录可疑
·通过不同方式获取时间,若存在差异,记录可疑
·监控部分游戏引擎的时间接口,若存在篡改,记录可疑
·通过未公开的方式获取底层时间,记录心跳,若存在异常,记录可疑
04.同步器
同步器常被用于打金工作室等恶意环境,即可以通过单一人工或者结合某些挂机脚本实现同时操作大批量账号,进而影响游戏的经济体系和公平性。
同步器又可以分为软件同步器(多窗口同步器)和硬件同步器(外部设备,一套键鼠控制多台电脑)两种,这里的监控项如下
·判断点击事件的来源是否可信
·是否存在恶意的外部访问
·是否存在来自硬件的键鼠消息
·硬件设备信息是否合乎规范
05.多开器
如果说同步器是为了降低恶意“打金刷怪”的人力成本,那多开器对于工作室来说,就是进一步降低了设备成本。NEP的对抗方案中,可以指定多开的数量
·通过底层方法获取进程数,判断是否超出限制以进行拦截,并记录可疑
·通过不同的进程间通信方式判断进程数是否超出限制以进行拦截,并记录可疑
06.模拟点击
模拟点击常被应用于挂机脚本中,虽然对于游戏本身的危害性不像修改器、加速器等那么大,但对于正常玩家来说也是一种不公平的行为,且挂机脚本在黑灰产工作室手中可以进一步降低游戏行为的成本。因此对这类外挂无疑也需要针对性打击。
·常见模拟点击依赖环境的鉴别,如大漠插件、乐玩插件、TS插件、OP插件等
·常见模拟点击外挂制作语言特征的鉴别,如易语言、TC脚本等
·判断点击事件的来源是否可信
·若判定为高度可疑,记录相关的点击数据,进而建立针对某一点击脚本的外挂点击数据模型
三、可疑数据分析
从可疑数据采集这一部分,可以看出不同外挂类型之间是可以进行组合的。组合后的恶意场景对游戏方和正常玩家来说所带来的影响更大,因此NEP设计了一种威胁等级模型,用于区分恶意数据的权重。
01.据链路
可疑数据的上报链路参考下图,下文会对数据链路做进一步的阐述。
02.威胁等级判定
所谓威胁等级模型,大的来说,就是从上报的可疑数据中自动分析出有价值的数据,结合已有的外挂样本模型,设立多级阈值,分析这些数据是否和一个真实的外挂样本强相关。
而要实现自动化判断威胁等级,这里就需要训练一个威胁模型,模型的数据来源分为两部分:特征与数据规则。其中特征指定是已知外挂库中的所有特征,数据规则指的是后台根据可疑数据提取威胁等级的判定规则。
例如威胁等级简单分为3级,最高级为确认外挂,判定后可自动提取新的特征和数据规则,并更新模型;
次一级为高度疑似,虽然没有归类到确认外挂,但是外挂的可能性较高,需要进一步排查,若人工排查后发现是确认的外挂行为,后续流程和确认外挂一致;
最后是低概率样本,比如输入法、投屏软件、杀毒软件等数据。
03.人工审核
判定过程中的人工审核流程分为两部分,首先是对自动提取出的新外挂特征进行确认,进一步减少误报;
其次是对未能提取出外挂特征,但可疑程度较高的数据做一次筛查,提取出其中存在的外挂行为,并将有关数据提交至分析后台,提高后续自动化的准确率。
四、结语
本文总结了易盾在Windows端游反外挂中用到的一些对抗思路,经线上数据验证,可以用较低的成本带来较好的对抗效果。