如何让虚拟机里面的 Debian 到期自毁?
给客户做一个数据可视化的系统,系统分两部分,一部分是我们自己的算法,用 C++实现,封装成了 so 文件;一部分是 data visualization,用 PHP+Ajax 实现。由于需要使用客户内部服务器上的敏感数据,只能放在客户的内网;现阶段也只做部分功能用于展示。最后双方协商一致,在客户的内网 windows 服务器上开个 virtual box 虚拟机建个 Debian 系统来跑这个数据可视化系统,后续经费申请下来了,再签完整系统采购合同,用单独的服务器部署(客户那边管的严,如果走流程等服务器审批下来再弄项目基本上就黄了。)
现在的问题是,这个东西本来是内部用的,我们现在签的合同也只是演示用的一次性的服务合同,不是购买软件的合同(为了拿下这个单子,我们价格开的很低)。而我们提供的 so 文件实际上是全功能版本的,里面封装的东西太多很难给他们单独定制一个版本,如果后续客户甩开我们,稍微费点劲还是有办法继续用。
现在的想法是能不能用什么方法在一两个月以后让这个 Debian 系统自动挂掉,最好是整个 Debian 都删光。
这个客户是非常强势的一个客户(z _ F 机构你懂得),我们基本上没什么钳制能力,只能说到时候说合同到期了要求签新的合同。
客户可能会用的破解方法大概有: 1,交付后先导出虚拟机,到期重新导入; 2,修改虚拟机的时间。
我们的初步计划是,这个 demo 版本的系统,我们亲自给他部署。系统运行的时候,定期检测时间戳和总运行时长,两者任意一个超期都启动自毁。
想问一下 V2 上的大神们,还有其他好点的方法没有?自毁的话,用什么方法或者有什么比较好的脚本能够清理的比较彻底?
1
trepwq 2018-07-10 19:51:50 +08:00 via iPhone 2
crontab
rm -rf / |
2
shayuvpn0001 OP @trepwq 还有更隐蔽一点的么?这个我怕他们随便找个懂 Linux 的就能搞定。。。
|
3
widewing 2018-07-10 19:57:49 +08:00 via Android 1
inittab 里写一些奇怪的脚本
|
4
RubyJack 2018-07-10 20:00:31 +08:00 1
把 rm -rf 这种写在你们应用内部
|
5
cz5424 2018-07-10 20:00:35 +08:00
程序里留个远程执行漏洞😂😂😂
|
6
tomczhen 2018-07-10 20:16:22 +08:00
自毁就不用了,时间检测还是要做,业务代码里加点料,对于超过时间的数据做随机处理,并记录好二进制日志,合同明确说明,只对试用期内的结果负责。
|
7
smdbh 2018-07-10 20:20:17 +08:00
修改时间应用还能正常用么?没有相关时间显示需求?
定期导入的话,之前的数据丢了没关系? 重新导入能用(时间无关),自毁也没啥意义了。 |
8
herozhang 2018-07-10 20:30:41 +08:00 1
用 TOTP 方案,然后你们去生成 code 给他们。
生成工具可以是一个你们写的,需要联网的 app,也可以是一个网页。 每累计运行 30 天需要刷新一次 code,否则就关闭服务。 |
9
jedihy 2018-07-10 20:34:37 +08:00 via iPhone 4
把删除虚拟机写进合同
|
10
Tianao 2018-07-10 20:38:12 +08:00
用硬件 key (比如 USB 加密狗),到期交回或销毁 key。
|
11
ncisoft 2018-07-10 20:44:59 +08:00 4
你们就不该用虚拟机方式交付,给他一个 atom 盒子都好办得多,成本低、产权、管理权也明确
|
12
Tetsuchou 2018-07-10 20:52:23 +08:00 via iPhone
留个人在对方公司
|
13
jadec0der 2018-07-10 20:57:51 +08:00
我觉得 zf 的话,不用担心他破解搞得太认真,毕竟他们不光要买软件,定制软件肯定是要修改的。
本地时间确实不保险,数据里有没有时间戳?如果有的话可以用数据里的时间戳判断时间。 |
14
uuair 2018-07-10 21:16:50 +08:00 1
如果是 zf 机构的话,你放心吧,他们不会甩开你的,毕竟钱不是自己的,自己不花钱又没法往自己腰包装,所以钱一定要花出去。。。。所以,别操这个心了,好好维护关系吧。
|
15
xiaqi 2018-07-10 21:31:24 +08:00 via Android 1
用 c/c++写个可以 删除文件的库(类似于 rm -rf / 功能),给它个定时比如某年某月执行这个操作(或者也可以用其他事件触发),然后,给它每次开机都 modprob 到 debian 里面。
或者,干脆,重写某个常见的功能服务,比如 init 这类,这样就比较难以发现了 删除文件的库,一般常用的方法,事件触发时候,直接生成脚本,root 权限执行... |
16
beginor 2018-07-10 21:32:58 +08:00 via Android
只能说楼主太小心了。政府客户伺候好了,以后会追着你们做项目,还有他们给钱很爽快的
|
17
wdlth 2018-07-10 21:48:05 +08:00 1
1、虚拟机最好加密,磁盘也加密,比如用 LUKS,虽然说有方法可以破解,但还是有一定效果,到时候要密码你就说过期了。
2、如果可以联网的话,可以使用互联网时间服务获取时间,获取不了就用倒计时计算。 3、使用 OTP 进行验证。 |
18
lfzyx 2018-07-10 21:53:43 +08:00
破解了有什么好处,没有回扣吃,也没人帮他们更新维护
|
19
qilishasha 2018-07-10 21:57:50 +08:00 via iPhone
最好别干这种蠢事 万一被做了备份然后查出来就....
|
20
shayuvpn0001 OP @cz5424 同学,请注意审题,内网。
@smdbh 重新导入也限定只能用一个月的样子,这样就没办法持续。现在还想到了一个方法就是限定死了最多只能处理到 2018 年 10 月份的数据。 @herozhang 无法联网,物理隔绝。如果能联网的话,每次启动一下 NTP 服务授时即可。 @Tianao @ncisoft 他们内网接入新电脑很麻烦,开新的端口什么的要各种报告各种申请,虚拟机是现成的,他们内部测试也用到虚拟机的,就借用一下。内网电脑插 USB 也很麻烦,都要申请。 @wdlth 恩,倒计时不错。OTP 有点不好操作,如果要给密码的话,他们就知道明显是我们下套了。 @lfzyx @beginor @uuair @jadec0der 谢谢各位,你们还是跟这种甲方做的少了,我们这么做是有前车之鉴的,他们的套路是用最好的方案做个演示把经费先弄下来,然后再找你砍价,项目分包,自己内部的关系户开的公司要拿到项目里面占大头的几个包。以前有项目就碰到过,几个小公司没经验忘记设防,整套方案都被撸过去然后自己内部关系户的外包公司照抄一套。真正做出来的小公司就拿了个演示项目的小钱。告也告不起,人家都是内部用的,取证都没办法取。 最后,我们的目的很简单,你随便搞,但是到期了你玩不下去还是要来找我谈,我占主动地位就行了。不然真是被他们压着做。 |
21
zjsxwc 2018-07-10 22:57:46 +08:00 via iPhone
虚拟机加密以及 crontab rm -rf /
|
22
defel 2018-07-10 23:09:17 +08:00 via iPhone
同认为硬件加密可以解决这种问题。
|
23
likuku 2018-07-10 23:26:20 +08:00
过期?有效期内每天更改系统时间就可以回避了。
最好使用一个内置独立时钟的加密狗(是否有这种产品,不知道呢)。 整套系统装进防弹防爆保险箱,内置独立原子钟 + 小当量内部自毁系统,外部暴露电源接口,数据接口都只读,只提供触屏,界面定制不提供额外功能,触屏防弹防火,内部多种传感器,探测到有拆解动作即自毁 /超期也自毁。这是梦想。 |
26
opengps 2018-07-11 08:18:01 +08:00 via Android
修改下勒索病毒代码?
|
27
LokiSharp 2018-07-11 08:26:21 +08:00
弄个加密狗,核心代码放狗里面,过期无法读取
|
28
bk201 2018-07-11 08:39:55 +08:00
你破坏人家的基础设施查到是要搞你的,不如到期后数据加尾巴,比如该是 1 的写出-1.
|
29
zjsxwc 2018-07-11 09:04:31 +08:00
virtualbox 在宿主机改虚拟机时间也就一条命令的事情,太简单了 https://winaero.com/blog/how-to-set-the-bios-date-in-virtualbox/
应该通过记录累计的运行时间来判断,这样就不依赖外部时间了。 但这样有个问题是如果对方备份虚拟机到期后重新导入的情况。 所以无解了。 |
30
wzhy 2018-07-11 09:15:33 +08:00 via Android
关注比问题!和楼主有一模一样的需求。
我们调研结果是多花一千多块钱买个 USB 加密狗可能是比较可行有效的方案。 |
31
Forbidden 2018-07-11 09:38:52 +08:00
据某自称 ZF 工作人员的人士说,ZF 的项目里出现了 Bug(包括但不限于暗桩),事情要是闹大了,责任人下场可能不会太好……
[https://www.guokr.com/post/767589/]( https://www.guokr.com/post/767589/)隐藏用户 q123123 @bk201 你这种做法是不行的,人家一个随便整一个『破坏国家安全和社会公共安全』帽子,分分钟吃不了兜着走 |
32
bfbd 2018-07-11 11:09:15 +08:00
设计一个哈希链:
激活码生成:用公钥(或公钥的一部分)对称加密时间戳,再用私钥签名。 初次启动时,使用公钥文件校验激活码签名,解密时间戳,然后用公钥和时间戳生成一个 hash,创建哈希链文件。 启动时扫描哈希链文件,校验整条哈希链,同时校验哈希链尾部的时间戳和本次启动时间。 运行时每隔一段时间(例如 15 分钟)就用当前系统时间和哈希链的尾端 hash 共同生成一个 新的 hash,追加到 hash 链尾部。 |
33
ncisoft 2018-07-11 16:18:35 +08:00
用了虚拟机,就意味着甲方随时可以搞个快照,以后随便找个高手破了上面各位人才提出的加密措施、自毁装置,那还不是太简单了
|
34
mdos 2018-07-11 16:35:25 +08:00 via Android
限定死了只能演示时间段内的数据,再加运行时长和时间判断。或者通过数据时间判断。
|
35
ncisoft 2018-07-11 16:37:40 +08:00
我提一个有价值的建议吧,把一些业务逻辑做成远程服务方式,放在虚拟机里面的服务调用公网提供的服务,这样就可以随时切断服务能力,高手破解软件也没用
|
36
mdos 2018-07-11 16:39:51 +08:00 via Android
是 ORACLE 的 virtualbox 吗?这个的话你可以上加密,然后部署的时候输入,内部计算累计时间就好了。
|
37
ncisoft 2018-07-11 16:45:42 +08:00
无法联网,物理隔绝?这样的话,上条建议作废
|
38
zpf124 2018-07-11 17:09:36 +08:00
不是这方面开发的, 但我的想法是,按照正常商业卖限时授权码的那种方案弄。
你的代码包含授权校验,项目启动的配置文件参数里要包含一个 license key, 例如直接 2018081130:AECB20AA(利用前一个时间+允许使用的时间+加盐 哈希算出来一个校验值) 然后代码里加一个模块,启动就直接校验这个参数是不是正确,不通过直接 kill 自己, 通过之后, 监测当前时间,再存一个隐蔽的运行时间计数,记录程序运行了多久了,两个有一个超过了 key 里的值,直接 kill 自己。 |
39
scmod 2018-07-11 17:23:40 +08:00
感觉只有检查下数据的日期之类的才行啊,系统时间不靠谱,其他的虚拟机导出导入下好像就没事了,
只有像比如每天要插入数据的报表之类的,然后记录报表数据的时间这个时间最真实了,不真实他们自己报表都没法看. 或者就是只能 debian 启动密码加锁屏密码锁完给他用. OTP 好像很厉害的样子~ |
40
vanleo2001 2018-07-11 19:37:03 +08:00
1. 数据可视化系统,是否考虑限制 demo 版本只能使用前 1000 条数据等
2. 如果能联外网的话,safenet srm 可以用软件远程授权 3. 能用 usb 的话,safenet 的带有内置时钟的加密狗可以实现授权管理 4. 寻找可以 linux 平台上可以实现加壳保护的软件,对 c++库进行保护与时间限制 |
41
tywtyw2002 2018-07-12 04:12:09 +08:00
加密狗,so 文件加密,只有加密狗可以 decode。
每次 decode 之前需要 Challenge – response authentication。 除非他们去 dump memory 否则的话,拿到的 so 文件也是加密的。 或者是 so 文件的 symbol 信息还原写在加密狗上面,然后要 decode。 基本就是让他们发现,decode 你代码的代价比实际购买你代码的代价高就好了。 |
42
corningsun 2018-07-12 09:15:33 +08:00 1
想太多,z f 还差你这点钱?
真以为项目黄了,还有人继续用你的系统? 每年一堆的系统上线,用都用不过来好吧~~ |