挖矿入侵Linux系统排查步骤

7 篇文章 0 订阅

一、注意事项

 

1. 在做入侵排查前使用命令HISTFILE=/dev/null,将本次shell下执行的命令不写入.bash_history中避免干扰之前的历史命令,该命令仅针对当次shell有效,重开shell后需要重新执行该命令。

2. 在确定找到恶意文件或被入侵的原因之前,切勿杀死恶意进程或重启系统,否则会破坏现场。

3. 可能存在ps、netstat、ls等命令异常,可能是已被攻击者或病毒木马等替换,此时需要及时删除这些命令文件,使用正确的文件,以便于再次启动恶意文件。
检查方法:

  • 可通过ls -lh /bin/ps 来查看, 这类命令文件大小通常在100k左右(不同的OS版本不一样,大小有所不同),若文件过大,便可能是已被攻击者或病毒木马等替换。

     

  • 通过rpm自带的-Va来校验检查所有的rpm软件包,检查命令是否被替换,命令:rpm -Va > rpm.log

      

  • 如果一切均校验正常将不会产生任何输出,如果有不一致的地方,就会显示出来,输出格式是8位长字符串,每个字符都用以表示文件与RPM数据库中一种属性的比较结果 ,如果是. (点) 则表示测试通过,如下图所示:4.解决方法:
  • 拷贝本地的正确命令文件到受攻击的主机,先将被替换的文件拷贝到tmp目录,mv  /bin/ls /tmp ,再将本地文件拷贝到受害主机即可(切记不要删除原有文件,先备份,与客户沟通后,由客户决定是否删除,切勿自行决断)
  • 通过rpm进行修复

    文件提取还原过程:

    rpm  -qf /bin/ls  #查询ls命令属于哪个软件包,  然后到Packet找到对应的rpm包,使用命令 rpm -ivh xxx.rpm进行安装, 也可以使用yum install xxx进行安装(需要联网)

   


二、用户登录记录排查

1. w命令:用于显示当前在线的用户信息,了解系统的使用情况

2. last命令:用于显示用户最近登录信息,可能会留下入侵者的痕迹

3. uptime命令:查看当前时间、系统运行时间、当前登录的用户有多少,以及前 1、5 和 15 分钟系统的平均负载,便于了解系统的运行状况和负载情况(判断是否挖矿等提供一定凭据,存在挖矿cpu占用率非常高)


三、进程情况排查

1. top命令:查看资源消耗情况,id表示系统cpu剩余,若该值很小,说明系统可能被用于挖矿等严重占用资源,此时可记录下该进程的PID

    

2. ps -aux --sort=-pcpu/ps -elf命令:可能top命令找到的仅是一个执行进程,可使用ps -aux--sort=-pcpu或ps -elf查询所有进程,从而找到所有相关进程(父进程、子进程等),也可以检查是否存在其它异常进程(资源异常占用进程、命名异常进程、恶意外连等)。--sort=-pcpu会根据cpu占用情况从高到低排序,有利于定位到资源占用高的进程。

  1. 恶意外连进程
  2. 资源异常占用进程
  3. 命名异常进程

3. losf -p $pid 命令:根据进程号查询文件占用情况,可根据此命令找到恶意文件的位置

       

4. 在进程查询的过程中可能会出现两种情况,1:可以根据进程找到启动文件;2:文件启动后注入到其它进程中,此时根据进程无法找到启动文件

  1. 可以根据进程找到启动文件
    命令:ls -l /proc/pid/exe可直接查看

     
  2. 由init进程启动,无法找到启动文件, 最后的子进程由PID:1初始化进程拉起,无法找到启动文件,
  • 获取内存地址命令:cat /proc/pid/maps,记录下heap的内存地址
  • 进入gdb调试命令:gdb attach pid
  • dump内存文件命令:dump memory memory.dump start stop   memory.dump为保存的文件,可指定路径;start为内存起始地址,stop为结束地址(第i步中记录的heap地址) 

             

      detach  #调试结束,解除进程与gdb的连接,使进程继续运行

  • 获取dump出的文件的内容strings命令:strings -n 10 memory.dump (-n 表示过滤字符长度)至此获得启动的原始文件

四、网络连接排查

1. 使用netstat -antlp|more;或者netstat -ano|more发现异常外连后,运行ls -l /proc/$PID/exe或file /proc/$PID/exe($PID 为对应的pid 号)可找到启动文件

2. 异常外连情况:半连接、异常字符进程(注意syn半连接和不规则命名)SYN半连接:不规则命令连接:

3. 查看端口占用情况命令:lsof -i:port,根据端口查看外连情况


五、历史命令排查

1. 通过.bash_history查看帐号执行过的系统命令,注意不同用户下的.bash_history文件记录相同,建议通过root账号登录,打开/home各帐号目录下的.bash_history,查看其余帐号的历史命令可通过history得到很多的证据, 请记得把所有账号 .bash_history文件都查看,不要遗漏

2. 命令history也可直接执行history进行查看,也需要更换所有用户进行查看历史命令


六、服务器账号排查

1. 查看用户信息文件/etc/passwd

字段按顺序解释:用户名:密码:用户ID:组ID:用户说明:home目录
注意:无密码/nologin只允许本机登陆,远程不允许登陆主要关注/bin/bash或/bin/sh的用户,注意是否存在异常账号(需要和客户沟通)

2. 查看影子文件/etc/shadow

字段按顺序解释:用户名:加密密码:密码最后一次修改日期:两次密码的修改时间间隔:密码有效期:密码修改到期到的警告天数:密码过期之后的宽限天数:账号失效时间:保留

3. 检查特权用户命令:awk -F: '$3==0{print $1}' /etc/passwd可以用此命令筛选出所有的特权用户

4. 检查以远程登录的账号命令:awk '/$1|$6/{print $1}' /etc/shadow可以快速筛选出远程账号

5. 排查ssh密钥文件,命令: ls -al ~/.ssh与客户确定是否存在异常的密钥文件


七、计划任务排查

1. crontab排查,crontab -l 列出某个用户cron服务的详细内容, 会泄露恶意文件的相关信息

注意:

  1. 默认编写的crontab文件会保存在 (/var/spool/cron/用户名 例如: /var/spool/cron/root)
  2. 每个账号下都有属于自己的计划任务,因此需要排查所有用户的计划任务,切勿遗漏

2. 排查文件列表

/var/spool/cron/*

/etc/crontab

/etc/cron.d/*

/etc/cron.daily/*

/etc/cron.hourly/*

/etc/cron.monthly/*

/etc/cron.weekly/

/etc/anacrontab

/var/spool/anacron/*


八、开机启动项排查   

linux启动顺序中决定程序启动项的在init这里,分为两大步骤:按级别加载/etc/rc(0-6).d目录下的启动脚本;加载/etc/rc.local文件;因此需要排查启动项文件排查是否存在恶意脚本。

1.开机启动配置文件/etc/rc.local,需要查看/etc/rc.local是否存在恶意执行启动项

需要查看/etc/rc[0-6].d下是否存在恶意文件脚本,主要关注rc3、rc4和rc5

2.启动项级别解释主要关注3~5,命令如下:chkconfig –list


九、日志审计

1. 日志默认存放位置:/var/log/

2. 查看日志配置情况:more /etc/rsyslog.conf

3. 系统日志文件说明

日志文件

说明

/var/log/cron

记录了系统定时任务相关的日志

/var/log/cups

记录打印信息的日志

/var/log/dmesg

记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息

/var/log/mailog

记录邮件信息

/var/log/message

记录系统重要信息的日志。这个日志文件中会记录Linux系统的绝大多数重要信息,如果系统出现 问题时,首先要检查的就应该是这个日志文件

/var/log/btmp

记录错误登录日志,这个文件是二进制文件,不能直接vi查看,而要使用lastb命令查看

/var/log/lastlog

记录系统中所有用户最后一次登录时间的日志,这个文件是二进制文件,不能直接vi,而要使用 lastlog命令查看

/var/log/wtmp

永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个文件也是 一个二进制文件,不能直接vi,而需要使用last命令来查看

/var/log/utmp

记录当前已经登录的用户信息,这个文件会随着用户的登录和注销不断变化,只记录当前登录用户 的信息。同样这个文件不能直接vi,而要使用w,who,users等命令来查询

/var/log/secure

录验证和授权方面的信息,只要涉及账号和密码的程序都会记录,比如SSH登录,su切换用户, sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中

4. 应用日志文件说明

HTTP          /var/log/httpd/access.log #或者是HTTP服务器配置文件中的日志路径

FTP           /var/log/vsftp.log #或者是同路径下的xferlog

Squid         /var/log/squid #或者是squid.access.log

NFS           /var/log/nfs

IPTABLES      /var/log/iptables/……

Samba         /var/log/samba

DNS           /var/log/message

DHCP          /var/log/message #或者/var/lib/dhcp/db/dhcpd.leases

Mail          /var/log/maillog

5. 特殊日志打开方式
utmpdump /var/log/wtmp  

utmpdump /var/run/utmp

 utmpdump /var/log/btmp
可配合more和grep命令共同使用    

6.日志排查方法

  1. 定位有多少IP在爆破主机的root帐号:
    grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
  2. 定位有哪些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
  3. 定位爆破用户名字典:
    grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr
  4. 定位登录成功的IP:
    grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
  5. 定位登录成功的日期、用户名、IP:
    grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}'
  6. webshell定位:
    find /var/www/ -name "*.php" | xargs egrep 'assert | phpspy | c99sh | milw0rm | eval | \( gunerpress | \(bas464_encode | spider _bc | shell_exec | passthru | \(\$\_\POST\[|eval\(str_rotl3 | .chr\c|\$\{\"\_P|eval\C\$\_R | file_put_contents\C\.\*\$\_ | base64_decode'
  7. 脚本文件定位打包:
    find /var/www/html/  |grep -E ".asp$|.aspx$|.jsp$|.jspx$|.jspf$|.php$|.php3$|.php4$|.php5$|.inc$|.phtml$|.jar$|.war$|.pl$|.py$|.cer$|.asa$|.cdx$|.ashx$|.ascx$|.cfm$|.cgi$ "|xargs tar zcvf /tmp/shellscript.tar.gz

7.文件属性排查

  1. stat:
    可以确定文件的访问、修改时间文件的时间戳,inode中一共有以下3个:a. access time, 最后一次访问的时间,只是访问,并没有修改。比如cat,head,tail之类的。b. modify time, 最后一次修改文件内容的时间。c. change time, 最后一次修改文件属性的时间,比如权限,大小之类的。
  2. ls -lh:
    可以确定文件的大小避免部分文件的大小与实际空间大小不符合
  3. 查看最近都有哪些文件发生了变动
    find / -mtime -2 -print0 | xargs -0 ls -lt例如:2天内产生更改的文件
  4. 孤儿文件查询:
    find / -nouser -print查看系统上的孤儿文件,这些文件可能是由攻击者创建的临时账户产生的
  5. 文件查找的相关命令:
    sudo find / -mtime(atime/ctime) -x   #按照创建、修改时间查找
    sudo find ./ -perm 4777  #按照权限查找文件
    find  ./ -mtime -1 -type f #按照文件类型查找

 

  • 9
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值