请使用手机微信扫码安全登录

切换账号密码登录

绑定手机号

应国家法规对于账号实名的要求,请您在进行下一步操作前,需要先完成手机绑定 (若绑定失败,请重新登录绑定)。了解更多

不绑定绑定手机号

360官网 | 360商城

推荐论坛版块活动360粉丝商城众测粉丝轰趴馆常见问题
相关阅读:DarkSide勒索病毒家族详情

一、概述

本文中Darkside勒索病毒样本为加密模块。该勒索病毒家族采用了常见的RSA1024+salsa20的加密方案。和以往所分析的其他家族勒索病毒相比,Darkside加密模块的不同之处在于可通过内置的配置24字节数组控制执行动作。



配置数组各字节元素含义如下表:
字节偏移+1 功能 备注
1 加密模式 1 – FULL(全部加密)
2 – FAST(加密头部)
其他值 – AUTO(间隔加密)

2 终止待加密文件占用关联进程 0 – 跳过加密被占用文件
1 – 终止不在指定列表中的关联进程

3 加密本地磁盘 0 – 关闭
非0 – 开启

4 加密网络共享资源
--
5 CIS地区语言避过
--
6 删除卷影
--
7 清空回收站
--
8 自我删除
--
9 CMSTPLUA Bypass UAC
--
10 打开进程令牌所有权限
--
11 创建log文件,记录执行流程
--
12 加密时避过指定目录
--
13 加密时避过指定文件名
--
14 加密时跳过指定后缀的文件
--
15 删除指定目录
--
16 对sql文件进行FULL模式加密
--
17 终止包含指定字符串的进程
--
18 关闭指定服务
--
19 修改桌面背景
--
20 释放勒索信
--
21 完成加密后文件的图标关联
--
22 创建互斥量,使程序单例执行
--
23 反调试
--
24 搜集机器信息,加密编码后上传 机器加密前后各一次
二、代码分析
为对抗静态分析,Darkside对敏感数据进行了加密和压缩,执行开始后进行解压和解密。程序主要通过异或运算解密数据,xorBytesBuffer是由两个硬编码16字节数组生成的256字节数据。


解密以0xDEADBEEF结尾的数据,得到RSA公钥和压缩数据,其中压缩数据使用aPLib压缩算法进行压缩,解压后的数据中包含大量敏感字符串,包括程序版本、uid、加密避过文件名、目录名、关闭进程、服务等数据。

完成解压解密动作后,程序开始后续流程。
1.        命令行参数
     在执行参数方面,程序支持加密指定目录,命令行形式如下:
  1. Darkside.exe [ -path<TargetDir> | TargetDir ]
复制代码

<TargetDir>支持lnk文件,程序会对其进行解析,获取文件指向的目录。如果程序不含参数,则对机器进行全盘加密。


2.        反调试&Bypass UAC

    当前样本并未开启反调试功能(即配置字节值为0),但是从调用API NtSetInformationThread的参数计算来看,当配置中第23字节值为2时,可实现反调试(ThreadHideFromDebugger=17)。



如果当前执行进程只是普通用户权限,Darkside将使用CMSTPLUA Bypass UAC方式重新执行自身以获取管理员执行权限,并退出当前进程。



接着启用进程令牌所有权限。



3.        加密文件图标关联

    程序首先从注册表中获取MachineGuid,多轮计算多个CRC32值后,取前4字节转16进制字符串后作为加密文件后缀extname、勒索信和log文件名中间部分,例如:ae873964.ico。

    然后创建图标文件%UserProfile%\\AppData\\Local\\<extname>.ico,添加HKCR\\.<extname>注册表项,添加HKCR\<extName>\DefaultIcon注册表键值,为加密后文件关联文件图标。




4.        CIS地区语言检测避过

    和其他勒索病毒家族相似,Darkside同样会通过系统用户语言判断的方式,以避免加密CIS(独立国家联合体)地区的机器。




5.        搜集信息上传

    程序搜集的信息包括:机器使用语言、用户名、主机名、域名、系统类型、系统版本、系统架构、磁盘空间使用情况、id(由MachineGuid生成,20字节):


  1. <div style=text-align: left;>{
  2. </div><div style=text-align: left;>bot:{
  3. </div><div style=text-align: left;>ver:1.8.6.2,
  4. </div><div style=text-align: left;>uid:060108efb510c98
  5. </div><div style=text-align: left;>},
  6. </div><div style=text-align: left;>os:{
  7. </div><div style=text-align: left;>lang:%s,
  8. </div><div style=text-align: left;>username:%s,
  9. </div><div style=text-align: left;>hostname:%s,
  10. </div><div style=text-align: left;>domain:%s,
  11. </div><div style=text-align: left;>os_type:windows,
  12. </div><div style=text-align: left;>os_version:%s,
  13. </div><div style=text-align: left;>os_arch:%s,
  14. </div><div style=text-align: left;>disks:%s,
  15. </div><div style=text-align: left;>id:%s
  16. </div><div style=text-align: left;>}
  17. </div><div style=text-align: left;>}
  18. </div>
复制代码


    以上信息经过加密和Base64编码后,连接其他信息,作为数据包以post方式上传到远程服务器securebestapp20[.]com、temisleyes[.]com。

请求包格式:

  1. <RAND_8_HEXBYTES_0>=<b64encode(custom_enc(MachineInfoJson))>&<RAND_8_HEXBYTES_1>=060108efb510c98
复制代码




在所有文件结束后,程序会再次上传信息,信息主要是加密成功和失败的文件数量、数据大小、加密时间等信息。

6.        清空回收站&删除卷影

    删除固定磁盘和可移动磁盘的回收站文件夹,防止管理员从中恢复数据。


    删除卷影的方式有两种:如果当前进程是WOW64进程,使用命令行删除卷影;否则利用COM接口进行删除。



7.        结束指定服务&进程&备份目录

结束指定服务,与卷影、备份、数据库、反病毒产品等相关。

  • vss
  • sql
  • svc$
  • memtas
  • mepocs
  • sophos
  • veeam
  • backup
  • GxVss
  • GxBlr
  • GxFWD
  • GxCVD
  • GxCIMgr



终止包含指定字符串的进程,与文本编辑、数据库、浏览器、邮箱、作图等相关。

  • sql
  • oracle
  • ocssd
  • dbsnmp
  • synctime
  • agntsvc
  • isqlplussvc
  • xfssvccon
  • mydesktopservice
  • ocautoupds
  • encsvc
  • firefox
  • tbirdconfig
  • mydesktopqos
  • ocomm
  • dbeng50
  • sqbcoreservice
  • excel
  • infopath
  • msaccess
  • mspub
  • onenote
  • outlook
  • powerpnt
  • steam
  • thebat
  • thunderbird
  • visio
  • winword
  • wordpad
  • notepad



删除名为backup的所有可能的备份目录。



8.        搜索文件进行加密

搜索目标包括本地固定磁盘、可移动磁盘、网络磁盘、网络共享资源。并且只对其中可用空间大于等于100MB的磁盘进行搜索。

避过以下路径:

  • $recycle.bin
  • config.msi
  • $windows.~bt
  • $windows.~ws
  • windows
  • appdata
  • application data
  • boot
  • google
  • mozilla
  • program files
  • program files (x86)
  • programdata
  • system volume information
  • tor browser
  • windows.old
  • intel
  • msocache
  • perflogs
  • x64dbg
  • public
  • all users
  • default
  • 避过文件名:
  • autorun.inf
  • boot.ini
  • bootfont.bin
  • bootsect.bak
  • desktop.ini
  • iconcache.db
  • ntldr
  • ntuser.dat
  • ntuser.dat.log
  • ntuser.ini
  • thumbs.db

避过指定后缀文件:

  1. 386、adv、ani、bat、bin、cab、cmd、com、cpl、cur、deskthemepack、diagcab、diagcfg、diagpkg、dll、drv、exe、hlp、icl、icns、ico、ics、idx、ldf、lnk、mod、mpa、msc、msp、msstyles、msu、nls、nomedia、ocx、prf、ps1、rom、rtp、scr、shs、spl、sys、theme、themepack、wpx、lock、key、hta、msi、pdb
复制代码


    对数据库文件进行全盘加密,相应文件通过文件后缀名方式进行识别:sql、sqlite。



    为避免文件被重复加密,程序会检测文件尾部0x90(144)字节进行CRC32校验。校验方式是对0x90字节的尾部数据中前0x80(128)字节进行4次CRC32计算,得到16字节校验值,再和尾部数据最后的16字节进行比较,相同则说明该文件已被加密过。也就是说,144字节的尾部数据中,后16字节通过计算前128字节的CRC32值获取。



9.        终止文件占用关联进程

处理文件发生访问冲突时(比如文件占用),Darkside将尝试关闭文件占用相关进程,但是仅关闭不处于以下列表中的目标。

  • vmcompute.exe
  • vmms.exe
  • vmwp.exe
  • svchost.exe
  • TeamViewer.exe
  • explorer.exe





10.        文件加密方式

    Darkside创建两个I/O完成端口进行数据的传输,使用两个函数对完成端口接收的数据进行处理。



    文件加密方式采用RSA1024 + Salsa20方式的非对称和对称加密组合。RSA1024公钥内置于程序中,执行时解密获取,用于加密文件对称加密密钥。



    程序使用Salsa20对称流加密算法对文件进行加密。该算法原本需要对输入的密钥Key和Nonce值进行密钥扩展,得到4×4 DWORD加密矩阵,共64字节。但是在当前样本中,程序直接生成64字节的随机值作为扩展密钥,使用系统API RtlRandomEx。扩展密钥中的Position处值置0。



    然后RSA-1024公钥用于加密扩展密钥,得到128字节加密结果。对加密结果进行4次交替CRC32计算,得到16字节的校验值。最终对称密钥加密结果+校验值共144字节将被写入加密结束后的文件尾部,用于文件解密和加密文件检测。



根据加密文件时涉及数据的大小,Darkside设置了3种模式:

(1)        FULL:文件内部数据全部加密;

(2)        FAST:最多只加密文件首部1MB;

(3)        AUTO:根据文件大小设置每次加密片段的偏移增量,逐次加密至尾部;例如:小于1MB的每次增加512KB偏移、小于100MB的增加8MB+512KB、小于4000MB的为16MB+512KB、...。



接着,向I/O完成端口发送数据包,由I/O完成端口处理函数进行文件数据的加密和读写。两个I/O完成端口将轮流接收数据包。



I/O完成端口数据包包括以下信息:


  1. <div style=text-align: left;>+0x00: struct _OVERLAPPED
  2. </div><div style=text-align: left;>++0x00: Internal(I/O请求的状态代码)
  3. </div><div style=text-align: left;>++0x04: InternalHigh(为I/O请求传输的字节数)
  4. </div><div style=text-align: left;>++0x08: Offset(用户指定的开始I/O请求的文件位置的低位部分)
  5. </div><div style=text-align: left;>++0x0C: OffsetHigh(用户指定的开始I/O请求的文件位置的高位部分)
  6. </div><div style=text-align: left;>++0x10: hEvent
  7. </div><div style=text-align: left;>+0x14: 文件读写偏移低位DWORD
  8. </div><div style=text-align: left;>+0x18: 文件读写偏移高位DWORD
  9. </div><div style=text-align: left;>+0x1C: 每次加密片段时增加偏移量低位DWORD
  10. </div><div style=text-align: left;>+0x20: 每次加密片段时增加偏移量高位DWORD
  11. </div><div style=text-align: left;>+0x24: 进行片段数据加密(0/1)
  12. </div><div style=text-align: left;>+0x28: 加密开关重置(赋值0x24偏移处)
  13. </div><div style=text-align: left;>+0x2C: 被加密文件句柄
  14. </div><div style=text-align: left;>+0x30: 数据处理指令:
  15. </div><div style=text-align: left;>0: 从文件中读取512KB原始数据至缓冲区等待加密,修改指令值为1;
  16. </div><div style=text-align: left;>1: 加密缓冲区中数据并写回原偏移处,根据偏移增量值修改指令值0或2;
  17. </div><div style=text-align: left;>2: 写入尾部数据(加密后的对称密钥+密钥的4个CRC32),修改指令为4;
  18. </div><div style=text-align: left;>4: 数据读写结束后,如果日志功能开启则记录日志,关闭文件句柄。
  19. </div><div style=text-align: left;>+0x34: 随机生成的64字节Salsa20加密扩展密钥;
  20. </div><div style=text-align: left;>+0x74: 使用RSA-1024公钥加密后的扩展密钥,结果为128字节;
  21. </div><div style=text-align: left;>+0xF4: 经RSA加密后的扩展密钥数据的4个CRC32值,16字节;
  22. </div><div style=text-align: left;>+0x104: 每次的数据读写、加密缓冲区,512KB大小。</div>
复制代码



处理函数:



    以FULL加密模式为例,加密后文件结构和文件加密流程如下图:



11.        勒索信息文件&桌面背景修改&自我删除

    Darkside在每个被加密目录下会释放一个勒索信。




修改桌面背景。



最后自我删除。



IOCs


  1. <div style=text-align: left;>9d418ecc0f3bf45029263b0944236884
  2. </div><div style=text-align: left;>f87a2e1c3d148a67eaeb696b1ab69133
  3. </div><div style=text-align: left;>securebestapp20[.]com、temisleyes[.]com
  4. </div><div style=text-align: left;>hxxp://darksidfqzcuhtk2[.]onion/CZEX8E0GR0AO4ASUCJE1K824OKJA1G24B8B3G0P84LJTTE7W8EC86JBE7NBXLMRT</div>
复制代码


共 0 个关于DarkSide勒索病毒样本分析的回复 最后回复于 2021-5-24 17:21

评论

直达楼层

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Potato 产品答疑师

粉丝:9 关注:0 积分:11285

精华:0 金币:11915 经验:7015

最后登录时间:2024-4-24

私信 加好友

最新活动

读书日主题活动 |  世界读书日,360AI阅读

排行榜

热度排行 查看排行
今日 本周 本月 全部
    今日 本周 本月 全部

      内容推荐 热门推荐最新主帖

      扫码添加360客服号,涨知识的同时还有超多福利等你哦

      快速回复 返回顶部 返回列表