利用宏规则散布恶意程序已成为众所周知的途径,因此许多人都通过禁用宏规来保护信息安全。但如今,“宏”似乎变成了一个可以绕过的障碍。此前的Word 0-day漏洞就无需启用宏,只需打开文档便可植入恶意程序。而此次,Sensepost发现了一种利用Outlook Forms,成功绕过宏规则,获取目标shell的方法,有可能被攻击者恶意利用。但微软似乎并不认为这是一个程序漏洞。
一批白帽子研究人员另辟蹊径,找到了一种新的方法——利用Outlook Forms绕过宏规则,获取受害者的shell。
Sensepost表示微软在2016版的Outlook中修补了一些原有的漏洞,因此他们自己开发的“Ruler”工具已经无法发动攻击。同时,越来越多的机构都开始”禁用宏“,因此Sensepost试图寻找其他的攻击方式。
但来自Sensepost的Etienne Stalmans还是发现了Outlook一些有趣的功能,其中就包括Outlook Forms。Outlook Forms可以运行VB脚本内容,与此同时,表单的脚本引擎与VM 宏的脚本引擎是相互分离的,这就意味着,攻击者可以在不启用宏的情况下发动攻击。
Outlook Forms的说明文档还是2008年编写的——因此很明显表单功能在将近十年内都没有发生变化。
Sensepost官方博客中的文章提到,通过Outlook Forms,”我们有足够的VB脚本引擎”,演示的方法依旧是打开一个计算器Calc.exe:
Function Item_Open() CreateObject("Wscript.Shell").Run "calc.exe", 0, False End Function
要找到表单储存的位置还是花了不少功夫的(需要知道表单是如何通过MAPI获得储存的),这部分内容并没有记录到说明文档中。
“例如,将‘PidTagSendOutlookRecallReport’设置为true之后,表单就会从用户界面上消失。这就意味着,在自定义表单下设的新项目菜单中,不会出现新的表单。为了找到这个新的表单,用户需要在Outlook中前往高级选项卡,指向表单,选中收件箱,浏览表单列表(这是不现实的)。”
Stalmans列出了如下的表单模板,看起来会更为明确:
Function P() >>MAGIC<< End Function Function Item_Open() Call P() End Function Function Item_Reply(ByVal Response) Call P() End Function Function Item_Forward(ByVal ForwardItem) Call P() End Function Function Item_Read(ByVal Response) Call P() End Function
正如前文所说,攻击者在此有很多可以利用的地方,Sensepost表示,只要用户进行一些最基本的操作(例如回看信息,阅读信息,打开信息,回复信息或转发信息)就可以触发payload。Stalmans在文中提到:
“你需要一小部分的社工技巧,吸引用户打开消息或对其进行转发。其优势就在于,即便用户把邮件转发给应急响应团队,payload依然可以触发。”
但微软不认为这是程序漏洞,微软在一份声明中表示:
“博客中提到的这项技术并非软件漏洞,而且其利用需要用到已经被入侵的帐号。我们鼓励用户采用强度更高的密码,不要在多个服务之间采用相同的密码,并启用类似多重身份认证等安全功能保证账户安全。”