顺丰网络安全DFIR平台实践之路

渗透技巧 1年前 (2022) admin
487 0 0

上篇文章:

浅谈网络安全事件调查那些事(一)


本篇主题

顺丰网络安全DFIR平台实践之路


0.

前言

    如前文《网络安全事件调查那些事》提到的那样,顺丰在安全事件调查响应中,“人工手动”和“工具脚本”都已经遇到了瓶颈了。于是,如何去构建一个健全的事件调查响应平台成为了迫不及待需要解决的问题。而Velociraptor正是在此时进入我们视野。

    本文就简要谈谈基于Velociraptor构建事件响应的一些关键概念和要素,抛砖引玉。


1.

Velociraptor是什么

    Velociraptor中文翻译名称是“迅猛龙”,是一款开源的、运行在终端主机的、监控、取证、响应平台,能够有效进行广泛的数字调查取证和网络安全事件调查。主要有三个核心功能:

  1. 收集-Collect:收集终端状态、历史记录、日志等各类信息;

  2. 监控-Monitor:  持续收集终端事件,并将所有事件集中存储在服务端;

  3. 狩猎-Hunt: 针对在线的终端执行Hunt操作,主动搜寻可疑活动;


    Velociraptor是一款CS框架设计的,需要通过部署在终端主机上的Agent来完成事件日志的收集、监控和Hunt。

Velociraptor Deployment


    Velociraptor运行方式有点类似HIDS或者EDR等终端主机防护工具,与这些工具不同的是,Velociraptor提供的是一个终端主机“可见性”能力,并将这个能力以框架方式完全开放给用户,用户可以基于这个框架能力,按需自定义终端主机监控和事件调查能力。

顺丰网络安全DFIR平台实践之路

Velociraptor Deployment


    VQL是Velociraptor开发的一种类似SQL的语言,是Velociraptor的核心。用户可以利用这个语言来完成收集、监控、狩猎等各种安全能力,除此之外,VQL还是Artifact(工件)功能实现的基础模块,支持编程开发。


    Velociraptor高度可扩展,尤其是在安全事件响应功能上,用户既可以直接使用官方或者社区提供的工件做到开箱即用,也可以基于框架的能力快速定制开发贴合业务场景的响应模块,是防守方不可多得的利器。


2.

为什么是Velociraptor

    与Velociraptor类似的平台有Google开源的远程调查响应平台GRR(GRR Rapid Response),还有Facebook开源的OSQuery工具。


GRR

    GRR是基于Python开发的C/S框架的调查响应平台,平台目标是能够快速、可扩展的方式支持调查响应,以允许响应人员能够快速对攻击进行分类和远程执行分析。

顺丰网络安全DFIR平台实践之路

GRR


    相较于Velociraptor,GRR最大的缺点是缺少一个灵活的检索语言。缺少一个检索语言就降低了事件调查响应的适应性,某些”Case By Case”场景下需要另外构建”工件”来完成。简单理解,GRR就好比上一篇文章说到的“脚本工具”的集成和远程化,能够提高响应的效率,但离“灵活性”还有点距离。

OSQuery

    OSQuery是由Facebook开源的系统管理系统,其初衷是为了解决系统监控和管理目的的,但其优秀的类SQL的检索语句同样能够实现安全事件调查响应。


    下面是一个使用交互式命令行完成一次查询动作:

$ osqueryiosquery> SELECT DISTINCT    ...>   process.name,    ...>   listening.port,    ...>   process.pid    ...> FROM processes AS process    ...> JOIN listening_ports AS listening    ...> ON process.pid = listening.pid    ...> WHERE listening.address = '0.0.0.0';
+----------+-------+-------+| name | port | pid |+----------+-------+-------+| Spotify | 57621 | 18666 || ARDAgent | 3283 | 482 |+----------+-------+-------+osquery>

    单独的OSQuery只是一个工具,是没有后端管理的,要想实现统一后端管理,需要借助第三方的开源工具,例如Fleet,如果要大规模部署就得多花点时间维护多套系统了。其次,OSQuery可检索的内容是基于官方提供的SCHEMA,就是类似于SQL中的Table,如果想要扩展检索的内容,就得对OSQuery进行二次开发来实现。


    因此,OSQuery基于类SQL语句具备了检索的灵活性,但在客户端管理、可扩展性上还差那么点意思。


    Velociraptor是参考这两个平台而构建的,充分吸收了这两个平台优点,实现“远程 + 实时 + 灵活检索 + 可扩展 + 统一管理” 全面的功能。在实际使用Velociraptor过程中也确实随处能看到这两个平台的影子,例如远程实时调查取证响应的方式参考GRR设计的,VQL检索语言也是基于OSQuery SQL的进一步扩展。


    正是这几个主要的原因,顺丰网络安全选择使用Velociraptor来构建统一的安全事件调查响应平台,实现事件调查响应的工程化。


    本文不尝试详细讲解Velociraptor配置明细或者使用细节,因为官方网站有很详细的教程文档;下面会从实际使用的角度简要介绍Velociraptor实战中关心的基本概念。


3.

 环境与部署

    Velociraptor提供强大的数据采集、监控功能,但要发挥出其调查能力的独特优势,还需要组织内的终端主机环境做好预配置。


    首先,调查响应的最基础元素还是日志,完整的日志是高质量完成调查响应动作的必备条件,所以首先应该开启终端主机的日志功能,尽可能在本地开启详细的日志记录模式。例如操作系统日志关键的进程网络日志、应用日志。在Linux主机环境可以开启Audit审计记录;在Windows终端可以开启“创建进程”、“网络连接审计”等记录功能,条件允许的环境可以直接部署Sysmon。


    其次,就是需要考虑Agent部署问题,是全量部署还是按需部署,这需要组织内根据环境实际情况来实施的:

  1. 全量部署:全量部署是指在整个终端主机覆盖安装Agent。全量覆盖需要很大的人力成本,尤其是终端主机数量超过一定数量时,对后端服务器的要求较高(另外,目前Velociraptor官方提供的服务器分布式部署方式仍在实验状态):

    ▲优势:全网终端主机Agent全覆盖,一旦发生安全事件能快速响应;

    ▲劣势:全量覆盖耗费人力成本,其成本不亚于在生产环境重新部署一套类HIDS;

  2. 按需部署:按需部署是指以安全事件为驱动的,给有需要进行事件调查的终端主机推送Agent,一般这种推送是借助类似于“终端主机集中管控平台”来实现,当然也可以手动单独安装。

    ▲优势:以事件驱动,无需全量覆盖,降低人力成本;

    ▲劣势:对组织内IT基础环境要求较高,需要组织环境内有“终端主机集中管控平台”;

    从实际运营来看,按需部署是更科学的选择,毕竟不是所有终端主机都需要时刻准备着安全事件调查,非调查期间运行着Agent不但占用终端主机的资源,更是给后台服务器的维护带来巨大的挑战。


    在按需部署情况下,如果要做到快速响应,首先要考虑的是如何自动化推送Agent;借助终端主机集中管控平台下发Agent是其中最优的选择;其次,也可以将Agent和配置文件打包成分发安装包,或者制作分发安装脚本,实现一行命令就实现上线的效果。


    例如,在实际部署中,Agent分发模式可以有如下几种:

  • 脚本:自研一键Agent上线脚本,包含PowerShell、Bash环境;

  • MSI:自行生成Windows MSI分发包,Velociraptor文档有指引;

  • RPM:通过Velociraptor Linux执行文件和配置文件,可直接生成客户端RPM安装包,执行一键安装;


    上述提到的分发包和脚本可以直接以HTTP方式开放在内网,在需要安装时可以这样操作:

  • PowerShell安装

PS C:>Invoke-Expression(New-Object Net.WebClient).DownloadString("http://[URL]/[URI]/VelociraptorStart.ps1")
  • CMD安装

C:>Powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass Invoke-Expression(New-Object Net.WebClient).DownloadString("http://[URL]/[URI]/VelociraptorStart.ps1")
  • Bash安装

[root@localhost ~]# curl -s -L 'http://[URL]/[URI]/VelociraptorStart.sh' | bash
  • MSI安装

C:>msiexec /i http://[URL]/[URI]/Velociraptor.msi /quiet
  • RPM安装

[root@localhost ~]# rpm -ivh http://[URL]/[URI]/Velociraptor.rpm

    这些安装方式都是可以使用命令行方式一键执行,除了可以手动执行以外,也可以将这些命令预置在终端主机集中管控平台中,通过平台下发。


    另外,Velociraptor官方也提供一种通过域控实现的Agentless方案,但在实际操作中,通过域分发对环境要求比较高,还不如上述几种方式简单可控。


    当然,实际的调查环境或许会更恶劣,例如待调查的终端主机是完全离线环境,此时就无法实现在线就调查响应,这时候可以使用Velociraptor离线收集模式,生成一个离线调查可执行文件,将该执行文件放到待调查主机上执行,执行后会生成一个压缩包,再将该压缩包上传到服务端并导入,就可以按照在线方式一样完成事件调查了。


    综上,要想使用Velociraptor做好事件调查响应,终端主机日志功能要打开;在非全量部署的情况下,如何快速分发Agent、如何快速取到调查的信息,也是应急响应质量的关键因素。从实际运行效果来看,基于上述几种Agent分发模式已经能够满足绝大部分场景的需要。


4.

VQL

VQL是Velociraptor中最类似SQL的一种编程、检索语言,其设计灵感是来源于OSQuery这个工具,但比OSQuery能实现更多的功能。基本语法如下:

顺丰网络安全DFIR平台实践之路

VQL格式


VQL提供了PluginFunction分别用来数据查询和逻辑实现的功能组件。根据作用环境的不同可以将PluginFunction划分成十多种类型,例如基础的VQL支持以下的PluginFunction

顺丰网络安全DFIR平台实践之路

VQL Plugin Function


    这些原生支持的插件、函数,可以应对不同的数据处理要求,从实际使用情况来看,已有的这些已经能够满足90%事件响应需要了。


    下面举几个例子,可以更直观地了解VQL是怎么一个运作过程。

4.1

日志排查

顺丰网络安全DFIR平台实践之路

    安全事件调查查看日志是通过VQL来实现的。例如,通过pslist()这个Plugin来列出所有进程:

SELECT * from pslist()
顺丰网络安全DFIR平台实践之路

VQL查询进程列表


    如果数量太多,也可以直接过滤出感兴趣的进程名,还可以通过timestamp()这个FunctionCreatetime格式化成更直观的时间格式:

顺丰网络安全DFIR平台实践之路

VQL过滤进程列表

4.2

执行命令

顺丰网络安全DFIR平台实践之路

    如果需要在目标机器执行命令,也可以使用VQL中的execve()这个Function来实现:

SELECT * FROM execve(argv=["/bin/bash", "-c", "ls -al"])
顺丰网络安全DFIR平台实践之路

VQL执行命令


    可以看到,这个VQL语句实现在目标终端执行了ls -al这个命令,这个输出结果不太友好,我们可以简单优化下,例如这样:

SELECT split(string=Stdout, sep="n") as Result FROM execve(argv=["/bin/bash", "-c", "ls -al"])
顺丰网络安全DFIR平台实践之路

VQL执行结果处理


    可以看到,VQLFunction不仅可以对结果做过滤,还可以对结果的数据进一步处理,这样就保证了VQL可以有更多上下文,实现更多的能力。

4.3

管理客户端

顺丰网络安全DFIR平台实践之路

    Velociraptor提供的是一个VQL框架,很多能力并没有出现在操作界面上,而是通过VQL或者Artifact来实现。例如,可以用clients()这个Plugin来实现对终端状态的查看;VQL可以这样写:

SELECT     client_id AS ClientId,    agent_information.version AS AgentVer,     os_info.system AS System,    os_info.hostname AS Hostname,     os_info.release AS Release,    os_info.fqdn AS FQDN,    timestamp(epoch=int(int=first_seen_at)) AS FirstSeen,     timestamp(epoch=int(int=last_seen_at/1000)) AS LastSeen,     last_ip AS LastIP,     join(array=labels, sep=" | ") as Labels  from clients()ORDER BY FirstSeen Desc
顺丰网络安全DFIR平台实践之路

VQL管理客户端


    如果想基于这个结果进行更多的操作,例如给特定的终端打上label标记,可以使用label这个Function来实现,那么就可以在这个VQL上继续编辑操作:

LET CLIENTS <= SELECT client_id AS ClientId,      agent_information.version AS AgentVer,      os_info.system AS System,      os_info.hostname AS Hostname,      os_info.release AS Release,      os_info.fqdn AS FQDN,      timestamp(epoch=int(int=first_seen_at)) AS FirstSeen,      timestamp(epoch=int(int=last_seen_at/1000)) AS LastSeen,      last_ip AS LastIP,      join(array=labels, sep=" | ") as Labels  FROM clients()
LET LabelHosts <= SELECT * FROM foreach( row=TargetHostname, query={ SELECT ClientId, Hostname, Release, FQDN, FirstSeen, LastSeen, LastIP, Labels from CLIENTS WHERE Hostname = "MyHostname" })
SELECT ClientId, label(labels="MyLabel", op="set", client_id=ClientId) FROM LabelHosts

    这样就能给主机名是MyHostname这个终端打上MyLabel这个标记。


    可以看出,VQL不仅支持单行的语句,也能支持多行的语句操作,还可以自定义变量、自定义子检索语句,这样就极大扩展了VQL的使用场景。


    上述这几个例子只是简单介绍VQL常用的几个用法,VQL还有更多的玩法,因篇幅关系这里就不详细展开了。


5.

Notebook

Notebook是Velociraptor交互式”记事本”,是交互式调查的基础,也能理解成事件调查的一个工作台。它可以用于跟踪处理事件调查的多个检索,也可以用来做后期数据处理。


    一个Notebook可以由任意个Cell组成,Cell支持VQLMarkdown两种的类型,并且还会根据Cell内容提供不同的前端展示,例如时间轴功能。


    在Velociraptor中,Notebook出现在以下几个地方:

  1. 每个终端的Collect动作的结果都会自动生成一个Notebook,且Notebook的内容可以在Artifact中提前预定义;

  2. 在Hunt管理页面中也存在一个Notebook,这个Notebook可以对Hunt的内容进行检索处理,也就是对同一批Hunt的结果批量处理;

  3. 全局有一个单独Notebook功能模块,全局Notebook可以根据需要任意新建Notebook

顺丰网络安全DFIR平台实践之路

Notebook的位置


    不同位置的Notebook能力是一样的,但在使用上会有不同的侧重点。例如, 全局的Notebook可以引用系统内工件执行结果,就可以实现跨终端的关联分析,甚至可以用来生成事件调查的Report报告;终端的Collection动作产生的Notebook一般适合对结果的二次处理,或者通过在Artifact中预定义Notebook内容实现Collect的自动化处理。


    总的来说,Notebook可以实现包含但不限于以下几个场景:

  • 检索结果的二次解析处理

  • 聚合多个结果

  • 批量数据结果操作

  • 客户/服务端管理


    NotebookVelociraptor一个很重要的功能,这种Notebook提供的“交互性”既有足够灵活性来保证“Case By Case”事件得以顺利进行,也能够通过编写Artifact预定义方式对结果自动化处理。


6.

Artifact

    Artifact中文翻译是“人工制品”或者简称“工件”,在Velociraptor是用户用VQL语言编写的自定义检索、处理等动作的内容脚本,是Velociraptor实现调查能力的关键组件。


    Artifact是以YAML文件格式保存的,VQL语句写在YAML其中的一个Section中。Velociraptor前端提供编辑这个YAML的界面,可以直接添加,也可以批量导入,甚至可以在服务端启动参数中指定文件目录的路径实现启动即自动加载的功能。


    Artifact可以定义执行输入参数,编写VQL,也可以编写Notebook。例如,下面是一个Velociraptor官方自带的读取Windows Eventlog 的Artifact内容,

name: Windows.EventLogs.Evtxdescription: |  Parses and returns events from Windows evtx logs.  ......  Inspired by others in `Windows.EventLogs.*`, many by Matt Green (@mgreen27).
author: Chris Hendricks ([email protected])precondition: SELECT OS FROM info() WHERE OS = 'windows'parameters: - name: EvtxGlob default: '%SystemRoot%System32winevtLogs*.evtx' - name: SearchVSS description: "Search VSS for EvtxGlob as well." type: bool - name: StartDate type: timestamp description: "Parse events on or after this date (YYYY-MM-DDTmm:hh:ssZ)" - name: EndDate type: timestamp description: "Parse events on or before this date (YYYY-MM-DDTmm:hh:ssZ)" - name: PathRegex default: "." type: regex - name: ChannelRegex default: "." type: regex - name: IDRegex default: "." type: regex
sources: - query: | // expand provided glob into a list of paths on the file system (fs) LET fspaths <= SELECT FullPath FROM glob(globs=expand(path=EvtxGlob)) WHERE FullPath =~ PathRegex
// function returning list of VSS paths corresponding to path LET vsspaths(path) = SELECT FullPath FROM Artifact.Windows.Search.VSS(SearchFilesGlob=path) WHERE FullPath =~ PathRegex
// function returning parsed evtx from list of paths LET evtxsearch(pathList) = SELECT * FROM foreach( row=pathList, query={ SELECT *, timestamp(epoch=int(int=System.TimeCreated.SystemTime)) AS TimeCreated, System.Channel as Channel, System.EventRecordID as EventRecordID, System.EventID.Value as EventID, FullPath FROM parse_evtx(filename=FullPath) WHERE if(condition=StartDate, then=TimeCreated >= timestamp(string=StartDate), else=true) AND if(condition=EndDate, then=TimeCreated <= timestamp(string=EndDate), else=true) AND Channel =~ ChannelRegex AND str(str=EventID) =~ IDRegex } )
// only de-duplicate using GROUP BY when searching VSS // de-duplicate file-by-file to reduce memory impact SELECT * FROM if(condition=SearchVSS, then={ SELECT * FROM foreach(row=fspaths, query={ SELECT * FROM evtxsearch(pathList={ SELECT FullPath FROM vsspaths(path=FullPath) }) GROUP BY EventRecordID,Channel }) }, else={ SELECT * FROM evtxsearch(pathList={SELECT FullPath FROM fspaths}) })

工件执行的结果是这样的:

顺丰网络安全DFIR平台实践之路

Eventlog


    这个Artifact实现的功能是读取evtx文件,并将evtx文件的内容解析成更易读的json格式。仔细查看Artifact内容可以发现,Artifact核心能力还是VQL的能力,上述这个例子就是使用了VQL中的glob遍历文件和parse_evtx两个Plugin提供能力来实现“读取Eventlog”这个功能。


    其实这个Artifact还可以进一步优化,例如,通常在事件调查中,特别关心“进程创建记录”(EventID:4688),因此我们可以直接在这个Artifact基础上添加EventID过滤,并将“进程创建”事件单独筛选出来,做优化关键字段显示处理,这样就可以更直观地将关键信息进行展示。要实现这个效果,可以添加EventID=4688的过滤,并添加一个预定义的Notebook提取需要关注的字段:

name: Windows.EventLog.Process
description: | Parses and returns events from Windows evtx logs. EventID: 4688
precondition: SELECT OS FROM info() WHERE OS = 'windows'parameters: - name: StartDate type: timestamp description: "Parse events on or after this date (YYYY-MM-DDTmm:hh:ssZ)"
- name: EndDate type: timestamp description: "Parse events on or before this date (YYYY-MM-DDTmm:hh:ssZ)"
sources: - name: Process History - EventID 4688 query: | // expand provided glob into a list of paths on the file system (fs) LET fspaths <= SELECT FullPath FROM glob(globs=expand(path="%SystemRoot%\System32\winevt\Logs\Security.evtx"))
// function returning parsed evtx from list of paths LET evtxsearch(pathList) = SELECT * FROM foreach( row=pathList, query={ SELECT // System, // EventData, // Message, timestamp(epoch=int(int=System.TimeCreated.SystemTime)) AS TimeCreated, // System.Channel as Channel, // System.EventRecordID as EventRecordID, System.EventID.Value as EventID, // FullPath, System.Computer as Computer, // 4688 EventData Detail EventData.SubjectUserSid as SubjectUserSid, EventData.SubjectUserName as SubjectUserName, EventData.SubjectDomainName as SubjectDomainName, EventData.SubjectLogonId as SubjectLogonId, EventData.NewProcessId as NewProcessId, EventData.NewProcessName as NewProcessName, // EventData.TokenElevationType as TokenElevationType, EventData.ParentProcessName as ParentProcessName, EventData.ProcessId as ProcessId, EventData.CommandLine as CommandLine, EventData.TargetUserSid as TargetUserSid, EventData.TargetUserName as TargetUserName, EventData.TargetDomainName as TargetDomainName, EventData.TargetLogonId as TargetLogonId, EventData.MandatoryLabel as MandatoryLabel FROM parse_evtx(filename=FullPath) WHERE if(condition=StartDate, then=TimeCreated >= timestamp(string=StartDate), else=true) AND if(condition=EndDate, then=TimeCreated <= timestamp(string=EndDate), else=true) AND EventID = 4688 } )
SELECT * FROM evtxsearch(pathList={SELECT FullPath FROM fspaths}) notebook: - type: VQL template: | /* -------------------------------------------------------------- ## 进程启动历史: EventID:4688 */ SELECT TimeCreated, SubjectUserName, ProcessId, ParentProcessName, CommandLine, NewProcessId, NewProcessName FROM source() WHERE NOT SubjectUserName =~ "\$" ORDER BY TimeCreated Desc Limit 50
顺丰网络安全DFIR平台实践之路

Eventlog


    可以看出,修改后的Artifact具有更好看的数据展示,也更贴近我们的调查的实际场景。


    另外,在实际事件调查中,Velociraptor提供的Plugin未必能够适用于所有场景,这时候就需要用到VQL加载第三方工具的能力了。


    例如,以下例子就是将Windows Sysinternals套件中的Autoruns封装到Artifact中,目标终端执行该Artifact就相当于在本地执行该工具,并将结果优化展示给调查人员:

name: Windows.Sysinternals.Autorunsdescription: |  Uses Sysinternals autoruns to scan the host.
Note this requires syncing the sysinternals binary from the host.
tools: - name: Autorun_x86 url: https://live.sysinternals.com/tools/autorunsc.exe serve_locally: true
- name: Autorun_amd64 url: https://live.sysinternals.com/tools/autorunsc64.exe serve_locally: true
precondition: SELECT OS From info() where OS = 'windows'
parameters: - name: All type: bool default: Y - name: Boot execute type: bool - name: Codecs type: bool - name: Appinit DLLs type: bool - name: Explorer addons type: bool - name: Sidebar gadgets (Vista and higher) type: bool - name: Image hijacks type: bool - name: Internet Explorer addons type: bool - name: Known DLLs type: bool - name: Logon startups (this is the default) type: bool - name: WMI entries type: bool - name: Winsock protocol and network providers type: bool - name: Office addins type: bool - name: Printer monitor DLLs type: bool - name: LSA security providers type: bool - name: Autostart services and non-disabled drivers type: bool - name: Scheduled tasks type: bool - name: Winlogon entries type: bool - name: ToolInfo type: hidden description: Override Tool information.
sources: - query: | LET Flags = '''Option,Name *,All b,Boot execute c,Codecs d,Appinit DLLs e,Explorer addons g,Sidebar gadgets (Vista and higher) h,Image hijacks i,Internet Explorer addons k,Known DLLs l,Logon startups (this is the default) m,WMI entries n,Winsock protocol and network providers o,Office addins p,Printer monitor DLLs r,LSA security providers s,Autostart services and non-disabled drivers t,Scheduled tasks w,Winlogon entries '''
-- The options actually selected LET options = SELECT Option FROM parse_csv(accessor="data", filename=Flags) WHERE get(field=Name)
LET os_info <= SELECT Architecture FROM info()
// Get the path to the binary. LET bin <= SELECT * FROM Artifact.Generic.Utils.FetchBinary( ToolName= "Autorun_" + os_info[0].Architecture, ToolInfo=ToolInfo)
// Call the binary and return all its output in a single row. LET output = SELECT * FROM execve(argv=[bin[0].FullPath, '-nobanner', '-accepteula', '-t', '-a', join(array=options.Option, sep=""), '-c', -- CSV output '-h', -- Also calculate hashes '*' -- All user profiles. ], length=10000000)
// Parse the CSV output and return it as rows. We can filter this further. SELECT * FROM if(condition=bin, then={ SELECT * FROM foreach( row=output, query={ SELECT * FROM parse_csv(filename=utf16(string=Stdout), accessor="data") }) })

    在这个工件中添加了tools这个section,这个section定义了Autoruns的执行文件。这个Artifact可以在使用前将需要的可执行文件上传到Velociraptor服务端,完成这个操作之后,每次在目标终端上执行该Artifact都会自动化下发这个可执行文件并按照Artifact预定义的命令参数执行,执行效果如下:

顺丰网络安全DFIR平台实践之路

Autoruns工件


    可以看到Autoruns工具已经在目标终端上执行,以更直观的方式呈现给调查人员。


    Artifact还支持嵌套,意味着可以针对一个场景去设计Artifact集合,而又保留每个独立Artifact的功能完整性,例如我们可以做一个邮件钓鱼的专属Artifact专门应对钓鱼攻击事件的调查,在这个Artifact内把钓鱼相关的Artifact都集合进去,一旦某个终端主机需要钓鱼邮件攻击的调查,执行这一个Artifact就可以了。

顺丰网络安全DFIR平台实践之路

Phish钓鱼攻击场景


    基于某个场景将不同Artifact集合到一个Artifact中,就如同前面提到“工具脚本”,但这种“工具脚本”具有更灵活的执行方式、更集中的管理维护的优点。从另外一个角度看,场景化的Artifact也相当于把邮件钓鱼这个事件调查动作SOP化,调查流程经验沉淀到平台中。


    正是由于VQLArtifact高度自由和可定制性,用户可以非常方便地开发出多种多样的Artifact,也得益于Artifact是YAML结构化文本定义,更容易实现分享获取,所以官方也提供Artifact Exchange这样一个平台,收录了开源社区用户共享的Artifact。这也无形中扩大了Artifact流通性,提高Velociraptor使用场景,构建一个更完善的开源分享生态。

Artifact Exchange:
https://docs.velociraptor.app/exchange/

7.

小结

    Velociraptor除了上面介绍的Collect功能,还有HuntMonitor功能,因篇幅限制,就不多赘述了,但这些功能的使用逻辑都离不开VQLNotebookArtifact几个基础模块。


    在实际使用中,Velociraptor也给事件调查响应工作带来积极变化:

  1. 事件调查和应急响应流程变得更加可靠有序,调查响应的SOP有了可落地的技术平台;

  2. 事件调查响应这项工作有了可运营基础,团队工作经验能够得到有效沉淀;


    实践证明,从2022年初开始全面建设基于Velociraptor事件调查响应平台以来,在这接近一年的时间里,Velociraptor在重保对抗中、以及日常安全响应中都发挥了重要作用。


8.

后记

    之所以会有应急响应平台这个概念,是因为在最近3年不断的红蓝对抗中,作为防守方,在可用工具武器上,始终感觉比攻击方落后很多。尤其是现在各种攻击框架、各种工具武器信手拈来,一旦被攻击队找到一个突破口就如入无人之境,而防守方除了断网、停业务似乎找不到更好的方法,甚至连红队怎么进来的、进来以后做了什么都不知道。攻击溯源也只能靠着人肉一项项排查,或者执行没有针对性的固定化检测脚本,这些与攻击方各种武器相比起来简直是天壤之别。就好像在战场中,双方都进入到激烈阵地战肉搏中,攻击队拿着机关枪在突突突对我方一顿扫射,而我们防守方只能拿着“小步枪”躲在一个角落弱弱还击,连对手在哪里突突、突突哪里都不清楚,始终处于被动和挨打的状态。


    于是那时候就在想,难道蓝队就没有一个能打的工具、系统或者平台能够治治这些嚣张的红队?直到找到Velociraptor这个工具,经过一年多的研究、建设、运营,现整个平台已初具规模,能够在一定程度上有效提升整体的事件调查和响应能力。


    未来,基于Velociraptor事件调查响应平台,还需要进一步扩展其能力,包括提高检测的覆盖面、提高检测效率,也相信未来Velociraptor在开源社区支持下功能会更加完善。



往期精彩

浅谈网络安全事件调查那些事(一)




关注公众号,及时获取一手咨询


原文始发于微信公众号(顺丰安全应急响应中心):顺丰网络安全DFIR平台实践之路

版权声明:admin 发表于 2022年12月31日 下午4:56。
转载请注明:顺丰网络安全DFIR平台实践之路 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...