V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
acess
V2EX  ›  信息安全

如果发现自己中勒索了,休眠可以成为一种自救手段么?

  •  
  •   acess · 2017-05-20 14:24:54 +08:00 · 7665 次点击
    这是一个创建于 2748 天前的主题,其中的信息可能已经有所发展或是发生改变。
    当然,最好还是做好预防,多备份。
    不过,看到最近有人提供了 WanaCry 解锁工具,感觉想方设法 dump 出内存还是有可能提高获救概率的(当然,如果倒霉“睡死”了就彻底 GG 了):
    https://blog.comae.io/wannacry-decrypting-files-with-wanakiwi-demo-86bafb81112d
    如果 LZ 没理解错,这个解锁工具的原理是:在病毒进程的内存中搜索当初生成本机 RSA 密钥对的质数,然后重建出私钥。本来这个私钥是被勒索蠕虫用硬编码的 RSA 公钥加密了的,必须找病毒作者才可能给解密出来,现在 RP 够好就可以重建出来,然后就可以用它解密每一个被加密文件了(先用 RSA 私钥解密每个文件的 AES 密钥,再用 AES 密钥解密文件数据)。
    这个方法利用条件很苛刻,必须让病毒进程稳稳地运行到现在才行,然而杀毒 /重启 /关机都会把病毒进程干掉……

    PS:LZ 用 Win7x64 虚拟机试过这个工具,手动指定了 tasksche.exe 的 PID,然而并没有成功搜到私钥……
    55 条回复    2017-05-21 16:34:52 +08:00
    ylsc633
        1
    ylsc633  
       2017-05-20 14:26:10 +08:00
    电脑配置太差.... 当这个病毒出现了....

    然后电脑显示 未响应....

    我给关了.......
    acess
        2
    acess  
    OP
       2017-05-20 14:27:08 +08:00
    @ylsc633 别开玩笑……等病毒窗口出来,文件已经都成为绑票了。
    acess
        3
    acess  
    OP
       2017-05-20 14:30:03 +08:00
    老实说这个思路不是我想出来的,来自于:
    https://www.zhihu.com/question/46715248/answer/112125941
    acess
        4
    acess  
    OP
       2017-05-20 14:44:52 +08:00
    另外…… dump 内存这个思路,LZ 一个外行都能想到,那世界各大安全厂商的专家肯定早就考虑过这个吧。
    那么,他们可能是出于什么考虑才没推广这种方法?
    ctsed
        5
    ctsed  
       2017-05-20 14:50:17 +08:00 via Android
    @acess 方案实施条件太苛刻了
    zwl2012
        6
    zwl2012  
       2017-05-20 14:52:13 +08:00 via iPhone
    @acess RAS 算法不是非对称加密算法,公钥加密,私匙才能解密吗。如果是对称加密算法,直接逆向工程病毒文件的加密密钥生成算法不就解决了。何必那么折腾
    acess
        7
    acess  
    OP
       2017-05-20 14:52:55 +08:00 via Android
    @ctsed 事后诸葛地考虑一下,那些用着 32 位 XP 或 Win7 的中毒者如果及时 dump 了内存,现在解密工具出来了,他们就有更大的概率能找到私钥、解密文件了。
    acess
        8
    acess  
    OP
       2017-05-20 14:55:24 +08:00 via Android
    @zwl2012 RSA 是非对称加密没错,病毒作者也及时调用了微软的 CryptReleaseContext API 来清除本机的私钥。但他没想到微软的这个 API 不靠谱,实际上有概率没清除掉生成 RSA 密钥对的质数。(这是 LZ 看完那篇博客的理解)
    acess
        9
    acess  
    OP
       2017-05-20 14:59:56 +08:00 via Android
    @zwl2012 而且即使逆向了病毒也有很大概率没 X 用,只要病毒生成密钥时没犯低级错误,就不可能直接破解密钥。
    zwl2012
        10
    zwl2012  
       2017-05-20 15:03:45 +08:00 via iPhone
    @acess 我对公钥的理解是其只负责加密,故 dump 内存得到公钥对解密文件没有任何作用。
    acess
        11
    acess  
    OP
       2017-05-20 15:06:37 +08:00 via Android
    @zwl2012 是的,dump 内存本应当没有作用,但病毒本地生成了 RSA 密钥对,而且微软的 CryptoAPI 有概率没把生成 RSA 密钥对的质数从内存中清除掉,所以才有现在的解锁工具 wanakiwi。
    acess
        12
    acess  
    OP
       2017-05-20 15:07:11 +08:00 via Android
    继续事后诸葛亮:
    WanaCrypt 并没有重启的行为,休眠也同样可以阻止病毒继续运行传播,操作也相对简单,LZ 不知道为啥没看到安全厂商推荐大家休眠。
    按理说专家集体犯错的可能性应该接近 0,那应该是出于某种考虑才没这么做。
    JJaicmkmy
        13
    JJaicmkmy  
       2017-05-20 15:32:03 +08:00
    看了 Austin Evans 的视频,貌似是先加密文件,再把未加密的版本删掉。所以病毒启动后立刻断电拔硬盘应该还有救。
    acess
        14
    acess  
    OP
       2017-05-20 15:34:16 +08:00 via Android
    @JJaicmkmy 这个早就确证了……应该有不少人手动验证过。360 不就出了恢复工具。
    acess
        15
    acess  
    OP
       2017-05-20 15:34:41 +08:00 via Android
    @JJaicmkmy 但是断电是救不回已经加密的文件的。
    GNiux
        16
    GNiux  
       2017-05-20 15:46:09 +08:00 via iPhone
    LZ 说的是不是就是人家这思路: http://bobao.360.cn/learning/detail/3874.html
    gamexg
        17
    gamexg  
       2017-05-20 15:47:30 +08:00
    @JJaicmkmy #13
    @acess #15

    病毒删除未加密的文件前写 0 了吗?如果没写 0,那么可以尝收缩删除文件来找到未加密的文件。
    acess
        18
    acess  
    OP
       2017-05-20 15:57:16 +08:00 via Android
    @gamexg 就是有文件没被写 0 才有可能恢复啊。有一部分的确是被写 0 了,没救了。
    acess
        19
    acess  
    OP
       2017-05-20 15:57:30 +08:00 via Android
    @gamexg 不过这个误删恢复的思路和本贴无关
    acess
        20
    acess  
    OP
       2017-05-20 16:17:58 +08:00
    @GNiux 我说的不是这个思路。实际上,运行 360 的恢复工具 2.0 会直接干掉病毒的 tasksche.exe,然后 LZ 主帖说的工具 wanawiki 应该就不能工作了。
    acess
        21
    acess  
    OP
       2017-05-20 16:21:23 +08:00
    @GNiux wanawiki 打错,应该是 wanakiwi
    loading
        22
    loading  
       2017-05-20 16:23:54 +08:00
    屁事没有,我 virtualbox 挂载主机 linux 是只读挂的,只给一个文件夹读写.

    中招就直接快照恢复.
    SelFree
        23
    SelFree  
       2017-05-20 18:08:02 +08:00   ❤️ 1
    @zwl2012 这个勒索软件开发时生成 RSA 密钥对( pub1, pri1 ),其中 pub1 编码在程序里,pri1 保存在服务器上。感染时在本地生成 RSA 密钥对( pub2, pri2 )然后用 pub1 加密 pri2,用 pub2 加密每个文件的 AES 密钥。正常途径要解密文件,就要用 pri2 解密每个 AES 密钥,而解密 pri2 就要用服务器上的 pri1。本帖的思路是 dump 生成( pub2, pri2 )时的质数,从而直接得到 pri2。
    acess
        24
    acess  
    OP
       2017-05-20 18:42:03 +08:00 via Android   ❤️ 1
    LZ 猜测安全专家可能没想到微软的 Crypto API 居然没有清除掉内存中的质数,所以他们才没考虑 dump 内存的方法。
    如果让 LZ 继续脑补,就是“阴谋论”了:如果 dump 内存的方法被广泛传播,潜在的勒索软件受害者可能未必把这条信息当回事,但勒索软件制造者倒是很可能在意这条信息,并开始思考如何应对内存 dump。所以,大家决定保持沉默,不把 dump 内存作为首选方法推广。更不用说通过休眠 dump 内存实际上是有“睡死”失败风险的……而且,病毒已经掌握机器控制权,什么都有可能发生,说不定检测到受害者想利用弱点进行破解,就直接撕票(比如删除私钥)。
    binghe
        25
    binghe  
       2017-05-20 23:15:52 +08:00
    这边有提供一个恢复工具,据说有人恢复出来了。具体的我不清楚,楼主可以试试。
    http://mp.weixin.qq.com/s/LfMWu5LqfwLOk9bYZmeFOA
    acess
        26
    acess  
    OP
       2017-05-20 23:51:16 +08:00 via Android
    @binghe 广告而已
    SuujonH
        27
    SuujonH  
       2017-05-21 00:14:15 +08:00
    知道这个工具的人都早就打了补丁不会中毒,中了毒的再去下也来不及...
    acess
        28
    acess  
    OP
       2017-05-21 00:15:55 +08:00 via Android
    @SuujonH 欧洲刑警组织都在 Twitter 上转发了,这玩意已经不是技术宅限定了吧。
    不过我想说的是为啥各大安全厂商不建议大家想办法 dump 内存,明明 dump 下来可以增加完全恢复概率的。
    reizen
        29
    reizen  
       2017-05-21 00:42:30 +08:00
    插嘴问一下,希望不要被打。如果硬盘满了,或者剩余空间不够放第一个被加密后的文件时会出现什么情况?
    wevsty
        30
    wevsty  
       2017-05-21 01:18:46 +08:00   ❤️ 1
    不赞成休眠这种操作
    1、并不是每个人的机器都会开启休眠这个功能的。如果没有开启休眠,手动启动休眠会写硬盘,这次只是碰巧能从内存 dump 找到密钥而已,找不到密钥很大程度上对硬盘做数据恢复可能还有点用,而休眠这种写硬盘的操作没准真就会让可以恢复出来的文件 gg 了。
    2、在内存中找到密钥的条件太苛刻,对普通用户来说难以操作,这次是影响太大才会有这么多研究,没办法保证有这样能力的人次次都来帮助普罗大众。
    3、CryptReleaseContext 这个函数不销毁 key,msdn 明确指出了
    This function does not destroy key containers or key pairs.
    objects should be destroyed with calls to CryptDestroyKey and CryptDestroyHash before CryptReleaseContext is called.
    见 MSDN: https://msdn.microsoft.com/en-us/library/aa380268.aspx
    从逆向的结果来看,可能是 WanaCry 的开发者在这方面有失误。
    4、病毒代码正在执行过程中可能会发生任何事,就算病毒代码阻止关机,阻止休眠也是完全有可能的,虽然这个例子中不存在,但是不能否认这种可能性。如果感染这种病毒,也许直接拉电源会更有效。
    acess
        31
    acess  
    OP
       2017-05-21 03:30:27 +08:00 via Android
    @wevsty
    1.我记得 hiberfil.sys 不是提前占过空间的吗,这样应该不会影响数据恢复啊……看样子我可能确实姿势水平不够。
    2.我也没说一定能找回来,现在提这个看上去确实很马后炮,不过我还是觉得,想办法 dump 出内存可以提升获救的概率——就是赌一把。
    3.原谅我的姿势水平不足……我只是看过主贴那篇分析文章而已,看得还不仔细,但我记得作者说过勒索作者没犯错来着……
    4.我觉得除非碰到腹黑变态的勒索制造者,休眠操作可以阻止病毒继续运行传播,而且好像不会比拉电源有太多显著的坏处(不知道对不对)。
    acess
        32
    acess  
    OP
       2017-05-21 03:31:36 +08:00 via Android
    @wevsty Win8 起,因为快速启动,开了休眠的人应该挺多的。但 hiberfil.sys 如果“伸缩”了,可能的确会覆盖掉本来有希望恢复的数据。
    acess
        33
    acess  
    OP
       2017-05-21 03:37:16 +08:00 via Android
    @reizen 拍脑袋想一下:病毒可能会直接尝试覆盖原文件,而不是创建新文件。为啥 WanaCrypt 没这么做我就不懂了。
    acess
        34
    acess  
    OP
       2017-05-21 03:49:14 +08:00 via Android
    @wevsty
    刚刚回复得有点急……可能我说的有点缺乏逻辑。
    刚刚稍微缕了一下思路:
    我一开始以为休眠不会造成坏影响——反驳:hiberfil.sys 可能伸缩,然后就可能吃掉原本有希望恢复的文件。
    我认为休眠可以增加获救概率——反驳:根据最初的分析,通过数据恢复途径“自救”更有价值。休眠反倒可能阻碍数据恢复。
    可能安全专家们的确缺失了 CryptReleaseContext 的一些犄角旮旯的知识,也可能他们虽然知道这些知识,但害怕复杂的语言影响传播,所以最终还是选择放弃宣传内存 dump 这条路。
    过了那么多天才出现搜索质数的自救方案,只能说遗憾。
    acess
        35
    acess  
    OP
       2017-05-21 04:00:26 +08:00 via Android
    @wevsty
    稍微搜了一下,好像又找到支持休眠的消息了:
    https://superuser.com/questions/746290/what-happen-if-we-reduce-the-size-of-hiberfil-sys
    看上去就算 hiberfil.sys 不够大,也只会休眠失败,而不会撑大这个文件?
    果真如此的话,休眠的坏处好像仅仅剩下腹黑变态的勒索作者可能做出撕票之类针对性报复行为了吧——但受害者一方也不是完全没办法吧,安全专家会逆向病毒样本,那么说不定还有机会把病毒作者的小花招干掉?
    acess
        36
    acess  
    OP
       2017-05-21 04:04:18 +08:00 via Android
    @wevsty 从内存 dump 里找密钥可能的确很难,可能是知乎的答案让我产生了分析病毒这件事不难做的错觉……
    不过,如果受害者中的是流行的勒索病毒,样本相似性很高,甚至大家中的都是一样的,那分析成本可能摊到每个受害者身上就不多了?
    ifishman
        37
    ifishman  
       2017-05-21 08:53:54 +08:00 via Android
    @zwl2012 私钥加密,公钥解密是肯定可以的
    YanwenSun
        38
    YanwenSun  
       2017-05-21 09:53:20 +08:00 via Android
    休眠文件也是会加密的吧 虚拟内存就是加过密的
    acess
        39
    acess  
    OP
       2017-05-21 10:16:02 +08:00 via Android
    @Livid 虽然现在主要讨论的是 Windows,但是勒索软件在其他系统上也存在,dump 内存的思路应该也是通用的,也许可以再移动一下?
    acess
        40
    acess  
    OP
       2017-05-21 10:17:27 +08:00 via Android
    @YanwenSun 不是开了 BitLocker 会加密整个分区,然后 hiberfil.sys 和 pagefile.sys 如果在被加密的分区就会被顺带加密么……除此之外还会有什么情况会加密它们?
    tabris17
        41
    tabris17  
       2017-05-21 10:34:32 +08:00
    通过公钥破解私钥?这也挺困难的
    acess
        42
    acess  
    OP
       2017-05-21 10:55:31 +08:00 via Android
    @tabris17 wanakiwi 的原理不是公钥推私钥(难度超高),而是从内存中搜索生成 RSA 密钥对的质数,然后重建出私钥。
    而且 LZ 好奇的并不是 wanakiwi 本身,而是为啥没见到有人宣传中勒索后应该先想方设法 dump 出内存。
    tabris17
        43
    tabris17  
       2017-05-21 11:10:46 +08:00
    @acess 懂得 dump 内存的人也不会中这种病毒了
    Livid
        44
    Livid  
    MOD
       2017-05-21 11:27:05 +08:00 via Android
    @acess 嗯。

    Moved to /go/security
    acess
        45
    acess  
    OP
       2017-05-21 12:14:27 +08:00 via Android
    @tabris17 休眠就可以 dump 出内存来,操作很傻瓜。
    而且现在的勒索看上去“ low ”,不代表以后不会出现技术变态猥琐的……毕竟能拿到赎金,被抓的也少,诱惑很大啊。
    不过我觉得各大安全公司的专家肯定也想到 dump 内存了,我只是不明白他们为什么不把这个思路推广出去,肯定是出于某种考虑的。
    acess
        46
    acess  
    OP
       2017-05-21 12:20:09 +08:00 via Android
    @Livid 谢谢
    wevsty
        47
    wevsty  
       2017-05-21 13:02:06 +08:00
    @acess
    在休眠开启的状态下 hiberfil.sys 是提前占用空间,所以开启状态下进行休眠应该不会导致覆盖数据覆盖,这你没有说错。
    我的意思是,如果休眠关闭的情况下打开休眠,就会导致空间被占用形成数据覆盖。
    当然,如果默认打开休眠也有另一个副作用,那就是休眠占用了太多磁盘空间,磁盘剩余空间不足也会影响数据恢复的成功率。
    总体来说,内存 dump 的方案有一定的用处,但是实现难度太高,不适宜作为大众化的方案推广。
    acess
        48
    acess  
    OP
       2017-05-21 13:06:16 +08:00 via Android
    @wevsty 是的,手动开休眠会覆盖数据,我忘了说了。但是对于已经开了休眠的机器,我觉得休眠至少不是个更坏的方法,对于那些忘记备份重要数据(也许还可能是无法实时备份)的人来说,多一丝希望也是好的。
    acess
        49
    acess  
    OP
       2017-05-21 13:07:50 +08:00 via Android
    @wevsty 这么想也许有点幼稚,不知道对不对:大家与其把赎金交给勒索者,不如捐款给安全专家让他们集中精力分析勒索病毒?
    wevsty
        50
    wevsty  
       2017-05-21 13:21:04 +08:00   ❤️ 1
    @acess 这种想法本身没错,只不过全世界的安全专家供给没有那么充足。
    而且大多数恢复数据的方法需要的前提条件大多数人都是没办法满足的。
    如果勒索软件开发者正确的进行了开发,那么安全专家也只能束手无策,无能力为。
    一般我身边的人问我被勒索病毒加密了文件怎么办,我都是直接回答,放弃文件自己重新弄。
    无论是数据恢复,还是找到加密密钥,或者破解加密,都是需要建立在一定的前提条件下的,如果这次攻击更加精致一些,那就真的一点办法也没有了。
    acess
        51
    acess  
    OP
       2017-05-21 13:26:00 +08:00 via Android
    @wevsty 哎,确实,勒索作者想搞得点水不漏太容易了。
    acess
        52
    acess  
    OP
       2017-05-21 13:27:50 +08:00 via Android
    @wevsty 不过我也是希望有重要文件(至少文件价值远大于一台普通个人电脑)被锁的人能多一丝希望……
    acess
        53
    acess  
    OP
       2017-05-21 13:31:22 +08:00 via Android
    @wevsty 我也觉得预防比事后补救重要。
    但现实中仍然有人不接受教训吧。那些被锁数据不重要的,当个谈资吹吹牛就算过去了。但如果被锁数据重要呢?就算“痛改前非”也挽救不了已经被锁的文件啊(我记得 Twitter 上就有个自称全职 WanaCry 受害者,新晋 Windows 更新脑残粉的账户……)
    acess
        54
    acess  
    OP
       2017-05-21 14:18:11 +08:00 via Android
    用诡异一点的思路考虑,就算 dump 内存等手段可以破解掉勒索软件,可能也并不是好事。
    到现在还缺乏安全意识的人,可能确实很难被普及安全意识,他们脑中可能只会留下“ X 安全公司很厉害,中勒索就找他们,能搞定”这种印象,而不会去花精力了解一些安全方面的常识。
    wevsty
        55
    wevsty  
       2017-05-21 16:34:52 +08:00
    @acess 人类从历史中学到的唯一教训就是,人类从不吸取历史教训。
    没有人能拯救世界,即使费尽心思为它们好,它们也不会听你的或者感谢你。反倒是自己吃过亏,也许还能有一点进步也说不定。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4159 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 04:12 · PVG 12:12 · LAX 20:12 · JFK 23:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.