如何利用Elkeid发现生产网内恶意行为

robots

 

Elkeid简介

Elkeid HIDS 是一款经受百万级主机稳定性考验的主机安全产品。Elkeid提供从内核级别的防护能力,其基于内核态采集进程、网络、文件相关数据,具备比典型用户态HIDS更全面的数据采集功能,这带来了更强的入侵检测能力与更低的性能开销。

Elkeid 架构图:

Elkeid Architecture

Elkeid HIDS目前已经开源了Driver;Agent;Server;Leader 四个部分,当前已开源的Elkeid组件具有了完整的数据采集,客户端控制,和整合信息流能力。

目前和Elkeid配套的流式策略引擎 HUB 暂无开源计划,但相关策略建设方案可以在此探讨一二。有兴趣的同学可以在Elkeid Sandbox公测后测试样本,对Elkeid的数据采集能力以及部分策略能力可以有直观体验。

 

Elkeid项目资源

  1. Elkeid @ github:https://github.com/bytedance/Elkeid

技术文章:

  1. Elkeid 数据说明: https://mp.weixin.qq.com/s/nhrin-iOXLS249mfhhQRJw
  2. Elkeid(原AgentSmith-HIDS) vs. AuditD: https://mp.weixin.qq.com/s/Nvqqdpf63r55d1FY8am3CQ
  3. Elkeid Server 开源 && Elkeid Agent 更新: https://mp.weixin.qq.com/s/cKV3kaBhDdQCcVMk5D_zgQ
  4. Elkeid资产插件及 Go SDK 开源: https://mp.weixin.qq.com/s/8ATrt3m3WXxadCyxjr3tWQ
  5. Elkeid 开源静态检测插件: https://mp.weixin.qq.com/s/FFiSJ231B7DPbQtPeLWHXQ

 

Elkeid的数据优势

Elkeid 的最大优势来自于其数据优势,这是策略建设所依仗的重点。Elkeid Driver于内核态采集了大量高伪装成本的数据,在安全/审计等场景下具有极高的策略价值。特别是针对安全场景下增加了很多辅助判断的信息和字段,基本可以在单条数据中分析和捕获部分高威胁告警。

在安全场景下Elkeid的数据具有如下特点:

1 Elkeid 采集的数据具有清晰的进程链信息

这往往是其它安全产品或者审计产品所不具备的。Driver和Agent会追溯当前进程的父进程和祖先进程,默认driver配置支持最高为8个链条,实践中基本可以将绝大部分进程的完整进程链采集下来。这个可以通过自行调整Driver并编译来进行调整。

例子: 如下的例子中,Elkeid上报的单条数据含有直到Systemd进程的完整进程链

Elkeid - Process Tree

2 Elkeid 对于同一件事情会有不同的syscall数据描述

Elkeid在内核收集了多种syscall 的hook信息,因此对于同一件事情会有不同的syscall描述,进而获得不同的数据信息来源。

例子:如下的例子中,数据类型为 604 和 59的数据分别提供了对同一个 sudo 行为的描述,因为sudo行为分别触发了用户信息更改的类型(604)以及 进程执行类型(59),两种数据的特殊字段被分别高亮了出来

Elkied - sudo example

3 Elkeid 会记录内核中的模块变化以及异常情况

Elkeid 安装后,对后续尝试内核修改的进程均可以直接发现并上报相应数据,同时如果存在任何隐藏内核模块,对/proc/目录的钩子,对进程进行ptrace等行为均可以直接发现并生成数据上报。

例子:如下表示了内核挂载了reptile隐藏内核模块文件行为

Elkeid - Rootkit Hooking Detection

4 Elkeid 针对安全场景增加了独有数据获取和记录维度

针对进程创建数据,Elkeid增加了进程所在环境变量中的特定信息记录,如ssh的信息记录以及动态链接配置的记录。除了Elkeid本身数据之外,还增加了针对进程链上的数据采集,对进程创建会一并寻找进程链路上最近的一个socket,并记录响应的进程信息。

例子:如下分别为sshd登陆后的执行命令时所记录的最近一次socket(sshd)的信息,以及对应SSH_CONNECT(ssh)和 LD_PRELOAD(ld_preload) 环境变量

Elkeid - Environment Settings

5 Elkeid 在进程创建时获取信息,难以绕过

在进程创建最开始的位置获取进程信息,文件信息等,非常难以绕过

例子:如下的数据中,myssh二进制更名为ssh,而Elkeid数据的pgid_argv/ppid_argv中依然保留了创建初始时的进程 argv

Elkeid - Process Information

 

策略建设思路

整体思路

粗略来说,系统上的任何行为都可以归结为 实例A 对 实例B进行的某些操作。这里面实例A可以是人,可以是人所用的工具。因此从这个方面出发,对各种不同阶段进行控制和审计可以认为延伸出不同的防御建设思路。比如对实例A/B本身身份的准入和认证机制,对实例A到实例B的映射进行管控的授权机制,对操作和操作行为审计的检测机制等。生产网上HIDS因为不参与实例A/实例B的实际认证和授权,因此面对的更多是操作和操作行为的审计/检测。

这里可以通过三个假设来框定HIDS的适用范围:

  1. 1 在一个健康的生产网环境中,大部分行为为运维和正常业务操作,应予以放行
  2. 2 在一个合理的准入和授权机制建立后,典型入侵者的行为应通过互联网暴露面,通过漏洞/供应链等方式入侵生产环境。
  3. 3 在健康的生产网环境中,防御软件总是优先部署的

假设 2实际上框定了典型HIDS的防御范围更适合面向通过互联网暴露面引发的入侵行为。对于利用未授权,泄露账号,身份盗用等偏内鬼方面,应该结合HIDS所能采集的用户行为数据,结合准入/授权机制进行用户行为分析。这部分超过本期文章讨论范畴,感兴趣的同学可以加 Elkeid Lark群进行探讨。

Linux系统反入侵检测

面对通过互联网暴露面引发的入侵行为,一个常用的分析和防御框架为 MITRE的 ATT&CK 框架。在实际应用中,会发现ATT&CK框架在广度上覆盖了较多的系统和手法,但在深度上并不能很好的描述特定的领域。如Rootkit场景或者容器逃逸等场景的技术难度显著高于简单的ssh文件配置,但在ATT&CK框架中均被描述为同一级别的单一入侵Tactics。因此Elkeid团队依托Kill-Chain的形式,结合MITRE ATT&CK框架形成适用于Linux生产环境的Elkeid-Kill-Chain知识库和规则库。

Elkeid - Linux IDS

  • 外部侦查
    • 1 外部侦查即未获得目标任何权限的情况下,通过网络对目标进行信息/情报收集
    • 2 常见手法为主机扫描,以及应用层扫描
  • 外部攻击
    • 1 外部攻击即在收集到对应信息后,通过特定应用,特定漏洞或者主机漏洞来对目标进行攻击,并获取上传/执行等能力的过程
    • 2 外部这里并不仅仅是从外网进入内网,攻击者在内网对健康主机的横向移动对于目标主机也是属于‘外部’的漏洞利用
    • 3 常见手法为RCE,暴力破解,网络劫持等方式
  • 内部侦查
    • 1 内部侦查即在攻击者获取对机器本身的攻击能力后,针对受害主机进行信息收集的过程
    • 2 常见手法为利用linux命令对主机信息/进程信息/账号信息/操作记录等敏感信息进行收集,以及对特定业务数据/文件进行收集的过程
  • 权限提升
    • 1 权限提升即攻击者在外部攻击或者内部侦查后,在受害主机上获取更高权限(root权限)的行为
    • 2 常见手法为针对进程/应用的权限漏洞进行利用;针对系统权限进行利用;针对运维漏洞(如高权限cronjob)进行利用;容器逃逸等方式
  • 持久化
    • 1 持久化即攻击者在主机上通过驻留后门等手法获取更长期留存的行为
    • 2 常见手法为上传后门程序,对进程进行动态注入,在系统上增加rootkit,增加定时/开机任务项等
  • C2通讯
    • 1 C2通讯即受害主机和攻击者的主机进行信息/命令的传输行为,含有一定隐蔽性
    • 2 常见手法为DNS/ICMP/Socks隧道,应用层协议通道(ssh),文件传输协议通道(ftp)等
  • 逃逸/绕过/自保护
    • 1 逃逸行为即攻击者试图绕过安全防护以及调查取证的行为,可能发生在Kill-Chain的任何位置,
    • 2 常见手法为:清除行为历史,更换文件特征,降低攻击频率,传输/文件加密等行为
  • 攻击目的
    • 1 攻击目的涵盖破坏,名誉,利益三个方面,攻击者不同的目的会引发不同的行为
    • 2 常见手法为:DDOS,数据/系统破坏,挖矿,内部信息收集,getShell,网页篡改等手法

Elkeid检测能力覆盖上述所有Kill-Chain,并着重在内部侦查,权限提升,持久化等方面进行检出能力的提升。在ATT&CK Linux框架下,Elkeid所采集的数据以及可供编写的策略覆盖率达到了63.01%,非常明显的是Elkeid在持久化,提权,逃逸,发现等四个方面具有最好的数据采集和策略支持能力,这也凸显了Elkeid在HIDS领域的特点和优势。

Elkeid - Kill Chain

非健康环境下部署

Elkeid 支持在非健康环境,或者不明确环境状态下部署。非健康环境下部署,Elkeid 便不能过多依赖Elkeid Driver从内核提供数据。一方面是内核是否污染是不确定的,另一方面同一路径可能有多个入侵者以及病毒样本,未执行的病毒样本是没有动态进程创建数据的。因此在这个情况下Elkeid需要依赖Agent的其它插件,比如静态检测插件和资产采集插件。静态检测插件会遍历当前机器上的敏感目录中文件,对文件本身静态特征进行匹配,如果有符合木马/病毒/挖矿等特征会进行告警。同时,资产采集插件会对当前活着的进程进行定期遍历,采集进程信息,这里可以结合威胁情报对存活进程进行筛选和检测。

当前开源版Elkeid已经集成静态检测插件,需要的朋友可以加入自己的静态Yara规则进行使用。

策略架构

Elkeid 整体策略建设分成在线和离线两个部分,分别用于短时延需求的行为和规则类流式告警,以及对时延较为不敏感的异常检测类离线告警。

Elkeid Policy Management

流式告警

在Elkeid团队策略构建中,数据会依据Kill-Chain知识库中的危险程度标示为黑白灰三种行为,Elkeid会直接针对黑行为提供相应的告警;灰行为会被放置于Kill-Chain框架下进行行为分析,能前后关联成攻击事件的才会告警,进一步降低运维成本;而占比最多的运维的白行为会被过滤。

黑行为以反弹shell,批量删除日志,爆破等高威胁度的行为为主,对这类行为Elkeid提供的数据基本可以做到单条数据直出告警。而灰行为则是较多敏感行为,但并不能明确是攻击行为的情况,诸如修改配置文件,下载外网文件,常见二进制替换等行为。这种行为无法单一数据或者少部分数据进行告警,需要结合agent和进程的上下文信息进行行为分析才可以确认是否告警。

因为Elkeid的数据纬度非常丰富,天生适合类似溯源图(Provenance Graph)的搭建,Elkeid团队借鉴了溯源图的思路,依据Kill-Chain知识库针对灰行为特征设计了行为告警系统。该系统可以将灰行为依据进程链路进行关联,并对时间关联程度,进程关联程度,行为关联程度进行打分和关联,帮助摒弃掉无关行为链条。通过对灰行为特征的权重打分生成不同的行为链条,通过合并多条同源行为链条,进而生成图结构的攻击事件。

Elkeid - 流式告警与溯源

上图即为一起典型的Kill-Chain告警事件,描述了名为YUNN的后门进程执行过程,包括了crontab驻留,下载执行,派生后门,尝试端口敲门隐藏对外端口等行为。

离线告警

Elkeid所采集的丰富数据可以在大数据套件的支持下进行更全面的分析。对流式场景较难处理的诸如慢速爆破,弱威胁情报关联分析等情况均可以通过离线分析发现告警。Elkeid丰富的端上的采集能力也扩展了和其他安全组件的联动能力。Elkeid可以直接和网络层的原始数据/告警联动,为NTA/WAF提供主机上的进程数据和人员数据支撑,进而生成关联告警。

Elkeid - 离线告警

上图即为一条NTA自动化关联告警,根据NTA所监测的五元组信息,在HIDS层关联查询得到pid和sid的关键数据。依托sid,pid信息可以自动化溯源到进程上下文信息,通过预置规则或者人工评判来进一步确认是否为入侵事件。

离线数据应用的另一个主要方向是事后追溯,在追溯中,Elkeid Driver提供的Connect/DNS等数据,以及资产采集插件提供的文件SHA256指纹可以有效帮助威胁情报关联历史数据和整体覆盖面。同时特定运维命令行为可以直接在Elkeid中查询和分析,进一步提升系统审计方面的整体追溯能力。

Elkeid 所生成的数据也非常适合利用机器学习进行进程异常检测。由于大部分HIDS采集的行为应为运维或者业务相关行为,因此可以通过利用丰富的命令行字段(argv,pgid_argv,ppid_argv)结合进程链条字段(pid_tree)和执行路径字段(run_path)建立行为基线并进行异常检测,这里可以引入一些灰行为数据来训练弱监督分类器协助降低误报。面对计算资源不足的情况,可以通过预先进行高频数据的过滤和采样来降低模型的训练成本,或者面对特定的机器集群建立专用的小规模模型,通过重点防护的方式来提高实际行为基线的覆盖率。

 

结语

攻防对抗是一个相当大的主题,Elkeid面向安全提供了丰富的数据采集能力,无论是反入侵还是防内鬼都可以作为基础数据源提供数据支持。本文主要讲述的互联网暴露面防御只是Elkeid优势的冰山一角,面向内鬼的场景HIDS也可以结合鉴权以及授权数据对用户行为进行分析。感兴趣的同学可以添加飞书用户群一起讨论。

 

名词解释

HIDS:HIDS全称是Host-based Intrusion Detection System,即主机入侵检测系统
WAF:WAF全称是 Web Application Firewall, 即Web应用防火墙
NTA:NTA 全称是Network Traffic Analysis,即网络流量分析,多用于检测企业网络中的可疑行为,尤其是失陷后的痕迹
Kill-Chain:杀伤链,由洛克希德马丁提出,用以描述黑客入侵行为过程
ATT&CK:由MITRE提出,用以描述黑客入侵行为的另一种架构,ATT&CK包含多种平台上的攻击行为
ATT&CK Linux: Linux 平台特有的ATT&CK 框架子集
LD_PRELOAD:指定动态链接库的环境变量,常被用来指定恶意链接库,进而隐藏后门程序
Syscall:指运行在用户空间的程序向操作系统内核请求需要更高权限运行的服务
argv: 启动进程时的命令行
ppid_argv:进程的父进程的命令行
pgid_argv:进程的组长进程的命令行
pid_tree:Elkeid特有概念,为进程pid等和见数据优势第一部分
run_path:进程创建时所在的执行目录

 

Elkeid 飞书用户群

Elkeid - Fieshu Group

飞书下载链接: https://www.feishu.cn/

(完)