应急响应思路流程
一、基本思路流程
- 收集信息:收集客户信息和中毒主机信息,包括样本
- 判断类型:判断是否是安全事件,何种安全事件,勒索、挖矿、断网、DoS 等等
- 抑制范围:隔离使受害⾯不继续扩⼤
- 深入分析:日志分析、进程分析、启动项分析、样本分析方便后期溯源
- 清理处置:杀掉进程,删除文件,打补丁,删除异常系统服务,清除后门账号防止事件扩大,处理完毕后恢复生产
- 产出报告:整理并输出完整的安全事件报告
二、Linux入侵排查思路(我自己的顺序)
1.排查正在登陆系统账号安全。
who 查看当前登录用户(tty本地登陆 pts远程登录)
w 查看系统信息,想知道某一时刻用户的行为
uptime 查看登陆多久、多少用户,负载
last 显示用户最近登录信息
lastlog 查看到每个系统用户最近一次登陆系统的时间
lastb 用于列出登入系统失败的用户相关信息 这里也可以用于分析是否有暴力破解
异常解决方案:
pkill -kill -t pts/1 #强制用户下线
usermod -L test ## 锁定帐号test
usermod -U test ## 解锁帐号test
2.利用 /etc/passwd 和 /etc/shadow文件排查非法账户。
/etc/passwd:储存了所有的用户信息,可以在这里排查是否有非法的用户被创建。
root:x:0:0:root:/root:/bin/bash. 这里要注意这个0,代表了“root”。
排查的时候利用如下命令排查是否有非法root用户:
awk -F':' '$3==0{print $1}' /etc/passwd
/etc/shadow:存储了所有用户的信息和密码。可以利用如下命令来查看可以远程登录系统的账户信息:
awk '/\$1|\$6/{print $1}' /etc/shadow
3.排查用户登陆情况。
grep "Accepted " /var/log/secure* | awk '{print $1,$2,$3,$9,$11}'
4.排查历史命令。
首先可以执行 : find / -name .base_hittory
1. 查看.bash_history文件
2. 打开 /home 各帐号目录下的 .bash_history,查看普通帐号的历史命令
3. history命令
5.排查计划任务。
这里是系统级别的计划任务日志
find /etc/cron* -type f
/etc/cron.d/sysstat
/etc/cron.d/0hourly
/etc/cron.daily/man-db.cron
/etc/cron.daily/logrotate
/etc/cron.deny
/etc/cron.hourly/0anacron
/etc/crontab
第一个目录:/var/log/cron这个目录用来记录任务计划的运行日志
cat cron|awk -F':' '{print $4}'|grep "CMD"|sort |uniq -c|sort -nr
第二个目录:/var/spool/cron/这个目录记录了用户级别的计划任务(一般看这个)
6.查看是否有非法文件被上传或正常文件被非法修改
(1)
find / -name *.php -mtime -30
查看30天内修改的文件
atime 访问时间(不可信)
mtime 修改时间(不可信)
ctime 变化时间(可信)
注:stat命令用于查看文件的时间信息
(2)校验文件的md5值
首先第一步提前校验文件的md5值并保存起来
find /etc/cron* -type f -exec md5sum {} \; >hithut.v1
然后试着随便修改一个文件的内容
......
再次校验md5值并保存起来
find /etc/cron* -type f -exec md5sum {} \; >hithut.v2
最后比较两个md5值是否相同
diff hithut.v1 hithut.v2
7.排查是否有系统命令替换(别名)
怎么替换的这里不讲解了,这里说一下如何检验是否替换了。
rpm -Vf /usr/bin/*
rpm -Vf /usr/sbin/*
具体的含义如下
rpm -V 弹出的每列消息含意如下:
S file Size 大小不一致
MMode 模式不一致 (包括许可和文件类型)
5 MD5 sum 校验和不一致
DDevice 主从设备号不匹配
L readLink(2) 路径不匹配
UUser 属主不一致
GGroup 所属组不一致
T mTime 修改时间不一致
异常解决方案:
通过下载busybox来执行被修改的命令
8.查看网络连接情况
(1)方法一
netstat -antup
or
ss -antup
-a 或--all:显示所有连线中的 Socket;
-n 或--numeric:直接使用 ip 地址,而不通过域名服务器;
-p 或--programs:显示正在使用 Socket 的程序识别码和程序名称;
-t 或--tcp:显示 TCP 传输协议的连线状况;
-u 或--udp:显示 UDP 传输协议的连线状况;
第一列:协议类型
第二列:接收消息队列
第三列:发送消息队列
第四列:本地 ip 和端口
第五列:远程 ip 和端口
第六列:网络连接状态(LISTEN不重要,重要的是排查ESTABLISHED)
第七列:进程 pid 和进程名称
可以通过第六列筛选已经建立链接的进程。TCP 连接状态详解:
1、LISTEN #本地服务侦听状态
2、ESTABLISHED #已经建立链接双方正在通讯状态。
3、CLOSE_WAIT #对方主动关闭连接或者网络异常导致连接中断,这时我方的状态会变成
CLOSE_WAIT 此时我方要调用 close()来使得连接正确关闭。
4、TIME_WAIT #我方主动调用 close()断开连接,收到对方确认后状态变为
TIME_WAIT。 5、SYN_SENT #半连接状态,原理同 SYN Flood 攻击,攻击者发送 SYN 后服务器端口
进入 SYN_SENT 状态等待用户返回 SYN+ACK。
(2)方法二
lsof -i
紧接着可以通过-p指定PID查看更细节的部分。
lsof -p pid
异常解决方案:
iptables -A OUTPUT -d IP -j DROP #封禁IP
iptables -F OUTPUT #恢复
9.进程排查
ps axjf #可用于查看进程树
pstree -p #这个我比较喜欢用。没有的话需要自己安装
异常解决方案:
排查出来以后kill -9 PID 就好了。(防止再生哦,可以用pgrep来看看杀干净了没) #当然一般情况下先STOP,处理完其他的再-9
10.开机启动项排查
(1)/etc/init.d目录下
(2)/etc/rc*目录
(3)/usr/lib/systemd/system目录下
异常解决方案:
删除对应的文件
补充:
(1)在遇到删除文件无法删除的情况下,需要排查一下该文件或目录的文件属性chattr
可以通过
chattr +i hihub
来给hihub文件添加一个i属性。属性说明如下:
a:让文件或目录仅供附加用途。
b:不更新文件或目录的最后存取时间。
c:将文件或目录压缩后存放。
d:将文件或目录排除在倾倒操作之外。
i:不得任意更动文件或目录。
s:保密性删除文件或目录。
S:即时更新文件或目录。
u:预防意外删除。
可以通过
lsattr hithub
来查看文件属性,当需要查看目录的属性时,要加一个-a参数。
遇到i参数无法删除文件异常解决方案:
chattr -i hithub
(2)巧用 systemd-journald 服务分析系统日志
待补充。。。
三、Web应用
(1)首先找到日志文件的存储位置,因为不同中间件他的日志文件存放路径不同,例如IIS、apache、nginx、宝塔、javaweb等中间件的日志文件分类和位置都不同,可以通过查看配置文件来寻找日志文件的存放位置,当然也可以直接百度。
(2)当然了自己要有一个日志分析的工具,360星图是一个自动化的软件,不过我没用过因为我是M1电脑,这里我还是用我自己的VS CODE,找了两个插件,一是Filter Lines、二是Log File Highlighter,顾名思义。插件的用法自行百度,帮助我们来过滤一些数据并高亮显示。
(3)这里的分析日志我不是很熟练,目前只会根据给的发生异常的时间进行过滤,查找到异常的请求(ip),然后去过滤ip查看ta更多的操作。这里异常的请求分辨就要求对一些漏洞的掌握了。
四、数据库
这里还是采用分析日志的方法,当然了不同的数据库日志存放位置不同,而且有的日志默认为关闭状态。
这里以Mysql数据库为实验。
首先是查看日志存储文件和一些设置:
show VARIABLES LIKE "%general%"
我们设置为开
set GLOBAL general_log='On'
然后去查看分析日志文件即可。