服务器入侵排查流程
时间:2022-07-25
本文章向大家介绍服务器入侵排查流程,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
常见入侵
挖矿
# 表象:CPU增高、可疑定时任务、外联矿池IP。
# 告警:威胁情报(主要)、Hids、蜜罐(挖矿扩散时触发)
# 动作:通过CPU确认异常情况→ 确认可疑进程 → 检查定时任务、
# 主机服务、守护进程→结束病毒进程,删除病毒文件->加固。
Webshell
# 表象:业务侧应用逻辑漏洞(允许上传脚本等造成命令执行)或者开源软件低版本造成(fastjson等)导致,
# 通常为反弹shell、高危命令执行,同时存在内网入侵、恶意程序传播、数据盗取等行为。
# 告警:Hids(主要)、流量监控设备
# 动作:确认Webshell文件内容与可用性→ 酌情断网,摘掉公网出口IP→ 通过日志等确认Webshell文件访问记录→ 确定Webshell入侵来源,
# 是业务逻辑漏洞导致、开源组件漏洞还是弱口令与未授权等情况导致 →排查应用其他机器情况,
# 全盘扫描Webshell文件→ 缩容机器,修复相关问题重新恢复应用开放。
内网入侵
# 表象:以入侵的跳板机为源头进行端口扫描、SSH爆破、内网渗透操作、域控攻击等。
# 告警:Hids(主要)、蜜罐、域控监控(ATA等)
# 动作:确定入侵边界再进行处理,通常蜜罐等存在批量扫描爆破记录,需登录前序遭入侵机器确认情况,
# 方便后续批量处理,这个情况较为复杂后期单独写一篇文章。
进程相关
1.查询可疑端口、进程、ip:netstat -antlp | more 或者 netstat -anltp | grep pid,若存在可疑进程可通过 ls -l /proc/PID 查看PID对应的进程文件路径。
2.针对挖矿等大量消耗系统资源的恶意程序可以通过 top(执行top命令后通过大写字母P按CPU排序,通过大写字母M按内存排序)、ps -elf 可疑$PID 、ps -aux命令检查排名靠前的或者不断变化的程序。同时使用 kill - 9 进程名 结束进程。
3.查询通过TCP、UDP连接服务器的IP地址列表:netstat -ntu ,查询可疑连接:netstat -antlp 4.查询守护进程:lsof -p $pid 5.查询进程命令行:ps -aux ,#注意查看命令行,如:带有URL等可疑字符串、wget等命令字符串可能为病毒下载地址 6.跟踪可疑进程运行情况:strace -tt -T -e trace=all -p $pid
系统相关
检查账户安全
# ① 检查近期登陆的账户记录:使用 last 命令,禁用可疑用户:usermod -L 用户名,删除用户:userdel -r 用户名
# ② 查询特权用户:awk -F ":" '$3==0{print $1}' /etc/passwd
# ③ 查询可远程登录用户:awk '/$1|$6/{print $1}' /etc/shadow
# ④ 查询sudo权限账户:cat /etc/sudoers | grep -v "^#|^$" | grep "ALL=(ALL)"
# ⑤ 与业务确认管理员帐户、数据库帐户、MySQL 帐户、tomcat 帐户、网站后台管理员帐户等密码设置是否存在弱口令情况。
检查启动项与定时任务
# 1 cron目录(/var/spool/cron,查询目录下所有文件通过ls -al)下检查非法定时任务脚本:
# 查看/etc/crontab,/etc/cron.d,/etc/cron.daily,cron.hourly/,cron.monthly,cron.weekly/是否存在可疑脚本或程序,进行注释或者删除。
# 2 编辑定时任务:crontab -e,查看定时任务:crontab -l,查看anacron异步定时任务:cat /etc/anacrontab,删除定时任务:crontab -r
# 3.查询主机历史命令: history
# 4.查询主机所有服务:service --status-all
# 5.开机启动项:ls -alt /etc/init.d/ cat /etc/rc.local
文件相关
关于敏感目录
# ① 查看tmp目录相关文件:ls -alt /tmp/
# ② 指定目录下文件按时间排序:ls -alt |head -n 10
# ③ 查看可疑文件详细修改时间: stat 目录或者文件
关于文件篡改
# ① 查找24小时内被修改的特定文件:find ./ -mtime 0 -name "*.jsp"
# ② 查找72小时内新增的文件:find / -ctime -2
# ③ 查询一定时间内敏感目录下被修改的系统文件:
find /etc/ /usr/bin/ /usr/sbin/ /bin/ /usr/local/bin/ /var/spool/cron/ -type f -mtime -3 | xargs ls -l
删除恶意文件
# ① ls -al /proc/[pid]/,ls -al /proc/[pid]/exe
# ② rm -f [exe_path]
# 查询文件md5: md5sum 文件名
# 查询SSH登录日志: vim /var/log/secure
# 所有ssh登录打包日志均在该文件夹,可直接vim,快速判断爆破痕迹(Accepted password:密码正确、Failed password:密码错误)
其他
取证备份
# 系统服务备份 chkconfig --list > services.log
# 进程备份 ps -ef > ps.log
# 监听端口备份 netstat -utnpl > port-listen.log
# 系统所有端口情况 netstat -ano > port-all.log
查看账号是否有异常登录情况
# a.查看当前登录用户和其行为:w
# b.查看所有用户最后一次登录的时间:lastlog
# c.查看所有用户的登录注销信息及系统的启动、重启及关机事件:last
# d.查看登录成功的日期、用户名及ip:grep "Accepted " /var/log/secure* | awk '{print $1,$2,$3,$9,$11}'
# e.查看试图爆破主机的ip:grep refused /var/log/secure* | awk {'print $9'} | sort | uniq -c |sort -nr | more 、 grep "Failed password" /var/log/secure* | grep -E -o "(([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}))" | uniq -c
# f.查看有哪些ip在爆破主机的root账号:grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort
# g.查看爆破用户名字典:grep "Failed password" /var/log/secure | awk {'print $9'} | sort | uniq -c | sort -nr
cron文件检查恶意脚本位置
/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/*
检查近期被替换命令
ls -alt /usr/bin /usr/sbin /bin /usr/local/bin
- 云数据服务蜂拥而至...好难选呀
- ASP.NET MVC的Razor引擎:View编译原理
- ASP.NET Core中的依赖注入(4): 构造函数的选择与服务生命周期管理
- 通过Knockout.js + ASP.NET Web API构建一个简单的CRUD应用
- 自动驾驶车辆在2017年的七大光辉历史时刻
- 简单的实现Javascript的MVC
- 谷歌再出黑科技!人工智能模拟的人声和真人几乎难以分辨
- 【Scikit-Learn 中文文档】高斯混合模型 - 无监督学习 - 用户指南 | ApacheCN
- “E+单拼”组合域名eqi.com小六位结拍
- ASP.NET Core中的依赖注入(3): 服务的注册与提供
- 【Scikit-Learn 中文文档】使用 scikit-learn 介绍机器学习 | ApacheCN
- 哈萨比斯:2018年AI最大突破在生物或化学领域
- ASP.NET Core中的依赖注入(5): ServiceProvider实现揭秘 【总体设计 】
- ASP.NET MVC的View是如何被呈现出来的?[设计篇]
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 什么时候触发GC
- 找找数学上的规律——LeetCode题目11:盛最多水的容器
- Java学习笔记, 不断更新
- 这题真是送分——LeetCode题目12:整数转罗马数字
- 该了解一波了!零基础入门Nginx
- 轻松一刻——LeetCode题目13:罗马数字转整数
- 动动手——LeetCode题目14:最长公共前缀
- LeetCode题目15:三数之和
- 三数之和姊妹题——LeetCode题目16:最接近的三数之和
- 组合问题——LeetCode题目17:电话号码的字母组合
- Python读取PDF文档并翻译
- n数之和题目要类比——LeetCode题目18:四数之和
- SpringBoot使用MySQL访问数据
- MySQL数据库与JDBC编程
- 自动删除QQ空间指定好友的留言