在逛bleepingcomputer时,发现一个有趣的文章,链接:[https://www.bleepingcomputer.com/news/security/killdisk-ransomware-now-targets-linux-prevents-boot-up-has-faulty-encryption/ 顿时又勾起了我分析样本的欲望,其实很早之前我就分析过多款勒索类的软件,但都是基于window/Android等平台的,也接触过osx的一款开源勒索软件,对于Linux平台的勒索软件还没玩过,同时这款样本,还会修改系统grub,导致开机异常,作为一名安全人员,好奇心使然,我必须得弄明白它的原理以及攻击手法,通过上面的文章,我就找到下面一篇文章:http://www.welivesecurity.com/2017/01/05/killdisk-now-targeting-linux-demands-250k-ransom-cant-decrypt/ ,样本是由ESET发现的,上面提供了样本的HASH值:8F43BDF6C2F926C160A65CBCDD4C4738A3745C0C,google搜了一大圈,没有找到下载链接,好可惜,于是在自己的安全研究群里问了以前的同事和朋友,还好前同事有VT帐号,给我下载了样本,于是就有了下面的一篇文章,也正好趁这个机会跟大家一起学习了解一下2016年比较热门的勒索软件,谈谈自己的一些经验!本人主要从事安全研究方面的工作,不限平台(window/linux/andrid/ios/osx,以及各种IoT智能设备等),有兴趣的可以相互交流学习,有不对的地方,请大牛们多多指教!
KillDisk是一款之前比较有名的恶意软件,是由BlackEnergy组织攻击乌克兰电网以及新闻银行等系统的恶意软件,有要用于清除系统扇区,删除重要的系统文件,对特定类型的文件内容进行覆盖,结束系统进程等,不清楚的可以去查阅相关资料以及报告,就不过多介绍了,我这次主要分析的是基于Linux平台的KillDisk变种的勒索样本,其实之前也有人发现过Linux平台的勒索样本,大致手法都差不多,它会遍历系统多个目录下的各种文件,并进行加密,但这款样本同时会修改Linux系统的grub,导致系统开机异常,启动的时候,界面会弹出勒索信息,要求你支付BTC进行解锁,属于典型的勒索类恶意样本,样本采用的加密算法为三重DES加密算法,每个密钥都是随机生成的,所以无解。
首先查看文件类型,如下:
从图中我们可以得知,此样本为linux64位可执行程序,通过ida反编译程序,发现程序未加密,未加壳,main函数如下:
动态跟踪到main函数,如下所示:
样本首先为利用daemon函数创建一个单独的Linux守护进程执行恶意代码,参数为0,0,如下所示:
动态调试main函数,创建daemon守护进程如下:
创建完守护进程之后,然后通过print_bnr修改Linux的grub项,导致系统bootloader启动发生异常,如下所示:
动态跟踪到print_bnr函数之后,如下所示:
函数拼接相应的字符串,做为grub启动项菜单显示,拼接字符串过程如下:
然后判断系统目录下的/etc/default/grub启动项文件是否存在,如果存在,则修改/boot/grub/menu.lst文件或者修改/boot/loader.rc配置文件(主要是为了兼容一些老的或其它各种类型的Linux系统版本),在一些新的Linux版本下已经没有上面的这些启动文件了,修改完成之后,只需要修改/etc/grub.d/40_custom这个启动项文件即可,写入的文件内容,如下所示:
然后遍历/etc/grub.d目录,将不是40_custom的文件全部删除,因为修改了grub启动项,需要执行update-grub命令,如下所示:
现在勒索样本已经成功修改了Linux系统的grub启动项,当系统重启之后,bootloader会显示我们刚刚写入的字符串菜单项,如下所示:
完成了grub的改写之后,后面的主要工作就是加密系统各个目录下的文件了,具体通过如下两个函数进行完成,加密工作完成之后,重启操作系统,进行勒索,如下所示:
第一个加密函数,会对如下11个目录的文件进行加密,目录列表如下:
/boot
/bin
/sbin
/lib/security
/lib64/security
/usr/local/etc
/etc
/mnt
/share
/media
/home
第二个加密函数,会对如下5个目录的文件进行加密,目录列表如下:
/usr
/tmp
/opt
/var
/root
由于两次使用的加密函数都是一样的,我们下面重点分析一下,它的加密过程,以及运用了哪些加密算法,加密函数如下:
跟踪进入到bypass_dir函数,如下所示:
动态跟踪入进加密函数,加密/boot目录的文件,如下所示:
这个就和window上的目录遍历差不多了,当遍历到grub启动项文件时,则跳过,如果不是启动文件进调用crypt_file函数进行加密,crypt_file函数如下所示:
加密函数首先通过gen_key函数,生成三个密钥key,gen_key函数如下所示:
从代码可以看出,生成的三个密钥,对于每个文件来说都是随机生成的,然后对每个文件内容分成文件块加密,每个文件块的大小为4096字节,加密函数分别为crypt_all,crypt_10mb,crypt_1mb这三个函数,从代码分析,可以得出这三个函数使用的加密算法最后都是一样的,如下所示:
通过分析my_ecb_crypt函数,我们可以得知,使用的加密算法为三重DES加密算法,三个密钥都是之前随机生成的,如下所示:
加密完成之后,可以看到所有的文件都已经被加密了,如下所示:
从上面的分析可以得出,勒索软件使用了三重DES加密算法,且对应的每个文件都是按照4096大小的文件块进行加密,文件加密密钥都是随机生成的,因此根本无法解密文件,就算你按照它上面的要求给了BTC,这类勒索软件真是坑人,真够黑的,太不道德了,盗亦有盗呢?
好了,样本分析完了,再说说自己对勒索类样本的一点个人看法和经验,最近几年勒索软件是越来越流行,各大安全公司也在积极应对,同时随着各种物联网设备的兴起,可能以后会越来越多有针对物联网相关的勒索软件,反正只有要利益的地方,就一定有黑产,前段时间就有报道一款TV设备受到了勒索软件的攻击,以及之前DEFCON上演示的一款智能温控系统被勒索软件攻击等,IoT设备正在成为勒索软件的攻击目标!从15年开始我就分析过几款勒索软件,16年成为了勒索软件的曝发期,大量的勒索样本不断出现,不断变种,之前这些软件主要的攻击对象是PC平台,以及后面随着移动互联网时代的兴起,安卓手机也成为了勒索类软件攻击的主要目标,记得当时分析完Android FBI勒索样本之后,我又自己实现了一遍源代码,还蛮好玩的,这一两年各大安全公司都在花式炫耀自己捕获的各种平台下的勒索软件,如Maktub,Locker,Petya,Locky,NanoLocker,CryptoLocker,Ransomceber,PadCrypt,SkidLocker,KeyRanger,KillDisk,FsocietyLocker,Zepto,DMA Locker,Chimera,PowerWare,Tesalcrypt,Linux.Encoder.1等以及它们的变种,其实这些勒索样本都还比较容易实现,技术手段也都不太高明,从PC平台端的勒索从简单的加解密文件,到后面发展到修改mbr,然后进行磁盘加密,再到后面以Android/Linux平台为主等等,在未来随着云以及IoT时代的到来,勒索类软件会更多的向各种不同的平台进行变种,迁移,同时可能会针对相应的数据库进行加密勒索,做为安全研究人员,必须时刻保持清醒,同这些恶意软件进行斗争,寻找更有效的安全解决方案。 下面给大家介绍几款开源的勒索软件,供大家参考研学习: https://github.com/eyecatchup/Critroni-php
https://github.com/PanagiotisDrakatos/JavaRansomware
https://github.com/NTNUCIC/ransomware
https://github.com/Monkey-D-Groot/Ransomware
https://github.com/gdbinit/gopher
https://github.com/NullArray/Cypher
https://github.com/qnighy/ransomware-demo
https://github.com/alextspy/Ransomware
https://github.com/CHRISTOPHERDIEHL/Ransomware
https://github.com/ultra723/ransomware
https://github.com/tfairane/AndroMalware
https://github.com/AlphaDelta/DUMB
https://github.com/mymortal/Ransomware
https://github.com/brucecio9999/CryptoWire-Advanced-AutoIt-ransomware-Project
https://github.com/lucdew/goransomware
https://github.com/zongyuwu/RansomRB
https://github.com/SadFud/GG-Ransomware
https://github.com/marcosValle/RansPy
从上面的开源代码可以看出,勒索类的软件已经运作在了各个平台,以及可以使用各种不同的语言进行编写:C/C++,Java,JavaScript,Python,Go,C#,VB.Net,PHP,Ruby等,随着各类勒索软件的开源,使得各类勒索软件变种越来越多,用户防不胜防,这种勒索软件本身的技术含量可能不高,但确实对用户伤害最大的,如果用户相应的重要文档没有及时备份,用户的损失还是比较大的,目前还没有用效的方法应对这种勒索软件,要应对这类软件,就需要我们具有良好的上网习惯,以及对重要文件进行定期备份处理,以防患于未然。
KillDisk是由一个叫[TeleBots]的团队开发的,该团队也开发了同名的后门木马,并为2016年破坏乌克兰公司【电力系统,银行系统】的网络攻击负责。除此之外,乌克兰银行也被使用了包含该木马的恶意电子邮件攻击。
可以得出KillDisk之前是[TeleBots]团队开发的专门针对乌克兰的网络攻击样本,在2017/01/05,ESET才捕抓到一个
KillDisk的样本,具体的染感量未知,这款变种样本应该也是[TeleBots]团队开发的,由于样本刚刚出来就被ESET捕获到了,新本较新,暂未对影响量以及传播渠道进行批漏,可能未来这款样本,会被应用到专门攻击Linux服务器的用途上,目前外界感染这款样本的Linux服务器量未知,以后会不会呈现一个爆发的趋势也是未知的。
能过微步在线平台查找Hash值,上面显示样本发现时间为:2017/01/05,相关的IOC列表如下:
26633a02c56ea0df49d35aa98f0fb538335f071c
84a2959b0ab36e1f4e3abd61f378dc554684c9fc
8f43bdf6c2f926c160a65cbcdd4c4738a3745c0c
95fc35948e0ce9171dfb0e972add2b5d03dc6938
92fe49f6a758492363215a58d62df701afb63f66
b2e566c3ce8da3c6d9b4dc2811d5d08729dc2900
2379a29b4c137afb7c0fd80a58020f5e09716437
25074a17f5544b6f70ba3e66ab9b08adf2702d41
(由于ESET并未对样本的捕获来源以及样本的感染进行过多的详细说明,以上纯属个人想法,有不对的地方,请大牛多多指教,欢迎交流)
https://www.bleepingcomputer.com/news/security/killdisk-ransomware-now-targets-linux-prevents-boot-up-has-faulty-encryption/
http://www.welivesecurity.com/2017/01/05/killdisk-now-targeting-linux-demands-250k-ransom-cant-decrypt/
https://www.bleepingcomputer.com/news/security/killdisk-disk-wiping-malware-adds-ransomware-component/
http://www.linuxidc.com/Linux/2017-01/139254.htm
http://www.welivesecurity.com/2016/12/13/rise-telebots-analyzing-disruptive-killdisk-attacks/
https://x.threatbook.cn/
http://blog.nsfocus.net/analysis-ukrenergo-blackout-event-ukraine/