记一次应急响应之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,请求页面是loginlogout,并且每次间隔的ID不同,怀疑是上一步获取的账号密码,进行登陆尝试

之后就没有日志信息了

摘抄


用体力赚钱,就老实点;
用脑力赚钱,就机灵点;
用钱赚钱,就狠心一点
用资源赚钱,就圆滑一点.


免责声明

本文档供学习,请使用者注意使用环境并遵守国家相关法律法规!由于使用不当造成的后果上传者概不负责

以上是关于记一次应急响应之ssh日志和apache2日志分析的主要内容,如果未能解决你的问题,请参考以下文章

应急响应

记一次应急响应

应急响应——Windows日志分析

应急响应——Windows日志分析

应急响应——Windows日志分析

应急响应——Linux日志分析