1.前情提要
继上篇分析了关于Babyk加密器在NAS系统的行为特征,本篇是针对EXSI环境的相关分析。
2.总体行为
3.密钥下发(Builder.exe)
这里可以通过VS生成了Builder.exe来实现对其Builder过程进行分析,可以看到主要是对这部分文件的处理与释放
文件释放列表及作用:
无法复制加载中的内容
流程图:
逻辑分析:
1 读取参数,第一个参数是文件夹路径,第二个是指定密钥文件
2 根据参数1的文件路径,来和kp.curve25519与ks.curve25519进行拼接,用于后续存储密钥
3 利用随机数函数CryptGenRandom来产生一个私钥,再利用该私钥配合curve25519算法生成一个公钥
4 或者看是否存在第三个参数,有指定私钥的文件,利用该文件内的私钥配合curve25519算法生成一个公钥
5 将私钥和外部的note.txt勒索信写入到加密器中,将私钥写入到解密器中
6 将生成的私钥和公钥写入到kp.curve25519和ks.curve25519文件中
4.密钥产生程序
4.1 逆向分析(keygen.exe)
整体流程就是调用随机数函数SystemFunction036,产生了32位的随机数
其中systemFunction036是cryptbase.dll中的函数
之后就是经过了Curve25519算法的密钥生成,得出了一个公钥和一个私钥
5.ESXI
5.1 目录结构
存在一个Build.sh脚本和源程序
构建脚本(build.sh):
通过GCC进行编译,编译成e_esxi.out加密程序后,再利用strip去除掉符号表。
gcc --no-pie main.cpp curve25519-donna.cpp sosemanuk.cpp sha256.cpp args.cpp thpool.c -o e_esxi.out -pthread -lstdc++
strip e_esxi.out
5.2 加密器分析(e_esxi.out)
5.2.1 整体流程
5.3 路径参数读取
首先该程序会根据参数的长度,来判断是否存在输出参数,如果不存在则进行提示。
MDE5NjMzNF9WNA)
5.4 路径遍历
5.4.1 写入勒索信(How To Restore Your Files.txt):
1 在目录遍历之前,都会先对传入的目录写入勒索信
5.4.2 递归遍历
之后会对目录的内容进行分辨,如果是目录则进行递归
5.4.3 文件过滤
如果是文件就先过滤,再加密。
过滤的文件后缀:
.babyk
.log
.vmdk
.vmem
.vswp
.vmsn
5.5 加密
5.5.1 流程图
5.5.2 加密流程
1 打开待加密的文件,获取其文件流
2 随机生成32位字符,当作私钥
3 利用生成的私钥,生成公钥,以用作后续给黑客进行解密
4 利用私钥和黑客的公钥生成共享密钥share key,这部分内容可以参考windows篇的解释,这里就不再描述。
5 计算share key的sha256,并将其分为两部分当作key和iv
6 将生成的KEY和IV,来当作sosemanuk流加密算法的Key和IV
7 初始化sosemanuk流加密对象
8 清空内存中加密所用的KEY和IV
9 对文件内容进行加密,一次加密0xA00000字节大小,循环直至全部文件内容加密完毕
10 将公钥写入到加密文件末尾
11 添加加密后缀到文件的名称尾部
12 文件加密结束
5.6 总结
该架构的设计因为加密的系统是EXSI系统,并未进行多余的服务关闭等功能,只是做了简单的文件过滤,然后就开始了加密,加密完毕后写入公钥,同时在目录遍历过程中会对每个目录写入勒索信(How To Restore Your Files.txt)。