1 目录文件分析
1.1 系统用户排查
黑客往往取得服务器控制权限后会添加系统用户,达到持续控制服务器的目的。
筛选用户ID=0(root用户) 或者 用户ID>=500(新建用户)的用户,可以快速查看是否有异常系统用户。
cat /etc/passwd | awk -F : '{if($3==0||$3>=500){print}}'
黑客也可能新建passwd shadow文件存用户信息,所以需要查看是否存在多余的passwd
ls -ls /etc/passw*
ls -ls /etc/shado*
1.2 操作命令记录
黑客控制服务器后,通常会使用bash shell操作命令控制服务器
history 查看当前用户的历史命令
如果黑客使用history -c 将历史命令进行清除,可以查看宿主目录下的.bash_history文件进行查看。
cat /用户名/.bash_history 查看指定用户的历史命令。
1.3 敏感目录文件
检查下LInux系统下敏感的目录,通常恶意程序会在权限大的目录写入文件,-l 显示文件详细信息 -a 显示隐藏文件,-t 按时间进行排序。
ls --alt /tmp/ 存放所用用户的临时文件
ls --alt /var/tmp/ 存放所用用户的临时文件
ls -alt /etc/init.d/ 存放服务启动脚本命令
ls -alt /bin 存放开机相关的命令
ls -alt /usr/bin 存放普通用户使用的命令
ls -alt sbin 存放管理员用户使用的命令
ls -alt /usr/sbin 存放网络服务器命令
ls -alt /boot 存放启动和内核相关的文件
1.4 文件修改时间
Linux文件系统每个文件都有三种时间戳:
访问时间(-atime/天,-amin/分钟):用户最近一次访问时间。
修改时间(-mtime/天,-mmin/分钟):文件最后一次修改时间。
变化时间(-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。
stat 文件名 该命令可以查看文件生成的时间,对溯源排查起关键作用。
常常查看以下两个文件的时间可以判断系统安装的时间,如果文件没有被删除系统不会使用到这两个文件。
stat lost+found
stat /root/anaconda-ks.cfg
2 网络行为排查
2.1 重要辅助站点
1.https://www.virustotal.com/ , 国外知名安全站点,需翻墙,可查询文件MD5、IP、域名、URL是否恶意,也可上传文件进行病毒扫描。
2.https://x.threatbook.cn/ , 国内威胁情报站点,可查询文件MD5、IP、域名、URL是否恶意,也可上传文件进行病毒扫描。
3.http://beian.cndns.com/,国内站点备案查询,所有有企业备案的国内站点可认为是可信站点。
4.http://www.alexa.com/,全球站点排行查询,top100万的站点可认为是可信站点(国外站点没有备案这一说法)。
5.Google与Baidu等搜索引擎,输入文件MD5/IP/域名,有时候可以查询到对应病毒信息。
2.2 网络连接排查
使用命令 netstat -antop 查看当前的网络连接,排查可疑的服务、端口,外连的IP。
如发现netstat定位出的pid有问题,可再通过 ps -aux |grep pid 可以进一步查看进程信息。
并且可以进入虚拟文件目录查找该进程的可执行文件,使用ls proc/pid grep -i exe命令,或者 file /proc/pid/exe
lsof -i -PnR 查看网络通信情况,是否存在异常连接,并结合威胁情报分析。
2.3 网络流量分析
流量分析可以使用tcpdump,主要分析下当前主机访问了哪些域名、URL、服务,或者有哪些外网IP在访问本地主机的哪些端口、服务和目录,又使用了何种协议等等。
例如,使用tcpdump观察到,主机访问了sjb555.3322.org这种动态域名,即可粗略猜测这是一个C&C服务器。
tcpdump -i eth0 port 53 -vv
3 命令篡改分析
3.1 rpm命令校验
通常系统中了病毒,病毒会修改系统自带的命令,例如: top ls ps pstree netstat lsof ss sshd ssh等等,达到反侦察的目的,所以需要检验下以上命令是否被修改替换。
rpm -V -a 查看所有被修改过的rpm包
rpm -V -f /bin/ls 确认ls 命令是否被替换过,没有任何输出代表没有被替换过。
rpm -V -f /bin/ps 确认ls 命令是否被替换过,没有任何输出代表没有被替换过。
注意:该方法只适用于redhat系列的操作系统
3.2 校验文件MD5值
使用md5sum工具计算出文件的md5值与干净系统对应文件的md5值进行比较。
4 系统启动项排查
4.1 排查启动项
黑客为了保持病毒能够开机启动、登录启动或者定时启动,通常会有相应的启动项,
/etc/init.d/rc.local
/etc/rc.local
/etc/rc.d/rc0.d
/etc/rc.d/rc1.d
/etc/rc.d/rc2.d
...
4.2 排查启动服务
chkconfig --list |grep on 检查自启服务
4.3 定时或计划任务
任务计划:查看当前的任务计划有哪些,是否有后门木马程序启动相关信息
crontab --l -u root
cat /var/spool/cron/*
cat /etc/crontab
cat /etc/cron.d/*
cat /etc/cron.daiy/*
cat /etc/cron.weekly/*
cat /etc/cron.monthly/*
5 日志分析
5.1 登录日志
/var/log/secure 记录所有相关的登录日志,包含ssh登录日志
last 用来列出目前与过去登录系统的用户相关信息
lastb 显示登录失败的日志
tail -f /var/log/secure 实时监控登录日志
5.2 系统日志
/var/log/message 记录所有系统报错异常日志
/var/log/boot.log 记录系统开机日志
/var/log/dmesg 记录系统开机时内核产生的日志
/var/log/cron 记录计划任务执行日志
6 Linux有用命令
6.1 查找命令
which ls 查找命令所在位置
locate ls 模糊查找文件,基于数据库速度快
find 【文件路径】 【条件】 【动作】 速度慢,可以基于文件属性就行查找
find / -name "pass*"支持通配符
find / -iname 不区分大小写
find / -user root 根据文件宿主查找文件
find / -perm -010 查找具有写权限的文件
find / -type d 查看目录
6.2 lsof命令
lsof 用于查看指定进程文件或者目录打开的情况
lsof -c 进程名称 显示指定进程打开的文件
lsof -p pid 显示指定进程id打开的文件
lsof +d /tmp 显示tmp目录下文件被打开的情况
lsof +D /tmp 递归显示tmp目录下被打开的文件情况
lsof -i:80 显示监听80端口的进程
6.3 strings命令
strings -a -n 60 /xmrig.exe 扫描二进制文件中连续60个字符的字符串,可以看到该程序是门罗币挖矿程序,过滤出来帮助文档和钱包地址。
6.4 字符串处理
grep: 行提取命令 eg: grep "/bin/sh" /etc/passwd -n -v "root"
-i 忽略大小写
-n 显示行号
-v "root" 取反
cut: 列提取命令 eg: cut -d ":" -f 1,2 /etc/passwd
-d ":" 指定分隔符,默认制表符为分隔符
-f 列号 截取指定列
awk '条件1{动作1} 条件2{动作2}' 文件名 awk列提命令
eg:awk '{ printf $1 "\t" $2 "\n"} ' student.txt
1、print 会自动输出换行符\n printf不会输出\n
2、$0 存储文件名,$1 $2 $3 变量依次每列数据
3、BEGIN{FS=":"} 指定分隔符: 或者 -F : 指定分隔符
条件:
1、一般用关系表达式作为条件,eg: BEGIN END
2、x>10
动作:
1、格式化输出 printf
2、流程控制语句
统计命令wc: wc [选项] 文件名 eg: wc -l /etc/passwd
选项:
-l 只统计行数
-w 只统计单词数
-m 只统计字符数