如何让虚拟机里面的 Debian 到期自毁? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
shayuvpn0001
V2EX    程序员

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

  •  
  •   shayuvpn0001 2018-07-10 19:48:26 +08:00 5351 次点击
    这是一个创建于 2660 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

    42 条回复    2018-07-12 09:15:33 +08:00
    trepwq
        1
    trepwq  
       2018-07-10 19:51:50 +08:00 via iPhone   2
    crontab
    rm -rf /
    shayuvpn0001
        2
    shayuvpn0001  
    OP
       2018-07-10 19:56:33 +08:00
    @trepwq 还有更隐蔽一点的么?这个我怕他们随便找个懂 Linux 的就能搞定。。。
    widewing
        3
    widewing  
       2018-07-10 19:57:49 +08:00 via Android   1
    inittab 里写一些奇怪的脚本
    RubyJack
        4
    RubyJack  
       2018-07-10 20:00:31 +08:00   1
    把 rm -rf 这种写在你们应用内部
    cz5424
        5
    cz5424  
       2018-07-10 20:00:35 +08:00
    程序里留个远程执行漏洞
    tomczhen
        6
    tomczhen  
       2018-07-10 20:16:22 +08:00
    自毁就不用了,时间检测还是要做,业务代码里加点料,对于超过时间的数据做随机处理,并记录好二进制日志,合同明确说明,只对试用期内的结果负责。
    smdbh
        7
    smdbh  
       2018-07-10 20:20:17 +08:00
    修改时间应用还能正常用么?没有相关时间显示需求?
    定期导入的话,之前的数据丢了没关系?

    重新导入能用(时间无关),自毁也没啥意义了。
    herozhang
        8
    herozhang  
       2018-07-10 20:30:41 +08:00   1
    用 TOTP 方案,然后你们去生成 code 给他们。
    生成工具可以是一个你们写的,需要联网的 app,也可以是一个网页。

    每累计运行 30 天需要刷新一次 code,否则就关闭服务。
    jedihy
        9
    jedihy  
       2018-07-10 20:34:37 +08:00 via iPhone   4
    把删除虚拟机写进合同
    Tianao
        10
    Tianao  
       2018-07-10 20:38:12 +08:00
    用硬件 key (比如 USB 加密狗),到期交回或销毁 key。
    ncisoft
        11
    ncisoft  
       2018-07-10 20:44:59 +08:00   4
    你们就不该用虚拟机方式交付,给他一个 atom 盒子都好办得多,成本低、产权、管理权也明确
    Tetsuchou
        12
    Tetsuchou  
       2018-07-10 20:52:23 +08:00 via iPhone
    留个人在对方公司
    jadec0der
        13
    jadec0der  
       2018-07-10 20:57:51 +08:00
    我觉得 zf 的话,不用担心他破解搞得太认真,毕竟他们不光买软件,定制软件肯定是要修改的。

    本地时间确实不保险,数据里有没有时间戳?如果有的话可以用数据里的时间戳判断时间。
    uuair
        14
    uuair  
       2018-07-10 21:16:50 +08:00   1
    如果是 zf 机构的话,你放心吧,他们不会甩开你的,毕竟钱不是自己的,自己不花钱又没法往自己腰包装,所以钱一定要花出去。。。。所以,别操这个心了,好好维护关系吧。
    xiaqi
        15
    xiaqi  
       2018-07-10 21:31:24 +08:00 via Android   1
    用 c/c++写个可以 删除文件的库(类似于 rm -rf / 功能),给它个定时比如某年某月执行这个操作(或者也可以用其他事件触发),然后,给它每次开机都 modprob 到 debian 里面。
    或者,干脆,重写某个常见的功能服务,比如 init 这类,这样就比较难以发现了
    删除文件的库,一般常用的方法,事件触发时候,直接生成脚本,root 权限执行...
    beginor
        16
    beginor  
       2018-07-10 21:32:58 +08:00 via Android
    只能说楼主太小心了。政府客户伺候好了,以后会追着你们做项目,还有他们给钱很爽快的
    wdlth
        17
    wdlth  
       2018-07-10 21:48:05 +08:00   1
    1、虚拟机最好加密,磁盘也加密,比如用 LUKS,虽然说有方法可以破解,但还是有一定效果,到时候要密码你就说过期了。

    2、如果可以联网的话,可以使用互联网时间服务获取时间,获取不了就用倒计时计算。

    3、使用 OTP 进行验证。
    lfzyx
        18
    lfzyx  
       2018-07-10 21:53:43 +08:00
    破解了有什么好处,没有回扣吃,也没人帮他们更新维护
    qilishasha
        19
    qilishasha  
       2018-07-10 21:57:50 +08:00 via iPhone
    最好别干这种蠢事 万一被做了备份然后查出来就....
    shayuvpn0001
        20
    shayuvpn0001  
    OP
       2018-07-10 22:45:18 +08:00   1
    @cz5424 同学,请注意审题,内网。

    @smdbh 重新导入也限定只能用一个月的样子,这样就没办法持续。现在还想到了一个方法就是限定死了最多只能处理到 2018 年 10 月份的数据。

    @herozhang 无法联网,物理隔绝。如果能联网的话,每次启动一下 NTP 服务授时即可。

    @Tianao
    @ncisoft 他们内网接入新电脑很麻烦,开新的端口什么的要各种报告各种申请,虚拟机是现成的,他们内部测试也用到虚拟机的,就借用一下。内网电脑插 USB 也很麻烦,都要申请。

    @wdlth 恩,倒计时不错。OTP 有点不好操作,如果要给密码的话,他们就知道明显是我们下套了。

    @lfzyx
    @beginor
    @uuair
    @jadec0der
    谢谢各位,你们还是跟这种甲方做的少了,我们这么做是有前车之鉴的,他们的套路是用最好的方案做个演示把经费先弄下来,然后再找你砍价,项目分包,自己内部的关系户开的公司要拿到项目里面占大头的几个包。以前有项目就碰到过,几个小公司没经验忘记设防,整套方案都被撸过去然后自己内部关系户的外包公司照抄一套。真正做出来的小公司就拿了个演示项目的小钱。告也告不起,人家都是内部用的,取证都没办法取。

    最后,我们的目的很简单,你随便搞,但是到期了你玩不下去还是要来找我谈,我占主动地位就行了。不然真是被他们压着做。
    zjsxwc
        21
    zjsxwc  
       2018-07-10 22:57:46 +08:00 via iPhone
    虚拟机加密以及 crontab rm -rf /
    defel
        22
    defel  
       2018-07-10 23:09:17 +08:00 via iPhone
    同认为硬件加密可以解决这种问题。
    likuku
        23
    likuku  
       2018-07-10 23:26:20 +08:00
    过期?有效期内每天更改系统时间就可以回避了。

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

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


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

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


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

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

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

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

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

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

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

    每次 decode 之前需要 Challenge response authentication。

    除非他们去 dump memory 否则的话,拿到的 so 文件也是加密的。

    或者是 so 文件的 symbol 信息还原写在加密狗上面,然后要 decode。

    基本就是让他们发现,decode 你代码的代价比实际购买你代码的代价高就好了。
    corningsun
        42
    corningsun  
       2018-07-12 09:15:33 +08:00   1
    想太多,z f 还差你这点钱?
    真以为项目黄了,还有人继续用你的系统?

    每年一堆的系统上线,用都用不过来好吧~~
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5444 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 07:36 PVG 15:36 LAX 00:36 JFK 03:36
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86