一、 前言
在最近这段时间,加密勒索类软件有简化的趋势,软件开发者将目光转向了拥有较为完善的加密函数类库的.NET平台,同时也去除一些混淆操作,直接使用.NET平台下一些公开的混淆方法。当然,软件开发的简化也“造福”了国内一大帮急于发财但技术又不是那么过关的“伪黑客”。从最近的样本捕获可以发现,已有一些国内黑客试水.NET平台下的加密勒索软件。 二、 样本具体分析捕获到的样本由c#语言编写,使用了.NET Reactor4.2混淆,在去混淆之后程序只有20几k的大小。可以看出,.NET平台下的加密勒索软件相比较之前国外的其他加密勒索软件体积上缩小特别多,但加密的速度还是不尽如人意,一般需要半分钟至一分钟的时间才能完成一整套加密操作。 图1 去混淆后的程序非常小 样本集加密与解密于一身,当文件被加密后,受害者只需要到相应比特币网站上付款然后再双击运行一次原程序即可进行解密。第二次运行该程序,程序便通过判断赎金是否到账来决定是否进行解密。相比较国外一些非常繁琐的交付赎金解密的步骤,这款国产敲诈勒索相对比较“良心”,但也侧面说明一点,作者的目标可能不是一些企业用户或者机构用户,而是普通的用户,包括不了解电脑知识的用户,该软件一旦传播开来破坏性不小。 和其他加密勒索软件的套路相同,该软件也是使用AES加密算法去加密系统中的文件,然后使用RSA加密算法去加密AES密钥。虽然AES是对称加密算法,但RSA为非对称加密算法,只有拥有RSA私钥才能解密得到AES的密钥进而对被加密的文件进行解密。除外,软件加密时使用的AES密钥是随机生成的,因此在加密过后无法复现密钥。 图2 密钥间加密过程 图3 用AES密钥对文件进行加密 程序通过判断文件名来选择执行加密的文件,除了一些系统文件夹诸如“Program Files”之外,还专门针对国内用户加密文件名中含有“优酷”,“风行”,“QQpet”字样的文件。 图4 一些被加密的文件名 在进行加密之后,程序会将交付赎金的步骤等需要受害者知晓的信息写入到文件中,并将文件放在系统的关键文件夹以及桌面上。除外,为了更加显眼作者干脆来了个超大的对话框告诉受害者交付赎金的方法。 图5 初始化文件中的内容 图6 将恢复步骤写入文件并复制到桌面上 图7 循环弹对话框 下图所示就是弹出的写有恢复步骤的对话框。从中可以看出,恢复步骤其实不复杂,交付赎金之后双击再次运行程序即可。 图8 写有恢复步骤的对话框 那么程序是如何判断用户已经交付赎金了呢?从下面的代码可以看出,程序访问相关比特币帐户,并根据返回值来进行判断。可以看出,作者使用的比特币网站和国内一些打码平台的运作方式相似,即用户通过相关网址提交数据,而程序可以访问相关接口来获取实时的结果,这种借助第三方来进行交易的方式不仅不容易暴露作者身份,也方便作者实时获得账户信息,可以说是一种自动化的“提款机”。 图9 访问比特币帐户相关网址 图10 判断付款金额是否足够 从上图可以看出,受害者应付的数值为num3,受害者所付的数值为num4/1E08,通过判断两值的大小来确定付款金额是否足够。从返回信息和代码信息可以看出,num3是应付赎金对应的比特币数目,通过访问hxxp://blockmeta.com/api/v1/chain/ticker可以获得当前比特币对人民币的汇率,并通过num(应付金额)/num2(比特币汇率)来计算作者应得的比特币,然后作者访问自己账户获得已收到的比特币数并进行比较。 图11 返回信息显示比特币汇率 在获得赎金后,程序就该执行解密操作了,按照常见的加密勒索软件的套路应该是访问一个暗网地址获取密钥解密。不过。。。作者好像用了另一种套路,他把密钥全部存放在了本地。。。放在了本地。。。本地。。。 如下图所示,作者把加密文件用的AES密钥和加密AES密钥的RSA公钥私钥全存放在了桌面的ckt文件中。 图12 生成ckt后缀的文件存放密钥 当交付赎金成功后,即通过本地的ckt文件进行解密。 图13 调取存放在本地的密钥进行 既然密钥都存放在本地,就可以通过密钥来进行相应的解密操作。可以说,这个加密勒索做得相当相当相当失败。不过换句话说,一般用户可能不知道桌面上的ckt文件就是解密的密钥,所以说,中了加密勒索软件之后先别慌张,先检查程序是否遗留下样本或者一些相关的信息,如果有的话可以提交到杀毒软件相关反馈窗口,由病毒分析人员分析并确定解密的可行性。 除了利用本地的密钥进行解密,我们还发现了另一个可以利用的点。程序通过判断作者比特币账户上的比特币数量是否大于应付赎金可兑换的比特币数量来决定是否进行解密。判断的代码如下所示。 图14 判断条件 该条件如果成立,则说明支付的赎金不够。因此满足支付的条件为num4/1E08>num3。num4和num3都是从作者账户或者相应比特币汇率信息中得到的数据,修改较不方便,但1E08是硬编码在代码里的,当然可以通过修改这个数值来使条件满足。既然作者用num4/1E08和num3比较,说明num4应该比num3大好几个数量级,我们不妨把1E08改为1,只要num4最初不等于0,num4/1E08>num3就有极大可能会成立。 图15 修改前相应位置的IL指令 图16 修改后相应位置的IL指令 果不其然,即使没有交付赎金,程序也能跳转到解密部分执行解密功能。加密勒索软件转眼间就成了解密程序。当然,如果num4等于0,就不能通过修改1E08这个值来改变跳转条件,这时候可以通过修改相应的IL指令将跳转条件中的<=改为>即可实现相同效果。如下图所示。 图17 修改前相应位置的IL指令 图18 修改后相应位置的IL指令 声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除 |