Linux入侵排查
一 文件排查
查看tmp目录下的文件 la -alt /tmp/ 如图,发现多个异常文件,疑似挖矿程序病毒。对已发现的恶意文件进行分析,查看 559.sh 脚本内容:脚本先是杀掉服务器
上 cpu 占用大于 20%的进程,然后从远程 27.155.87.26(福建,黑客所控制的一
个 IDC 服务器)下载了病毒程序并执行;
2 查看开机启动项内容:➜ls -alt /etc/init.d/,/etc/init.d 是 /etc/rc.d/init.d 的软链接 在 Linux 文件时间戳中,ls 命令默认列出的时间为“修改时间”(Modify
time),攻击者可以对该时间进行伪造。 在这种情况下,可以使用 stat * 命令列出当前目录下的所有文件时间戳:
其中,Change Time 是最新的修改时间戳(包括文件属性、内容修改时间),该时间戳无法直接通过系统工具进行伪造
(1)Access Time:简写为 atime,表示文件的访问时间。当文件内容被访问时,更新这个时间。
(2)Modify Time:简写为 mtime,表示文件内容的修改时间,当文件的数据内容被修改时,更新这
个时间。
(3)Change Time:简写为 ctime,表示文件的状态时间,当文件的状态被修改时,更新这个时间,例如文件的链接数,大小,权限,Blocks 数。
3查看历史命令记录文件~/.bash_history cat /root/.bash_history |more
查找~/.bash_history 命令执行记录,主要分析是否有账户执行过恶意操作系统;命令在 linux 系统里,只要执行过命令的用户,那么在这个用户的 HOME
目录下,都会有一个.bash_history 的文件记录着这个用户都执行过什么命令;
那么当安全事件发生的时候,我们就可以通过查看每个用户所执行过的命令, 来分析一下这个用户是否有执行恶意命令,如果发现哪个用户执行过恶意命令,
那么我们就可以锁定这个线索,去做下一步的排查;
4查看操作系统用户信息文件/etc/passwd
查找/etc/passwd 文件, /etc/passwd 这个文件是保存着这个 linux 系统所有用户的信息,通过查看这个文件,我们就可以尝试查找有没有攻击者所创建的用户,或者存在异常的用户。我们主要关注的是第 3、4 列的用户标识号和组标识 号,和倒数一二列的用户主目录和命令解析程序。一般来说最后一列命令解析程序如果是设置为 nologin 的话,那么表示这个用户是不能登录的,所以可以结合我们上面所说的 bash_history 文件的排查方法。首先在/etc/passwd 中查找命令解释程序不是 nologin 的用户,然后再到这些用户的用户主目录里,找到 bash_history,去查看这个用户有没执行过恶意命令
5 查看新增文件 PS:-ctime 内容未改变权限改变时候也可以查
find ./ -mtime 0 -name "*.php"(查找 24 小时内被修改的 php 文件)
find / -ctime 2
6 特殊权限的文件查看 find / -perm 777 |more
7 隐藏的文件(以 "."开头的具有隐藏属性的文件)
二 进程排查
(1)使用 top 命令实时动态地查看系统的整体运行情况,主要分析 CPU 和内存多的进程,是一个综合了多方信息监测系统性能和运行信息的实用工具 ,了解服务器健康状况
字段含义如下表:列名 含义 PID 进程id
PPID 父进程 id
UID 进程所有者的用户 id
USER 进程所有者的用户名
GROUP 进程所有者的组名
TTY 启动进程的终端名
PR 优先级
NI nice 值;负值表示高优先级,正值表示低优先级
RES 进程使用的、未被换出的物理内存大小,单位 kb。RES=CODSHR 共享内存大小,单位 kbS进程状态:D=不可中断的睡眠状态R=运行S=睡眠T=跟踪/停止Z=僵尸进程
%CPU 上次更新到现在的 CPU 时 间占用百分比
%MEM 进程使用的物理内存百分比TIME 进程使用的 CPU 时间总计 ,单位秒TIME+ 进程使用的 CPU 时间总计 ,单位 1/100 秒COMMAND 命令名/
(2)用 netstat 网络连接命令,分析可疑端口、可疑 IP、可疑 PID 及程序 netstat –antlp | more
netstat 用于显示与 IP、TCP、UDP 和 ICMP 协议相关的统计数据,一般用于检验
本机各端口的网络连接情况。
选项参数:
-a 显示所有连线中的 Socket。
-n 直接使用 IP 地址,而不通过域名服务器。
-t 显示 TCP 传输协议的连线状况。
-u 显示 UDP 传输协议的连线状况。
-v 显示指令执行过程。
-p 显示正在使用 Socket 的程序识别码和程序名称。
-s 显示网络工作信息统计表。
(3)根据 netstat 定位出的 pid,使用 ps 命令,分析进程 ps aux | grep pid
可以使用 lsof -i:1677 查看指定端口对应的程序;
lsof(list open files)是一个列出当前系统打开文件的工具。在 linux 环境下,
任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问
网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字
等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如
何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为
应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息
(4)使用 ls 以及 stat 查看系统命令是否被替换
两种思路:
1 查看命令目录最近的时间排序
2 根据确定时间去匹配
ls -alt /usr/bin | head -10
ls -al /bin /usr/bin /usr/sbin/ /sbin/ | grep "Jan 15
备注:如果日期数字<10,中间需要两个空格。比如 1 月 1 日,grep “Jan 1”
(5)隐藏进程查看
ps -ef | awk '{print}' | sort -n | uniq >1
ls /proc | sort -n |uniq >2
diff 1 2
三 系统信息排查
1查看分析用户相关分析
a) useradd userdel 的命令时间变化(stat),以及是否包含可疑信息
b) cat /etc/passwd 分析可疑帐号,可登录帐号
查看 UID 为 0 的帐号➜➜➜awk -F: '{if($3==0)print $1}' /etc/passwd
查看能够登录的帐号➜➜➜cat /etc/passwd | grep -E "/bin/bash$"
2查看分析任务
crontab -u <-l, -r, -e>
-u 指定一个用户
-l 列出某个用户的任务计划
-r 删除某个用户的任务
-e 编辑某个用户的任务(编辑的是/var/spool/cron 下对应用户的 cron 文件,也可以直接修改
/etc/crontab 文件)
通过 crontab –l 查看当前的任务计划有哪些,是否有后门木马程序启动相
关信息;
查看 etc 目录任务计划相关文件,ls /etc/cron*
3查看 linux 开机启动程序
查看 rc.local 文件(/etc/init.d/rc.local /etc/rc.local)
ls –alt /etc/init.d/
4查看系统用户登录信息
a)使用 lastlog 命令,系统中所有用户最近一次登录信息
b) 使用 lastb 命令,用于显示用户错误的登录列表
c) 使用 last 命令,用于显示用户最近登录信息(数据源为/var/log/wtmpvar/log/btmp) last -10
5 日志 分析
总结:
处置建议 :
断网或 ACL 隔离;
结束恶意进程;
提取木马样本;
删除木马;
防御措施 :
安装杀毒软件,对被感染机器进行安全扫描和病毒查杀;
对系统进行补丁更新,封堵病毒传播途径;
制定严格的口令策略,避免弱口令;
结合备份的网站日志对网站应用进行全面代码审计,找出攻击者利用的漏洞