导语:2017年6月Scarab(圣甲虫)勒索软件被发现,此后,在野外发现了几种不同的变种。然而2017年12月我们发现一个新的种变种叫做Scarabey,其传播有些不同,也拥有不同的有效载荷代码。
Scarab(圣甲虫)勒索软件是在2017年6月被发现的。此后,在野外发现了几种不同的变种。最流行或者说最广泛的版本是通过Necurs僵尸网络发布的,最初是用Visual C语言编写的。然而在解包之后,2017年12月我们发现的另一种变种叫做Scarabey,其传播有些不同,也拥有不同的有效载荷代码。
Scarabey跟大多数勒索软件一样,在将受害者系统上文件加密之后,要求其受害者用比特币支付勒索钱款。然而,与Scarab原始版本不同,Scarabey并不是经由Necurs malspam传播,而是通过在服务器和系统上RDP/手动删除传播,并且发现其针对的是俄罗斯用户。
此外,Scarabey似乎不是打包在我们见过的任何一种样例中。其恶意代码是用Delphi编写的,并没有用Scarab具备的C++包装,并且版本不同勒索信的内容和语言也不同。
SAMPLES BEING REFERENCED SCARAB ORIGINAL: e8806738a575a6639e7c9aac882374ae SCARABEY VARIANT: 9a02862ac95345359dfc3dcc93e3c10e
勒索信
对受害者而言,Scarabey和其他Scarab勒索软件的主要区别是勒索赎金信所使用的语言以及加密消息使用的恐吓战术。
在Scarab案例中,勒索赎金信是用英语写的,然而,它读起来就像是一个俄罗斯文本逐字翻译成英文,根本不是正确的英语语法或句法。然而Scarabey勒索赎金信是用俄语写的。有趣的是,当你把Scarabey的勒索信放到谷歌翻译,正如下面我所做的,其翻译出现了跟Scarab勒索信一样的语法错误。
原始Scarab消息
Scarabey消息,用谷歌从俄语翻译成英语,这更加证明了Scarab的作者可能是说俄语的人,他们用母语写了勒索信,通过翻译器运行并将其添加到Scarab的代码中。鉴于他们针对的目标是俄罗斯人,这一推测就显得很有可能。他们用母语发布了Scarabey勒索信,以覆盖更多的受害者。
不同的威胁
在Scarab的原始版本中,它警告:用户拖延支付赎金时间越长,赎金金额就会变得更高。
而Scarabey告知用户,他们每拖延一天,被删除的文件将越来越多,直到他们没有更多的文件可以恢复。
从本质上说,犯罪分子暗示受害者他们拥有未加密文件的副本,可以回馈给用户,或者他们控制了受害者电脑可以删除受害者文件。但是这是不可能实现的,原因有以下几点:
1. 在受害者电脑上发送所有文件的数据传输量是不合理的,还有就是,根本就不存在可以将受害者文件发送给恶意软件作者以勒索赎金的网络功能。
2. 无论是scarab还是其变种,都没有后门或远程访问代码,因此威胁受害者删除其计算机上的文件根本不可能实现。
3. 根据我们的理解,解密过程是在赎金支付之后,他们会给你发送带有唯一密钥的解密软件。然后你可以运行该软件并对自己的文件进行解密。即便是这样,他们也没有办法限制被解密的东西,因为解密过程是在本地和离线状态下完成的。
4. 在恶意软件的代码中没有任何部分可以实现从计算机中删除用户的文件。
具体来说,在消息中,你可以看到作者暗示代码最初是解密的服务器端,这是不对的:
每24小时删除24个文件。(我们有文件的副本)。如果你在72小时内不运行解密程序,那么计算机上的所有文件都将被完全删除,没有恢复的可能。
然后,恶意软件作者给出了解密的步骤,该步骤引用了在支付了赎金之后发送给受害者的解密程序的使用方法。支付赎金之后收到的解密软件,通过你唯一的密钥将在本地解密文件:
——在开始解码后,文件将在一个小时内被解码。 ——其他用户的解码器与您的数据不兼容,因为每个用户的加密密钥是唯一的。
这里的结论是,直接删除文件或恶意软件作者可以访问受害者电脑并删除文件的说法纯粹是一种恐吓策略,目的是敦促用户快速支付赎金。
技术分析
将Scarab和Scarabey的代码进行比较,很明显,这种变体虽然是用俄语编写的,并且针对俄罗斯用户,但最初很可能来自于同一作者。在整个代码中,两种恶意软件的变种几乎每个字节都是一样的。此外,生成的子进程、删除的文件、使用的加密方法和使用的互斥锁都是相同的。这就是我们认为它是一个变种的原因,而不是一个新的家族。
下面的图片显示了这两个恶意软件的输出。惟一不同的是代码地址和内存数据引用的地址(用黄色和红色突出显示)。
代码分析
Scarabey的变种是用Delphi编写的。首先,它先检查其是否是第一次运行。通过检查是否有传入参数来完成上述操作。如果没有,则检查是否设置了以下注册表键:
Software\ILRTISo\idle
〔第一次运行检查,注册表键〕
如果没有设置(这意味着它是第一次运行),会检查是否还没有创建SEVNZ并执行cmd.exe将自己复制到临时漫游目录,作为sevnz.exe使用:
cmd.exe /c copy /y C:\Users\virusLab\Desktop\9a02862ac95345359dfc3dcc93e3c10e.exe “C:\Users\virusLab\AppData\Roaming\sevnz.exe”
然后当退出时,会使用程序“runas”生成一个自身的进程。
〔验证SEVNZ.EXE不存在,把self复制到SEVNZ.EXE。使用“runas”param执行elf〕
现在,子过程接管了。
代码流现在进入与之前相同的函数,删除了SEVNZ并重新复制它。由于传入的参数,该操作跳过了最初的部分。然后执行之前复制的文件sevnz.exe。
C:\Users\[username]\AppData\Roaming\sevnz.exe
然后,使用命令行它打开了程序cmd.exe…
“mshta.exe “javascript:o=new ActiveXObject(‘Scripting.FileSystemObject’);setInterval(function(){try{o.DeleteFile(‘9a02862ac95345359dfc3dcc93e3c10f.exe’);close()}catch(e){}},10);””
鉴于程序在运行时不会删除,它只能等待并删除自身。
到了SEVNZ.exe进程:
该进程将检查是否正在作为sevnz.exe运行,通过尝试删除“…AppData \Roaming\ sevnz.exe”实现该检查。
如果删除失败,就知道它正在作为sevnz.exe运行。而不是原始的可执行文件。一旦通过该检查,它就会使用mtsha.exe执行Javascript,这会延迟并将自身添加到注册表自动运行:
mshta.exe “javascript:o=new ActiveXObject(‘WScript.Shell’); x=newActiveXObject(‘Scripting.FileSystemObject’); setInterval(function(){try{i=x.GetFile(‘sevnz.exe’).Path; o.RegWrite(‘HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\RunOnce\\ILRTISo’,i);} catch(e){}},10);
接下来,它将删除影子卷册拷贝,这是勒索软件的标准,以确保用户无法恢复加密的文件。
—–Executes these scripts with mtsha.exe:—– ActiveXObject(“WScript.Shell”); o.Run(“cmd.exe /c wbadmin DELETE SYSTEMSTATEBACKUP -keepVersions:0”,0); o.Run(“cmd.exe /c wmic SHADOWCOPY DELETE”,0); o.Run(“cmd.exe /c vssadmin Delete Shadows /All /Quiet”,0); o.Run(“cmd.exe /c bcdedit “
new ActiveXObject(“WScript.Shell”); o.Run(“cmd.exe /c wbadmin DELETE SYSTEMSTATEBACKUP-keepVersions:0”,0); o.Run(“cmd.exe /cwmicSHADOWCOPYDELETE”0); o.Run(“cmd.exevssadminDeleteShadows /All/Quiet”,0); o.Run(“cmd.exe /c bcdedit /set {default} recoveryenabled No”,0); o.Run(“cmd.exe /c bcdedit /set {default} bootstatuspolicy ignoreallfailures”,0);
然后将打开一个线程,该线程将无限循环,并确保没有“关键”进程正在运行。如果发现有,就会终止这些进程。这样做的原因可能是这些进程对某些文件有锁定,而勒索软件可能会对这些文件进行加密。因此,通过终止这些进程,可以释放文件以便加密。关键的进程来自于一个生成的字符串:
agntsvc.exe isqlplussvc.exe ncsvc.exe msftesql.exe sqlagent.exe sqlbrowser.exe sqlservr.exe sqlserver.exe sqlwriter.exe oracle.exe ocssd.exe dbsnmp.exe synctime.exe; mydesktopqos.exe agntsvc.exe isqlplussvc.exe xfssvccon.exe mydesktopservice.exe ocautoupds.exe agntsvc.exe agntsvc.exe agntsvc.exe encsvc.exe firefoxconfig.exe tbirdconfig.exe ocomm.exe mysqld.exe mysqld-nt.exe mysqld-opt.exe dbeng50.exe sqbcoreservice.exe
在加密函数的主循环中,整个代码持续执行检查是否存在互斥锁,如果存在,这便是一个清除自身的标志,并将其从系统中删除:
MUTEX:STOPSCARABSTOPSCARABSTOPSCARABSTOPSCARABSTOPSCARAB。
通过代码中许多不同的部分可以对加密循环进行调用,但是最先运行并执行大部分加密操作的部分代码如下:
递归地遍历所有的文件夹并且检查以确保扩展名不是.exe或.dll。如果都符合了,它会对文件进行加密,并且使用.scarab作为扩展名对其进行重新命名。
[使用POS()检查当前的文件扩展名,是否存在为“exe,dll”的substr〕
加密代码不直接使用任何加密API。相反,AES代码被嵌入恶意软件中,如上图所示。
〔部分是设置对主加密函数的调用〕
加密算法
我们已经确定加密算法是AES。在它读取的实际文件数据之前,一个4字节块(0xDEFACE01)被附加到缓冲区。这可能是salt,也可能是恶意软件作者的玩笑。它使用生成的字节来执行一些数据操作运算,这很可能是创建随机数的初始化向量。
〔IV生成器函数,然后是AES设置的开始〕
〔XORS数据传入了MAIN_AES_LOOP_FUNCTION,也就是IV。var_8是加密密匙〕
该恶意软件通过使用AES_ALGO标记的函数,在数据上运行AES 256。因为几个属性我们确定它是AES 256。
1. 它使用16位字符块。这对于任何类型的AES来说都是相当标准的。它一次对文件中的16个字符进行加密,其大小是128位。
2. AES版本的不同之处在于密钥的大小和加密回合的数量。在本例中,它使用了14个加密回合(AES 256的标准),而不是10个回合(AES 128的标准)。密钥的大小也是256位(32字节或字符)。
3. 同时也在使用子类型CBC(密码块链接)。CBC的主要指标是前面的密码文本用于加密下一个纯文本块。换句话说,前面的加密块用作下一个要加密数据块的初始化向量。
〔显示AES CBC的流,先使用IV,然后是前面的密码文本用作IV〕
在这种情况下,IV字节作为一个初始化步骤在纯文本字节上被XOR,以便在结果中创建更多的随机性。从下一个图片中可以看到,AES的输出被复制到该变量中,在执行AES之前,它将被用于循环的开头初始化下一个纯文本块。在这一点上,尽管没有通过加密API进行调用,但应该清楚AES的用法。
〔下面的图片显示了前面的密码文本作为IV用于初始化的位置。注意:var_28将包含加密的数据〕
下面是一些演示算法的截图。正如你所看到的,数据被加载到矩阵中。然后,对一些硬编码的数据执行一系列的数据运算,再加上加密密钥字节。下面文本中高亮显示的是一个回合中的一组运算(4个中的1个)。其中的四组运算组成了一个加密的回合。这是因为为了执行矩阵的数学运算,你需要对其他回合中每一矩阵中的每一项进行运算。如前所述,总共完成了14个回合。
编码的加密密钥是在注册表的“temp”(临时)密钥中写入的:
如果在注册表中找到了密钥,它就会进入将注册表中密钥解码到原始加密密钥中的函数。否则,它会跳转到新的生成函数。
这很有趣,因为它是用于加密文件的主要密钥。其格式类似于赎金勒索信里的密钥,但该密钥更长,这表明作为ID提供给用户的密钥是存储在注册表密钥的编码版本。转储密钥的例子:
[HKEY_CURRENT_USER\Software\ILRTISo] "temp"="VkIAAAAAAADpt9Q2lAzhCExfqjLoD3vSpluc678N56Zn8b7LVRxMi1ZsYk2HXD1e4s3tiefTmZJAc0vxPposvLzP0yaCh5+KRQm60U0EkzeB2NXetarabUFYgJxb8QRsygKaOqBriC4Bs4ajM24h=e2CsVNP9R3q==UXNmfRFGIsv7NR9BIxE35bdoFpTU8rMGQ14MeQcAii1iY7GpNoY3b4DOgfuKGo3qNC1MYKYdfpn0dbiow3f7ZQGClpwTZ0shFhkWk7aTA7TM1prtgJte7TWe=ERHg8GaFrZtVs9ylNTYPt5CmzHBdAIaXeKZvZnSSafbi83o9gLgAS1OxAb7LBtJpZAJDyBkuyJFR4dFbXztponIBKT1OjtTvTMy07+0B4jI3=K1QGuKSROjAdCF06TsjKWlvUw0iUHRGasz946H3Mnxu3GdCHrAp9Cd94bMo1x1PVdIi3bXSwobjgOlJgJPJC4Y6J4QIE=e45PDNzdK6aCY0uiQ0jOD=8lDWTp=+r+dbGJrJ12qn8CRnBwaFIpyNjDhzdMdTwyvExCmuOesOLms8S7TRoV1GcTyWJAQpSJYcR66H6CngM5GHopdpoTH4mWVOOYp5HFHTDAvMafomF2S6xEmUgXIcKpB7oNohO+Wx0cUmf95=+9uozHMBWE4kFhj+OOKw0I7w7HnwYfafhxsw0CmoOvorZztXk8whlh1d4U26z=aJ6JwH8wVBSszsRLQ+H4y3bRaeupq5Vo+smDfigjVVzCam4HoAdOKzN9MWiigl9Oi+4vTkSFFazc6HzyVaHg8luKGBJMhi2FNHTFO56RA"
来自赎金勒索信的密钥:
+4IAAAAAAADIGnmIHZL=FYRQCAN=AgKnzw+0uzFbXSR5AdFlfTrhWN9sifnho8LiX5=V8SbNVWyWWrdbTLipFEeeEv=9zLmnid8e
UqlqKr2RUN=V7LdjoyNwjWMNbylRiGNAKWK6g9exeHhVfUrZ+9oRTq6Kp5eNe7kDdV7UMPVZ12=5pm9a+5lOMw==TNi2R2tUjFcK tTD3c9IZgJwOMgcOw3fRrmgaloh5cIV3V74DRy2segx13RDL4J6B+gJnfT2mxIZuBE1G5HcmuLHCoqQif2BamhfbMASCUEpOp7+Z G0jI=1PTmOhD3Yq4XjJWI4mc61AruRlaYqwPTUUbrsI0zTYX1mmM3Tvyso8bqDy4h5meyPYuXlgtRj06mtdrGZszb6ObsIT4Fz0O Ag=4HgI4VSHA=HAU5yCjZzIIkLhlWGvdAk
用于加密的密钥从一个文件到另一个文件是变化的。这意味着两个具有相同内容的文件在加密之后会有所不同。本质上是有一个初始密钥,许多子密钥是从该初始密钥派生出来的。如果所有文件都使用了一个单独的加密密钥(这种情况在其他勒索软件里出现过),那么你就可以在加密过程的任何时候捕获内存,保存密钥,并使用它解密硬盘上的所有文件。不幸的是,由于Scarab执行的密钥循环,它使得对文件的解密变得不可能。
整个磁盘加密完成之后,勒索软件就会进入一个调用函数,该函数枚举所有的网络文件夹和驱动器。例如:VMWare共享文件夹、终端服务、网络驱动器。如果被找到了,它也会对这些文件夹中的文件进行加密。
一旦完成,它将通过notepad.exe打开加密消息。
谣言
网上已经有很多文章指出,Scarabey有能力充当后门,允许远程访问,也可以收集敏感数据。根据我们的分析,我们认为这是不真实的。除了简单地加密用户计算机上的文件外,我们没有发现任何其他功能的迹象。
此外,有关于Scarab的传言称,在gitHub上,该公司正在开发一款名为“HiddenTear”的开源勒索软件。在我们自己的研究和外部研究中,都已经证实是不真实的。现在看来,这似乎是一个行业共识,因为它被错误地发布了。
Windows的Malwarebytes检测到了这种威胁,它的变种是:Ransom.Scarab。