针对Office宏病毒的高级检测
前言
攻击者可能发送带有恶意附件的钓鱼邮件,诱导受害者点击从而获取对方的系统控制权限
期间会借助 Atomic 工具完成攻击复现,再对具体的过程细节进行分析取证,然后深入研究、剖析其行为特征
最后输出检测规则或者 dashboard,作为本次威胁狩猎活动的产出
PS:注意,这里只是提供一种检测思路,测试过程均在实验环境下完成,并不代表实际工作效果
分析取证
在对特定攻击活动做数字取证(Digital Forensics)的过程中,通常我会采用漏斗状的思维模型,一步步缩小观测范围,聚焦目标行为特征
简单做了张图,大概是这么个意思:
采集全量日志
针对威胁假设的场景,首先我们需要尽可能地保证 office 办公软件的所有行为无处遁形
为了实现图中的逐层分析,还是拿出我惯用的 sysmon,借助其配置文件来完成,千万别小瞧了这些配置,里面可是有宝藏的!
第一步,建立 OfficeWatch.xml 的配置文件,部分内容示例如下:
<Sysmon schemaversion="4.70">
<HashAlgorithms>md5</HashAlgorithms>
<CheckRevocation/>
<EventFiltering>
<RuleGroup name="Process Creation-Include" groupRelation="or">
<ProcessCreate onmatch="include">
<Image name="" condition="end with">WINWORD.EXE</Image>
<ParentImage name="" condition="end with">WINWORD.EXE</ParentImage>
<Image name="" condition="end with">EXCEL.EXE</Image>
<ParentImage name="" condition="end with">EXCEL.EXE</ParentImage>
</ProcessCreate>
</RuleGroup>
<RuleGroup name="Process Creation-Exclude" groupRelation="or">
<ProcessCreate onmatch="exclude">
</ProcessCreate>
</RuleGroup>
<RuleGroup name="Network Connect-Include" groupRelation="or">
<NetworkConnect onmatch="include">
<Image name="" condition="end with">WINWORD.EXE</Image>
<Image name="" condition="end with">EXCEL.EXE</Image>
</NetworkConnect>
</RuleGroup>
<RuleGroup name="Network Connect-Exclude" groupRelation="or">
<NetworkConnect onmatch="exclude">
</NetworkConnect>
</RuleGroup>
<RuleGroup name="File Create - Include" groupRelation="or">
<FileCreate onmatch="include">
<Image name="" condition="end with">WINWORD.EXE</Image>
<Image name="" condition="end with">EXCEL.EXE</Image>
</FileCreate>
</RuleGroup>
<RuleGroup name="File Create - Exclude" groupRelation="or">
<FileCreate onmatch="exclude">
</FileCreate>
</RuleGroup>
</EventFiltering>
</Sysmon>
指定 office 软件相关的文件名,保证其进程、文件、网络、DLL 加载和注册表等日志均能被全量采集,同时避免干扰信息
另外,这一步的主要目的不仅是为了保持观测目标的可见性,更是为了下一步缩小观测范围而建立遥测数据的白名单
例如,平常我们在打开 word 文档的过程中,会产生与微软服务器间的通信,这些是我们需要进行加白处理的
同样的,这些加载的 DLL 文件也可以建立一份白名单,当然也别忘了多加留意它们的签名状态(SignatureStatus)
最后,分析、汇总上述成果,建立一份新的配置文件,用于过滤 office 办公软件的正常行为,将其命名为 OfficeShush.xml
过滤正常行为
关于 OfficeShush.xml 文件的迭代,其实也就是我们对 office 软件相关进程建设行为基线的过程
这一步需要我们在实验环境下考量全面,夯实基础,再去生产环境中慢慢打磨优化
然后,便得引入丰富的恶意样本,分析其在过滤正常行为后的特征表现
这里其实就是攻击复现的过程了,以 T1204.002 为例,跑完攻击脚本,看看会有哪些有意思的发现:
—— 一些脚本文件的创建
—— 一些异常的命令执行和父子进程关系
—— 一些特定行为(例如运行宏、XMLDOM、WMI等)才会加载的 DLL
聚焦可疑特征
通过对各类恶意样本或者具体攻击方式做深入分析,我们可以简单梳理一些常见攻击行为会表现出来的特征:
— 可疑文件的落地(释放脚本或可执行文件)
— 涉及敏感注册表位置的修改
— 可疑DLL文件的加载行为(加载COM、WMI、或.NET功能所必需的DLL文件)
— 可疑的网络请求行为(与云服务商或者奇怪的域名通信)
— 异常的父子进程关系(office软件调用powershell、cmd命令行)
— …
整理好这些特征点,我们可以凭此生成新的日志采集配置文件,或者给相应的遥测数据打上标签,或者直接加工后转换成检测规则
但是在此之前呢,我想先介绍一种告警手段 —— Risk-Based Alerting(RBA)
一些安全运营人员可能对“元告警”(Meta-Alert)的概念并不陌生,这类告警通常由其它安全设备上报而来
比如在 SIEM 上消费由 EDR 产生的病毒或后门类的告警,这种可以称之为 “meta alert”
在此基础之上,我想谈论的情况是:在一段时间内,有两条及以上针对同一主机(事件)的检测规则,组合产生了一条告警
什么时候应该使用这种告警方式呢?
在很多场景中,SIEM 或 SOC 平台上的规则检出只能被视为一种弱信号(weak signals)
它们更适宜被归类成 observable 或 indicator,而不适合直接用作告警,否则会引起运营人员的告警疲劳
此时如果我们通过一种检测方式对这些信号做关联分析,最后产出告警,这一思路就被称作 RBA
受限于手头的工具和平台,本文我只能借助 splunk 演示一种类似的检测方式,通过生成一段 Hyper Queries 来达到差不多的效果
威胁分析
行为检测
根据前面整理出的这些 office 宏病毒相关的可疑活动或者高危操作的行为特征,先写一些简单的规则给它们定个性
这一步可以借助 splunk 给符合特定行为的 sysmon 日志打上不同的标签,或者进行危害评分,便于后续做关联分析
比如攻击者可能会利用宏代码调用 cmd、powershell 等进程,进一步完成恶意命令执行的操作
或者攻击者会将 payload 写入磁盘,以特定后缀形式的文件在受害者主机落地
风险判定
放在平时,或许很多人会直接拿着这些行为特征输出成告警
但是针对 office 邮件钓鱼这类频发场景,我们不妨深入研究下,加入一些算法以提高告警置信度
以下演示中,我会为不同的行为简单地指定风险评分,最后进行求和汇总,将超过特定阈值的一系列行为视作高危操作
为方便读者自行对比,找了一篇友商近期的分析文章:https://mp.weixin.qq.com/s/1L7o1C-aGlMBAXzHqR9udA
然后上 ANYRUN 拿了份样本:https://app.any.run/tasks/300229f4-dd97-42d8-bbce-72274ef8b9e9
实验过程中的检测效果如下:
演示代码放在这里:https://github.com/Moofeng/DemoCode/blob/main/office_detection_spl
结合上述文章和检测结果,可以看到攻击过程几个异常点都能很好的标识出来,例如 background.dll 文件的落地和通过 COM 对象执行计划任务等关键步骤
最后的判定结果还是具备一定参考意义的,当然,具体的评分体系需要自行设置和优化
针对Office宏病毒的高级检测的更多相关文章
- Office宏病毒学习第一弹--恶意的Excel 4.0宏
Office宏病毒学习第一弹--恶意的Excel 4.0宏 前言 参考:https://outflank.nl/blog/2018/10/06/old-school-evil-excel-4-0-ma ...
- Office宏病毒免杀(1)
使用github开源工具EvilClippy进行宏病毒混淆免杀:https://github.com/outflanknl/EvilClippy/releases 注意需要将这两个文件下载在同一个文件 ...
- CobaltStrike 生成office宏病毒进行钓鱼攻击
关于WORD宏: 在百度百科上有: 宏是一个批量处理程序命令,正确地运用它可以提高工作效率.微软的office软件允许用户自己编写,叫VBA的脚本来增加其灵活性,进一步扩充它的能力.如完打开word文 ...
- 检测Office是否安装以及获取安装 路径 及安装版本 QQ,迅雷,旺旺 C#代码
#region 检测Office是否安装 ///<summary> /// 检测是否安装office ///</summary> ///<param name=" ...
- asp.net中通过注册表来检测是否安装Office(迅雷/QQ是否已安装)
原文 asp.net中通过注册表来检测是否安装Office(迅雷/QQ是否已安装) 检测Office是否安装以及获取安装 路径 及安装版本 代码如下 复制代码 #region 检测Office是否 ...
- 使用.Net访问Office编程接口(PIA和IA的区别)
在这篇文章里面,我将向大家介绍如何在.Net中访问Office所公开的编程接口.其实,不管是使用哪种具体的技术来针对Office进行开发(比如VSTO,或者用C#编写一个Office Add-in,或 ...
- Office 365 系列二 ------- 如何批量部署Office 客户端
针对于第一篇文章所讲的,我们最用使用用户可以单个点击进行安装,但是如果我们终端用户太多的情况,不可能大家都点击单个文件进行安装了,这样子既耗费时间也耗费 公司的网络带宽,那么我们可以采取离线下载的方式 ...
- office 2010 安装教程
Microsoft Office 2010,是微软推出的新一代办公软件,提供了一些更丰富和强大的新功能,开发代号为Office 14,实际是第12个发行版.该软件共有6个版本,分别是初级版.家庭及学生 ...
- 基于DSP的疲劳驾驶检测系统的研究
原地址:http://www.chinaaet.com/article/index.aspx?id=114534 关键词:疲劳检测DSP亮瞳效应PERCLOS 摘 要: 针对汽车驾驶员疲劳驾驶检测的 ...
随机推荐
- 乒乓球队比赛,甲队有abc三人,乙队有xyz三人。 抽签得出比赛名单:a不和x比,c不和x,z比, 利用集合求出比赛名单
import java.util.HashMap; import java.util.Map; /** * 乒乓球队比赛,甲队有abc三人,乙队有xyz三人. * 抽签得出比赛名单:a不和x比,c不和 ...
- dart系列之:手写Library,Library编写最佳实践
目录 简介 使用part和part of src中的文件 package中的lib文件 总结 简介 Library是dart用来组织代码的一种非常有用的方式,通过定义不同的Library,可以将非常有 ...
- UVA 10815 Andy's First Dictionary (C++ STL map && set )
原题链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_proble ...
- 端口状态 LISTENING、ESTABLISHED、TIME_WAIT及CLOSE_WAIT详解,以及三次握手四次挥手,滑动窗口(整理转发)
网上查了一下端口状态的资料,我下面总结了一下,自己学习学习: TCP状态转移要点 TCP协议规定,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死 ...
- MCU软件最佳实践——独立按键
1. 引子 在进行mcu驱动和应用开发时,经常会遇到独立按键驱动的开发,独立按键似乎是每一个嵌入式工程师的入门必修课.笔者翻阅了许多书籍(包括上大学时候用的书籍)同时查阅了网上许多网友的博客,无一例外 ...
- 一条 Git 命令减少了一般存储空间,我的服务器在偷着笑
元旦不是搭建了一个<Java 程序员进阶之路>的网站嘛,其中用到了 Git 来作为云服务器和 GitHub 远程仓库之间的同步工具. 作为开发者,相信大家都知道 Git 的重要性.Git ...
- 【刷题-LeetCode】198 House Robber
House Robber You are a professional robber planning to rob houses along a street. Each house has a c ...
- ROS之arduino交互
一.第一种安装方式(不支持自定义消息) 第一步打开官网 http://wiki.ros.org/rosserial_arduino/Tutorials/Arduino%20IDE%20Setup 第二 ...
- javaObject—toString方法
1 package face_object; 2 /* 3 * Object:所有类的根类. 4 * Object是不断抽取而来的,具备所有对象都具备的共性内容. 5 * 常用的共性功能: 6 * 7 ...
- jsp中获取下拉框的value问题
遇到问题 最近快期末考试了,今天想写一个简单的增删改查项目练练手,可是在刚写增加的时候就出现了问题,"增"一直是最简单的操作,本来自付很快就能写完,可是数据库中对应的下拉框数据一直 ...