查看原文
其他

威胁情报驱动:F3EAD 之定位

计算机与网络安全 计算机与网络安全 2022-06-01

一次性进群,长期免费索取教程,没有付费教程。

教程列表见微信公众号底部菜单

进微信群回复公众号:微信群;QQ群:460500587



微信公众号:计算机与网络安全

ID:Computer-network

我们收集情报不是为了对外声称我们掌握了情报情报的核心意义在于采取行动,无论这些行动涉及战略规划还是为事件响应过程提供支持。情报事件响应的支持体现为以下几点:


建立完善警报标准,奠定工作基础

在响应过程中确定情境化信息

了解攻击者、方法和战术


使用已识别情报、威胁数据,确定内部或外部攻击者位置的过程,被称为“定位”(fix)。在F3EAD循环的“定位”阶段,由“查找”阶段收集的全部情报都应被投入使用,从而追查对手在你的网络中的活动迹象。本文介绍定位对手活动的三个方面——利用攻陷信标,对手行为信标(又称为TTP)和对手目标。


“定位”阶段采用的各类方法差异显著,这取决于企业的技术应用(比如MacLinux上的内存分析具有相似之处,但在Windows上却截然不同)。为了重点关注情报应用,我们将介绍事件响应的重要核心概念(特别是这些技术与良好威胁情报的交叉点),并提供相应技术的学习资源。


一、入侵检测


情报可以在多个方面支持入侵检测。在入侵检测中集成情报的过程却未必一帆风顺,因为入侵的表现形式多种多样,而攻击者动向的检测点也是多种多样。在何处检测攻击者活动,也受到你的内部安全状态和可视化水平影响。


检测入侵主要有两个途径:


(1)网络告警(在内外网通信中查找攻击者入侵迹象);

(2)系统告警(在端点上查找攻击者存在的迹象)。


1、网络告警


网络告警是指通过识别网络流量,发现恶意活动。杀伤链的多个阶段都涉及攻击者与受害主机的网络通信,利用情报检测这类活动是可行的。通过网络流量可以检测以下阶段的活动:


侦察跟踪

载荷投送

通信控制和横向移动

达成目标


不过,不同告警方法的效果不尽相同。下面,我们针对各项活动深入探究,指出在哪种情况下告警是有效的,在哪种情况下应该避免告警。


对侦察跟踪的告警


从侦察跟踪阶段就开始告警,似乎是最理想的。毕竟,如果能提前识别出觊觎你的网络的潜在攻击者,你就可以阻断攻击。不幸的是,在侦察跟踪阶段告警只是理论上可行,但实际上不值得。为什么?多数情况下,问题在于潜在侦察事件的数量。假设你在没有防火墙的情况下把系统直接暴露在互联网上,你就知道原因了。猛烈的扫描持续不断,有些是恶意的,也有些是合法的研究行为。如果防御者把网络扫描作为检测标准,他们就会宣称遭遇到海量的网络攻击事件,通常自称在短时间内受到数百万次攻击,但他们所说的实际上主要是自动侦测工具,与实际威胁无关。


简而言之,如果你对每次Nmap扫描或DNS区域传输的尝试都发出警报,就会因被海量的无意义的噪声所淹没,却无计可施。


这并不意味着收集侦察信息是无用的。在高级阶段,侦察信息是开展欺骗行动的理想目标。


对载荷投送的告警


载荷投送阶段是第一道告警关口。载荷投送一般需要利用电子邮件(用于钓鱼)、网站(用于水坑攻击)或遭入侵的Web服务(用于对Web应用程序、数据库或其他服务的访问)。


你对于载荷投送的告警能力在很大程度上取决于你掌握的技术。对电子邮件的告警难度是众所周知的,通常需要专门的开发工具或深度改造现有工具。附件、链接和元数据是需要重点关注的三个部分:


附件


近年来,投送载荷最常见的形式就是邮件附件,通常是包含漏洞利用的常用格式文档(尽管采用社会工程的程序命名诱使用户执行而并不使用漏洞的情况也是常见的,例如屏幕保护程序)。Adobe公司的Acrobat和Microsoft公司的Office文档格式都是经常被利用的。企业可以根据邮件附件的文件名、文件类型、文件大小或文件内容对攻击发出告警(但是,鉴于存在多种嵌入或压缩附件的方法,最后一种检测方法可能会很棘手)。


链接


在某些情况下,电子邮件中的恶意链接将导致用户访问包含恶意软件、利用浏览器漏洞的网页。社会工程攻击也会利用链接将用户引入伪造登录页面,获取用户名和密码,从而进行凭证重用(credential reuse)攻击。


元数据译


电子邮件自身包含多种类型的元数据(metadata),企业可以据此发出告警,但这只是权宜之计。根据恶意电子邮件元数据告警固然容易,但攻击者也可以轻松更改这些元数据。尽管如此,对于电子邮件发件人地址、IP、中转服务器(特别适合作为模式)、用户代理数据的追踪信息,都可以用于告警。


如果能识别攻击者发起攻击活动的新奇手段或独特手法(不同于常见方法),我们就可以提出新的方法来检测入侵行动的载荷投送阶段。


凭证重用


根据“Verizon数据泄露调查报告”以及我们身边的人所说,凭证重用仍然是攻击者获取权限或在内网移动的主要方式之一。这是有道理的,因为对于攻击者来说,用户名和密码并不难于获得。弱密码、密码重复使用和众多的密码公开泄露令攻击者能够轻松找到入侵网络的凭证。他们一旦进入网络,获取更多的凭证就更容易。此外,许多网络钓鱼攻击都试图获取用户凭证,然后将其用于获取网络权限。


通过监控发现凭证重用可能很困难。毕竟合法用户也要访问网络,这样恶意行为就会混在里面。如果你有适当的系统,还是有办法检测这类恶意行为的。比如:查找陌生登录地点。此外,在奇怪的时间登录,或者同时有多人登录也是异常现象。即使你无法在第一时间检测到可疑登录,但在事件响应的时候,这些异常事件会让你发现攻击者进入了网络,此时,你可以在日志中查找可疑活动并将其标记,以便进一步调查时使用。在“消除”阶段,应该为这些用户重置密码。


对通信控制的告警


攻击者终究需要与他们的系统进行通信。在载荷投送和通信控制两个阶段之间,还有许多事情发生,但这些都是最容易在系统层次检测的事情。命令和控制(Command and control,也被称为C2)是指攻击者与其恶意软件发生交互执行动作,这必然导致网络通信。


你可以在C2通信控制中查找以下共性特征:


回连地址(Destination)


这是第一个也是最简单的方法。数以百计的威胁情报产品专门按照IPv4地址和域名提供已知的恶意位置。许多工具为你提供恶意回连地址的黑名单和警报依据。如果你已经在使用这类工具,那么在辨识未知/非预期的连接时,地理位置信息也可以派上用场。(例如,为什么我们的打印服务器在连接X国?)


通信内容


多数恶意软件为逃避检测而采用加密通信。虽然这确实会使检测传输内容变得更加困难,但同时也为防御者提供方便之处——只需查找加密信息出现在哪些不应该使用加密通信的地方。为了掩人耳目,有些恶意软件会滥用常见协议,例如,通过TCP 80端口发送加密的HTTP流量,而TCP 80端口通常是不加密的。通信内容和通信协议的不匹配,可以作为一个重要的警报。元数据也是一种易被攻击者忽视的常用检测内容,例如,使用相同的用户代理(user agent)字符串或公共的头部信息,就是一种可疑的元数据。


通信频率


攻击者若不是设法入侵了公开的服务器,是无法与恶意软件随时通信的,因为通信链路可能是不通的。因此,大多数恶意软件需要从内网主机向命令控制服务器发起连接,我们称之为“心跳”(beacon)。这类心跳一般按固定间隔发生,通常是每隔几分钟一次(通常由工作中的恶意软件发起),而且长达数月不间断(如果最初的恶意软件被删除,则通常会触发重新感染)。将通信频率作为识别模式来检索往往是可行的。


持续时间


大多数恶意软件没有那么聪明,所发送的消息往往无趣。在某些情况下,恶意软件的通信并无实质内容,虽然通信内容是加密的。如果这种情况时常发生,就可以形成检测模式,例如,那些始终具有相同字节长度的空操作消息。


特征组合


通常将单条特征作为检测条件并不充分,但多条特征组合使用就能达到效果。开发一种检测模式并找到对应的检测方法,需要投入时间,有时也需要一点运气。


很多时候,根据通信控制相关信标(如已知恶意IP或域名)发出告警是可行的,但通过深入了解通信控制行为的本质,我们甚至可以在不知道回连地址是否为恶意的前提下,对可疑流量发出告警。


滥用共享资源实现通信控制。通信控制的方式往往随趋势而变。例如,2000年左右,大多数恶意软件使用互联网中继聊天(IRC)实现通信控制。防御者认识到这一点后,对TCP 6666-7000端口(常见的IRC端口)发出警报或进行阻断。然后,攻击者开始把IRC运行在TCP 80端口,猫捉老鼠的游戏就这样不断继续,形成趋势。


通信控制当前(很可能会持续下去)的一个趋势是使用社交媒体和软件即服务(SaaS)网站。因为通信使用了广泛应用的SSL协议(通常难于检查流量内容),以及回连地址本身并非恶意的,这类通信行为难以检测和响应。雪上加霜的是,平台即服务(PaaS)公司所提供的多种资源共享形式,使得难以形成对非恶意流量和正常使用的通用描述,检测通信控制将更加复杂。


不需要通信控制的恶意软件。在极少数情况下,恶意软件根本不需要通信控制。做到这一点并不容易,这要求恶意软件在投送之前就具备100%的功能指令,无须任意修改和升级就能完成攻击任务。这类恶意软件只在迫不得已时才会被制作出来,比如在物理隔离的网络环境下。通常需要相当多的前期侦察,才能事先了解目标环境的情况。在这种情况下,就只能检测载荷投送和攻击者达成目标的行为了。


对达成目标行为的告警


与对通信控制的检测类似,检测攻击者通过网络达成目标,重点在于那些指示数据进出内网的异常流量模式。数据进入网络的情况并不常见(尽管随着虚假信息变得越来越普遍,将来可能会看到更多)。数据泄露的情况则是非常常见的。


许多攻击的目标通常是窃取数据,特别是那些专注于入侵和窃取知识产权的攻击。每个攻击者都会有自己喜欢的窃取数据的方法,但最终他们都必须做同样的事——从受害系统获取大量数据(从几十行到数百GB不等),传送到攻击者控制的系统。实现方法不同,最终目标相似。


防御者可采取多种方法检测数据外流。首先是关注内容,这就是数据防泄露工具兴起的原因。举个例子,假设你打算预防信用卡信息盗用,可以利用某检测技术,在流量中搜索四组四个数字(信用卡号),随后是三个数字(信用卡验证码,简称CVV),然后是一个月/年的组合(到期时间)。表面上看起来很简单,但魔鬼潜伏在细节中。万一信用卡号在一个文件中分为四组四个数字,而日期存放在另一个文件中呢?万一CVV使用字母代替数字(例如123这样的CVV以ABC发送)怎么办?更复杂的还在后面,比如攻击者可以使用安全套接字层(SSL)来防止你的抓包工具寻找卡号。


其次,防御者可以关注网络连接本身的元数据。如果攻击者窃取了5GB的信用卡数据,无论采用哪种加密方法(不考虑数据压缩的情况),都要发送5GB的数据。


根据网络活动定位恶意信标,是掌握网络当前状况和深入了解对手的好方法。但这并不是唯一办法。接下来,我们将讨论如何从系统角度定位恶意活动。

2、系统告警


系统告警是网络告警的补充。与网络告警关注杀伤链的几个特定阶段相同,系统告警可以类似地分为以下几个方面:


突防利用

安装植入

达成目标


系统告警依赖于操作系统。除了少数例外,大多数工具(无论是开源还是商用)都只面向特定操作系统的。这是迫不得已的,因为大多数安全警报发生在操作系统的最低层,需要与进程管理、内存管理和文件系统权限等系统机制深度结合。


这样一来,你就要慎重考虑情报与系统告警的集成方法,既要考虑目标操作系统,也要考虑所使用的工具。例如,一些字符串类信标可跨系统使用,但注册表键值类信标则只能用于Windows系统。与此同时,诸如商业反病毒程序之类的工具可以与内容无关地集成,而诸如osquery等开源工具则需要一定的开发工作量。


对突防利用的告警


安全公司的产品理念都是建立在警告或阻断突防利用(exploitation)之上的——事实上整个行业都是如此(如反病毒领域)。突防利用是合理的告警条件,因为它会将控制权从防御者转移到攻击者。其次,攻击者发起的突防利用,会对防御者资源的运作造成影响。


突防利用通常表现为以下两种方式之一:


攻击者在用户系统中创建并控制执行新的进程。

注入由用户控制的某个已有进程并执行新的功能。


实现方法虽然不同,但结果是一致的:受害系统处于攻击者的控制之下。告警突防利用的主要方法是准实时跟踪这类活动,监控系统各进程的不同时刻状态,发现进程状态的变化。有些活动是正常的,有些活动则是异常的,这类信标可以表明入侵事件。异常活动包括:底层二进制文件篡改、应用程序在异常或非法目录下运行,甚至是采用混淆命名的新进程(其命名类似使用小写字母l代替数字1,将rund1l32.exe伪装成rundll32.exe之类)来迷惑分析人员。利用多种工具发现未知进程或从未见过的进程,将其作为系统告警条件,是一个不错的开端。


对安装植入的告警


对安装植入的告警就像面包和黄油一样,是系统告警不可或缺的一环。即使攻击者在受害主机获得了执行代码(攻击者可以运行自己的代码)的机会,也通常不是攻击过程的终点。通过突防利用创建的进程,无论是注入到普通用户的进程,还是新创建出来的进程,最终都会结束运行;在此之后,攻击者就会失去立足点。


因此,对于大多数攻击者来说,突防利用的下一步是要确保他们持续掌握系统控制权。在单系统的网络钓鱼攻击过程中,通常会安装用于实现持久化的第二阶段恶意代码,同时加入攻击者执行其目标的新功能。这些功能通常会打包成一套模块化工具,一般被称为远程控制木马(remote-access Trojan,RAT)或rootkit。在“定位”阶段,我们应该已经确定了攻击者的常用工具的情况,这些信息可以帮助我们了解在“定位”阶段的检测对象。


对达成目标行为的告警


攻击者可能需要访问特定资源才能达成目标,获得预期成果。在大多数情况下,达成目标的行为逃不出以下四类操作(按首字母缩写为CRUD):


创建(Create)

由自身向磁盘写入新文件。


读取(Read)

读取系统当前存在的文件。


更新(Update)

改变系统已有文件的内容。


删除(Delete)

删除系统上的文件,通常还有额外的一步操作,使得文件无法被恢复。


在某些情况下,攻击者可能会一次执行多个操作,从而获得更为复杂的结果。比如,Cryptolocker1类勒索软件攻击会迅速地先后执行以下三项操作:


读取

恶意软件cryptolocker会读取当前主机的全部个人文件。


创建

根据已读取文件建立新的文件,不过这些文件已经使用攻击者密钥加密。


删除

恶意软件会删除用户未加密的原始文件,用户必须交纳赎金才能访问原始文件。


简单,粗暴,但屡屡得逞!


Cryptolocker攻击只是一个例子,不同的攻击之间,达成目标的行为差异非常大。例如,攻击者读取数据可能是为了通过网络传回去,从而窃取知识产权,这是一种最常见的高级持续威胁(APT)模式。在另一种情况下,攻击者可能只是简单地删除所有文件(或重要文件),从而使系统资源不可用。最后,攻击者可能会创建一个新的应用程序,从而利用受害系统实施二次攻击,例如,作为网络跳板或发起拒绝服务(DoS)攻击。


对这类操作发出告警会有些棘手,因为创建、读取、更新和删除文件是常见操作,在计算机上的任何行为都会产生这些操作。重要的是了解攻击者可能采取的行动。如果你关注某家银行的资金盗窃行为,监控访问银行台账的行为就是关键。如果你关注攻击者窃取知识产权的行为,可能就需要检测通过网络上传大文件的行为或在磁盘上创建大型归档文档的行为。这需要像对手那样思考,并结合创造力和经验。


利用“定位”阶段发现的攻击者信息,结合在我们自己网络中检测到的恶意活动,现在可以开始规划在我们的环境中查找攻击者迹象的方案了。


3、定位“玻璃巫师”


《威胁情报驱动:F3EAD 之查找》中,我们曾为“玻璃巫师”的攻击者开发了一套杀伤链,现在我们可以据此深入理解在该阶段应该检测哪些攻击工具和攻击活动了。我们已经确定“玻璃巫师”使用鱼叉式钓鱼和水坑攻击(strategic web compromise)等方式传播攻击工具,并会另外植入工具(包括Hikit、Derusbi和ZOX工具系列)维持对主机的权限和控制。我们还知道,攻击者通常瞄准经济、环境和能源政策相关情报,并且经常入侵大量网络主机以获取所需情报。根据这些信息,我们可以着手制定一个计划,明确需要查找哪类攻击活动。下面介绍需要查找的活动类型。


网络活动


以下是我们检测“玻璃巫师”行动时涉及的网络活动类型:


鱼叉式钓鱼邮件


在邮件日志中查找“玻璃巫师”相关的发件人、邮件主题或附件文件名。此外,在警告用户时,应该提供这类鱼叉式钓鱼活动的详细情况,如果用户曾看到类似邮件,他就会告知安全团队,同时他将来也会留意这种电子邮件。


网站入侵


在Web日志中查找成功访问或试图访问已被“玻璃巫师”入侵的网站的记录。在这一阶段,所限定的查找范围很重要。如果某网站在被入侵后很快就被发现并修复,那么只需查找已知该网站遭入侵时的活动即可。


通信控制


通过检测“玻璃巫师”常用的通信控制工具,可以知道需要查找哪些活动。此时需要深入研究,充分理解攻击者的工具及其工作原理。例如,ZOZ系列习惯使用PNG图片文件与命令控制服务器通信。


系统活动


现在我们更清楚需要在网络中寻找什么了,可以开始调查可疑活动了,如下:


突防利用


已知有些攻击者专门利用特定的某几种漏洞,所以熟悉他们所使用的漏洞,同时清楚你的网络是否存在这些漏洞和漏洞的存在位置,可以帮助你知道去哪里查找攻击者的活动。有人发现“玻璃巫师”曾使用CVE-2013-3893漏洞,这是一个Internet Explorer浏览器漏洞,因此需要知道哪些系统存在该漏洞,并着手查找“定位”阶段所发现的其他突防利用迹象。


安装植入


只有了解攻击者的常用工具及其工作原理,才能清楚哪些攻击工具对你的网络环境有效。“玻璃巫师”根据受害者的网络结构,同时使用Hikit系列的32位和64位变种。因此,只有熟知你的网络环境,才能知道在该阶段需要查找什么,确定哪些文件会在安装植入过程中产生,以及它们所在的目录。


达成目标


我们知道“玻璃巫师”瞄准经济、环境和能源政策相关情报,所以如果我们知道哪些系统具有这类信息,就可以查找文件被访问、收集和泄露的迹象。不过,我们还知道攻击者喜欢入侵多台主机寻找文件,并会在全网隐蔽地移动,所以我们可以在网络中查找横向移动的迹象,包括那些我们认为并不典型的系统行为。


对于“定位”阶段发现的信息,我们现在有了一个不错的抓手,可以运用在我们的网络环境里,继续检测“玻璃巫师”在网络中的活动。下面深入探讨流量分析、内存分析和恶意软件分析等内容。


二、入侵调查


告警流程和调查流程只有一线之隔,因为两者经常会使用相同的工具,只是使用方式不同。如果说告警是一个“精简”的过程(找到最细微、最具体的数据,揭示出恶意活动),那么调查则是一个先“扩张”(尽可能多地收集数据,获取信息上下文)再“精简”的过程,最终使数据形成有说服力的分析依据。这种先“扩张”(收集和处理)再“精简”(分析和传播)的工作流程在安全分析和情报分析中都是常见的。


接下来,我们将探索入侵调查的关键方法和工具。


1、网络分析


入侵调查一般从网络追踪开始。不幸的是,入侵事件多数并非内部发现,而是来自于只提供了通信控制服务器IP地址的第三方报告。


根据工具和流量规模的不同,网络流量分析的主要方法分为以下几种:


流量分析:利用元数据理解攻击者的活动。

特征分析:查找已知的恶意模式。

完整内容分析:借助全部数据包数据理解攻击活动。


下面将逐一深入介绍。让我们先从流量分析开始。


流量分析


流量分析并非只应用于计算机网络。事实上,流量分析主要是从无线电通信分析发展而来的,许多技术可以追溯到第一次世界大战。流量分析主要是根据元数据(而不是通信内容本身)识别对手活动,以及对手的通信模式。因此,该技术使用的数据集微乎其微(每条记录多达几兆字节的全部活动内容,可能只产生100字节的元数据),跟踪信息如下:


端点(包括IP地址和域名)

端口

收、发字节数

连接时长及起止时间


我们将这样的一组元数据称为“网络流”(network flows)。即使只有如此少的数据,训练有素的分析人员也可以据此掌握大量信息。分析人员应该查找以下活动:


与已知恶意IP地址的连接,从而发现通信控制活动。

频繁的、有规律的、短暂的、接收/发送少量字节的连接,从而发现恶意软件的心跳、检测新的控制指令。

与从未见过的域名建立长时间连接并发送大量数据,从而发现数据泄露活动。

已知受害主机连接内网其他主机的445端口,从而发现数据采集活动(TCP 445端口是微软SMB文件共享使用的端口)。


只需有限的网络流量元数据,就可以发现上述活动,而且远不止于此。


流量分析数据可以通过多种方法采集。网络流数据通常可以从各种网络设备获取。这类数据通常易于采集,因为安全团队和网络团队都会用到它,可共同使用,均摊设备采购成本。另一种获取网络流数据的安全专用方法,是使用网络安全监控工具Bro,相对于基本的网络流而言,它可以采集更深层元数据(包括协议信息和特征检测)。CERT/CC的SiLK和QoSient的Argus也是开源的传统流量信息捕获工具。其他可以获取流信息的系统还包括网络代理和防火墙


流量信息分析工具种类繁多,从通用的到专用的应有尽有。日志记录和全文搜索工具(如Splunk)通常可以产生不凡的效果。如Flowbat那样的专用工具,也加入了用于指定网络流的操作符。使用图形数据库,如Neo4j、Titan或NetworkX来自己打造分析工具也是可行的。


相对于特征分析或完整内容分析,流数据分析还有一个好处,是流的信息密度量优势。由于只保留元数据,每条流数据记录的存储量低,所以存储成本更低,处理速度更快。即保留和搜索超过数月的特征信息会有高昂的成本,而长期存储流数据则是可行的。虽然流数据不如完整内容数据那样能够全面解答网络安全问题,但其信息密度和长期存储的优点,使其成为一种宝贵能力。此外,收集和分析的便利性也很明显,这就是流量分析是高价值数据源的原因。


情报在流量分析中的运用。将情报运用在流量分析中,最常见的是借助流量数据查找与已知恶意资源(IP、域名等)的连接,或根据受信系统识别异常活动模式(如扫描、横向移动或心跳)。虽然这类技术很简单,但通常行之有效且易于自动化实现。仅使用流量分析是不行的,其威胁在于,可能因为对情报内容不够理解而产生误报,例如具有双重用途的IP地址,以及仅在短时间内具有恶意的域名。


在流量分析中使用情报的另一种方法,是查找指示恶意活动的流量模式,例如反复产生的短暂通信、非工作时间的通信,或者与新出现的域名(只在最近才开始活跃的域名)之间的通信。在域名刚刚创建的几个小时内,通常是不会有用户访问的。这往往是通信控制活动的迹象。将被动DNS(PassiveDNS)与网络流分析相结合,可以实现自动搜索这类域名。


从流量分析中采集数据。虽然有些违反直觉,但流量分析通常是线索的重要来源。通过查找最高流量主机(产生、接收流量最多或最频繁的主机)或最低流量主机(产生、接收流量最少的主机,或偶尔才产生或接收流量的主机),通常可以发现重要线索。找出那些不显眼的主机(几乎不产生网络流量的主机)固然重要,因为攻击者通常会使用新的基础设施来逃避对不良信誉主机的检测机制,但也不要低估那些大流量主机。如果某台主机在星期天早上发送数以千兆字节计的流量,那么知道该主机是在进行异地备份还是在泄露数据,是很重要的。


特征分析


特征分析介于的网络流量数据分析与完整内容监测数据分析之间,既不像前者那么简陋,也不像后者那么全面。流量分析注重网络连接的元数据,特征分析注重监测特定内容。流量分析可以使用的源码和工具很多,但特征分析只应用于专用系统——入侵检测系统


入侵检测系统(IDS)结合了网络捕包、规则引擎和记录日志方法。其中的规则被用于网络流量检测,一旦某条规则被命中,就会产生日志。可使用的入侵检测系统种类繁多,可以选择商用的,也可以选择开源的。另外还有一个独特的特征类别:Snort规则。以下为一条Snort IDS规则示例:

我们来看几个Snort规则关键字和动作(Snort选项很多,更多内容请见https://snort.org/)。该特征可拆解为如下几项:

第一个单词指定在特征匹配后执行的动作。Snort提供了多种动作,不过使用Snort规则格式的其他入侵检测系统可能只实现了其中部分动作:


alert:按指定报警方式产生一条报警,并记录数据包。

log:记录数据包。

pass:忽略该数据包。

activate:报警,并启用另一动态(dynamic)规则。

dynamic:保持空闲状态,被其他规则激活(activate)后,则按log规则操作。

drop:阻断,并记录该数据包。

reject:阻断并记录该数据包,然后对TCP协议发出TCP复位(reset)包;对UDP协议发出ICMP端口不可达消息。

sdrop:阻断该数据包,但并不记录。


目前而言,最常用的动作是alert,其他部分在适当场合也会发挥巨大作用。

其后的从句用于指定流量分析的特性,并将其作为限制因素。第一个单词用于指定协议(一般是TCP或UDP)。重要的是后面的从句,其一般形式为:

其中,“位置”可以表达多种情况。IP地址、域名都是合法的“位置”,Snort还支持多个位置列表。


规则的大部分内容在括号里面(本例中以msg开头)。这里有大量的选项,篇幅所限,此处不一一列举,需要了解的关键选项为:

这里的msg是alert的名称,将(同其后的部分一起)被记录下来:

这个content域用于指定在数据包查找的ASCII字符串内容:

Snort规则支持与Perl兼容的正则表达式,即pcre(Perl Compatable Regular Expressions),它是一种使用指定模式代替精确匹配内容的方法。

最后,将提供该特征匹配威胁详情的链接填写在reference域里。


能够理解和使用特征,是成功实施和使用特征检测的关键。


情报在特征分析中的运用。在IDS部署后,运用情报时需要注意两个要点。首先是特征的创建。根据外部获得或内部开发的情报创建新的特征,是显而易见的情报运用方法。只有了解你的IDS能力并具备创建、调优特征的经验,才能良好地运用情报


其次,除了创建特征之外,还需要了解修改特征、删除特征,才能在特征分析中有效地运用情报。不准确或不可行的特征会降低事件响应的速度,迫使团队把时间浪费在无效调查和分析上面。了解特征何时失效、何时应该被修改或删除,是需要经验的。


从特征分析采集数据。特征分析虽是重要技术,却有一定局限性,因为特征必须从恶意模式中产生。单凭假想的活动是很难形成特征的。既往的攻击模式和情境(包括不良的源地址和目的地址)是你在特征分析中提取特征的关键。所以当特定端点触发特征时,该端点可能就是不错的调查起点。此时,你也许需要转到其他数据源,无论是流量数据还是全包数据,都可能会发现大量信息。


完整内容分析


完整内容分析与流量分析截然相反——望文生义,它是捕获自网络发送的每一比特、每一字节。对此,信息可以通过多种方式搜索、重组以及分析。与无法用于事后分析的流量分析或特征分析不同,完整内容的巨大优势在于只要流量被存储下来,就可以反复分析或换不同的方式分析。完整内容分析的缺点在于对存储的需求。从字面上看,完整内容监控需要为网络流量的每一个比特保存副本,这对于大多数企业来说意味着海量的数据存储。


最起码,完整内容分析能让你以某种方式看到网络流量的各个部分。借助Wireshark之类的工具,你可以在OSI模型的任意层级挖掘每个元素。这通常是创建IDS特征的基础。那些可能无法被其他工具检测出的特定项目,你也可以通过这种方式找到。


在新的信息形成后,分析人员可以对完整内容重新执行流量分析和特征分析。例如,假设你在某次调查后提取了新的C2流量特征,就可以对较早的网络流量完整内容重新扫描这条新特征。按这种思路,完整内容就相当于网络的时间机器,使你能在旧的网络流量上应用新情报


最后,完整内容是还原全部用户活动的唯一依据。例如,假设某用户触发了通过FTP泄露数据的警报,就有必要检查该端点当时正在进行的各种操作。这样可以揭示出其他的重要信息,比如C2对数据泄露的控制机制。这类完整内容分析需要借助NetWitness或aol/moloch1这类专用工具,为多数网络数据包重建层级结构。


情报在完整内容分析中的运用。如你所料,在进行完整内容分析时候运用情报是特别灵活的。流量分析和特征分析所用到的技术,都适用于完整内容分析,此外,还有一些专用的方法:


数据包级过滤。Wireshark之类的工具提供了多种特征过滤手段,包括IP地址和其他可由情报甚至网络监测工具中获取的特征。

使用新情报重新检测旧的网络流量,也是运用情报的方法。

在完整内容重建层使用情报,可以搜捕二级活动。


从完整内容分析采集数据。这正是完整内容的闪光之处。完整内容分析是收集数据和生产更多情报的最简单的数据源,也是最全面的数据源。真实的数据包可以让你将目光从恶意端点转向恶意数据。


2、实时响应


实时响应(Live response)是一种不受赞赏但通常有效的分析方法。“实时响应”是指潜在受害系统不必离线的前提之下开展分析工作。取证分析通常都需要使系统脱机,这会丢失一些系统状态信息,比如活动进程信息。同时,离线取证也要承受对攻击者泄密的风险,并会为用户造成极大的混乱。


实时响应可以获取以下信息:


配置信息

系统状态

重要文件与目录信息

常用持久化机制

已安装应用程序及版本


尽管实时响应并不总能提供系统调查所需全部信息,但至少可以掌握足够信息来确定是否需要展开更彻底的分析。


实时响应工具一般是由常用脚本开发的,如Perl、Python或者刚刚出现的PowerShell,所以多数都是开源的。Yelp公司的OSXCollector就是一个开源的Python实时响应脚本,可用于提取macOS的安全证据。Windows平台颇受关注的工具是Dave Hull的Kansa,该工具为PowerShell开发的事件响应取证框架。


那么怎样将情报集成到实时响应呢?为便于快速批量提取证据,实时响应工具一般被设计为不需要任何配置即可工作。所以,情报整合一般在后端进行。


例如,OSXCollector会将已采集系统信息输出为JSON格式。所以,分析数据需要借助于Yelp的另一个项目osxcollector_output_filters,该项目可与多个情报源集成,包括自定义信标、OpenDNS之类的情报服务。对于复杂的提取数据,这种事后运用情报的方法很常见。


3、内存分析


与实时响应相似,内存分析侧重于采集内存中的系统状态。因为系统中的每个进程都需要在内存中运行,该方法提供了提取信息的极有利位置,特别是用来提取那些系统迹象不明显的试图隐蔽运行的工具。


内存分析是采集和分析之间的明确分界,因为内存分析首先是要全面采集,然后才会专注于处理结果,并将情报应用在事实之上,这也是内存分析与实时响应的相似之处。FireEye公司的内存分析工具Redline(由Mandiant开发)就是首先提取系统内存,并在分析的时候才运用OpenIOC情报


Redline是一种一体化内存分析工具,其强大之处在于,可将采集与分析同步进行。划分采集和分析的最佳角度,就是看采集程序和分析程序是否存在协同合作的机会。比如,Volatility工具包就是一个很好的例子。


Volatility是一种开源的Python内存分析框架。Volatility与Redline不同,它本身并不具备内存取证的能力,而是支持读入不同操作系统下的多种采集工具的内存格式数据。


Volatility所提供的是框架和内存分析脚本,支持内存恶意软件检测、密钥提取——实际上只要能找到相应插件,Volatility可以提取任何信息。显然,将情报集成到内存分析会受到工具的限制。但对于Volatility来说,这并不是问题。这是因为Volatility支持利用Yara规则检测内存中的特定对象。另外,Volatility是高度脚本化的,所以适合自动捕获指定进程、内存证据、加密密钥(cryptographic primitives)等。Volatility的解析能力涵盖了从基础的字符串到证书之类的高层信息,所以你可将其他阶段获得的信标应用在内存分析中。那么Redline怎么样呢?Redline支持OpenIOC格式的信标,可以直接应用于独立的内存捕获。


4、磁盘分析


传统的磁盘取证通常是指借助专用工具在原始比特、字节级别提取硬盘文件系统信息。硬盘上的信息乍一看是无法理解的。它包含着硬件、文件系统、操作系统和数据格式层次的无穷无尽的嵌套结构,有点像OSI模型。从这些层次剥离文件的过程,被称为文件雕复(file carving)。


雕复工作从最底层开始,不断构造各种数据结构,直到呈现出文件、数据流,以及其他的操作系统程序。这个工作无法手工完成,需要使用EnCase、FTK或Autopsy之类的专用工具。数据被雕复后,就可以开始分析了。此时,借助这些工具,就可以像系统自身提供的功能一样浏览文件。分析人员可以导出指定文件、查看日志,或查看操作系统特定构造,例如Windows系统可选数据流(alternate data streams)和注册表。取证软件具有非常强大的搜索功能,甚至支持在特定类型文件(如电子邮件)中进行搜索。


有经验的取证分析人员的能力在于,准确掌握该到哪里搜捕目标。例如,如果你有一台受害主机,取证分析人员应该能够查找常见的持久性方法,识别运行中的各种恶意软件,然后提取恶意软件释放的任何文件。同时,分析人员还会提取二级数据,例如在恶意软件植入或活动时间范围内产生的日志。这通常是中间步骤,取证分析人员通常会将收集到的大部分内容交给其他分析人员进行分析。


情报在磁盘分析中的运用


情报运用于磁盘分析并不常见。虽然有些工具提供了搜索指定字符串或信标的功能,但在大多数情况下,在日志工具或网络范围系统(如入侵检测系统或端点检测系统)更容易实现这一点。一般来说,磁盘分析仅用来挖出可供进一步分析的对象。


从磁盘分析采集数据


系统盘可谓是调查人员的宝库,受害主机的系统盘更是如此,其他方式难以揭开的答案,许多情况下都能在这里找到。数据在磁盘上不易丢失,状态信息也更全面,这些特点是磁盘分析的优势。相比之下,无论是内存分析还是实时响应,都是发生于特定时点的分析,难免有重要的对象未被观察到,或者分析人员会对他们在调查中发现的东西问个不停。


在磁盘分析的过程中,分析人员可以随意取得所需的分析对象(比如某个恶意软件)着手分析,在深入分析之后,他可能会发现漏掉了某个重要的配置文件。由于磁盘分析在本质上是时间依赖(time-dependent)的,这一文件应该还在磁盘上,取证工程师还是可以回去找它。


以下是可用于调查和情报的最有用的磁盘信息源:


持久化方法

临时文件

隐藏文件和数据流

存在于未分配空间的文件

恶意软件及其配置

达成目标的迹象


5、恶意软件分析


在大多数事件中,恶意软件分析就是最深入的技术分析。这种分析有时面对的是简单的shell脚本,有时却要面对数千行代码规模且具有全面反分析能力的复杂程序。很少有哪个安全领域需要如此广泛而深入的理解能力。多数情况下,一个团队会有一名专门的逆向工程师负责恶意软件分析,但仍有许多工作即使是非专业人员也可以从事。


了解恶意软件有两种基本技术:静态分析和动态分析。每个事件响应人员和情报分析人员都应该具备基本的静态和动态分析技能。


基本静态分析


静态分析是恶意软件分析的最简单形式,是一个收集未知二进制文件相关的元数据的过程。所需要收集信息包括:


文件哈希


常用哈希(如SHA1和SHA256)可用来实现文件比较,包括在恶意软件资源(如VirusTotal)检索。


模糊哈希(如SSDeep)支持样本之间的模糊比较。这在跟踪一系列攻击活动中会特别有效,对文件的细微修改会导致SHA哈希值的改变,但一般不会改变SSDeep特征。


文件类型


不仅是文件扩展名。


文件长度


与其他用于识别相似文件的数据同样有效。


字符串


有些二进制程序具有明文的重要信息,包括IP地址和授权令牌。适用于模糊分类,效果与模糊哈希相似。


基本静态分析的最终目标是取得适合的信息,用于生成广谱检测特征、形成响应机制,以及跟踪系列攻击活动的演进。基本静态分析还有助于从企业外部获取情报,例如厂商报告。


基本动态分析


一般来说,基本静态分析的下一步就是基本动态分析。在动态分析过程中,分析人员在受监控的环境中执行恶意软件,观察其活动。动态分析的关键在于有一套安全的恶意软件执行环境,有效地收集监测结果。


动态分析最常用的技术是沙箱。典型的沙箱支持在专门构建的系统(通常是与互联网隔离的虚拟机环境)中执行样本。沙箱将样本导入虚拟机执行,监测系统行为,观察恶意软件活动。沙箱通常会关注系统的各类变化,例如新进程、新文件、持久性机制的改变,以及网络流量。就像在静态分析中一样,目标是收集可用于在你的环境中识别恶意软件的有效信标。


动态分析有一些缺点,特别是在使用沙箱的时候。一方面,建立一套能够有效收集监测结果的安全环境并不容易,并且存在一定风险。另一方面,运行环境需要与你的真实环境一致,包括常用软件。此外,有些恶意软件样本可能采用一些技术手段来检测是否运行于沙箱环境,例如查找虚拟机痕迹或尝试访问网络服务。虽然目前有些办法可以骗过动态分析环境的恶意软件,但这个问题还是需要指出并引起重视。INetSim和FakeNet等工具可以帮助解决这类问题。


高级静态分析


最后,当分析人员需要充分理解某个恶意软件时,他们会采取全面逆向工程的方法。静态分析(分析恶意软件但并不运行它)的另一种形式是高级静态分析,这种分析方法借助多种工具在代码级别分析恶意软件,最常用的工具是反汇编器(disassembler)。


汇编器的工作方式是,将编译好的二进制应用程序分解为机器代码指令,而这种指令就是受害主机将要执行的。这是一些非常底层的指令集,想要理解它们需要一定的经验。对于懂反汇编的分析人员来说,这种方法是相当有效的,这是因为整个二进制及恶意软件的所有功能都会暴露无遗。通过跟踪每条代码执行分支,可以了解恶意软件的全部功能,甚至包括那些在动态分析过程中不会被触发的功能。


全面逆向工程的缺点在于其工作量。对样本的了解程度,视其大小、复杂程度和对抗分析手段不同,可能需要数小时甚至数天。因此,对于那些信标尚不充分的新样本,或者数量较大的样本,通常暂不考虑采用全面逆向工程。不过,掌握某个样本全部能力的需求总是存在的。因为这可以揭示出攻击者在达成目标阶段的作业能力,比如远程控制能力或窃取数据的方法。


情报在恶意软件分析中的运用


别人的情报和分析结果往往可以为逆向工程师指引调查途径。比如前面的分析透露出C2通信使用了加密的HTTP协议,那么逆向工程的重点可能就是寻找加密密钥。如果有迹象表明信息遭到窃取,但这些信息从未在本机存储,而是只存储于邻近的计算机,那么合理的做法就是重点分析非主流的信息窃取功能,比如通过麦克风或摄像头。


从恶意软件分析采集数据


恶意软件分析可以让团队获得最为丰富的分析数据,但同时这也是最困难的一种分析方法。恶意软件分析报告可以提供各种形式的可用数据(包括信标、攻击策略和作业能力),可以揭示出攻击者在达成目标阶段可能采取的行动,有时甚至可以溯源到攻击者身份。恶意软件分析可以为网络和主机的检测告警提供有价值信息。


深入了解恶意软件分析


恶意软件分析是一种很难于学习的网络安全技能。它需要深入理解通用计算机编程理论、操作系统原理,以及常见的恶意软件行为。


如果想全面掌握逆向工程技能,包括学会汇编语言,你就需要通读Michael Sikorski和Andrew Honig编写的《恶意代码分析实战》。

三、确定范围


在接到告警和开展调查期间,你最想确定的一件事是事件的影响范围——都有哪些资源(系统、服务、证书、数据、用户等)受到影响。这将直接决定后续的多项工作流程,例如评估影响和响应方式。


比如,某台计算机发现了恶意软件。在确定感染范围之后,只有一台计算机受到感染,与网络里的几十个系统都受到感染,你的反应会是不一样的。


范围确定还有一个重要的部分是,确定受影响资源的特点。是否受感染的系统都与某类用户或某类部门相关?这项数据对于深入了解攻击是非常重要的。这需要有完善的资产管理,以及IT管理团队的配合。事件响应过程中会遇到一个很重要但常常令人沮丧的情况,就是虽然拿到了系统,却不得不询问“这个系统是干什么用的?”


四、追踪


到目前为止,我们所讨论的事件响应都是被动的响应——现有安全管控失效后应该如何处置,以及我们应该如何理解其失效的原因。追踪却并非如此。当我们在没有任何警告、没有任何安全管控失效通知的情况下查找系统失陷迹象的时候,就需要用到追踪方法。对威胁的检测尚无法达到完美的程度,特别是特征检测方法,因为安全管控手段可能会在无法觉察的情况下失效。无论是哪一种原因,攻击都可能会毫无迹象地悄悄进行。


对安全团队外部人员来说,追踪看起来像是碰运气胡猜,这就大错特错了。追踪是直觉、经验和高质量情报的组合。像传统的狩猎一样,也会受到你所使用的工具的制约。假设你在网络监测方面的工具储备不足,那么你的网络追踪能力就会受到限制。追踪需要兼顾网络和主机监测的深度与广度,最好将两者的能力都发挥到极致,然后再关注那些不太可靠的数据源。如果你有海量的应用程序日志,不妨由此着手,而不是一定要在掌握了线索之后,再结合网络和主机的异常流量发现威胁。追踪就是开发线索的过程(初级的推测),然后验证它们(是否符合推测)。


1、线索开发


关于线索,我们曾在《威胁情报驱动:F3EAD 之查找》中介绍过。对于大多数安全团队来说,追踪工作最棘手的问题不知该从何处着手。就像老派的侦探故事那样,最容易想到的入手点就是一系列的线索了。那么这些线索来自哪里呢?答案是情报、直觉和想象力的结合:


从既往事件中发现模式或趋势。过去的攻击者习惯使用给定ISP实现命令控制?有一群利用已编译帮助文件的攻击者,你曾听说过么?


围绕违背组织规范的活动构建线索。除非是那些极其庞大的组织,发现与某些特定国家的网络连接行为,或一天中的某个特定时段的网络连接行为,都可能是不正常的,尤其是在网络流量特别大的情况下。


根据漏洞评估或红队(Red Team)渗透测试结果构建线索。扮演坏人的一方是否攻击了某台特定主机?花时间看看现实中的坏人是否也做了同样的事情。


上述清单将一直继续下去。线索开发是一种“没有坏点子”式的头脑风暴练习——无论想法多么疯狂,都应予以记录。


2、线索验证


正如告警一样,追踪行动在寻找攻击者的迹象时,也会产生大量的噪声或误报。因此,在追踪检测方法在你的环境全面部署之前,所有的追踪线索都应该得到验证。你可以采用多种方式进行验证。一种方法是查询线索对于单台已知正常的主机的反馈结果,确保不会带来大量与正常操作相关的数据。另一种方法是查询测试样本集(例如一整天的代理日志),确保不会带来大量的结果。大量的结果要么表明你的系统已经大规模地失陷(我们希望情况并非如此),要么说明线索需要被改进或重新评估。为追踪行动开发高质量线索可能需要一段时间,但是精通这一技能后,你就可以在没有特定特征的情况下,发现潜在的恶意行为。


五、结语


情报与告警、调查和追踪相结合,需要不断改进流程、部署工具和修改工具,而最重要的是培训相关人员,使他们了解各项工作之间是如何相互配合的。告警,就是将你关心的威胁拆分成几个必要的检测条件,以此发现威胁。一旦某条重要告警得到确认,工作重心就转移到对上下文信息的全面收集。调查,就是收集各种各样的信息,提炼内容,加深理解。如果不满足于被动地响应安全事件,就可以进一步地进行追踪,主动运用告警和调查的经验与技巧,寻找未被发现的恶意行为。


这一阶段分析的目标就是了解事件影响范围,制定应对措施,然后采取必要行动消除威胁。

微信公众号:计算机与网络安全

ID:Computer-network

【推荐书籍】

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存