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

2023-05-10 21:33:47 +08:00
 MFWT

背景

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

简单统计

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

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

还是那个日志,统计了连上来的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])


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

9579 次点击
所在节点    云计算
86 条回复
Robertwhite
2023-05-11 13:52:47 +08:00
我问一下,腾讯轻量云,我架了个 nginx 开放了 80 端口,部署一些页面,会有什么安全问题吗?没有密码,直接 url 能打开页面的那种
bing1178
2023-05-11 13:56:07 +08:00
无所谓了 。一直 22 端口 允许 root 密码
密码足够强就行
注意 普通用户也不能有若密码
Bingchunmoli
2023-05-11 14:00:22 +08:00
@qbqbqbqb 但是不可能每次都在家里的电脑上登陆的吧,总会有去公司去外出的时间的连接需求的
deplivesb
2023-05-11 14:01:21 +08:00

看了眼我的,emmm
inhzus
2023-05-11 14:10:36 +08:00
楼主太可爱了= =每日一乐
Georgedoe
2023-05-11 14:13:53 +08:00
这也算盛况么, 随便一个学过安全的学生用 Metasploit 不就一键攻击
indexof
2023-05-11 14:14:44 +08:00
连我家里的机器对公网开放每天都有攻击。各种端口试过去。感觉像爬虫在全网扫描。
bjzhush
2023-05-11 14:15:20 +08:00
我还以为多少呢,才 8 万次。。。
不知道互联网是黑暗丛林啊,8W 次爆破如果是在一小时内的还有点看头,这都属于日常活动了
切换隔端口,关闭密码登录即可
MFWT
2023-05-11 14:40:09 +08:00
@Robertwhite #61 理论上,纯静态页面不会有太多安全问题,但是如果引入了执行代码的机会(比如 PHP )就难讲了
Folder
2023-05-11 15:34:19 +08:00
@mikewang 我以为我 9,000 条够多了
hoofs
2023-05-11 15:53:46 +08:00
-rw-rw---- 1 root utmp 1.9G 5 月 11 日 15:50 /var/log/btmp
运行了快两年的服务器,改高位端口+25519 密钥
nightwitch
2023-05-11 15:58:49 +08:00
@nznd 在 frp 上可以做鉴权
rioufbi
2023-05-11 16:23:55 +08:00
SSH 换个端口,又可以继续清净快活几个月了。
pusheax
2023-05-11 16:29:11 +08:00
mirai 在 16 年打瘫了半个美国的网络。就是很简单地通过爆破物联网设备的 SSH 和 Telnet ,控制大量设备发起 DDoS 攻击。
在那之后,作者自知玩的过火,把 mirai 的源代码公开,希望把水搅浑逃避水表(虽说最后还是被抓了)。
但这打开了潘多拉魔盒。一直以来,大家都知道公网上有很多弱口令的设备,但没想过数量有如此之大。
直到今天,mirai 的变种依旧是僵尸网络的主力之一。大部分这种 SSH 爆破的流量,都是这类僵尸网络在自动攻击,抓取设备。
ivamp
2023-05-11 16:38:44 +08:00
@baobao1270 想问下你这个是怎么实现的?脚本可以分享下吗?
david99654
2023-05-11 17:25:44 +08:00
@nznd frp 有 log ,我就是根据 log 内容做了一个类似 fail2ban 的脚本
des
2023-05-11 17:25:49 +08:00
我是是 BAN 了几个 IDC 的 IP 段,安静不少
JoeoooLAI
2023-05-11 21:37:57 +08:00
fail2ban 我试过。。一个月 10w 。。。最后我把 ssh 端口关掉,要用才上去安全组打开。。
wizardyhnr
2023-05-11 22:29:56 +08:00
fail2ban 规则设置连续 5 次错误尝试就永 ban 就完事了。
huahsiung
2023-05-13 13:23:41 +08:00
sshd 也被爆破成筛子,因为一些原因必须要开密码,开了一个 sshesame 蜜罐,结果看日志,发现蜜罐都没有怎么爆破,还是在爆破 sshd 。nmap 一扫描,发现 sshd 会返回“SSH-2.0-OpenSSH_7.6”,而 sshesame 蜜罐会返回“SSH-2.0-sshesame”。m'd 蜜罐暴露了。然后把 sshd 的 ServerVersion 也改为“SSH-2.0-sshesame”,假装自己是 sshesame 蜜罐。之后流量下降 60%

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/939018

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX