SecurityWorker: Javascript 核心算法全防护

2019-03-27 22:45:04 +08:00
 zyEros

我们自己的工作中会涉及到浏览器端的通信数据加密,但一般普通混淆太容易被黑盒或白盒利用了,后来我们使用 Webassembly 以及 asmjs 加密,但频繁用 C++写相对应的逻辑太麻烦,因此我们在工作中沉淀了 SecurityWorker。简单的说,SecurityWorker 是个可靠的类 WebWorker 环境,他有独立的 VM,兼容 ECMAScript5.1,如此一来既方便你写又有足够的保护强度。

特性:

兼容性

官网: https://www.securitify.io
文档: https://github.com/qiaozi-tech/SecurityWorker

6495 次点击
所在节点    程序员
42 条回复
zsx
2019-03-27 23:08:01 +08:00
看了一下代码,大概是你们自己写了一个跑 OPCode 的 Runtime,然后用 Emscripten 把这个 Runtime 编译成 asm.js ?这么玩了性能居然还只降低这么一点。。。
zyEros
2019-03-27 23:09:00 +08:00
@zsx 是的,没错,高手,这么容易被点破了
zsx
2019-03-27 23:31:53 +08:00
@zyEros #2 不是啥高手哈。。我最近在做一个 PHP 的加密,在性能和安全上摇摆不定。看了一下你的文档,还是挺惊讶于你的性能降低居然只有这么一点的……
alvin666
2019-03-27 23:35:27 +08:00
关注一下,js 的加密 /混淆一直是个难题
zyEros
2019-03-27 23:37:39 +08:00
@alvin666 快来尝试 SecurityWorker,妈妈再也不怕核心代码被利用了
yixiang
2019-03-27 23:38:55 +08:00
security by obscurity? hmmmmmm
kimown
2019-03-27 23:38:58 +08:00
我们有个策略,wasm 混合 js,然后合并其他库,最终输出 wasm 文件接近 10M,不知道这样有没有方法能解析出源码
zyEros
2019-03-27 23:40:28 +08:00
@yixiang 并不是,是独立 vm 和执行 opcode,相比 ob 强度要大很多很多
zyEros
2019-03-27 23:42:47 +08:00
@kimown 你们 js 最终会被 eval 执行,那么就存在风险。SecurityWorker 是独立的 vm,代码会被编译为 opcode bytes 然后混编,不存在 eval 之类的动态执行。但目前跟 WebWorker 一样,没有 DOM/BOM,需要两个环境通信
kimown
2019-03-27 23:52:36 +08:00
@zyEros
意思是通过复写 eval 就可以获取执行的源代码?
zyEros
2019-03-27 23:54:50 +08:00
@kimown 是的,不然我们不会做 SecurityWorker
kimown
2019-03-28 00:10:58 +08:00
@zyEros

有个疑问,run script 最前面覆盖各种 console,alert 之类的函数,判断 eval 是否为 native,否就不执行,保证整个执行都在 VMXXX 内,这样还有办法可以破解吗

https://stackoverflow.com/questions/6598945/detect-if-function-is-native-to-browser
zyEros
2019-03-28 00:15:42 +08:00
@kimown 不行,因为我可以拿到你的代码,然后改文件输入 debug,你可能会因为代码太大导致 devtool 崩溃,但我们还有其他办法,比如通过 chrome 的协议远程调试然后跟踪到你 eval 逻辑前,或者直接在你 eval 前 ajax 发送代码,file api 操作等。这些弯路我们都走过。
zyEros
2019-03-28 00:17:07 +08:00
@kimown 浏览器整个都是不安全环境,只要你的代码以原始代码动态执行在不安全环境,他就是不安全的
polythene
2019-03-28 00:17:58 +08:00
@zsx 不好意思,能告诉我在哪里看到的文档吗,我有点没太明白他们的具体做法?
zyEros
2019-03-28 00:20:18 +08:00
@polythene “ SecurityWorker 不同于普通的 Javascript 代码混淆,我们使用 独立 Javascript VM + 二进制混淆 opcode 核心执行 的方式防止您的代码被开发者工具调试、代码反向。”以及“ SecurityWorker VM 与 V8 等强调性能的 Javascript 引擎不同,SecurityWorker VM 主要目标是更小的 emscripten 生成体积以及更少的内存使用。对于 SecurityWorker VM 来说,我们并没有集成类似 V8 一样的 JIT 机制,而是使用通过离线翻译你的 Javascript 代码为 SecurityWorker VM 指令,然后在运行时解释执行的方式,因此在性能上会有一定的损失。”
kimown
2019-03-28 00:25:55 +08:00
@zyEros

是的,当时我也考虑过,最后不行重编译 chromium,简单覆盖下 eval,原来方案就失效了,

https://github.com/mbbill/JSC.js

有考虑过 js 内嵌 jsc 吗,感觉这也是个思路,楼主有邮箱吗,以后可以交流下
zyEros
2019-03-28 00:29:00 +08:00
@kimown 你嵌入 jsc 后和我们的做法就差不多了,邮箱在官网页脚有(逃
tyrealgray
2019-03-28 00:30:46 +08:00
其实加密可以考虑 google 的方案,用 https://github.com/javascript-obfuscator/javascript-obfuscator

基本上锁 domain 和禁用 console 后,解密的可能性就很低了
zyEros
2019-03-28 00:33:58 +08:00
@tyrealgray 并不是,ob 实际上是混淆,但仍然可以通过代码逆出核心算法,相比 SecurityWorker 的强度来说低很多很多

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/549319

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX