挖矿入侵Linux系统排查步骤

挖矿入侵Linux系统排查步骤

2023年7月8日发(作者:)

挖矿⼊侵Linux系统排查步骤⼀、注意事项

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 >

如果⼀切均校验正常将不会产⽣任何输出,如果有不⼀致的地⽅,就会显⽰出来,输出格式是8位长字符串,每个字符都⽤以表⽰⽂件与RPM数据库中⼀种属性的⽐较结果 ,如果是. (点) 则表⽰测试通过,如下图所⽰:4.解决⽅法:拷贝本地的正确命令⽂件到受攻击的主机,先将被替换的⽂件拷贝到tmp⽬录,mv /bin/ls /tmp ,再将本地⽂件拷贝到受害主机即可(切记不要删除原有⽂件,先备份,与客户沟通后,由客户决定是否删除,切勿⾃⾏决断)通过rpm进⾏修复 ⽂件提取还原过程: rpm -qf /bin/ls #查询ls命令属于哪个软件包, 然后到Packet找到对应的rpm包,使⽤命令 rpm -ivh 进⾏安装, 也可以使⽤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 start stop 为保存的⽂件,可指定路径;start为内存起始地址,stop为结束地址(第i步中记录的heap地址)

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

获取dump出的⽂件的内容strings命令:strings -n 10 (-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//*/etc//*/etc/y/*/etc///etc/anacrontab/var/spool/anacron/*⼋、开机启动项排查

linux启动顺序中决定程序启动项的在init这⾥,分为两⼤步骤:按级别加载/etc/rc(0-6).d⽬录下的启动脚本;加载/etc/⽂件;因此需要排查启动项⽂件排查是否存在恶意脚本。1.开机启动配置⽂件/etc/,需要查看/etc/是否存在恶意执⾏启动项需要查看/etc/rc[0-6].d下是否存在恶意⽂件脚本,主要关注rc3、rc4和rc52.启动项级别解释主要关注3~5,命令如下:chkconfig –list九、⽇志审计1. ⽇志默认存放位置:/var/log/2. 查看⽇志配置情况:more /etc/3. 系统⽇志⽂件说明⽇志⽂件说明/var/log/cron⽇志⽂件/var/log/cups/var/log/dmesg/var/log/mailog/var/log/message记录了系统定时任务相关的⽇志说明记录打印信息的⽇志记录了系统在开机时内核⾃检的信息,也可以使⽤dmesg命令直接查看内核⾃检信息记录邮件信息记录系统重要信息的⽇志。这个⽇志⽂件中会记录Linux系统的绝⼤多数重要信息,如果系统出现 问题时,⾸先要检查的就应该是这个⽇志⽂件记录错误登录⽇志,这个⽂件是⼆进制⽂件,不能直接vi查看,⽽要使⽤lastb命令查看记录系统中所有⽤户最后⼀次登录时间的⽇志,这个⽂件是⼆进制⽂件,不能直接vi,⽽要使⽤ lastlog命令查看永久记录所有⽤户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个⽂件也是 ⼀个⼆进制⽂件,不能直接vi,⽽需要使⽤last命令来查看记录当前已经登录的⽤户信息,这个⽂件会随着⽤户的登录和注销不断变化,只记录当前登录⽤户 的信息。同样这个⽂件不能直接vi,⽽要使⽤w,who,users等命令来查询录验证和授权⽅⾯的信息,只要涉及账号和密码的程序都会记录,⽐如SSH登录,su切换⽤户, sudo授权,甚⾄添加⽤户和修改⽤户密码都会记录在这个⽇志⽂件中/var/log/btmp/var/log/lastlog/var/log/wtmp/var/log/utmp/var/log/secure4. 应⽤⽇志⽂件说明HTTP /var/log/httpd/ #或者是HTTP服务器配置⽂件中的⽇志路径FTP /var/log/ #或者是同路径下的xferlogSquid /var/log/squid #或者是 /var/log/nfsIPTABLES /var/log/iptables/……Samba /var/log/sambaDNS /var/log/messageDHCP /var/log/message #或者/var/lib/dhcp/db/Mail /var/log/maillog5. 特殊⽇志打开⽅式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 | more2. 定位有哪些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 -c3. 定位爆破⽤户名字典:grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print "$1n";}'|uniq -c|sort -nr4. 定位登录成功的IP:grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more5. 定位登录成功的⽇期、⽤户名、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 | .chrc|${"_P|evalC$_R | file_put_contentsC.*$_ | 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/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 #按照⽂件类型查找

发布者:admin,转转请注明出处:http://www.yc00.com/news/1688821638a173257.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信