应急响应-主机安全Agent oom排查
背景简述
某台机器上的主机安全程序异常挂掉,进程反复拉起失败。上机排查发现主机存在oom内存溢出,推测是主机安全agent使用内存超过限制被kill。
而系统本身的内存是足够,剩余14g内存。
排查思路
dmesg查看内核日志信息
dmesg --level=err,warn -T
有的时候我们只要error以及warning的日志,不要其他等级的信息。通常oom的日志为error级别。
dmesg | grep oom
异常定位
主机安全告警计划任务文件/var/spool/corn/dump.rdb多次被篡改。
排查发现在 /var/spool/corn 目录下,存在dump.rdb文件,大小超过600M。并且还在持续写入。
dump.rdb文件为redis的备份文件,正常情况不应该出现在计划任务的目录下。而redis向计划任务目录写文件是redis未授权访问入侵最常见的方式。
根据dump.rdb的生成时间为几个月之前,并且redis没有日志无法确切的证实。但推测该主机redis之前存在漏洞被入侵过。
cron计划任务日志
排查定时任务日志,可以定位到最早执行dump.rdb定时任务是在2022-07-13 10:12:01。可以看到cron日志中因为/etc/passwd
中不存在dump.rdb用户,并没有执行成功,未造成实际影响。
经测试/var/spool/cron/目录下的计划任务的文件名,必须是/etc/passwd中存在的用户名才能被执行。而/etc/rc.d/则可以是任意文件名。
Linux计划任务
排查结论
/var/spool/cron/dump.rdb文件很大导致的,主机安全Agent读取计划任务的时候会读到这个文件,超过最大的内存限制导致oom被系统kill。
由于主机安全程序为保证自身不过度占用系统资源,通常会对自身的CPU、内存占用做限制。
而正常情况下,计划任务目录下不应该存在几百兆大小的文件,Agent在扫描过程中一次性将整个dump.rdp文件读入内存超过内存限制,Agent就被系统kill了。
Agent优化思路
此case算是没有没有考虑的到一种场景。
- Agent扫描读取文件之前先判断文件大小。
- 不要一次读取全部文件放入内存。
微信赞赏支付宝赞赏
发表评论