实录:公有云环境碰上 SSH 攻击的盛况

vps网友提供 05-10 讨论归档 86

背景

香港主力加密代理小鸡,系统自带 Fail2Ban 。虽然说密码强度足够,也未泄露,而且机器对外只提供 SSH 登录和酸酸服务,炸了也不心疼
但是,还是感觉心里发毛,于是大约三天前上了密钥登录,关掉了密码登录
干完这件事之后,我一时兴起,决定看看登录日志,看看 SSH 失败登录的情况到底有多严重
不看不知道,一看吓一跳,只能说这机器活到现在,那个复杂的密码真的是辛苦他了.....

简单统计

统计周期:从 4/30 到今天( 5/10 ),也就是十天左右的时间

  1. 服务器记录了八万多行的登录日志,按平均一次登录尝试打 5 条 log 算,这十天遭受了超过 1.5 万次的 SSH 爆破
  2. 用 Python 做了脚本(脚本在文末),简单分析了一下日志,导出并去重之后测出了1644 个尝试用于登录的用户名。这里从文件中列举几个常见的和不常见的:
  • 常见的:
    root 12345 abc aaa zzz user ftpuser ftpuser1 test nginx linux toor guest admin pi orangepi

  • 不常见的:
    julia jon jvj jiankong miguel pablo riad niklas RYSN_zhongying matheus

还是那个日志,统计了连上来的493 个 IP,择取归属地数量前五的如下:

us 99
cn 70
kr 48
au 33
de 25

举两个例子,美国可能是因为 VPS 较为低价,人们大量购买(建站,加密代理之类的),但安全措施没有做足(简单用户名,简单密码,没有 Fail2Ban 等防护软件 —— 至于你说是不是 22 端口,我感觉关系不大,毕竟 SSH 不防主动探测,换个端口,可能消停两天又开始了),导致成为了别人的肉鸡

至于中国 IP ,从具体属地等信息来看,不乏家宽 IP 。推测除了购买家宽代理之外,也有可能是用户电脑由于安装了各种流氓软件等等原因,成为了人家的肉鸡

众生百态

分析日志让人哑然失笑,此处列举几个登陆攻击的行为,与君共赏——

这是不知所云(非 SSH 请求发到了 SSH 端口)

sshd[895175]: error: kex_exchange_identification: banner line contains invalid characters
sshd[895175]: banner exchange: Connection from 213.*.*.98 port 64661: invalid format

这是知难而退(服务器关闭了密码登录)

sshd[894967]: Received disconnect from 134.*.*.178 port 58562:11: Bye Bye [preauth]
sshd[894967]: Disconnected from authenticating user root 134.*.*.178 port 58562 [preauth]
sshd[894969]: Received disconnect from 192.*.*.50 port 51560:11: Bye Bye [preauth]
sshd[894969]: Disconnected from authenticating user root 192.*.*.50 port 51560 [preauth]
sshd[894971]: Received disconnect from 200.*.*.234 port 51036:11: Bye Bye [preauth]
sshd[894971]: Disconnected from authenticating user root 200.*.*.234 port 51036 [preauth]

这是爱如潮水(注意 IP 和时间)

20:00:23 - sshd[895661]: Invalid user dockeradmin from 144.*.*.23 port 40902
20:00:23 - sshd[895666]: Invalid user ubnt from 144.*.*.23 port 40990
20:00:23 - sshd[895673]: Invalid user steam from 144.*.*.23 port 41008
.....
20:00:23 - sshd[895678]: Invalid user postgres from 144.*.*.23 port 40994
......
20:00:23 - sshd[895659]: Connection closed by invalid user devops 144.*.*.23 port 40862 [preauth]
......
20:00:23 - sshd[895668]: Connection closed by invalid user zjw 144.*.*.23 port 41004 [preauth]

这是锲而不舍(同一用户名不同密码多次登录)

sshd[912780]: Disconnecting authenticating user root 59.*.*.186 port 52862: Too many authentication failures [preauth]
sshd[912782]: error: maximum authentication attempts exceeded for root from 59.102.161.186 port 52911 ssh2 [preauth]

这是老子!

sshd[921821]: Accepted publickey for root from 2409:****:****:**** port 6**** ssh2: RSA SHA256:****....
sshd[921821]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)
systemd-logind[331]: New session **** of user root.

后日谈

我感觉,最根本的防止被爆破 SSH 成功的方法只有三个:

  1. 不允许非授权的 IP 连接
  2. 使用足够长的私钥(比如 4096Bit )代替密码进行验证
  3. 不开放 SSH 登录端口(比如,通过 VPN 连入内网环境后再登录)

虽然说这台机器只是酸酸机,但是鬼知道被爆破后会不会变成下一台肉鸡? 世事难料,不如小心行船,方得万年平安
又或许,我可以允许任意用户名通过,然后连上来的用户都用 ASCII 播放一遍鸡你太美?

后附统计脚本


filename = 'auth.log'

for line in open(filename, "r"):

    if(line.find('sshd') == -1):
        #非 SSHD 日志,跳过
        continue

    if(line.find('Invalid user') != -1):
        #空格分隔后的日志,第五和第七位是用户名和 IP 信息
        #实际检测请根据实际情况修改截断格式
        print(line.split(" ")[5] + "," + line.split(" ")[7])


深山踏红叶,耳畔闻鹿鸣
全文完,感谢阅读

本文由 vps网友提供,转载请注明出处

本文链接: https://www.vpsvsvps.com/discuss/a/1676472132059533312.html

标签:
f165af34d4830eeb

首先不建议直接通过 ssh 登录 root 用户

其次建议考虑使用 ssh over vpn 的方式使用(比如 zerotier ),比直接暴露在公网上安全很多

如果有必要可以允许白名单 ip 在公网直接访问 ssh ,作为 vpn 失效时的 fallback 手段。

MFWT
05-10

@mikespook #18 泳衣逛街总比只挂浴巾来得好

mikespook
05-10

所以,之前是 root 挂密码在跑?这和过个浴巾裸奔有什么区别?
现在是 root 用 key pair 的话,大约也就是穿个泳衣逛街了……

showgood163
05-10

@LittleState

只允许密钥登录的安全系数,比我做的几件事加起来都高

前提是密钥没泄露

MFWT
05-10

@est #13 真男人从不回头用蜜罐,直接 sshd (

zydxn
05-10

噗,这是老子笑死

LittleState
05-10

@showgood163 #11 啊,都这样了还有这么多吗,话说我只允许密钥登陆应该没啥因患了吧?

est
05-10

可以试试做一个蜜罐。无论你输入什么账号密码都能进入一个啥命令都干不了的假 shell 。

SFJ4MEGabMk2
05-10

SSH 只开在 IPv6 地址上

showgood163
05-10

个人在 VPS 上采用的防护策略

防火墙关闭未使用端口
高位 SSH 端口
SSH 强账号密码
3 次登录失败直接 BAN IP ,封禁时间长达一年的的 fail2ban

下面是积攒小半年的结果

```
Status for the jail: sshd
|- Filter
| |- Currently failed: 201
| |- Total failed: 1421
| `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
|- Currently banned: 5483
|- Total banned: 5483
```

Soo0
05-10

改端口 白名单,密码关了 开密钥登录 ,实在不行直接关了,自己要用的时候在开,用完关了

MFWT
05-10

@realJamespond #6 大哥你要不看看我第二行写的啥....

MFWT
05-10

@hefish #4

对啊,所以我用的是盛况一词
公网开服务,没有动静那才叫怪

chinni
05-10

根本无所谓 直接 只允许 key 登录就好了 其他没啥用

realJamespond

为啥不禁密码登录?

swsh007
05-10

密钥是必须,高位随便扫,其实用那些套了一层防火墙的直接闭了就是,需要用再开最彻底。

hefish
05-10

只是用工具和字典 挂那儿跑。 并不是真的在尝试登录。 基本上只要公网上开端口,用不了多久总有人来扫。没办法的。

lwjef
05-10

先把 22 换个高位,先把端口扫出来再说吧。?

dode
05-10

好麻烦,终究还是搞了白名单 ssh_ip

mikewang
05-10

看了下我的 fail2ban ,哪天来兴趣了分析一下...

Status for the jail: sshd
|- Filter
| |- Currently failed: 13
| |- Total failed: 130963
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 16095
|- Total banned: 29418
`- Banned IP list: ...