记一次应急响应之ssh日志和apache2日志分析
Posted 星球守护者
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记一次应急响应之ssh日志和apache2日志分析相关的知识,希望对你有一定的参考价值。
文章目录
学习笔记连接
https://download.csdn.net/download/qq_41901122/85458006
点击链接下载:
记一次应急响应之ssh日志和apache2日志分析
第一部分 查看系统情况
0x01 查看端口
netstat -anptl
netstat -anptl
------------------------------------
Proto 协议类型
RecV-Q:表示收到的数据已经在本地接收缓冲,但是还有多少没有被进程取走,如果接收队列RecV-Q一直处于阻塞状态,可能是遭受了拒绝服务denial-of-service攻击。
Send-Q:对方没有收到的数据或者说没有Ack的,还是本地缓冲区。如果发送队列Send-Q不能很快的清零,可能是有应用向外发送数据包过快,或者是对方接收数据包不够快。
Local Address:
本机地址,一般有以下几种模式
--------------------------
*:80 监听IPV4或IPv6的任意IP的80端口
:::80 监听IPV6和IPV4的任意IP的80端口
0.0.0.0:80 监听任意IPV4地址的80端口
127.0.0.1:80 监听本地的80端口,只能本地访问
::1:80 监听本次IPV6的回环地址,只能本地访问
192.168.0.113:22 监听IP地址192.168.0.113的22端口
--------------------------
Foreign Address:外部地址,规则和Local Address规则一样
State网络状态
--------------------------
LISTEN侦听状态,等待对端连接
SYN SENT客户端发送建立连接的SYN请求后状态为SYN SENT
SYN RECV服务端发送SYN+ACK后网络状态为SYN RECV
ESTABLISHED已经建立起连接
--------------------------
PID/Program name进程ID和进程名字了
------------------------------------
ssh遭到连接,存在大量的ESTABLISHED转态的连接
0x02 账号安全
who
w
uptime
发现可疑的ip远程登陆主机,下一步的思路是排查ssh的登陆情况
0x03 查看ssh日志信息
进入日志文件下
第一步 查看登陆成功的日志
正常情况下,auth.log中存放的二进制文件,grep的时候加上参数
-a, --text 作用: equivalent to --binary-files=text
cat /var/log/auth.log | grep -a "Accepted"
第二步 查看正常退出的日志
cat auth.log | grep -a "pam_unix(sshd:session): session closed"
正常的输入ssh连接成功
切换用户(从Alice切到root用户)
正常退出ssh连接
第三步 连接到服务器,提示输入密码时取消
May 23 03:59:48 gfriEND sshd[3910]: Address 192.168.0.108 maps to bogon, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!
May 23 03:59:53 gfriEND sshd[3910]: Connection closed by 192.168.0.108 [preauth]
第四步 正常的手密码输入错误日志
May 23 04:12:16 gfriEND sshd[4157]: Accepted password for alice from 192.168.0.108 port 41038 ssh2
May 23 04:12:21 gfriEND sshd[4157]: pam_unix(sshd:session): session opened for user alice by (uid=0)
May 23 04:12:31 gfriEND sshd[4157]: pam_unix(sshd:session): session closed for user alice
May 23 04:15:04 gfriEND sshd[4172]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=bogon user=alice
May 23 04:15:11 gfriEND sshd[4172]: Failed password for alice from 192.168.0.108 port 41042 ssh2
May 23 04:15:49 gfriEND sshd[4172]: message repeated 2 times: [ Failed password for alice from 192.168.0.108 port 41042 ssh2]
May 23 04:15:49 gfriEND sshd[4172]: Connection closed by 192.168.0.108 [preauth]
May 23 04:15:49 gfriEND sshd[4172]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=bogon user=alice
第五步 连续多次输入错误密码(暴力破解)
May 23 04:06:33 gfriEND sshd[4129]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.0.108
May 23 04:06:34 gfriEND sshd[4101]: Failed password for alice from 192.168.0.108 port 40972 ssh2
May 23 04:06:34 gfriEND sshd[4101]: Received disconnect from 192.168.0.108: 11: Bye Bye [preauth]
May 23 04:06:34 gfriEND sshd[4133]: Address 192.168.0.108 maps to bogon, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!
May 23 04:06:34 gfriEND sshd[4133]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.0.108 user=aingmaung
对用户名固定,密码进行尝试的:
对用户名和密码都进行尝试的:
第六步 查看登陆失败的日志
cat auth.log | grep -a "Failed password for"
日志较多,需要梳理时间线
第七步 统计登陆失败的用户名以及次数
grep -a "Failed password for" auth.log |perl -e 'while($_=<>) /for(.*?)from/; print "$1\\n";'|sort|uniq -c|sort -nr
最后一行会显示无效的用户,主要是暴力破解,进行用户枚举的记录
查看不存在的用户名以及错误登陆的次数
cat auth.log | grep -a "Failed password for"|grep "invalid" | cut -d " " -f 11 | sort | uniq -c |sort -nr
查看某个用户的登陆尝试ip以及次数
cat auth.log | grep -a "Failed password for"|grep "alice" | grep -Po '(1\\d2|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9])(\\.(1\\d2|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d))3' | sort |uniq -c | sort -nr
查询全部的不存在用户的登陆IP以及次数
cat auth.log | grep -a "Failed password for"|grep "invalid" | cut -d " " -f 11 | sort -nr | uniq | while read line;do echo [$line]; cat auth.log | grep -a "Failed password for" | grep $line | grep -Po '(1\\d2|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9])(\\.(1\\d2|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d))3 '|sort|uniq -c |sort -nr;done
排除一个或多个用户,这里排除test和alict
cat auth.log | grep -a "Failed password for"|grep "invalid" | grep -v "test\\|alict" | cut -d " " -f 11 | sort -nr | uniq | while read line;do echo [$line]; cat auth.log | grep -a "Failed password for" | grep $line | grep -Po '(1\\d2|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9])(\\.(1\\d2|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d))3 '|sort|uniq -c |sort -nr;done
第八步 根据时间节点,梳理ssh日志
通过上面的分析,确认大致的时间段
时间节点: 22:28-22:35 开始进行root尝试
时间节点: 22:35-23:22开始进行用户名和密码进行尝试
时间节点: 23:47 获得用户名进行尝*
时间节点 00:55-01:26成功登陆用户,切换成root用户,并且更改root的密码
0x04 ssh的加固意见
- 升级SSH版本至少为7.7版本以上,7.7及以下版本存在SSH用户名枚举
- 加强口令复杂程度
- 禁止root用户登录,可以通过其他用户su到root
0x05 其他的检查未发现异常
略
第二部分 查看apache日志信息
第一步 进入apache2的日志下
cd /var/log/apache2/
access.log :记录了所有对Web服务器的访问活动,查找攻击事件时重点看这个
error.log :错误日志记录了服务器运行期间遇到的各种错误,以及一些普通的诊断信息,比如服务器何时启动、何时关闭等。
cat access.log
第二步 统计请求成功的记录
awk '($9==200)print $0' access.log
awk '($9!=200 && $9!=302)print $0' access.log
第三步 统计出来访问成功系统的URL路径的次数排序,
交给开发排查,验证是否存在漏洞点,是否存在漏洞
awk -F\\" 'print $2' access.log | sort | uniq -c | sort -nr | head -15
第四步 统计访问服务器的IP地址,
依次排查,这些IP中哪些可疑
awk 'print $1' access.log | sort | uniq | wc -l 统计访问的不同IP个数
awk '($4>="[20/May/2022:13:10:20]" && $4<="[24/May/2022:23:43:18]")print $0' access.log | grep web | awk 'print $1' | sort | uniq -c | sort -nr | head -20
第五步 根据时间节点,梳理日志
时间节点
:5月27日的20:46:-20:27:23一直在目录遍历
时间节点:
20:47-20:33,返回200,并且成功访问系统
时间节点:
21:19-22:13 发现进入系统,并且对user_id进行遍历,并且有返回的数据包字节数,怀疑进行系统,并且存在越权遍历用户
时间节点:
22:23- 22:35,请求页面是login
和logout
,并且每次间隔的ID不同,怀疑是上一步获取的账号密码,进行登陆尝试
之后就没有日志信息了
摘抄
用体力赚钱,就老实点;
用脑力赚钱,就机灵点;
用钱赚钱,就狠心一点
用资源赚钱,就圆滑一点.
免责声明
本文档供学习,请使用者注意使用环境并遵守国家相关法律法规!由于使用不当造成的后果上传者概不负责
以上是关于记一次应急响应之ssh日志和apache2日志分析的主要内容,如果未能解决你的问题,请参考以下文章