注意:2020年3月11日,Avast 宣布 他们已决定全局禁用此解释器!
Avast 防病毒主进程名为 AvastSvc.exe,以 SYSTEM 权限运行。

该服务加载底层防病毒引擎,并分析来自文件系统微过滤器或拦截的网络流量等来源的不可信数据。
尽管它拥有高权限且设计上处理不可信输入,但它没有沙箱保护,且缓解措施覆盖不足。此进程中的任何漏洞都是关键的,且容易被远程攻击者利用。
所以……包含一个自定义的 JavaScript 解释器可能不太妙……????🙃

本仓库包含一个交互式 shell,可让您在 Linux 上测试该解释器以进行漏洞研究。
以下是尝试方法:首先安装依赖项。
$ sudo apt install libreadline-dev:i386 libc6-dev-i386 gcc-multilib
$ sudo yum install readline-devel.i686 glibc-devel.i686 libgcc.i686
现在您可以克隆此仓库。
$ git clone https://github.com/taviso/avscript.git
$ cd avscript
$ git submodule update --init --recursive
如果一切正常,构建后 avscript 应该就绪。
$ make
出于性能原因,Avast 不会解释他们遇到的每个 JavaScript 文件,而是使用启发式方法判断是否需要。我发现,附加本仓库中包含的文件 javascript.txt 始终足以触发该启发式方法。
例如,如果您发现了一个漏洞并希望在 Windows 上复现,可以首先执行以下操作:
$ cat yourtestcase.js javascript.txt > ReproForWindows.js
然后验证它是否仍然按预期工作,例如:
$ ./avscript ReproForWindows.js
main(): File ReproForWindows.js` loaded, about to initialize interpreter...
Segmentation fault (core dumped)
然后验证崩溃在 Windows 上是否复现。
Avast 服务是一个受保护进程,这意味着从用户空间调试它很棘手。如果您配置了 kd,可以简单地撤销此保护,然后用户空间调试就能正常工作。
一个适用于 32 位的快速简便解决方案是执行以下操作(请注意,PatchGuard 在 x64 上不允许此操作,但您可以使用断点命令进行类似操作)。

在“疑难解答”下还有一个名为“启用自我保护”的设置,应将其禁用。我相信此设置禁用了 SSDT 中对 OpenProcess() 的挂钩,他们通常会在此处将自己的进程列入黑名单。
附加时您可能需要暂时禁用 Avast UI 中的“防护”,以便在服务挂起时文件系统操作不会死锁。
Avast 不为其引擎发布任何符号,但使用 IDA 或 gdb 进行调试仍然是可能的。loadlibrary 文档中有一些关于从 Linux 调试 Windows 代码的说明。
如果您想使用 IDA,我建议使用 gdbserver 后端。
只需使用类似以下命令,您可能需要先安装 gdbserver 包:
$ gdbserver 0.0.0.0:23946 ./avscript
效果出奇地好,甚至伪代码断点也能工作。

如果您发现一个漏洞,它很可能是关键且可蠕虫传播的。
🔥 请紧急报告。 🔥