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

为啥我觉得 WanaCrypt 背后的操纵者有能力验证付款者的身份?

  •  
  •   acess · 2017-05-23 00:31:41 +08:00 · 1903 次点击
    这是一个创建于 2748 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在都说不要付赎金,很可能打水漂,因为勒索作者没法验证付款者的身份。

    但是……为啥我觉得勒索作者有办法验证赎金来源呢?

    比特币地址虽然任何人在任何时候都能生成,但只要私钥不泄露,还是不可能伪造的……
    受害者真心要付款的话,肯定要用从未公开使用过的、新生成的地址。如果受害者提前告诉勒索者,说自己要通过这个地址付款,别人也不可能猜出受害者用的地址。对于想盗用其他受害者赎金的“鸡贼”受害者来说,他们无法提前得知真正付款的受害者用了哪个地址,勒索者倒是可以提前得知,所以“鸡贼”受害者就算查了比特币交易记录,把别人付款的地址发给勒索者,勒索者也不会上当。
    勒索软件会在感染时生成 RSA 密钥对,其中 RSA 公钥被用来加密每一个“绑票”文件的 AES 密钥。每台机器的 RSA 密钥对都是唯一的(而且就算受害者泄露了公钥也没问题,如果有人把别人的公钥发过去,岂不是要白白替别人付赎金?应该没人愿意这么干;如果某个鸡贼的受害者把别人的 RSA 公钥发过去,也是没有意义的——显然,别人的 RSA 私钥无法解密自己的文件)。

    所以,勒索者会要求受害者怎么做呢?很简单,只要受害者先把本机的 RSA 公钥(被加密的 RSA 私钥其实也行)和自己付款用的比特币地址通过暗网发过去,勒索作者就可以用一个自动化的程序读出受害者的比特币地址,过一段时间后(这段时间不能太短,否则“鸡贼”的受害者可能会拿比特币交易确认延迟、网络延迟抵赖,辩称自己才是真正的付款者),受害者再用这个比特币地址付款,只要勒索者看到这个地址付款了,就可以确认赎金已经支付了,然后就可以给受害者发来的本机 RSA 私钥解密。

    如果 WanaCrypt 的解密程序有问题,界面上的“ Contact us ”如果没发送 RSA 公钥(我还不知道 WanaCrypt 具体是怎么做的),就需要受害者自己发送,这样大家发的格式可能就都不一样了,可能不利于自动验证,不过除非受害者用了特别奇葩的格式,否则至少可以免除一大部分手动验证的工作吧。
    第 1 条附言  ·  2017-05-24 11:27:35 +08:00
    LZ 讨论了那么多,感觉 WanaCry 作者广播的那个方法还是巨坑……
    首先,受害者要控制付款地址是很麻烦的。比特币设计时就没有真正的“来源地址”,一般的钱包好像也不想让用户直接控制用来发送的地址。(查了资料,Bitcoin Core、blockchain.info 等钱包好像也没用难以理解的方法,一般是挑最后用过的地址来发送,或者挑余额足够的地址来发送)
    其次,理论上存在“抢小票”的风险,操作稍有不慎,其他受害者就有可能冒充真正付了款的受害者。勒索者面对真真假假的消息,可能无力分辨,要么全给解锁,要么全不给解锁,反正现在很难抓到他,他可以看心情操作……
    如果这个勒索者的智商还在线(而且 LZ 没理解错比特币的工作机制)的话,那他也许会要求受害者用付款地址私钥签名本机的 RSA 公钥(或者私钥)来证明自己是真正的付款者,而不是冒充的——不过,这仍然不是完美的方案,那些用了某些“非链上”在线钱包 /找了代付的受害者可能没办法执行签名,因为他们手里没私钥,而且执行签名的操作也是有点麻烦的……
    LZ 是比特币新手,有错轻喷。
    第 2 条附言  ·  2017-05-24 11:32:41 +08:00
    还有,LocalBitcoins.com 看上去就是“非链上钱包”——实际上比特币在转出之前是保存在网站自己的钱包地址上的,所以从 LocalBitcoins 转出比特币时,“来源地址”并不是网站上显示的收款地址……
    最近有一位不幸中毒的 V 友在尝试付赎金,不知道这个特点有没有坑到他。
    24 条回复    2017-05-23 10:04:29 +08:00
    acess
        1
    acess  
    OP
       2017-05-23 00:53:26 +08:00
    在虚拟机里可以看到,点了界面上的“ Contact us ”后,程序会读取 00000000.res 文件,按照安天的分析( http://www.antiy.com/response/Antiy_Wannacry_Pay.html ),它是加密的文件数量、大小等信息,每个人应该都不一样吧。
    如果这些信息连同付款地址一同通过暗网被发送给勒索者,应该也足以让勒索者辨认受害者的身份了。暗网连接是加密的,这些信息应该也不会外泄,那么,“鸡贼”的受害者想把自己的 00000000.res 伪装成别人的也是空想。

    不过,分析了那么多,就算 LZ 没搞错,还得看勒索者的智商和“信用”啊……无论如何,谁也无法阻止勒索者就此卷款跑路……
    malusama
        2
    malusama  
       2017-05-23 01:25:02 +08:00 via Android
    只要分配唯一的钱包地址就能确认啊……
    acess
        3
    acess  
    OP
       2017-05-23 01:26:50 +08:00
    @malusama 但不是说很多中招的都只显示已知的三个地址么……所以才有无法确认付款者身份的说法。
    malusama
        4
    malusama  
       2017-05-23 01:27:10 +08:00 via Android
    RSA 密钥对不都唯一的么…为什么要发送
    发送被公钥加密过的 AES 密钥返回解密的密钥就行了吧
    malusama
        5
    malusama  
       2017-05-23 01:28:29 +08:00 via Android
    @acess 没法连接 TOR 本身就无解了吧…
    acess
        6
    acess  
    OP
       2017-05-23 01:30:22 +08:00
    @malusama
    病毒感染时在本机生成一个 RSA 密钥对,其中,私钥被硬编码在程序里的 RSA 公钥加密,这样就只有勒索者才能把这个私钥重新解密出来。
    每个文件的 AES 密钥都不一样,执行加密时,会把每个文件的 AES 密钥都用本机的 RSA 公钥加密。
    acess
        7
    acess  
    OP
       2017-05-23 01:31:05 +08:00
    @malusama 如果后续想办法让 Tor 能连得上(比如 VPN、路由器装 ss 等),我觉得还是没问题的。
    malusama
        8
    malusama  
       2017-05-23 01:34:34 +08:00 via Android
    @acess 为什么要生成一个 RSA 密钥对???
    作者先前生成一个 RSA 密钥对公钥硬编码在程序里感染主机后生成一个 AES 密钥把文件用 AES 加密然后再用公钥加密 AES 的密钥不就好了?
    malusama
        9
    malusama  
       2017-05-23 01:35:35 +08:00 via Android
    @acess … TOR 得下一个软件吧…
    又不是用 VPN SS 的协议
    acess
        10
    acess  
    OP
       2017-05-23 01:37:46 +08:00
    @malusama 根据现有的分析,WanaCry 就是这么干的。
    个人理解,这样可以做到每个文件都有唯一的 AES 密钥、每台中招机都有唯一的 RSA 密钥。然后,就算 dump 内存也只能找到一个文件的 AES 密钥,无法解救其他文件;就算有受害者把赎金买来的私钥公开了,也无法解救其他受害者。
    当然,WanaKiwi 利用了能重新生成 RSA 私钥的质数并没有从内存中清除的缺陷……
    acess
        11
    acess  
    OP
       2017-05-23 01:38:02 +08:00
    @malusama Tor 是 WanaCry 自带的。
    malusama
        12
    malusama  
       2017-05-23 01:43:53 +08:00 via Android
    @acess 你觉得这加密流程合理么……哪的分析有地址么?
    你在感染的机器生成 RSA 那还有啥意义……
    acess
        13
    acess  
    OP
       2017-05-23 01:46:46 +08:00
    @malusama 这流程哪里不合理啊……
    分析:
    http://bobao.360.cn/learning/detail/3853.html
    acess
        14
    acess  
    OP
       2017-05-23 01:48:57 +08:00
    @malusama 本地生成 RSA 的意义我已经说过了:每台中招机都有唯一的 RSA 密钥,就算有受害者把赎金买来的私钥公开了,也无法解救其他受害者。每个文件都有唯一的 AES 密钥,就算 dump 内存也只能找到一个文件的 AES 密钥,无法解救其他文件。
    除此之外,这样也提供了方便,受害者只需要一个 RSA 私钥就可以解密本机所有文件,不需要把所有 AES 密钥都传给勒索者去解密。
    acess
        15
    acess  
    OP
       2017-05-23 01:54:12 +08:00
    @malusama 本机生成的 RSA 私钥从一开始就用勒索作者硬编码在程序里的 RSA 公钥加密了,所以只有找勒索者才能把本机生成的 RSA 私钥重新解开,然后才能挨个解密每一个文件的 AES 密钥、再用 AES 密钥解密文件数据。
    acess
        16
    acess  
    OP
       2017-05-23 02:09:26 +08:00
    我觉得如果勒索作者没有依靠本机生成的 RSA 密钥来辨认受害者的身份,那就是有漏洞的:可能有一群鸡贼的受害者,在联系勒索者、付款前就把 00000000.res 等机器特征信息都伪装成一样的了。
    可以想见,如果勒索者忘了检查每一个机器特征是否有多个 RSA 密钥尝试申请解锁(对应多个明显是想用一份赎金骗多份解锁),那受害者们也许就可以用一份赎金解锁 N 台电脑的所有文件了。
    但是,勒索者也许不会吃这一招……
    malusama
        17
    malusama  
       2017-05-23 02:09:44 +08:00 via Android
    @acess 为什么要给你私钥……你给我密文我解开给你不就好了….
    acess
        18
    acess  
    OP
       2017-05-23 02:15:06 +08:00
    @malusama
    勒索者手里有 RSA 密钥对 A,包括公钥 A 和私钥 A
    每个受害者机器都生成了唯一的 RSA 密钥对 X,包括公钥 X 和私钥 X。私钥 X 刚生成出来就被公钥 A 加密,然后保存在受害者的硬盘上。
    受害者支付赎金解锁时,受害者发给勒索者的就是被公钥 A 加密过的私钥 X,勒索者用私钥 A 解密出私钥 X,再把它发给受害者。
    imcoddy
        19
    imcoddy  
       2017-05-23 09:41:11 +08:00
    “受害者真心要付款的话,肯定要用从未公开使用过的、新生成的地址。”

    这一句话是不对的:受害者要付款的话,并不一定需要使用从未公开使用过的、新生成的地址。事实上也没法使用,因为这样的地址里面也没有币。

    不过,据说实现解锁的方式和你后边说的类似,现在是手动处理的就是了。
    acess
        20
    acess  
    OP
       2017-05-23 09:45:05 +08:00
    @imcoddy 是的,我主贴在这块说的有问题,即使不用新地址也是可以的,只要提前把用来付款的地址发给勒索者就可以了。
    acess
        21
    acess  
    OP
       2017-05-23 09:48:20 +08:00
    @imcoddy 突然觉得用新地址反而有风险:如果受害者还没把新地址告诉勒索者,就自己把勒索者要求的金额转进新地址了,那么,可能有鸡贼的受害者在盯着这块,一看到有人转了数额和赎金相近的金额,就抢先把这个地址发给勒索者。
    imcoddy
        22
    imcoddy  
       2017-05-23 09:53:20 +08:00
    @acess 知乎上不就是有人教大家用这个方式解锁的么……
    acess
        23
    acess  
    OP
       2017-05-23 09:55:18 +08:00
    @imcoddy 新地址不是没币,需要先转进去么……所以,我刚刚担心的,和知乎上那个方法还是有点不一样的吧?知乎上的方法不是盯着勒索者的钱包么,我的意思是其他受害者可能会盯上所有钱包,看到像是准备要付款的地址就赶紧抢过来用。
    acess
        24
    acess  
    OP
       2017-05-23 10:04:29 +08:00
    @imcoddy 如果有很多受害者都找某个人代付,然后都用一个地址付款,也是有“小票被抢走”的风险的:可能有受害者不管三七二十一,直接把最常给勒索者付款的那几个地址发给勒索者,赌过一段时间后会有人付款。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2726 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 12:35 · PVG 20:35 · LAX 04:35 · JFK 07:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.