~~~~~~~~ 因为想要面对一个新的开始,一个人必须有梦想、有希望、有对未来的憧憬。如果没有这些,就不叫新的开始,而叫逃亡。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ————玛丽亚·杜埃尼亚斯
前言
在linux环境下处理应急响应事件往往会比较棘手,因为相对于windows,linux没有像autorun、procexp这样的应急响应利器,也没有统一的应急响应处理流程。
linux可能出现的入侵情况及现象
1、存在非法外联占用带宽
2、存在异常进程或者异常端口
3、CPU、内存报警
4、服务器无法正常连接
5、出现异常登录和异常账号
6、网站被注入木马、webshell
应急响应流程
处理linux应急响应主要分为4个环节:识别现象-> 清除病毒-> 闭环兜底-> 系统加固
首先从客户场景的主机异常现象出发
[1]先识别出病毒的可疑现象。
[2]然后定位到具体的病毒进程以及病毒文件,进行清除。
[3]完成前2步还不够,病毒一般会通过一些自启动项及守护程序进行重复感染,所以我们要执行闭环兜底确保病毒不再被创建。
[4]将主机上的病毒项清除干净后,最后就是进行系统加固了,防止病毒从Web再次入侵进来。
识别现象
这个环节要求我们通过系统的运行状态,安全设备告警,发现主机异常现象,以及确认病毒的可疑行为。
当我们登录主机后做的第一件事就应该先用history查看主机的历史命令。
排查用户相关信息
whoami #查看当前用户
who #查看当前登录系统的所有用户
w #显示已经登陆系统的用户列表,并显示用户正在执行的指令
users #显示当前登录系统的所有用户的用户列表
last #查看最近登录成功的用户及信息,查看的是 /var/log/wtmp 文件
lastb #查看最近登录失败的用户及信息,查看的是 /var/log/btmp 文件
lastlog #显示系统中所有用户最近一次登录信息,读取的是 /var/log/lastlog 文件
cat /etc/passwd #查看用户信息
cat /home/"用户名".bash_history #查看普通账号的历史命令
cat /etc/passwd | grep /bin/bash #查看可以登录系统的用户
awk -F: '$3==0{print $1}' /etc/passwd #查看超级用户(uid=0),有些黑客将普通用户的uid改为0,则该普通用户也拥有了超级权限
awk '/\$1|\$6/{print $1}' /etc/shadow #查看可以远程登录的用户
more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)" #查看拥有sudo权限的用户
举例说明一下,lastb查看一下最近登录失败的用户信息
last查看一下最近有哪些用户登录成功
排查进程端口相关信息
top #动态查看进程
ps -aux #查看占用内存和CPU较高的PID和实际的指令位置
ls -l /proc/18176/exe #查看PID为18176的进程的可执行程序
ls -l /etc/init.d #查看启动项
lsof -p 18176 #查看PID为18176的进程打开的文件
lsof -c sshd #查看进程sshd打开的文件
lsof -i:33946 #查看33946端口对应的一些进程
ps -p PID -o lstart #查看进程的启动时间点
netstat -pantu | grep 18176 #查看端口连接情况,过滤含有18176的行,就可以查看连接的端口
fuser -n tcp 33946 #查看33946端口对应的进程PID
ps aux / ps -ef #静态查看进程
pstree -h pid -p -a #查看某个进程的进程树
ps aux --sort -pcpu #静态查看进程,根据cpu使用情况排行,从高到低
ps aux --sort -pmem #静态查看进程,根据内存使用情况排行,从高到低
举例说明一下比如top,如果cpu占用率超过70%且名字可疑,大概率是中了挖矿病毒了。
ps -aux 看下是否有可疑进程 ,当你看见命令行中带有url等奇怪的字符串时候,它很有可能就是个病毒downloader。
清除病毒
通过第一个环节中的各项现象的排查,可以帮助我们定位到病毒进程和病毒文件。到这一步,我们就需要将其杀死。
清除可疑进程的进程链,结束病毒进程
ps -elf | grep [pid]
kill -9 [pid]
定位病毒进程对应的文件路径,删除病毒文件
ls -al /proc/[pid]/exe
rm -f [exe_path]
闭环兜底
当我们发现,杀掉了恶意进程后,过一段时间,该进程又会重新启动,则说明该进程有守护进程。则我们第一想到了就是crontab定时任务了。
检查是否存在可疑定时任务
crontab -l #查看定时任务
more /var/log/cron #查看定时日志文件
cat /etc/anacrontab #查看anacrontab异步定时任务
枚举主机所有服务,查看是否有恶意服务
service --status-all
枚举系统文件夹的文件,按修改事件排序查看7天内被修改过的文件
find /usr/bin/ /usr/sbin/ /bin/ /usr/local/bin/ -type f -mtime +7 | xargs ls -la
检查是否存在病毒守护进程
lsof -p [pid]
跟踪进程运行情况
strace -tt -T -e trace=all -p $pid
扫描是否存在恶意驱动
lsmod
查看authorized_keys是否有攻击者上传的ssh私钥
ls -l /etc/.ssh
安装chkrootkit 进行扫描:
wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
tar zxvf chkrootkit.tar.gz
cd chkrootkit-0.52
make sense
./chkrootkit
安装rkhunter 进行扫描:
Wget https://nchc.dl.sourceforge.net/project/rkhunter/rkhunter/1.4.4/rkhunter-1.4.4.tar.gz
tar -zxvf rkhunter-1.4.4.tar.gz
cd rkhunter-1.4.4
./installer.sh --install
rkhunter -c
系统加固
最后一个环节也是非常重要的,我要通过此次的分析,知道黑客是如何入侵主机的,进而修复该漏洞,防止黑客再次入侵。
查看 /var/log/secure文件
cat /var/log/secure* | grep Accepted #查看登录成功的记录
cat /var/log/secure* | grep Failed #查看登录失败的记录
grep "Accepted " /var/log/secure* | awk '{print $1,$2,$3,$9,$11}' #查看登录成功的日期、用户名及ip
grep "Failed password for root" /var/log/secure | awk '{print $11}' #查看有哪些ip在爆破主机的root账号
grep "Failed password" /var/log/secure | awk {'print $9'} | sort | uniq -c | sort -nr #查看爆破用户名字典
日志分析
/var/log/message 包括整体系统信息
/var/log/auth.log 包含系统授权信息,包括用户登录和使用的权限机制等
/var/log/userlog 记录所有等级用户信息的日志
/var/log/cron 记录crontab命令是否被正确的执行
/var/log/xferlog(vsftpd.log) 记录Linux FTP日志
/var/log/lastlog 记录登录的用户,可以使用命令lastlog查看
/var/log/secure 记录大多数应用输入的账号与密码,登录成功与否
/var/log/wtmp 记录登录系统成功的账户信息,等同于命令last
/var/log/faillog 记录登录系统不成功的账号信息,一般会被黑客删除
linux平台下的恶意软件威胁以僵尸网络蠕虫和挖矿病毒为主,大多作为服务器暴露在公网,web应用漏洞多。通常包括redis未授权漏洞入侵、ssh弱口令暴力破解、web程序漏洞入侵等。我们要养成不使用弱密码,勤打补丁的好习惯。