感觉排查的思路大体都一样🧐 只是Windows和Linux是不同操作系统 需要使用不同的方法
入侵排查
系统信息收集
系统的版本内核信息(版本对提权的影响比较大 并且如果系统是centos那么和系统是ubuntu的方法使用还会有差异)
第一种方法可以进入以下两个目录文件去寻找
/etc/os-release | /proc/version
第二种方法是使用 uname -a 这个命令
这个命令的本质也是从/proc/version这个文件中提取出东西
系统进程信息
- top/ps -ef
可以展示系统进程的占用率
关注系统进程占用率过高的情况或者cpu占用与进程占用不符的情况(进程隐藏)
那么 上面的进程隐藏方法是什么样的(以top来举例)
首先 创建一个隐藏目录
然后 将top文件进行迁移 mv /usr/bin/top 创建的目录
接着 修改一下/usr/bin/top文件
#!/bin/bash
创建的目录/top | 想要筛选的条件
最后给予可执行权限 chmod +x /usr/bin/top
运行top就可以偷天换日了🥰
上述的进程隐藏方法属于命令替换
然鹅 攻破这种方法仅需一个busybox
- lsof
lsof -p PID
查看指定进程打开的文件
系统网络连接信息
- netstat/ss
如果在docker环境中netstat命令用不了就用ss
Linux中的netstat -pantu替代Windows中的netstat -ano
处理恶意进程
发现可疑进程时kill掉 kill -9 强制执行
Linux中的kill替代Windows中的taskkill
恶意用户排查
/etc/passwd
存放用户相关信息
使用stat查看用户权限 默认权限是6(文件所属者)4(文件所属组)4(文件所属组的其他用户)r4 w2 x1
cat /etc/passwd文件关注UID为0的账户(超级管理员)
新创建用户一般UID>=1000
因为hacker想要维持权限 so一般会创建一个账户再将其UID改为0
/etc/sudoers
此文件关联了哪些用户具有sudo的权限 文件默认权限440
hacker会做下面的操作
编辑/etc/passwd 创建一个新账户并且UID设置成一个迷惑值(正常值)
chmod 777 /etc/sudoers
vim /etc/sudoers 添加 用户名 ALL=(ALL:ALL) ALL
chmod 440 /etc/sudoers
综上所述 我们需要关注具有ALL=(ALL:ALL) ALL权限的用户
持久化排查
环境变量文件
/etc/profile
/etc/bash.bashrc
用户家目录/.profile
./bashrc
/etc/profile和用户家目录/.profile两个的主要区别就是etc下的profile所有用户等了都会启动
服务文件service
这个运用了systemctl的运行逻辑
例如运行了systemctl start ssh那么就会去加载ssh.service文件
ssh.service里面的Service部分规定了运行加载的文件路径
所以我们创建一个新的service文件替代原文件就可以
新的文件里就可以修改加载路径为恶意程序路径
这里就可以运用两个方法排除恶意文件
- 知道恶意文件名称
grep 'name' -Rn .
- 确定时间
通过find命令去寻找
find / -type f -newermt "起始时间" -a -not -newermt "结束时间" 2>/dev/null
但时间也可能被修改来误导find命令🧐
计划任务
这里的文件内容很多 建议是先确定时间段
文件在
/var/spool/cron/crontabs
或者crontab -l显示当前用户的计划任务
两种方法是一样的
也可以去找/etc/cron*
/etc/rc.local
这个文件是开机自启型文件 往里面写执行命令 可以在开机就执行
在centos中默认开启 在Ubuntu中默认不开
恶意文件排查
恶意木马执行后,必然出现一个恶意进程。恶意进程可以通过这四个特征判断:
ⅰ. 进程对cpu,内存的占用异常高。
ⅱ. 进程运行时间,开始时间,差异化明显
ⅲ. 进程路径,使用命令参数异常
ⅳ. 多数病毒会替换系统命令
#快速查看进程,并查看cpu的占用率
[root@localhost ~]# top -c
#查看进程的关联
[root@localhost ~]# ps -aux
#查看和某个进程PID,相关联的文件
[root@localhost ~]# cat /proc/<PID>/maps
#只管展现子进程和父进程之间的关系
[root@localhost ~]# pstree
#输出某个进程所打开的文件,默认情况下Centos7不会安装该命令
[root@localhost ~]# lsof -p <pid>
SUID:提权
Linux中最高权限是777?
NO it's7777
suid权限只作用于二进制文件
例如find命令漏洞
find /etc/passwd -exec whoami \;
然后相爱相杀
我们也可以用find命令去排查
find /usr/bin -perm -4000 type f
日志分析
关键点就在于让想要筛选出的日志内容格式化输出
像是tshark筛选流量一样🥰
首先 我们要先知道日志中记录了哪些内容
注:在redhat和centos中/var/log/secure中地登录认证文件在Ubuntu和debian中是/var/log/auth.log
日志的介绍
- ./bash_history
这是一个历史日志文件 每个用户下都隐藏了一个
- kern.log
主要体现在启动的时候跑马灯地效果
- /var☆☆☆
动态目录 系统在运行中产生的调试 缓冲文件会放在这里
/var/log☆☆☆☆
日志文件
里面会有打包的文件因为文件内容随时间积攒过多就会被打包 使用命令解压即可
gunzip -d auth.log.*
- tomcat
首先找一下安装目录在哪里 文件目录默认在安装目录
ps -ef | grep tomcat
conf
里面有站点配置文件和中间件配置文件
log
日志文件
- Q:扫描器对web站点进行了扫描什么时候开始地
A:找短时间高并发 时间不停顿地时间段cat xxx.txt | grep ip | awk -F "" '{print $4}' | cut -c 14-18 | sort |uniq -c
一些小技巧
Q:攻击者SSH爆破失败了多少次
前往/var/log/auth.log文件cat auth.log* | grep -i 'Failed' | awk -F "" '{print $11}' |sort| uniq -c
注:uniq只能统计相邻两行 sort命令可以帮忙排序
可以不用再用excel了
Q:攻击者SSH爆破了多少次cat auth.log* | grep -e 'Failed' -e 'Accepted' | awk -F "" '{print $11}' |sort| uniq -c
熟悉grep uniq cut sed awk这些命令可以帮助我们更好地筛选出自己想要的日志内容并且格式化展开