V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
shayuvpn0001
V2EX  ›  程序员

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

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

    如何让虚拟机里面的 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   ·   实用小工具   ·   1582 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 17:05 · PVG 01:05 · LAX 09:05 · JFK 12:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.