赞
踩
处置进程\文件
- netstat -anplt 查看网络连接状态
- -a或–all 显示所有连线中的Socket
- -n或–numeric 直接使用IP地址,而不通过域名服务器
- -p或–programs 显示正在使用Socket的程序识别码和程序名称
- -l或–listening 显示监控中的服务器的Socket
- -t或–tcp 显示TCP传输协议的连线状况
- -u或–udp 显示UDP传输协议的连线状况
-
- top 查看进程的资源占用率
- lsof -p PID 查看与某进程相关的文件
- cd /proc/PID 查看与某进程相关的文件
- stat 查看文件信息
- kill -9 PID PID 结束进程(一个或多个)
- kill -9 ~ & crontab -r 同时删除相互守护的进程和计划任务
- ./busybox cat /etc/ld.so.preload 利用busybox查看动态链接库
持久项排查
- crontab -l 列出计划任务,-r 删除,-e 编辑
- /etc/rc.d 文件夹,rc.local文件
- /var/spool/cron 文件夹及其中内容
- /etc/profile 及其内容指向的文件/文件夹(profile.d内脚本等)
- ~/.bashrc 及其内容指向(/etc/bashrc等)
溯源工作
- last 查看历史登录记录
- lastb 历史登录失败记录
- cat /var/log/secure 查看安全日志
- cat ~/.ssh/authorized_keys 查看免密认证证书
- docker ps 查看docker信息
- docker logs ID 查看docker日志
- journalctl -u docker.service 查看docker服务日志
- cat /PATH/logs/catalina.out 查看tomcat调试日志
- cat /PATH/logs/localhost.DATE.log 查看tomcat登录日志
查找webshell:linux查找webshell_weixin_33709609的博客-CSDN博客
- 查找24小时内被修改的JSP文件:find ./ -mtime 0 -name "*.jsp"
- 与测试环境目录做对比:diff -r {生产dir} {测试dir}
-
- find /www/ -name "*.php" |xargs egrep 'assert|phpspy|c99sh|milw0rm|eval|\\(gunerpress|\\(base64_decoolcode|spider_bc|shell_exec|passthru|\\(\\$\\_\\POST\\[|eval \\(str_rot13|\\.chr\\(|\\$\\{\\"\\_P|eval\\(\\$\\_R|file_put_contents\\(\\.\\*\\$\\_|base64_decode'
-
- 只查小马的可以
- 1.grep -r --include=*.php '[^a-z]eval($_POST' . > post.txt
- 2.grep -r --include=*.php '[^a-z]eval($_REQUEST' . > REQUEST.txt
Audit审计
- 创建Audit审计规则(Audit另学):vim /etc/audit/audit.rules
- -a exclude,always -F msgtype=CONFIG_CHANGE
- -a exit,always -F arch=b64 -F uid=48 -S execve -k webshell
Access Log
- 扫描特征:egrep '(select|script|acunetix|sqlmap)' /var/log/httpd/access_log
- 访问频次,重点关注POST请求:grep 'POST' /var/log/httpd/access_log | awk '{print $1}' | sort | uniq -c | sort -nr
- 过滤Content-Length大于5M的日志:awk '{if($10>5000000){print $0}}' /var/log/httpd/access_log
-
- # 如果发现文件,不要直接用vim查看编辑文件内容,以防更改文件的mtime
成功:
- grep 'Accepted' /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr
- 或last命令,它会读取/var/log/wtmp,并显示该文件记录的登录系统的用户名单
失败
- grep 'Failed' /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr
- 或lastb命令,它会读取/var/log/btmp,并显示该文件记录的登入系统失败的用户名单
- 1. 比对ssh的版本:ssh -V
- 2. 查看ssh配置文件和/usr/sbin/sshd的时间:stat /usr/sbin/sshd
- 3. 有些sshd后门会通过邮件发送登录信息,通过:strings /usr/sbin/sshd 查看是否有邮箱信息
- 4. 一般的sshd后门都会将账户密码记录到文件,可通过strace监控sshd进程读写文件的操作:
- ps axu | grep sshd | grep -v grep
- root 65530 0.0 0.1 48428 1260 ? Ss 13:43 0:00 /usr/sbin/sshd
- strace -o aa -ff -p 65530
- grep open aa* | grep -v -e No -e null -e denied| grep WR
- aa.102586:open("/tmp/ilog", O_WRONLY|O_CREAT|O_APPEND, 0666) = 4
**注:**如果攻击者获取到了Root权限,被植入内核或者系统层Rootkit的话,进程也会隐藏。
检查项
1)资源占用:Top然后找到CPU和MEM排序
2)启动时间:可疑与前面找到的Webshell时间点比对。
3)启动权限:这点很重要,发现木马进程以mysql权限执行,则排查mysql
4)父进程,如反弹shell父进程为apache,则可判断为web入侵
命令举例
- ps -ef | grep '/dev/tcp' | grep -v grep 查看反弹shell进程
- ps -ef | grep 1014 查看进程1014(若上条命令发现父进程为1014)
- lsof -p PID 查看相关文件和路径(如可能发现可执行文件)
- file .zl 获取文件类型
- strings .zl 读取二进制文件中可读字符
- 例:strings /usr/bin/.sshd | egrep '[1-9]{1,3}\\.[1-9]{1,3}\\.' ,命令替换应急可查询大量ip地址
- netstat -antlp (| grep ESTABLISHED) 获取(已建立)连接
- netstat -antlp | grep EST | grep bash 检查已建立反弹bash
- netstat -antlp | grep LISTEN | grep 1080 检查可以监听端口
- (例如攻击者在本地开启sock5代理,然后使用SSH反弹sock5)
/tmp, /var/tmp, /dev/shm,所有用户都可读,可写,可执行
ls -ald /PATH/ 查看目录内容
history 仅记录执行的命令
CentOS 5
1)/etc/inittab
2)/etc/rc.d/rc.sysinit
3)/etc/rc.d/init.d
4)/etc/rc.d/rc.local
CentOS 6
1)/etc/init/*.conf
2)/etc/rc.d/rc.sysinit
3)/etc/rc.d/init.d
4)/etc/rc.d/rc.local
1)/etc/crontab
2)/etc/cron.d
3)/var/spool/cron/{user}
4)/etc/anacrontab
5)/etc/cron.hourly,daily,weekly,monthly
- 1)检查命令替换:rpm -qaV(显示所有一以RPM安装的软件的完整性)
- 2)比对命令的大小(比对ps和netstat):ll /bin/ps & ll /bin/netstat
- 3)查看命令的修改时间,按修改时间排序:ls -alt /bin/ | head -n 5
- 4)利用busybox查看动态链接库:./busybox cat /etc/ld.so.preload
- 5)使用工具chkrootkit,rkhunter查看
本文由本人总结优化,参考原文:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。