DigiExam 是一款(监控)考试与监考软件。该软件安装在学校(或学生)的计算机上。当学生加入考试时,DigiExam 将:确保未在虚拟机中运行,终止所有应用程序,全屏显示自身,并阻止用户离开 DigiExam 窗口。
已发现其安全检测机制薄弱,只需替换文件系统中用户拥有的一个文件即可轻松绕过。已确认在 DigiExam v14.0.2 上有效,此后未再测试(我通过了考试 :))。
漏洞:DigiExam(一款 Electron 应用)将虚拟机检测(以及大部分安全功能)"外包"给一个名为 dx-sec 的原生模块。由于缺少对 dx-sec 模块的完整性检查,攻击者可以用修补过的版本替换该模块。该修补程序实质上可以修改 dx-sec 中的任何功能,包括虚拟机检测(以及其他功能,如非法进程白名单等)。
在首次启动时,DigiExam 应用会下载原生模块至 %localappdata%\DigiExam\app-14.0.2\resources\app.asar.unpacked\node_modules\%modulename%\build\Release\%modulename.node%。这些 .node 文件(根据 file 命令指示)是 PE32 executable (DLL) (GUI) Intel 80386, for MS Windows。
在 Ghidra 中打开 dx-sec 文件并搜索字符串 "Virtual Machine" 会得到大量结果,并指向 FUN_10020370——已重命名为 detect_virtual_machine(这为了解 VM 检测所检查的内容提供了相当有趣的洞见)。

detect_virtual_machine 有一个交叉引用指向 FUN_10007ab0——已重命名为 detect_virtual_machine_node_handler——这似乎是 Node 相关内容的库入口点(围绕我们的 'main' 函数 detect_virtual_machine 的构造函数和析构函数)。

detect_virtual_machine 可以通过补丁使其立即返回。截图右侧为修补后的版本。

这将完全绕过 VM 检测逻辑。
如引言所述,DigiExam 常安装在 共享的 学校计算机上。攻击者可以不修补 VM 检测逻辑,而是利用这一点在任何学生参加考试时在其会话上执行代码,从而对学生文档和信息发动更具破坏性的攻击。持久性直至 DigiExam 更新为止。