目录
前言
由于本人已及时的处理了恶意进程,故本文所有截图都只为了说明命令用法和应急思路。
在某里云上买了一台VPS做渗透,问基友要了一个cobaltsotrike4.1终极版,当时搞完渗透也没在管它,突然又要用一下80端口发现被占用了,(netstat -anpt)发现有几个恶意的"ESTABLISHED"占用着80端口,并且有大约10个的样纸。溯源IP都在国外,于是怀疑有后门,对这个CS也不熟,就只好对自己的服务器做一次应急。
1.发现进程
通尝发现主机被入侵后的操作都是检查是由那个应用导致的弱点被利用,确认恶意进程是否是后门或者病毒程序。确认该恶意进程在我们的主机上做什么?
netstat -anpt
1.1 系统资源信息
查询进程,CPU降序排序
常使用top命令
[jietewang@liliz NetworkSecurityTools]$ top
top - 10:12:24 up 26 days, 20:55, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 89 total, 2 running, 87 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 1829.5 total, 542.6 free, 261.2 used, 1025.7 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 1385.2 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
29068 root 10 -10 211000 79732 15760 S 0.3 4.3 98:37.11 AliYunDun
1 root 20 0 176284 10664 8148 S 0.0 0.6 0:19.34 systemd
上面的信息识别度还是很高的,可能在详细的进程信息的上会有一点迷糊。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
29068 root 10 -10 211000 79732 15760 S 0.3 4.3 98:37.11 AliYunDun
从左至右PID:进程ID
USER:进程所有者的用户名。
PR:进程的调度优先级。
NI:进程的nice值(优先级)。越小的值意味着越高的优先级。负值表示高优先级,正值表示低优先级
VIRT:进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES:驻留内存大小。驻留内存是任务使用的非交换物理内存大小。进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR:SHR是进程使用的共享内存。共享内存大小,单位kb
S:这个是进程的状态。它有以下不同的值:
- D - 不可中断的睡眠态。
- R – 运行态
- S – 睡眠态
- T – 被跟踪或已停止
- Z – 僵尸态
%CPU:自从上一次更新时到现在任务所使用的CPU时间百分比。
%MEM:进程使用的可用物理内存百分比。
TIME+:任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。
COMMAND:运行进程所使用的命令。进程名称(命令名/命令行)
当然如果你是多核还可以使用命令mpstat -P ALL
通过上面的信息检查那些进程在占用主机的资源,如果百分比过高,那就要注意了,类似一般的VPS应该不会超过50%,除非你要搞事情,如果太吃资源并且COMMAND字段比较可疑的话那大概率是个什么病毒了。
1.2 确认可疑进程
查看进程使用的命令行
ps -aux
一般的病毒都携带恶意的命令行,并且有域名或者IP信息,很可能是个远控。
监控主机与目标IP的通信进程:
while true; do netstat -antp | grep [ip]; done
如果是域名的话,需要我们在/etc/host文件下添加一条规则,将恶意域名重定向到一个随机的IP地址,在对其进行监控。
1.3 检查历史命令
history
1.4 结束恶意进程
在前面的过程中已经发现了恶意的进程和pid,使用以下命令行清除相关进程
ps -elf | grep [pid]
kill -9 [pid]
定位相关的进程的对应文件
ls -al /proc/[pid]
rm -f [exe_path]
1.5 检查是否存在持久化利用手段
定时任务
crontab -l
查看anacron异步定时任务:
cat /etc/anacrontab
枚举主机服务
service --status-all
检查系统文件是否被劫持
find /usr/bin/ /usr/sbin/ /bin/ /usr/local/bin/ -type f -mtime +7 | xargs ls -la
检查守护进程
lsof -p [pid]
如果是搭建了网站,建议打包源码在windows系统下使用安全工具进行后门木马扫描。
2. 系统加固
检查ssh弱口令,是否存在弱口令用户。
查询log主机登陆日志:
grep "Accepted " /var/log/secure* | awk '{print $1,$2,$3,$9,$11}'
定位有爆破的源IP:
grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"|uniq -c
爆破日志的用户名密码:
grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr
llast #登录或重启日志
lastb #登录失败日志 或者是
/var/log/faillog who /var/log/wtmp #登录日志 另外可以 last -f /var/run/utmp
cat /var/log/lastlog #最后的登录日志
cat /var/log/secure #安全日志
cat /var/log/cron #计划任务日志
cat ~/.bash_history | more #历史操作
grep "Failed password for root" /var/log/auth.log | awk '{print $11}' | sort | uniq -nr | more #查看root账户登录爆破尝试
grep "Accepted" /var/log/auth.log | awk '{print $11}' | sort |uniq -c | sort -nr | more #查看登录成功日志信息
strings /usr/bin/.sshd | egrep '[1-9]{1,3}.[1-9]{1,3}.' #查看sshd的信息