查看原文
其他

安全运营内刊|威胁分析与响应-主机应急响应技巧


01

前言


随着网络威胁形式的多样化和复杂化,网络攻击事件也层出不穷。在当前复杂的网络和业务环境下,多数政企单位应对信息安全突发事件的体制尚不完善,大量资产依然处于“脆弱性”状态,暴露在已经非常活跃的网络攻击之下。


而应急响应工作就是第一时间针对突发网络安全事件进行应急处置,采取有效的措施和行动保证相关业务的连续性和可用性,同时进一步排查入侵来源,还原攻击路径,给出解决方案和方法,将攻击带来的破坏程度降到最低。在安全事件响应的全部流程中,核心环节是攻击事件的分析处理。


02

windows处理


2.1 进程检查


在windows环境下进程检查可以选择的选择方法比较多,可以直接使用windows任务管理器,可以使用wmic查看进程,但是任务管理器看的信息比较局限,展示信息比较少,不适合应急,wmic可以展示足够的信息,但是使用体验较差,因不够友好,没有用户界面,间接影响排查速度。


建议直接使用微软提供的进程管理工具process-explorer(https://docs.microsoft.com/zh-cn/sysinternals/downloads/process-explorer), 或者使用Process hacker对进程进行分析,如下图:

可以查看父子进程关系,以及该进程的dll关系,及相关描述,公司名等。

如果有网络的话,可以直接使用VirusTotal,进行查毒,快速高效,如下图:

可以查看进程的路径,命令行,启动位置,和网络行为,如下图:

网络连接异常与否可以作为判断一个进程是否有问题的一个重要指标,需要重点关注。

如果遇到如下图这种情况,process提升管理员运行即可。


2.2 文件检查


在实际应急事件中,文件检查几乎不可能做到全盘文件检查,此时需要手工对系统关键位置进行检查,关键目录有:


temp目录:有些恶意程序释放文件一般都会将释放目录写好,但是由于不同版本的系统路径存在差异,但是临时文件目录是统一的,并且临时文件目录对权限要求比较低,所以恶意程序一般选择这个目录作为其工作目录。


Recent目录:主要是存放最近运行过的程序的快捷方式,可以通过分析该目录下的快捷方式来分析最近运行的文件。Recent目录%UserProfile%\Recent。

如果是web服务器,则需要对web服务下的脚本文件进行排查,检测webshell,在检测webshell的工具中推荐使用D盾进行检查,对检查结果辅助以人工分析即可。


2.3 启动项


Windows下可以实现自启动的方法比较多,启动目录,注册表启动键,注册服务实现自启,计划任务等都可以实现开机后启动,为了兼顾时效性和全面性,在最短时间完成任务单不遗漏检查项,建议直接使用微软提供的启动项管理工具autoruns(https://docs.microsoft.com/zh-cn/sysinternals/downloads/autoruns),如下图:

黄色标识启动项的源文件已经被删除,和process一样,可以支持一键Virus Total进行检测,可以右键删除启动项,或者取消复选框来关闭指定项目开机启动。


2.4 日志分析


在Windows应急事件日志分析环节中,主要分析安全事件,查看方式为直接运行compmgmt.msc,定位到系统工具>事件查看器>Windows日志>安全日志,如下图:

应急常用的事件ID:

事件类型:

如下图为典型的RDP登录记录:

但有时候安全日志会被攻击者删除,此时还可以通过查看应用程序日志进行分析判断。

所有这些日志的存放路径为C:\Windows\System32\winevt\Logs\目录下,也可以将日志拷贝分析。


2.5 网络分析


通过netstat命令查看网络情况,再此环节需要重点关注异常外连,如下图:

一般情况下反向连接的端口都是固定且容易辨认的,可以根据获得的进程编号进行进一步排查,如下图:


2.6 用户排查


用户结构检查的方法比较多,可以在命令行,使用工具进行检查,同样为了兼顾时效性与准确性,推荐使用两种方法检查:

1.直接检查注册表SAM键

2.使用compmgmt.msc注册表[计算机\HKEY_LOCAL_MACHINE\SAM\SAM](计算机管理,在实际应急响应工作中使用频率较高)。如下图:

使用计算机管理>系统工具>本地用户和组进行查看分析:

检查用户目录:


2.7 案例


2.7.1 DNS异常解析

在此次事件中,全流量设备告警内网一台主机,周期性解析一个恶意域名,触发威胁情报告警,但是该域名已经无法正常解析,需要定位恶意进程。


因为这个无法正常解析,所以netstat不能有效的发现问题,另外因它的周期性解析特性导致解析时间也无法确定。


在当前情景下直接使用Network Monitor进行分析,如下图:

因DNS请求由系统发起,所以分析DNS在此无效,但可以确定发起这个解析请求的一定是系统进程,所以直接在hosts文件中将该IP地址解析到一个指定地址,回到Network Monitor,有和这个IP通信的进程就是我们所要找到的进程。


03

Linux处理


Linux环境下的排查相比Windows要简单一些,实际操作中既可以从进程入手进行排查,也可以从网络入手排查,从计划任务开始排查也可以。


3.1 进程排查


ps -auxf查看进程列表信息,根据进程名称进行判断,如下图,红线选中为异常进程。

对于挖矿类的直接使用top定位进程:

拿到PID之后,就可以进一步获取文件位置,方法比较多,ll /proc/pid/exe。

lsof -p pid


3.2 日志排查

需要重点排查登录日志,message,计划任务日志等。

secure日志分析:

last日志记录所有登录成功的事件:


3.3 网络排查


netstat -ap:

可以看到进程193742对外的扫描行为。


3.4 关键位置


计划任务

/etc/crontab

/var/spool/cron/*

/etc/cron.d/

启动目录

/etc/init.d/* 

临时文件

由于权限不足,好多后门把tmp目录作为工作目录运行程序。


3.5 案例


3.5.1 动态链接库劫持

hook是Linux的一项功能,可以方便实现一些特殊的任务,例如在glibc库中获取用户id的函数叫getuid,重写该函数

int getuid(){ 

       return 999; 

}

使用以下命令编译为so文件

gcc -shared -fpic -o test1.so test1.c

修改/etc/ld.so.preload

/root/test1.so

执行ldconfig重新生成ld.so.cache缓存

由此可以得知hook的核心就是加载自定义库。


在Linux下库的调用流程:

1.加载环境变量LD_PRELOAD指定的动态库

2.加载文件/etc/ld.so.preload指定的动态库

3.搜索环境变量LD_LIBRARY_PATH指定的动态库搜索路径

4.搜索路径/lib64下的动态库文件


所以关键两点,一个LD_PRELOAD环境变量,另一个/etc/ld.so.preload文件

解决方法,可以使用strace命令跟踪调用查看是否有hook,可以打印LD_PRELOAD环境变量,可以清空/etc/ld.so.preload文件。当然也可以使用静态编译的busybox(https://busybox.net/downloads/binaries/1.30.0-i686/)进行查看。下图是一个例子,利用hook隐藏掉backdoor,webshell,ld.so.preload,hook.so,8888等关键字输出。


3.5.2 提取样本

一些挖矿程序的守护进程会以循环的方式释放新的文件到目录下并启动,删除且kill掉旧的守护进程,所以想杀死这个守护进程并删除守护进程文件的时候往往因为无法得知进程编号和当前运行进程的名字而无从下手。

由上图分析得知进程152470是挖矿程序主进程,152219是守护进程,守护进程一般具有横向传播的功能,可以根据逆向守护进程来确认攻击手法。

链接指向是红色的,说明源文件已经被删除,这种情况下可以杀死挖矿进程并在守护进程重启挖矿主进程时将样本留下。


这里介绍两个命令lsattr和chattr,有些恶意程序会将其设置i属性以防止被删除。

  • lsattr命令用于显示文件或目录属性;

  • chattr执行改变文件或目录的属性。

i属性设置文件或目录不能修改删除移动,

a属性设置文件只能追加内容,作用于目录则表示只能创建文件。

设置一个脚本循环查找有没有符合条件的目录,如果有,将其设置a属性,并杀死挖矿进程,如下:

while true;do find ./ -maxdepth 1 -type d -name ".*" |grep -v unix |grep -v nfs|grep "./." |xargs chattr -d +a;done

守护进程一样,一般守护进程依赖计划任务作为守护,如下:

或者以死循环的方式守护自己,同样的方法。


2.5.3 Linux下查杀webshell

在Windows环境下,D盾对webshell检测的准确率很高,在Linux下可以用河马,但是检测效果并不理想,检出精度不高且存在误报。如果在本地环境下,可以利用sshfs加载D盾查杀,但若是网站过大,大小有几十G或网站在云上的情况下,这种方法就不会取得满意的效果,此时可以将脚本文件单独复制出来进行检查。

for file in `find /var/www/html/ -name “*.php”`;do cp $file /tmp/html/;done

为了避免被查杀,有些后门不会直接放在web目录下,如下图:

可以使用find查找系统中的隐藏文件进行排查

find / -type f -name “.*”

经过分析比对,可以确认这是一段利用了 Thinkphp 远程代码执行漏洞的 Exp ,攻击者 ip 疑似是:14.204.67.113。

0496

发现网页头部被植入了unicode字符编码,解码后内容为:

进一步观察发现meta头部有串16进制的可疑代码,转换为字符后如下:


04

总结


随着挖矿木马,后门等恶意程序的隐蔽手段越来越多种多样,主机安全的问题日渐突显,在主机应急响应事件中仅仅依靠传统的经验和手法可能无法取得理想效果。因安全事件具有突发性,复杂性和专业性,所以任何经验和手法都可能存在缺陷,希望通过本文抛砖引玉,和广大安全从业者共同探讨应急响应工作中的方法和技巧,取长补短,更好地防御安全威胁,保护机构和企业的网络安全。


声明:

1.本文档由天融信安全团队发布,未经授权禁止第三方转载及转投。

2.本文档所提到的技术内容及资讯仅供参考,有关内容可能会随时更新,天融信不另行通知。

3.本文档中提到的信息为正常公开的信息,若因本文档或其所提到的任何信息引起了他人直接或间接的资料流失、利益损失,天融信及其员工不承担任何责任。

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

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