行业动态

防御吧作为15年知名老牌域名服务商,CNNIC和CANN双认证域名注册商,已经
持续为500多万个域名提供服务,包括智能DNS/自由转移/隐私保护等服务!
从TeamTNT蠕虫检测看一个主机安全软件的自我修养
2023-02-09 13:16:08 【

近日,牧云(CloudWalker) 主机安全管理平台帮助用户检测并协助处置一起TeamTNT蠕虫感染事件,事后复盘该蠕虫使用了多种攻击逃逸技术进行自身的隐藏。本文主要结合实际的蠕虫事件介绍主机安全软件的对抗手段,从而阐述主机安全软件如何自我修炼,从而可以有效地应对持续迭代更新的恶意软件及其逃逸手段。



事件概述

事件的起源是一起异常网络连接告警引发的应急响应。



发现告警之后,上机排查发现并没有看到相应的进程,判断可能存在进程隐藏等对抗行为。利用牧云的安全基线进行分析,果然发现有两个rootkit。


通过加载LKM模块实现进程隐藏和rootkit自身的隐藏。




通过ld.so.preload在用户态实现进程隐藏。



参考牧云的解决方案对rootkit进行清理后,所有的后门进程都无所遁形,根据指引完成后门清理成功结束应急响应。


下文将继续结合这个典型的蠕虫来阐述牧云是如何有效和其对抗的技术实现。



主机安全的自我修养

健壮的感知能力

本次感染的蠕虫虽然通过各种手段实现进程的隐藏进行逃逸,但牧云仍能够有效的发现其异常网络连接,核心是通过tracing+kprobe实现有效的主机事件采集。


kprobe是Linux内核提供的一种动态调试机制,即Kernel Probe,用于收集内核函数运行时信息分析和监测内核函数的执行。相较于用户态通过hook libc的方式采集系统调用信息,kprobe直接在内核态进行监听,无论是采集率和对抗rootkit隐藏逃逸都更具优势。


相较于另一种在内核hook系统调用的方式进行事件采集,kprobe作为内核原生提供的调试机制具有更好的稳定性,这对主机安全软件也是至关重要的一环。而相较于内核新引入的ebpf等方式,在内核版本2.6.9即引入的kprobe无疑具有更广泛的普适性。


那么如何通过tracing+kprobe实现网络连接事件的采集,下面我们通过linux提供的ftrace框架,操作/sys/kernel/debug/tracing/文件系统来简单分享一下kprobe事件采集的实现。


针对TeamTNT蠕虫异常网络连接监控举例,首先我们需要通过ftrace注册一个kprobe监听事件,并针对监听的函数的ABI约定来选择需要采集的数据。因为是监听建立网络连接,我们选择__sys_connect系统调用,通过如下命令我们可以注册一个名为justtest的kprobe监听事件。


echo -n 'p:justtest __sys_connect FD=%di:s64 Family=+0(%si):u16 Port=+2(%si):u16 Address=+4(%si):u32 Len=%dx:u64' >> /sys/kernel/debug/tracing/kprobe_events


接下来,我们需要启用我们所注册的kprobe监听器,具体实现仍然是操作tracing文件系统,相应命令如下。


echo 1 > /sys/kernel/debug/tracing/events/kprobes/justtest/enable


最后我们就可以通过解析/sys/kernel/debug/tracing/trace对应的输出,分析是否有可疑的网络连接请求。



针对kprobe的更详细的参数以及调用方式可以查看内核的Documentation/trace/kprobetrace.txt文档了解细节。同时牧云也将其核心的事件采集能力开源成工具供大家尝试调试kprobe事件采集,以及可以结合systracer程序进行恶意软件分析。


深度的洞察能力

作为一个优雅的主机安全产品牧云兼具深度的洞察能力,在TeamTNT蠕虫事件中,牧云通过用户态工具对内核的内存分布进行深度的洞察,从而有效检出蠕虫使用LKM rootkit,下面我们详细阐述牧云是如何洞察rootkit隐藏痕迹。


对LKM rootkit的发现,牧云是基于对比内核中/proc/kallsyms符号表和内核的内存镜像/proc/kcore从而发现系统调用被异常篡改,最终实现威胁检出。


首先我们需要分析kcore来查找系统调用的地址,首先我们通过readelf获取kcore中内核代码的偏移地址。通过读取代码段的偏移地址,其中VirtAddr-Offset即为内核态逻辑内存地址映射到/proc/kcore文件中的偏移位置。



然后通过kallsyms获取系统调用表的偏移地址

# grep 'R sys_call_table' /proc/kallsyms

ffffffffbc2013c0 R sys_call_table


基于上面获取的信息,可以计算出在kcore中系统调用表的偏移地址为


0xffffffffbc2013c0-(0xffffffffff600000-0x00007fffff603000)=0x7fffbc2043c0,通过hexdump来读取系统调用表的内存地址为一个平坦数组,我们可以通过系统调用号作为下标直接获取对应系统调用的跳转地址。


# hexdump -s 0x7FFFBC2043C0+ -n 64 -e '2/4 "%08x" "\n"' /proc/kcore

bb4d2d60ffffffff

bb4d2e80ffffffff

bb4cea30ffffffff

bb4ccae0ffffffff

bb4d7ec0ffffffff

bb4d80e0ffffffff

bb4d7f80ffffffff

bb4ebef0ffffffff


最后我们将kcore中获取的系统调用地址和kallsyms中的符号地址进行对比,可以看到sys_kill系统调用存在异常。后续我们可以进一步基于内存异常找到对应进行系统调用劫持的内核模块,在这里就不详细阐述了。



从上面蠕虫逃逸的对抗过程可以看出,作为一款主机安全软件,面对不断升级和迭代的恶意软件,健壮的感知能力和深度的洞察能力是我们能够持续检测的基础和自我修养。



IOC

IP

220.167.141.174

205.185.118.246


URL

hxxp://205.185.118.246/b2f628/cronb.sh

hxxp://kiss.a-dog.top/b2f628/m/xm.jpg

hxxp://kiss.a-dog.top/s3f815/d/h.sh

hxxp://kiss.a-dog.top/s3f815/d/w.sh

hxxp://kiss.a-dog.top/s3f815/d/d.sh

hxxp://kiss.a-dog.top/s3f815/d/c.sh

hxxp://kiss.a-dog.top/bWVkaWEK/zgrab

hxxp://kiss.a-dog.top/bWVkaWEK/1.0.4.tar.gz

hxxp://kiss.a-dog.top/b2f628/m/xm.tar

hxxp://kiss.a-dog.top/b2f628/d/ai.sh

hxxp://kiss.a-dog.top/b2f628/d/ar.sh

hxxp://kiss.a-dog.top/b2f628/b.sh

hxxp://kiss.a-dog.top/b2f628/s/s.sh


MD5

b66fe14854d5c569a79f7b3df93d3191

7691c55732fded10fca0d6ccc64e41dc

8fbbe3860823e397f3be82fa78026238

ded99b45dd74384689b276b1b35bce64

1e2bb44cd88e4763db54993638472f62

974edee6a70b66eac6de05045e542715


】【打印关闭】 【返回顶部
分享到QQ空间
分享到: 
上一篇安全防护设备中常用的攻击检查和.. 下一篇DDos的难以防范来源于它的攻击模式

立足首都,辐射全球,防御吧专注云防御及云计算服务15年!

联系我们

服务热线:010-56157787 ,010-56159998
企业QQ:4000043998
技术支持:010-56159998
E-Mail:800@fangyuba.com
Copyright ? 2003-2016 fangyuba. 防御吧(完美解决防御与加速) 版权所有 增值许可:京B2-20140042号
售前咨询
公司总机:4000043998 01056155355
24小时电话:010-56159998
投诉电话:18910191973
值班售后/技术支持
售后服务/财务
备案专员
紧急电话:18610088800