在复活节探望岳父期间,leo-stone 发现一家人被 Petya 勒索软件困扰。有人正在找工作,岳父需要读他的简历,于是他输入了管理员密码——结果没有看到文件,却看到了 Petya 的红色骷髅头,这表明磁盘的主文件表已被加密。唯一的出路是支付赎金获取密钥。作者直白地描述了困境:“支付赎金没什么挑战性”;挑战在于不付钱而破解锁。

leo-stone 没有正面攻击密码,而是针对 Petya 自身检查输入密钥的方式。他重新实现了验证哈希并发布了要点:Salsa 使用 16 位字而非 32 位,运行十轮(Salsa10)而非二十轮(Salsa20)。测试数据留在受害者磁盘上——第 54 扇区有一个 8 字节的 nonce,第 55 扇区有一个 512 字节的加密验证扇区。他的 Go 程序读取这 512 字节,将相关字与 0x37 异或,以恢复哈希的目标输出,读取 nonce,然后用遗传求解器来解决问题。

求解器在几秒内找到了密钥——他本人用时 10 到 30 秒——并且他将工具发布为开源项目 hack-petya,附有简单的说明:从加密磁盘提取 nonce 和验证扇区,保存为 nonce.txt 和 src.txt,运行程序,等待,然后使用密钥,最好在虚拟机中对磁盘镜像操作。他为代码凌乱道歉(“我有点赶”),并修补了遗传库,因为它在 Go 1.6 下并发读取映射时会崩溃。该发布在 2016 年 4 月 11 日的 Hacker News 上获得了 451 分和 79 条评论;仓库显示有 612 个星标和 80 个分支。

重新实现 Petya 的密钥检查,然后让遗传求解器找到密钥——无需支付赎金

他攻击密钥检查而不是密码:验证扇区位于受害者磁盘上,将 Petya 的设计变成任何人都能重建的可测试预言机

遗传求解器使搜索快速:候选密钥针对重新实现的哈希进行进化,直到正确的密钥出现,用时 10-30 秒而不是暴力等待

修复免费提供,并附带精确的恢复步骤,因此其他受害者无需支付赎金或发送磁盘就能解密

在 GitHub 和 Hacker News 上发布让工具获得广泛传播:发布时获得 451 分和 79 条评论,仓库至今显示 612 个星标和 80 个分支

必须验证自己密钥的锁会在受害者一侧留下预言机:重建检查并针对它进行搜索,而不是支付赎金,然后分发工具,让修复得以传播。

leo-stone 在 10-30 秒内恢复了自己的密钥,并公开发布了工具。2016 年 4 月 11 日的 Hacker News 发布获得了 451 分和 79 条评论,仓库归档显示有 612 个星标、80 个分支和 34 个关注者。页面没有声称对后来的 Petya 变种有效;留下的是可复用的模式——提取磁盘上的验证数据,重建检查,并让搜索找到密钥。

从这里,追溯依据

参考来源

  1. leo-stone/hack-petya — search key to restore petya encrypted mft github.com
  2. Hack-petya mission accomplished — Petya ransomware decryptor (Hacker News discussion) news.ycombinator.com