无干预木马

简介

通过向计算机植入一个 state of the art 的、运行在 Ring 0 级别、拥有最高权限的木马病毒,直接与计算机硬件交互,读取缓冲区中 BitBlt 信息再还原成屏幕图像。由于利用 Windows 系统的 0-day 漏洞,木马程序享有 Kernel 权限,即可做到整个过程无进程、无后台、无上下行网络流量变化、无应用层 TCP/UDP 数据包收发。所以无论是系统自带的“资源管理器”或任何第三方的监管程序,皆无法收集到任何有关此木马的信息。

详解

想要从软件层面解决考试软件的封锁,技术路线不下五种。

有些技术如同电子推土机般在系统内留下大量痕迹;有些技术强行篡改或阻止考试软件某些组件的运行;有些技术笨拙的、如同鸵鸟一般将头埋进土里假装隐藏自己。

所幸,以上技术方案 ELPIS 皆不采用。

本文会从科普的角度解释“市面上的方案”与“ELPIS 的方案”之间的区别,从而让您在补足背景知识的情况下,更能理解我们的技术路线,从而更客观的评估风险。

科普:如何发现并阻止远程软件?

以 ETS 为例,其旗下的考试软件 Secure Browser 客户端使用三种技术去识别和阻止在考试期间内运行的远程软件。

对于其他在线考试提供商,如 Promtric、Talview、Examity 等,检查方式皆有不同。但主体的思路是相似的。故在这里不做额外分析。

进程黑名单

ETS 会尽量搜集市面上出现的所有大众的、小众的、付费的、免费的远程软件的进程名,并将其添加到黑名单内。在考试开始后,ETS 会时刻的监控系统进程列表。一旦发现黑名单内的进程开始活跃,马上切断考试并上报。以 Windows 系统为例,你可以打开任务管理器查看当前计算机上运行着的所有进程。

任务管理器

无论何种类型的软件,一旦在计算机中运行就必然创建一个或多个对应的进程。而进程都有自己的名字,一般来说进程的名字与软件的名字相同或有强相关性。

向日葵(AweSun)远程软件对应AweSun.exe进程

所以 ETS 只需要识别进程名是否在黑名单内即可判断是否有已知的远程软件正在运行。

当然,ETS 的进程黑名单不是一成不变的,它时刻保持更新。

网络使用情况

远程软件、或有远程功能的屏幕分享软件千千万万,ETS 进程黑名单的更新速度绝不会快过新软件面世的速度。为了阻止一些极其小众的、甚至个人开发的远程软件,Secure Browser 会搜集考试期间内所有进程(软件)使用网络的情况。

通过监控系统中所有进程的上传、下载数据情况以及发包规律,Secure Browser 即可标记出可疑进程。桌面分享软件通常会占用大量上行带宽,用于将考生的屏幕画面一帧一帧的传输到考手端。而这样的流量的特征非常明显,极其容易被识别。

以 Windows 系统举例,你可以打开资源监视器(Resource Monitor)并选择网络(Network)选项卡查看当前所有进程的网络使用情况。

资源管理器(网络)

每个联网进程对应的进程名、PID、上下行流量统计、TCP/UDP链接、端口号都一目了然。

如果在考试中有某个未在黑名单中的联网进程正在运行,但是:

  • 它与一个不属于 ETS 的 IP地址有长时间的连接记录
  • 它与一个已知是恶意的 IP地址有连接记录
  • 它的数据上传量较高,并伴随着远程软件特有的发包规律

则 Secure Browser 也会将考试终止并上报。

具体表现是考试中途考官提示:Due to unauthorized third-party software running on your computer, your exam is terminated.

转储文件(process dump)

即便在前两种手段的监控下仍有漏网之鱼,转储文件这个终极杀器会直接杀死比赛。

所谓转储文件,就是将进程(process)的内部信息“倒(dump)”出来。相当于给进程拍了一个“CT片”,分析后可以清楚的看见进程内部的信息,包括可以推测进程的所作作为。

利用WinDbg分析向日葵远程软件的转储文件

由于这种方法需要对考生计算机生成的转储文件进行分析,所以不会导致考试中途被终止。从考生端获取的转储文件会被上传至 ETS 服务器保留,并做进一步分析。

被此方法检测的考生通常可以完成考试,只是最后分数不出、或被回溯性取消成绩。

科普:如何攻破考试软件?

前文提到,若不计后果,攻破考试软件的方式并不少。事先需要说明的是,这些方法都会或多或少的留下痕迹,所以以下方法 ELPIS 均不使用。本章节只做科普。

如何躲避进程黑名单?

在进入国内市场前,ELPIS 对国内市面上用于考试的远程软件做过取样分析(对,我们也会装学生)。我们联系了不下50家生成自己有“独家技术”的机构,并成功获取了不下30个远程软件样本。ELPIS 发现:在小红书等国内平台上,可以提供远程方案的机构上百上千,但是无论您选择哪一家,无论谁吹嘘自己有何种“独门技术”,您最后所使用的远程软件必定是其中3、4个之一。(对远程软件的详细拆解及分析请见这篇文章

而这几种软件,100%都使用了“改名字”的方式躲避进程黑名单。

一个名为“我真的不是远程软件”的进程

如图所见,给进程“改个名字”其实非常简单。甚至早在好多年前就有专门的软件用来给进程改名字。不仅可以定制进程的名字,还可以定制进程的图标、描述、版本号、版权信息等等。

比如说大名鼎鼎的 Resource Hacker。做到如上所述简直易如反掌,甚至还有更多高阶功能。

通过将远程软件的进程名修改为某一个系统进程或合法进程的名字,即可绕过黑名单检测,从而暂时骗过考试软件。

如何躲避流量使用情况检查?

从这里开始,不同远程软件所用的方式开始不同了。

远程软件1:利用了“代码注入”的方式,将一段在考试软件中原本不存在的恶意代码强行注入进考试软件中执行,从而使得某些考试软件的功能被关闭或无法正常运行。该款远程软件强行关闭了考试软件用来获取网络信息的渠道,使得考试软件无法获取任何网络流量的上下行信息。在考试软件的眼中,由于自己无法有效的获取任何进程的流量信息,考试软件会选择将错误上报。

错误信息上报后抵达 ETS 的 OTI 的技术部门,IT 人员会对错误进行分析和判断。这就导致根据判断结果,考试可能出分也可能不出分、可能出分后取消也可能收到 receive assistance 的邮件并禁考。总之,考生的命运就在技术人员的一念之差。

这种方式的缺点是:代码注入强行的改变了考试软件的运行逻辑,而考试软件(或者说 ETS)自身是非常清楚正确的执行逻辑应该是什么样的。当执行逻辑出现错误时,考试软件会自动上报,招至技术人员审核。

远程软件2:利用了类似“关键帧”的技术,将传输屏幕画面所需的上传流量在一定程度上减少,从而使得软件运行时所需的流量不大,避免遭到注意。该款软件利用的“关键帧”技术简单来说是指:只传输帧与帧之间不同的部分。如下图,两帧之间不同部分只有人物的手臂。与其把第二帧全部重新传输,不如只传输两帧间不同的部分,即可大幅节约流量。

在学术上,这种只传输“变化量”的方法被称为“差分编码(Delta Encoding)”。

差分编码 - 只传输帧与帧之间的差别部分

这种方式的缺点是:它的确减少了上传所需流量,但是“关键帧”的流量特征会变得更加明显,甚至可以说 glow in the dark。关键帧技术并非高新产物,正相反,在上世纪90年代开始它就被广泛应用在视频处理技术中。所以本质上相当于该远程软件在减弱了一种被发现的可能性(流量用量)的同时,增加了另一种被发现的可能(流量特征)。

由于篇幅限制,暂不继续介绍。

如何躲避被转储?

Short answer:目前我们见过的所有国内的远程软件,100%无法躲避。无解。

转储文件是直接由操作系统产生。或者说,是 Secure Browser(考试软件) 告诉操作系统:“我需要这些进程的转储”,然后操作系统产生转储文件后交给 Secure Browser,然后再上传至 ETS 服务器。无论你的进程如何“改名字”或是否“减少流量”,都不影响操作系统对其产生转储文件。

但这并不代表考生100%无法出分!ETS 需要分析转储文件才能确定某个进程实际在做什么,而 ETS 并不会事无巨细的分析每场考试产生的转储文件。因为数量实在是太多了!

考虑这样一种情况:有100个考生都使用了同一款远程软件参加考试。总有一天ETS会发现,为什么有100个考生的转储文件里都有一个莫名其妙的进程:它从名字上看像是一个系统进程,但从转储的内容上看,它又没有在做系统进程该做的事。那么 ETS 就会对这个进程展开调查,并且回溯拥有相同特征的考场考生,所以以前所有拥有这个特征的考试都会被作废,这就是所谓的“出分了几个月却被取消成绩”。

ELPIS 的 解决方案 💯

聪明的同学读到这里会注意到,远程软件无法免疫检测的原因是,它们并不是真的“隐形”的。它们的确可以通过各种各样的手段去欺骗、致盲、篡改考试软件,但是它们无法骗过操作系统。原因也很简单,无论什么种类的软件,想要在任何操作系统上运行,就必须向操作系统“注册”自己:它们需要向操作系统申请资源、需要向操作系统询问信息、需要操作系统辅助完成一些操作。再强调一次,无论什么种类的软件,都绝无可能脱离操作系统运行。而一旦操作系统“知道”了某款软件在运行,就可以对其产生转储。

那是否有办法让操作系统不知道?对不起,没有。或者说……没有任何常规方法。

别忘了,操作系统的本质也是一个“软件”,一个超大型的“软件”。如果我们可以控制操作系统,那我们就可以在不对考试软件做任何手脚的情况下,完美的隐藏自己。

只是攻陷一个操作系统的难度相比于篡改考试软件的难度高出不止一两个量级。这绝非计算机专业的学生、外挂写手、普通黑客可以做到的事情。好在 ELPIS 最不缺的就是人才储备,一方面 ELPIS 的技术人员都来自各大顶尖学府、另一方面我们重金聘请行业内的安全专家对我们自身进行检测。(如果您认为您speak our language,请参见《加入我们》)所以 ELPIS 有能力持续挖掘针对操作系统的 0-day 漏洞。这让我们在特定的环境下可以在操作系统中为所欲为,并攫取系统最高权限。

(注:0-day 漏洞亦有高低之别,高级别的、危害更大的 0-day 漏洞并不会被应用于此等小事。它们通常会被各国情报机构作为武器转入技术储存、或被高价出售给安全公司或类似微软的操作系统开发商。)

以 Windows 系统举例,最高权限是 Kernel 权限。由于 Windows 系统的闭源特性,系统规定能拥有 Kernel 权限的进程必须属于系统内部进程(用于维持系统运转),而任何第三方的进程无法皆无法运行在 Kernel 权限之下。究其原因,是因为 Kernel 是系统进程的“自留地”。如果准许第三方程序运行在 Kernel 权限下,就意味着第三方程序可以随意对系统进程做修改,这显然会危害到系统的正常运作。

但是通过 ELPIS 拥有的 0-day 漏洞,我们可以使自身的程序先运行在 System 权限下,再通过“提权”拥有“内核级(Kernel)”权限。计算机中的一个铁律是:权限高的进程可以对权限低的进程颐指气使、随意欺负;高权限进程可以自主选择让低权限进程看不见、摸不着。而无论是 ETS 的考试软件还是其他任何软件,由于它们并非系统自带,天然的无法运行在最高权限之下。

至于 Windows 系统自带的 PatchGuard 和 驱动程序强制签名,在我们 0-day 的使用条件下(用户已知),反倒是个小问题(甚至无需额外考虑免杀)。

因此,我们在不阻止、篡改考试软件的任何功能的前提下,实现完美的隐身。更妙的是,通过这种方式,我们免疫考试软件现在与未来的一切技术升级。因为无论它如何升级,依旧需要依附操作系统运行,而操作系统恰恰在我们的控制之下。哪怕未来的某一天,操作系统的某次升级修复了这个漏洞,我们依旧可以通过持续挖掘新 0-day 或让考生不使用最新的操作系统版本规避。

诚然,以上并不意味着世界上不存在任何方法可以检测出我们的木马。但是检测所需的技术、人力和时间远远超过考试软件提供商所能触及的范围。比如,一种极端但是有效的方式是使用 Cold Boot Attack 直接读取内存进行恶意软件的检测。但前提是考试软件公司需要派人到考生家里,在考生使用木马的时候将电脑内存条拔出,并泡在液氮里保存(防止断电后电子复位),带到专用实验室进行分析。

这些检测方法显然是不现实、不可行的。

One more thing...

如果看这篇文章的您并不是需要代考的学生,而是对我们感兴趣的技术大牛,不妨思考一下以下问题:

  1. 做最坏的假设(永远不可能):假设考试软件拥有现代杀毒软件的一切能力和权限,我们是如何绕过系统完整性校验(SFC、DISM)和高低权限API交叉审查的?
  2. 为什么我们无需考虑硬件虚拟化技术(Hypervisor)带来的影响?提示:考虑 Hypervisor 与考试软件的兼容性。
  3. 按照如上描述的操作模式,是否一定要用 Hooking 技术?如果不使用,你有什么代替方案?