如何让虚拟机里面的 Debian 到期自毁?

2018-07-10 19:48:26 +08:00
 shayuvpn0001

如何让虚拟机里面的 Debian 到期自毁?

给客户做一个数据可视化的系统,系统分两部分,一部分是我们自己的算法,用 C++实现,封装成了 so 文件;一部分是 data visualization,用 PHP+Ajax 实现。由于需要使用客户内部服务器上的敏感数据,只能放在客户的内网;现阶段也只做部分功能用于展示。最后双方协商一致,在客户的内网 windows 服务器上开个 virtual box 虚拟机建个 Debian 系统来跑这个数据可视化系统,后续经费申请下来了,再签完整系统采购合同,用单独的服务器部署(客户那边管的严,如果走流程等服务器审批下来再弄项目基本上就黄了。)

现在的问题是,这个东西本来是内部用的,我们现在签的合同也只是演示用的一次性的服务合同,不是购买软件的合同(为了拿下这个单子,我们价格开的很低)。而我们提供的 so 文件实际上是全功能版本的,里面封装的东西太多很难给他们单独定制一个版本,如果后续客户甩开我们,稍微费点劲还是有办法继续用。

现在的想法是能不能用什么方法在一两个月以后让这个 Debian 系统自动挂掉,最好是整个 Debian 都删光。

这个客户是非常强势的一个客户(z _ F 机构你懂得),我们基本上没什么钳制能力,只能说到时候说合同到期了要求签新的合同。

客户可能会用的破解方法大概有: 1,交付后先导出虚拟机,到期重新导入; 2,修改虚拟机的时间。

我们的初步计划是,这个 demo 版本的系统,我们亲自给他部署。系统运行的时候,定期检测时间戳和总运行时长,两者任意一个超期都启动自毁。

想问一下 V2 上的大神们,还有其他好点的方法没有?自毁的话,用什么方法或者有什么比较好的脚本能够清理的比较彻底?

4920 次点击
所在节点    程序员
42 条回复
zjsxwc
2018-07-10 22:57:46 +08:00
虚拟机加密以及 crontab rm -rf /
defel
2018-07-10 23:09:17 +08:00
同认为硬件加密可以解决这种问题。
likuku
2018-07-10 23:26:20 +08:00
过期?有效期内每天更改系统时间就可以回避了。

最好使用一个内置独立时钟的加密狗(是否有这种产品,不知道呢)。

整套系统装进防弹防爆保险箱,内置独立原子钟 + 小当量内部自毁系统,外部暴露电源接口,数据接口都只读,只提供触屏,界面定制不提供额外功能,触屏防弹防火,内部多种传感器,探测到有拆解动作即自毁 /超期也自毁。这是梦想。
likuku
2018-07-10 23:29:09 +08:00
@defel 硬件加密?现在多见的硬件加密只是存取加密,若运行时被黑,直接运行时环境里盗取资料那就没办法。
defel
2018-07-11 00:49:34 +08:00
@likuku 使用类似两步验证的那种密码生成器吧,像网银盾那种,每次使用需要输入实时密码,到期失效。
opengps
2018-07-11 08:18:01 +08:00
修改下勒索病毒代码?
LokiSharp
2018-07-11 08:26:21 +08:00
弄个加密狗,核心代码放狗里面,过期无法读取
bk201
2018-07-11 08:39:55 +08:00
你破坏人家的基础设施查到是要搞你的,不如到期后数据加尾巴,比如该是 1 的写出-1.
zjsxwc
2018-07-11 09:04:31 +08:00
virtualbox 在宿主机改虚拟机时间也就一条命令的事情,太简单了 https://winaero.com/blog/how-to-set-the-bios-date-in-virtualbox/


应该通过记录累计的运行时间来判断,这样就不依赖外部时间了。

但这样有个问题是如果对方备份虚拟机到期后重新导入的情况。


所以无解了。
wzhy
2018-07-11 09:15:33 +08:00
关注比问题!和楼主有一模一样的需求。
我们调研结果是多花一千多块钱买个 USB 加密狗可能是比较可行有效的方案。
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 你这种做法是不行的,人家一个随便整一个『破坏国家安全和社会公共安全』帽子,分分钟吃不了兜着走
bfbd
2018-07-11 11:09:15 +08:00
设计一个哈希链:

激活码生成:用公钥(或公钥的一部分)对称加密时间戳,再用私钥签名。

初次启动时,使用公钥文件校验激活码签名,解密时间戳,然后用公钥和时间戳生成一个 hash,创建哈希链文件。

启动时扫描哈希链文件,校验整条哈希链,同时校验哈希链尾部的时间戳和本次启动时间。

运行时每隔一段时间(例如 15 分钟)就用当前系统时间和哈希链的尾端 hash 共同生成一个 新的 hash,追加到 hash 链尾部。
ncisoft
2018-07-11 16:18:35 +08:00
用了虚拟机,就意味着甲方随时可以搞个快照,以后随便找个高手破了上面各位人才提出的加密措施、自毁装置,那还不是太简单了
mdos
2018-07-11 16:35:25 +08:00
限定死了只能演示时间段内的数据,再加运行时长和时间判断。或者通过数据时间判断。
ncisoft
2018-07-11 16:37:40 +08:00
我提一个有价值的建议吧,把一些业务逻辑做成远程服务方式,放在虚拟机里面的服务调用公网提供的服务,这样就可以随时切断服务能力,高手破解软件也没用
mdos
2018-07-11 16:39:51 +08:00
是 ORACLE 的 virtualbox 吗?这个的话你可以上加密,然后部署的时候输入,内部计算累计时间就好了。
ncisoft
2018-07-11 16:45:42 +08:00
无法联网,物理隔绝?这样的话,上条建议作废
zpf124
2018-07-11 17:09:36 +08:00
不是这方面开发的, 但我的想法是,按照正常商业卖限时授权码的那种方案弄。

你的代码包含授权校验,项目启动的配置文件参数里要包含一个 license key,
例如直接 2018081130:AECB20AA(利用前一个时间+允许使用的时间+加盐 哈希算出来一个校验值)

然后代码里加一个模块,启动就直接校验这个参数是不是正确,不通过直接 kill 自己,
通过之后, 监测当前时间,再存一个隐蔽的运行时间计数,记录程序运行了多久了,两个有一个超过了 key 里的值,直接 kill 自己。
scmod
2018-07-11 17:23:40 +08:00
感觉只有检查下数据的日期之类的才行啊,系统时间不靠谱,其他的虚拟机导出导入下好像就没事了,
只有像比如每天要插入数据的报表之类的,然后记录报表数据的时间这个时间最真实了,不真实他们自己报表都没法看.
或者就是只能 debian 启动密码加锁屏密码锁完给他用.
OTP 好像很厉害的样子~
vanleo2001
2018-07-11 19:37:03 +08:00
1. 数据可视化系统,是否考虑限制 demo 版本只能使用前 1000 条数据等
2. 如果能联外网的话,safenet srm 可以用软件远程授权
3. 能用 usb 的话,safenet 的带有内置时钟的加密狗可以实现授权管理
4. 寻找可以 linux 平台上可以实现加壳保护的软件,对 c++库进行保护与时间限制

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

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

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

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

© 2021 V2EX