4. 进程与行为IoC:异常进程检测、权限提升痕迹、持久化机制分析
设备被控之后,攻击者不会闲着。他得干三件事:跑他的恶意程序、拿到更高权限、让自己下次还能进来。这三件事,就是我们今天要聊的进程与行为IoC。
说白了,你盯着进程列表、权限变化和自启动项,就能把大部分潜伏的坏东西揪出来。我做了这么多年物联网应急响应,十次里有八次都是靠这三板斧破的案。
4.1 异常进程检测:谁在偷偷跑?
物联网设备上跑的进程,通常很固定。一个网关设备,跑的就是网络服务、协议栈、管理后台。突然多出一个你没见过的进程,那基本就是中招了。
我个人习惯,先看进程名和路径。攻击者经常把恶意程序伪装成系统进程名,比如把木马改成sshd或者crond。但你仔细看路径——真正的sshd在/usr/sbin/,他的却在/tmp/或者/var/tmp/下。这就露馅了。
关键检测点:
- 进程名与路径不匹配:系统进程跑在用户目录下
- CPU/内存异常飙升:挖矿木马的典型特征
- 网络连接异常:进程连向陌生IP或非标准端口
- 父进程异常:
init或systemd直接派生了一个不该有的子进程
我在项目中遇到过一台被植入挖矿木马的摄像头。进程名叫kworker,看起来像内核工作线程。但真正的kworker你是看不到CPU占用100%的。我一看进程PID,再查/proc/[PID]/exe,发现指向/usr/lib/下的一个隐藏文件。嗯,这就抓到了。
检测命令其实很简单:
# 查看所有进程及其完整路径
ps aux
# 查看进程对应的可执行文件路径
ls -l /proc/[PID]/exe
# 查看进程的网络连接
netstat -antp | grep [PID]
# 查看进程打开的文件
lsof -p [PID]
我的小技巧:写一个脚本,定期把进程列表快照下来,跟正常状态对比。新增的进程就是重点怀疑对象。我曾经靠这个办法,在一批智能电表里挖出了三个后门。
4.2 权限提升痕迹:他是怎么拿到root的?
物联网设备默认跑在低权限账户下。攻击者进来后,第一件事就是提权。提权的方式就那么几种,留下的痕迹也很明显。
你想想看,一个本来只该读写配置文件的进程,突然去修改了/etc/passwd或者/etc/sudoers,这正常吗?肯定不正常。
| 提权方式 | 典型痕迹 | 检测方法 |
|---|---|---|
| SUID提权 | 异常文件设置了SUID位 | find / -perm -4000 |
| 内核漏洞提权 | 编译临时文件、内核模块加载 | 检查/tmp/下的编译产物 |
| sudo配置提权 | /etc/sudoers被修改 |
比对sudoers文件哈希 |
| 服务漏洞提权 | 服务以root运行且被利用 | 检查服务启动用户 |
我记得有一次,一台工业路由器被植入了一个SUID后门。攻击者把/bin/bash复制了一份到/usr/local/bin/,然后给它设了SUID位。任何用户运行这个副本,都能直接拿到root shell。我查SUID文件时发现了它,/usr/local/bin/bash——这地方不该有bash的。
注意:有些攻击者会清理日志。但提权操作往往涉及文件修改,文件系统的修改时间戳(mtime)是抹不掉的。我建议你重点关注/etc/、/usr/local/、/opt/这些目录下近期被修改的可执行文件。
4.3 持久化机制分析:他凭什么下次还能进来?
攻击者费了半天劲进来,肯定不想只干一票就走。他会想方设法让自己下次还能进来。这就是持久化。
物联网设备的持久化方式,跟PC不太一样。PC上常见的注册表、启动项,在物联网设备上对应的是init脚本、定时任务、服务配置。
我总结了几种最常见的物联网持久化方式:
- 系统服务:在
/etc/init.d/或/etc/systemd/system/下注册一个服务 - 定时任务:在
/etc/crontab或/var/spool/cron/下添加任务 - 启动脚本:修改
/etc/rc.local或/etc/profile - 库劫持:替换系统动态库,比如
libc.so或libssl.so - 固件修改:直接修改固件分区,植入后门
检测这些持久化机制,说白了就是查几个关键目录和文件:
# 检查系统服务
ls -la /etc/init.d/
ls -la /etc/systemd/system/
# 检查定时任务
cat /etc/crontab
ls -la /var/spool/cron/
# 检查启动脚本
cat /etc/rc.local
# 检查动态库劫持
ldconfig -p | grep -v "默认路径"
实战案例:我处理过一起智能门锁被远程控制的事件。攻击者把后门脚本写进了/etc/init.d/S99door,每次设备重启都会自动运行。这个脚本会连接一个海外C2服务器,接收指令开锁。我找到这个文件时,发现它的修改时间正好跟用户报告异常的时间吻合。
为什么会这样?因为很多物联网设备的固件更新机制不完善,攻击者修改了启动脚本后,设备重启就会自动加载恶意代码。你就算把进程杀了,重启一下它又回来了。
所以我的建议是:检测持久化机制时,一定要对比基线。你事先把正常状态下的服务列表、定时任务、启动脚本都记录下来。发现异常时一比对,谁多了谁少了,一目了然。
4.4 知识体系总览
下面这张图,把进程与行为IoC的核心逻辑串起来了。你可以把它当作排查时的路线图。
这张图把整个检测流程串起来了。你从上往下看:先确定要检测什么——异常进程、提权痕迹、持久化机制;然后每个方向都有具体的检测点;最后用基线比对和实时监控来落地。
我在实际项目中,都是按这个框架来排查的。先跑一遍进程列表,再查SUID文件和定时任务,最后检查系统服务。一套下来,大部分后门都藏不住。
最后说一句:别指望一次排查就能把所有问题都找出来。攻击者也在进化。但只要你把这三个方向盯住了,他就很难在你眼皮底下长期潜伏。嗯,这就是基本功的力量。