Linux应急响应(一):SSH暴力破解

Stella981
• 阅读 801

0x00 前言

SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议,主要用于给远程登录会话数据进行加密,保证数据传输的安全。SSH口令长度太短或者复杂度不够,如仅包含数字,或仅包含字母等,容易被攻击者破解,一旦被攻击者获取,可用来直接登录系统,控制服务器所有权限。

0x01 应急场景

某天,网站管理员登录服务器进行巡检时,发现端口连接里存在两条可疑的连接记录,如下图:

Linux应急响应(一):SSH暴力破解

  1. TCP初始化连接三次握手吧:发SYN包,然后返回SYN/ACK包,再发ACK包,连接正式建立。但是这里有点出入,当请求者收到SYS/ACK包后,就开始建立连接了,而被请求者第三次握手结束后才建立连接。

  2. 客户端TCP状态迁移:

    CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED

    服务器TCP状态迁移:

    CLOSED->LISTEN->SYN recv->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED

  3. 当客户端开始连接时,服务器还处于LISTENING,客户端发一个SYN包后,服务端接收到了客户端的SYN并且发送了ACK时,服务器处于SYN_RECV状态,然后并没有再次收到客户端的ACK进入ESTABLISHED状态,一直停留在SYN_RECV状态。

    在这里,SSH(22)端口,两条外网IP的SYN_RECV状态连接,直觉告诉了管理员,这里一定有什么异常。

0x02 日志分析

SSH端口异常,我们首先有必要先来了解一下系统账号情况:

A、系统账号情况

1、除root之外,是否还有其它特权用户(uid 为0)[root@localhost ~]# awk -F: '$3==0{print $1}' /etc/passwdroot2、可以远程登录的帐号信息[root@localhost ~]# awk '/\$1|\$6/{print $1}' /etc/shadowroot:$6$38cKfZDjsTiUe58V$FP.UHWMObqeUQS1Z2KRj/4EEcOPi.6d1XmKHgK3j3GY9EGvwwBei7nUbbqJC./qK12HN8jFuXOfEYIKLID6hq0::0:99999:7:::

我们可以确认目前系统只有一个管理用户root。接下来,我们想到的是/var/log/secure,这个日志文件记录了验证和授权方面的信息,只要涉及账号和密码的程序都会记录下来。

B、确认攻击情况:

1、统计了下日志,发现大约有126254次登录失败的记录,确认服务器遭受暴力破解[root@localhost ~]# grep -o "Failed password" /var/log/secure|uniq -c     126254 Failed password     2、输出登录爆破的第一行和最后一行,确认爆破时间范围:[root@localhost ~]# grep "Failed password" /var/log/secure|head -1Jul  8 20:14:59 localhost sshd[14323]: Failed password for invalid user qwe from 111.13.xxx.xxx port 1503 ssh2[root@localhost ~]# grep "Failed password" /var/log/secure|tail -1Jul 10 12:37:21 localhost sshd[2654]: Failed password for root from 111.13.xxx.xxx port 13068 ssh23、进一步定位有哪些IP在爆破?[root@localhost ~]# grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"|uniq -c | sort -nr     12622 23.91.xxx.xxx     8942 114.104.xxx.xxx     8122 111.13.xxx.xxx     7525 123.59.xxx.xxx     ...................    4、爆破用户名字典都有哪些?[root@localhost ~]# grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr      9402  root      3265  invalid user oracle      1245  invalid user admin      1025  invalid user user      .....................

C、管理员最近登录情况:

1、登录成功的日期、用户名、IP:[root@localhost ~]# grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}' Jul 9 09:38:09 root 192.168.143.100Jul 9 14:55:51 root 192.168.143.100Jul 10 08:54:26 root 192.168.143.100Jul 10 16:25:59 root 192.168.143.100............................通过登录日志分析,并未发现异常登录时间和登录IP。2、顺便统计一下登录成功的IP有哪些:[root@localhost ~]# grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more     27 192.168.204.1

通过日志分析,发现攻击者使用了大量的用户名进行暴力破解,但从近段时间的系统管理员登录记录来看,并未发现异常登录的情况,需要进一步对网站服务器进行入侵排查,这里就不再阐述。

0x04 处理措施

SSH暴力破解依然十分普遍,如何保护服务器不受暴力破解攻击,总结了几种措施:

1、禁止向公网开放管理端口,若必须开放应限定管理IP地址并加强口令安全审计(口令长度不低于8位,由数字、大小写字母、特殊字符等至少两种以上组合构成)。2、更改服务器ssh默认端口。3、部署入侵检测设备,增强安全防护。

本文由Bypass原创发布,转载请保留出处。欢迎关注我的个人微信公众号:Bypass--,浏览更多精彩文章。

Linux应急响应(一):SSH暴力破解

Bypass

Linux应急响应(一):SSH暴力破解

About Me

一个网络安全爱好者,对技术有着偏执狂一样的追求。致力于分享原创高质量干货,包括但不限于:渗透测试、WAF绕过、代码审计、安全运维。

本文分享自微信公众号 - Bypass(Bypass--)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
暗箭伤人 暗箭伤人
1年前
【www.ithunter.club】 20230922下午
不容易的2023年,我们一起努力【www.ithunter.club】(2023092208:00:00.8872062023092216:00:00.887206)1.人事招聘专员数名(可选远程或入职)2.招聘向坐标东京Yahoo、Shift、L
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这