前言

APT防御的重要性毋庸讳言,为了帮助各位师傅在防御方面建立一个总体认识,本文会将APT防御方法分为三类,分别是:监控、检测和缓解技术,并分别进行梳理,介绍分析代表性技术。这一篇分析现有的监控技术。

APT

这里不谈APT概念,就是分享两张最近看到的觉得描述APT非常契合的图。

如果我们把APT分成6个攻击阶段的话,一种经典的划分方式如下

或者也可以画成金字塔

这里我们假设攻击目标位于金字塔的顶端,侧面表示攻击进化的环境(如物理平面、用户平面、网络平面、应用平面等)。金字塔平面依赖于每个组织的细节,并根据记录事件的环境定义。假设APT组织能够全面了解目标的所有设施以确定达到目标G的可行平面。那么为了达到目标G,攻击者可以探索漏洞并通过从一个或多个平面“爬行”接近目标。因此,最终检测到的APT就像一棵跨越多个平面的攻击树。

这么说不形象,我们可以上面这个金字塔展开

这个图就很直观了,图中小点代表平面中记录的事件,而彩色连接的事件代表相关事件,其表示可能的攻击。path1表示物理平面的相关事件,path2和path3表示涉及多个平面的相关事件。

监控

硬盘监控

这主要针对落地文件而言。

每个终端都需要通过反病毒、防火墙或必要的内容过滤来监控任何恶意行为。对系统上运行的软件进行必要的修补程序,可以消除已知的漏洞,从而减少攻击者的入侵点,否则这些漏洞可能会将恶意软件传播到网络中容易受到攻击的地方。这方面的技术其实比较成熟了,而且并不适用于APT攻击,这里就不展开说明了。

内存监控

现在更加流行的方法是内存监控,这主要针对现在流行无文件、不落地攻击手段而言的,这种攻击手段一般通过使用一个已经在内存中运行的进行来执行恶意功能,由于没有单独的进程在后台运行,所以不会留下任何轨迹。比如卡巴斯基发现的Duqu,就是运行在一个已经运行的进程的内存中。

这个领域有很多优秀的工作,这里简单介绍几个。

[1]通过分析Stuxnet、Duqu、Flame和Red October使用恶意软件进行APT攻击的活动进行检测,其特点比较如下。

他们介绍了APT攻击者所使用的规避技术,如rootkit功能、负载变化的端点扫描、网络流量加密和混淆、隐写术、内存中恶意软件的执行和假数字证书等。针对这些攻击技术,作者建议通过补丁管理、强大的网络访问控制和监控、严格的互联网政策、协议感知的安全解决方案、监控DNS查询、监控异常域的访问、监控网络连接、蜜罐和蜜网,以及标准的基于主机的入侵防御系统作为APT的防御对策。

[2]提取出了不同类型的恶意软件的特征,并提出了一个通用的解决方案用于检测不同类型的恶意软件。他们收集恶意软件和良性样本作为训练数据,并从中提取污点图(taint graph)。然后污点图转换成一个特征向量,在这个特征向量上应用标准分类算法来训练模型。这个模型训练完成后被用来识别系统上的恶意行为。他们使用了不同恶意软件(键盘记录、密码窃取、后门等)的共同特征。这些恶意软件通常表现出的特征是异常的信息访问和处理行为。例如,键盘记录和密码窃取会拦截击键输入。在比如说,为了不被发现,后门要么使用不常见的协议(如ICMP),要么创建一个原始套接字,要么拦截网络堆栈来与远程攻击者通信。基于ICMP的后门访问ICMP流量,基于原始套接字的后门访问所有具有相同协议号的报文。例如,TCP原始套接字可以接收到所有的TCP报文,这种后门拦截网络栈的行为类似于网络嗅探器,对网络流量进行窃听以获取有价值的信息。这些特征都被作者利用来进行检测。整个系统结构设计如下

下图是一个污点图的例子,反映了Windows用户身份验证的过程。当一个密码窃取器在后台运行时,它捕捉到密码并将其保存到它的日志文件“c: ginallog .log”中。

再来看一个用污点图表示Google Desktop处理传入的web页面的例子

该方案检测结果如下

[3]提出了利用硬件辅助进行恶意软件检测的方案。作者发现,与运行的正常软件相比,受感染的应用程序运行时会修改控制流/数据结构,而这种行为会反映在它的内存访问模式中。所以可以通过处理器内监视内存访问来检测,其内存访问会查看虚拟地址以获得更一致的签名。他们使用系统调用、函数调用和完整的程序运行来检测受感染程序的恶意行为。研究表明,不论是对用户级还是和内核级威胁都是可用的,并且针对内核级rootkit实现高精度的检测。其设计的框架如下所示

上半部分是训练,下半部分是运行检测。当使用system call检测rootkit时,结果如下

可以看到,准确率非常的高,而且误报率很低。

[4]通过虚拟内存消耗来识别应用程序进程的异常行为,实现对恶意软件的检测。因为作者认为相比于网络操作或CPU利用率,内存使用的波动性较小,不易受到影响,而且使用的是虚拟内存而不是物理内存,因为后者不包含交换到硬盘的内存量。首先使用进程和psutil收集目标机器的内存指纹。然后通过机器学习算法,基于指纹、阈值和阈值因子为每个应用计算一个模型来检测异常行为。下面用图的方式可以帮助大家更好的理解其方案。

下图是三个进程的虚拟内存的时间序列

从时间序列中捕获的滑动窗口如下所示

当窗口大小为25时,6个进程的特征分布,图中不同颜色代表不同应用

下图展示了训练阶段的前三个步骤,可视化阈值。初始阈值为零(左);对于第二个数据点,它扩展到a(中间);在第三个点上,它扩展到b(右)

流量监控

APT攻击最关键的部分就是C&C通信行为,而且通信并不只发生一次,通常是在系统第一次被攻破后为了数据传输而反复进行。在终端层面监视任何带有新目的IP的网络数据包、异常payload的数据包以及发送到同一IP的大量数据包等特征有助于识别来自终端的任何可疑行为。

从流量中可以看到很多关键信息。

先看最简单的,从http请求中就可以看出GhosNet发往C2服务器的请求

这是php版本的

这是asp版本的

还可以从流量中看到challenge信息,如下所示就是RSA Poisonlvy样本的256字节的challenge请求

这在一次成功的TCP握手之后,由poisivy生成的网络流量,它从256字节的看似随机的数据开始。这些字节组成一个challenge请求,以查看“客户端”(即RAT控制端)是否配置了嵌入在“服务器”(即受害者)中的密码。

同样一个样本,还能看到keep-alive请求

接下来我们看看这方面一些经典的工作。

[5]提出的方案可以从数千个终端中检测出少数表现出可疑活动的主机。他们通过观察多个主机间APT的关键阶段,并将每个主机的分析结果与它们的过去以及所观察到的网络中的其他主机进行比较,从而生成一个排名前k个的可疑主机列表。由于他们的方案不需要检测载荷,所以针对加密信道进行检测也是可行的。其方案的示意图如下

[6]重点关注跟踪各种网络对象(如主机、主机组和网络),并确定它们是否存在威胁。他们将网络流量活动从网络流量采集到威胁分析分为五层,从多个不同的网络传感器(如网络流、NIDS、蜜罐)中收集数据,然后在多个时间段提取和聚合特征,以创建一个样本空间。然后使用有监督模型进行识别。分层示意如下所示,大多数技术都是在第一层运行,处理来自传感器的原始数据和事件。而作者的方法首先转换数据,即第2层,然后在第3层及以上应用分类模型

这篇工作的可视化做得很棒,如下所示

有三种不同的可视化显示了UDP行为(右上),TCP行为(左上)和所有协议(底部)。每个点代表一个行为特征空间中的一个主机,这些图显示了主机从“源到sink行为”,接收数据的主机在左边,向系统发送数据的主机在右边。

还对训练完成的SVM进行了可视化如下所示

beacon通信在超平面的右下角,表明其检测效果很不错。

[7]是安全产商TrendMicro发布的APT报告,里面分析了不同的APT活动,如Taidoor、IXESHE、Enfal和Sykipot,这些恶意软件使用已知的协议(如HTTP)与C&C服务器建立通信,通常通过三个端口80、443、8080配置。攻击者通常使用这些端口,因为他们知道通常只有这些端口在防火墙级别是开放的。但是,这里的关键在于,攻击者可能会使用这些端口来传递不匹配的流量类型,例如在80端口发送任何非http流量或在443端口发送任何非https流量。可以通过检测这一特点实现预警。此外,作者认为,监视网络流量的时间和大小是另一个需要考虑的方面,因为恶意软件通常会在给定的时间间隔向C&C服务器发送beacon,因此使用DNS请求或url监视时间间隔可以对此进行检测。另外,在多数情况下,尽管设计好的恶意软件是使用HTTP进行C2活动的,但它们通常使用API发送请求,所以可以通过分析HTTP头信息将API调用与典型的浏览器活动区分开来以实现检测。

[8]利用基于流量的分析来检测APT,而不是基于网络,基于流量的分析将网络流量聚合在一起,从而减少了需要分析的数据量,之后对APT通信进行统计建模,成功设计出确定性的检测特征。其设计的框架如下所示

[9]则将APT攻击与内部威胁的结合起来进行分析,将其表述为一个双层博弈问题,并进一步确定了博弈双方(防御者与APT攻击者)的最佳对策,并证明存在纳什均衡。防御者、APT攻击者和内部威胁人员的相互作用表示如下

文中给了很多数学公式推导,这里不再重复了,直接看结果吧

图3表示攻击者和防御者在每个时间点的动作。我们可以看到攻击者的稳定状态下的动作,即α是0.2,而防御者的稳定状态下的动作,即β是1。图4为系统状态向稳定状态的演化过程。稳定状态为0.1667。

表明最后确实达到了纳什均衡。

代码监控

源代码中可能存在的漏洞可以通过静态分析技术(如污点分析和数据流分析等技术)来识别。此外,可以在执行期间监视代码的性能,并确保代码在其范围内运行,不会访问未经授权的内存区域与其他资源,这样可以更早地识别出威胁。这一块是一个非常大的领域,我们实验室有其他小伙伴在研究,这里也不展开了,后续有机会的话单独发文与各位师傅一起学习。

日志监控

有很多日志都有助于检测,比如内存使用日志、CPU使用日志、应用程序执行日志、系统日志等。

日志种类、数量都很多,不同日志之间记录的格式又是不同的,怎么将其联系起来进行分析是非常重要的一个问题。[10]结合了网络日志和主机日志来检测恶意活动。他们从这些日志中提取了4类特征,身份特征,基于网络流量的特征,基于服务的特征和基于认证的特征,然后使用皮尔逊相关系数来减少冗余,然后删除那些对聚类没有贡献的特征,接着通过聚类以识别恶意活动。

下图是据源IP地址聚合的防火墙数据中所选特征的经验累积分布函数

下图是由源IP地址聚合的系统日志数据中所选特征的经验累积分布函数。

在原始的10维空间中进行聚类,使用DBSCAN聚类算法,对于参数值ε = 0.15和minPts = 21的防火墙数据,投影到前三个主成分用于可视化,效果如下

在指定参数后,DBSCAN识别出6个集群和一小组离群点。虽然从图中看不出来,但在进行聚类的高维空间中,聚类之间的距离实际上相当远。

在原始的28维空间中进行聚类。结合防火墙和系统日志数据的DBSCAN聚类,参数值设ε = 0.25和minPts = 20,投影到前三个主成分(PC)进行可视化

从上图中可以看到有四个簇和一组离群点。虽然聚类在图中看起来不是可分离的,但在进行聚类的高维空间中,它们是相当遥远的。其中簇1代表正常行为,而簇2、3和4被分类为异常行为。为了分析攻击的异常簇,我们计算每个簇的归一化平均特征向量,如下所示

每一个小表的横轴是特征,特征1 -18对应于从系统日志数据中提取的特性,而特征19 - 28对应于从防火墙日志中提取的特性。当根据异常簇的正常值对其排序时,我们可以认为簇2最有可能是恶意的,其次是簇4和簇3。由于簇群3只有唯一的IP地址,所以我们认为它只包含良性主机。

[11]分析DNS日志来识别受感染的内部主机与外部恶意域名之间的的“beacon”活动,他们认为这种行为会在网络流和DNS日志中留下自己的记录。作者提出了一种DNS日志分析和事件关联的方法,通过考虑低延迟间隔时间,他们假设受感染的主机每天会与C&C服务器通信几次。通过识别受感染的主机,它们将与相同可疑域通信的其他主机连接起来。首先对DNS日志进行预处理,过滤不需要的数据,仅从DNS日志中获取IPv4地址。然后以图的方式表示元数据,图的顶点表示主机IP地址和域名,而每条边对应于从内部主机到外部机器的一个查询。

在Cobalt Strike中的Beacon大概就是如下所示

它可以使用SMB协议创建一个beacon,当然也可以使用HTTP或DNS等协议。初始任务是启动一个beacon侦听器来使用恶意payload并指定用于传输流量的端口号,payload提供两个通信通道。以上图为例,当域列表被提供之后,恶意软件会检查任务并通过HTTP或DNS下载它们。之后每次都要通过这些域,必须使用beacon向C2发送信号。如果一个域失败或被阻塞,恶意软件将进入休眠状态,直到下一个域可用。

该作者提出的基于DNS A记录进行迭代检测的方案流程如下

[12]同样通过DNS日志分析来检测APT恶意软件和C&C通信活动。他们使用移动设备的DNS日志,他们的方法简单来说就是给C2域名和普通域名打分。为了区分正常和异常(C&C)域,他们根据内部设备发起的DNS请求的数量,选择正常域,提取15个特征,分为4大类:基于DNS请求和应答的特征,基于域的特征,基于时间的特征,以及基于whois的特征,然后通过分数进行识别。流程如下所示

所选的基于域名的特征总结如下表

下图是验证时,绘制的C&C域与普通域之间的距离差。

上图中

从防御者视角看APT攻击相关推荐

  1. 从防御者视角来看APT攻击

    前言 APT防御的重要性毋庸讳言,为了帮助各位师傅在防御方面建立一个总体认识,本文会将APT防御方法分为三类,分别是:监控.检测和缓解技术,并分别进行梳理,介绍分析代表性技术.这一篇分析现有的监控技术 ...

  2. 从红队视角看AWD攻击

    AWD的权限维持 攻防兼备AWD模式是一种综合考核参赛团队攻击.防御技术能力.即时策略的比赛模式.在攻防模式中,参赛队伍分别防守同样配置的虚拟靶机,并在有限的博弈时间内,找到其他战队的薄弱环节进行攻击 ...

  3. 我看APT攻防对抗(2):APT攻击的案例

    我看APT攻防对抗(2):APT攻击的案例 FlashSky of code audit labs of vulnhunt.com 翰海源:立志于让安全成为IT系统基础属性;帮助客户改进自身系统的安全 ...

  4. 【高级持续性威胁跟踪】红队视角看Sunburst后门中的TTPs

    针对SolarWinds供应链攻击简介 最近FireEye披露的UNC2452黑客组织入侵SolarWinds的供应链攻击让安全从业人员印象深刻.一是影响规模大,SolarWinds官方称受影响的客户 ...

  5. [论文阅读] (10)基于溯源图的APT攻击检测安全顶会总结

    <娜璋带你读论文>系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢.由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学 ...

  6. 从kill-chain的角度检测APT攻击

    前言 最近一直在考虑如何结合kill chain检测APT攻击.出发点是因为尽管APT是一种特殊.高级攻击手段,但是它还是会具有攻击的common feature,只要可以把握住共同特征,就能进行检测 ...

  7. 七个迹象说明你可能受到APT 攻击

    APT攻击.即进阶持续性渗透攻击 (Advanced Persistent Threat, APT)或目标攻击,被设计用来在目标网络里躲避现有的管理政策和解决方式,因此要侦測它们是一大挑战. 正如我们 ...

  8. 社会工程学与APT攻击之——社工邮件钓鱼分析

    社工邮件钓鱼分析 在大型企业边界安全做的越来越好的情况下,不管是APT攻击还是红蓝对抗演练,钓鱼和水坑攻击被越来越多的应用.(水坑攻击感觉也很牛掰的样子) 说起钓鱼,突然想起来小薛同学在大一收到一个钓 ...

  9. 八大典型APT攻击过程详解

    八大典型APT攻击过程详解 2013-08-27 17:55 启明星辰 yepeng 51CTO.com 字号:T | T APT攻击是近几年来出现的一种高级攻击,具有难检测.持续时间长和攻击目标明确 ...

最新文章

  1. 有一份华为荣誉证书等你来拿!网络人工智能硬盘异常预测黑客松比赛火热报名中...
  2. JBoss/Wildfly 配置SQLserver服务器
  3. JavaSE学习总结第08天_面向对象3
  4. python 类 对象 知乎_python基础知识:类,对象,模块三者的区别
  5. WordPress主题LensNews模板源码,2.2版本多功能新闻积分商城主题
  6. ORACLE监听问题
  7. @NotBlank注解地正确使用
  8. 挖一挖C#中那些我们不常用的东西之系列(2)——IsXXX 系列方法
  9. 函数的定义、返回值和参数
  10. mimics软件怎么恢复原来默认的窗口设置
  11. windows无法打开添加打印机_打印机常见故障机及处理方法
  12. Linux 的du和df命令
  13. python实数符号_下列格式化符号中,用来表示浮点实数的是()。 (6.0分)_学小易找答案...
  14. 逸仙电商将携Galenic法国科兰黎、EVE LOM参展进博会 | 进博会倒计时
  15. 最强神器工具:新一代多系统启动 U 盘装机解决方案
  16. java byreference_深入理解Java中的引用(一)——Reference
  17. React.SetStateAction<never[]>
  18. 西南大学844信号与系统考研经验(高分上岸学姐)
  19. linux内存分配方式有三种,浅谈操作系统的内存分配原则
  20. 如何本地安装chisel bootcamp

热门文章

  1. javaweb mybatis逆向工程实例 图文详细讲解
  2. 09Python爬虫---爬虫实战之京东图片
  3. excel 取消合并单元格并填充
  4. ASP.NET界面列表展示代码
  5. 信息收集之censys
  6. 4月9日绝地求生服务器维护,绝地求生4月9日几点更新维护完_2020年绝地求生4月9号更新维护开服时间_3DM网游...
  7. Centos卸载rpm安装软件
  8. React Js 微信禁止复制链接,分享,禁止隐藏右上角菜单
  9. 详解SVM模型——核函数是怎么回事
  10. 微信 Ubuntu个人服务器环境搭建