SSH 密码暴力破解及防御实战_3 | 学习笔记

本文涉及的产品
运维安全中心(堡垒机),免费版 6个月
简介: 快速学习 SSH密码暴力破解及防御实战_3

开发者学堂课程【网络安全攻防 - Web渗透测试SSH 密码暴力破解及防御实战_3】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/630/detail/9931


SSH 密码暴力破解及防御实战_3


内容介绍

一、useradd shell

二、密码的复杂性

三、修改默认端口

四、限止登录的用户或组

五、使用 sudo

六、设置允许的 IP 访问

七、使用 DenyHosts 自动统计

八、基于 PAM 实现登录限制

九、禁用密码改用公钥方式认证

十、保护 xshe11导出会话文件

十一、GRUB 加密

 

在前面了解了各种攻击手法以后,会发现都是利用字典,用暴力去穷举,不断的去拆解。如何避免这个问题?不建议更改 root 用户名,这样会导致业务不稳定,导致系统起不来。


一、useradd shell

[推荐]

[root@tianyun ~]# useradd yangge -s /sbin/nologin

对于不是需要登录的用户,一定要给它一个 sbin nologin,在新建用户的时候要养成习惯,比如

[ root@nginx2 ~]# useradd zhuzhuxiae-s /sbin/nologin

这样不让用户登录,它只是一个进程启动的账号,或者用来访问服务的账号,就不要给它可登录的 shell


二、密码的复杂性

[推荐]

如果这个用户要登录,一定要使用密码这种方式验证的话的情况下,要尊重密码的复杂性。

字母大小写+数字+特殊字符+20位以上+定期更换


三、修改默认端口

[推荐]

/etc/ssh/sshd_ config

Port 22222

肯定不会扫1-6535这么多端口,扫描不只是扫一台主机,是扫描很多台主机,所以端口尽量不要使用低端口,除非业务使用低端口很麻烦,一般生态环境里面都是特别的端口,是一个相比较麻烦的端口。

[ root@yage ~]# vim /etc/ssh/ssh

ssh_ config  ssh_ host_ ecdsa_ key. Pub  ssh_ _host_ rsa_ key

sshd_ config  ssh_ host_ ed25519_ key  ssh_ host_ rsa_ key. pub

ssh_ host_ ecdsa_ _key ssh_ host_ _ed25519_ _key. pub

有两个文件,ssh 不带 d 的是服务器配置文件,ssh d 的是客户端配置文件。

#Port 22

#AddressFamily any

#ListenAddress 0.0.0.0

#ListenAddress

22改了即可,前面的注释也需要打开,否则跟没有改一样,它是缺省值。

#vim /etc/ssh/ssh_ config

当第一次登录一个机器的时候,会询问 yes,所谓的yes就是把指纹放到 los 文件里面,把指纹放到本地的。

#StrictHostKeyChecking ask

这里有一个项叫做 ask,一个限制主机 key 的检测,要不要问,就是 no。客户端不用重启。


四、限止登录的用户或组

[推荐]

#PermitRootLogin yes

AllowUsers yangge

[root@tianyun ~]# man sshd_ config

AllowUsers AllowGroups DenyUsers DenyGroups这样做是最好的,就直接不允许用户访问即可。

首先不要允许 root 用户登录,直接加 AllowUsers yangge 即可。重新开一个终端

root@kali:~# ssh 10.30.162.47 -l yangge

yangge@10.30.162.47's password:

[yangge@nginx2 ~]$ su -

Password:

Last login: Thu Nov 22 16: 13:45 CST 2018 from 10.30.162.109 on pts/9

last  failed login:Thu Nov 22 16: 14:54 CST 2018 from 10.30. 162.109 on ssh:notty

There was 1 failed login attempt since the last successful login .

[ root@nginx2 ~]# exit

logout

所以不用禁止用户,直接 AllowUsers 即可。

平时使用 root 账户是不对的,除了本身登录的风险以外,会对用户造成一些灾难性的后果,特别是权利够大,所以应该使用 sudo


五、使用 sudo

[推荐]

[root@yangge~]# visudo 打开的是“/etc/sudoers.tmp”这个文件,在里面可以设置用户的一些规则,访问的规则。

## Allow root to run any commands anywhere

Root ALL=(ALL) ALL

## Allows members of the 'sys' group to run networking, software,

## service management apps and more .

# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING,PROCESSES,LOCATE,DRIVERS

## Allows people in group wheel to run all commands

%wheel  ALL=(ALL) ALL 允许轮子组中能够从所有主机以用户身份执行命令,所以只要把用户加到这个组里面即可,这个需要密码。

## Same thing without a password

# %wheel ALL=(ALL) NOPASSWD: ALL  这个不需要密码。

生产环境里面90%都会使用到 sudo,不会使用管理员账号,直接使用的都是普通账号。而普通账号是有一定的权利的,只要在前面加上 sudo 就相当于携带了管理员的权利。只要前面加了 sudo 就相当于管理员的权利。


六、设置允许的IP访问

[可选]

/etc/hosts . allow,例如 sshd:192. 168.106.167:allow

PAM基于 IP 限制

iptables/firewalld 防火墙 firewalld 限制

只能允许从堡垒机,往往在整个业务前段有堡垒机,跳板机,所有的业务都是连到跳板机,跳板机再连接过去,相当于后面的服务器只要允许跳板机访问就可以。


七、使用 DenyHosts 自动统计

将其加入到/etc/hosts . deny 配合使用的,一旦开启以后,它会检测登录的次数,如果一旦发现失败,假如是三次,它就会把 IP 加入到/etc/hosts . deny 这里面去拒绝,不会解锁。


八、基于 PAM 实现登录限制

[推荐]

模块: pam. _tally2.so

功能:登录统计,pam 相当于一个第三方的身份验证服务

示例:实现防止对 sshd 暴力破解

[root@tianyun ~]# grep tally2 /etc/pam. d/sshd

Auth required pam _tally2.so deny=2 even_ deny_ root root_ unlock_ time=30 unlock_time=30

这也是登录统计的一个模块,但是它是由 pam 提供的,在登录的时候,其实验证身份的不是 ssh 服务器,是 pam 这个服务。在 linux 里面有很多服务需要验证,登录系统的时候需要验证,登录 ssh 也需要验证,只要要请求 pam 即可,所以 pam 是第三方的一个身份验证的机制,linux 中大部分服务都是基于它进行验证,比如登录 ssh,看起来是 ssh 服务在接收密码,实际上是给 lepam,由 pam 进行验证。

用一个模块来统计失败的次数,如果密码失败两次,连root用户也不例外,就会锁定30秒,30秒之后会自动解锁。

Authrequiredpam_sepermit.Sorestartvmdeny=2even_deny_rootroot_unlock_time=30unlock_time=30

Auth substack passWord-auth

Auth include postlogin

# Used with polkit to reauthorize users in remote sessions

-auth  optiona l pam reauthorize.so prepare

Account required pam_nologin.so

Account include password-auth

password include password-auth

# pam_selinux.so close should be the first session rule

session required pam_se linux.so close

session required pam_ loginuid.so

# pam_selinux.so open should only be followed by sessions to be executed intheusercontext

Session required pam_ selinux.so open env_ pa rams

session required pam_namespace . so

Session optiona l pam_keyinit.so force revoke

session include password-auth

暴力破解软件是一直尝试密码,时间设置的长一点,如果试两次失败了,可能就不会再进行破解了,它自己的程序就结束了。这个就是利用 pam 这样一个登录的统计模块来对用户进行锁定,就相当于迫使暴力破解工具没法连续的进行尝试。

如果从管理员接到普通用户就不需要密码,因为只要 uid 0root 用户,它就认为是超级用户,所以就不需要密码。


九、禁用密码改用公钥方式认证

/etc/ssh/sshd_ config

PasswordAuthentication no

当登录一个机器的时候

[ root@yangge~]# visudo

[ root@yangge ~ ] # ssh localhost -v

输入个yes之后就能看到

debug1: SSH2_ MSG_ NEWKEYS sent

debug1: expecting SSH2_ MSG_ NEWKEYS

debug1: SSH2_ MSG_ NEWKEYS received

debug1: rekey after 134217728 blocks

debug1: SSH2_ MSG_ EXT_ INFO received

debug1: kex_ input_ ext_ info: server-sig-algs=<rsa-sha2-256, rsa-sha2-512>

debug1: SSH2_ MSG_ SERVICE_ ACCEPT received

debug1: Authentications that can continue: publickey, gssapi- keyex, gssapi ,password

debug1: Next authentication method: gssapi- keyex第一种方式,利用gssapi的结合才能用的。

debug1: No valid Key exchange context

debug1: Next authentication method: gssapi -with-mic

debug1: Unspecified GSS

failure. Minor code may provide more information

No Kerberos credentials available(default cache: KEYRING:persistent:0)

debug1: Unspecified GSS failure.Minor code may provide more information

No Kerberos credentials available(default cache: KEYRING:persistent:0)

debug1: Next authentication method: publickey第二种方式公钥,有优先级的。

debug1: Offering RSA public key: /root/ .ssh/id_ rsa

debug1: Authentications that can continue: publickey , gssapi- keyex, gssapi -with-mic , password

debug1: Trying private key: /root/ .ssh/id_ dsa

debug1: Trying private key: /root/ .ssh/id_ ecdsa

debug1: Trying private key: /root/ .ssh/id_ ed25519

debug1: Next authentication method: password

排在最后的才是密码,可见去 ssh 一个主机的时候,它并不会优先选择密码登录,所以密码登录也是看为不安全的一种形式,要把密码登录禁止掉。如果密码登录被禁止会对某些业务造成影响,就不能选择这一项。


十、保护 xshe11导出会话文件

[小心]

如果别人连接了服务器,并不知道密码,但是密码都已经保存在配置里面。

image.png

所以可以通过导出文件,选择导出密码,完成再导入就可以访问所有的机器。如果是公钥登录,有个缺点是私钥别人也可以用,除非私钥再加一个密码。

image.png


十一、GRUB 加密

[针对本地破解]

如果机器在机房里面,不需要远程破解,GRUB 也没有加密,就可以在开机的时候就可以破解,本地破解就是绕过GRUB 就可以破解。

可以设置输入密码锁五分钟,这样暴力破解就会放弃,没办法破解。

例子:

不接触限制,还是锁着的,从管理员接到普通用户不需要密码,直接就可以切过去,因为 uid 0,它会认为是超级用户所以不要密码,这里有一个文件su,它也是由 pam 验证的,sufficient 充分,只要是 root 用户就可以,密码随便输入,回车就可以上去,这时密码就没有用了,因为 su 切换的时候只要 uid 0,验证就通过,只要是 root 用户,这就是充分条件,下面就可以不用再看了。

Auth sufficient pam rootok.so

相关文章
|
23天前
|
安全 Shell Linux
ssh密码忘记了怎么办
通过上述措施,不仅能够有效应对SSH密码遗忘的挑战,还能全方位加固SSH连接的安全,确保数据传输的无忧。
16 2
|
1月前
|
Linux 网络安全 数据安全/隐私保护
Jetson 学习笔记(十三):SSH远程登录控制(终端控制和图形界面)-成功通过
这篇文章介绍了如何通过SSH命令行和VNC图形界面远程登录和控制NVIDIA Jetson Nano设备。
199 0
Jetson 学习笔记(十三):SSH远程登录控制(终端控制和图形界面)-成功通过
|
1月前
|
Linux 网络安全 Windows
|
3月前
|
安全 Shell 网络安全
告别繁琐密码,一键解锁GitHub高效秘籍!SSH配置大揭秘,让你的代码托管之旅飞起来!
【8月更文挑战第4天】在使用GitHub时,频繁输入账号密码颇为不便。采用SSH协议可提升安全性并简化流程。本文以问答形式指导你快速配置GitHub SSH:了解SSH优势、学会生成与添加SSH密钥及测试连接。通过简单的步骤,即可实现无缝代码推送与拉取,享受高效、安全的开发体验。记得保护好私钥并根据需要设置多个密钥对。
60 7
|
3月前
|
安全 Linux Shell
Linux系统之间实现免密码登录(SSH无密码登录
【8月更文挑战第21天】要在Linux系统间实现SSH免密码登录,需先在源机器生成SSH密钥对,然后将公钥复制到目标机器的`.ssh/authorized_keys`文件中。可通过`ssh-keygen`命令生成密钥,并使用`ssh-copy-id`命令传输公钥。最后测试SSH连接,确保能无密码登录。若目标机器缺少相关目录或文件,需手动创建并设置适当权限。完成这些步骤后,即可实现安全便捷的免密码登录。
112 0
|
3月前
|
存储 安全 Linux
年底了,看老司机如何防 ssh 被暴力破解?
年底了,看老司机如何防 ssh 被暴力破解?
|
4月前
|
网络安全 数据安全/隐私保护
服务器密码登录出现了:SSH connection failed: connect ECONNREFUSEDxxxxxxxx:22 * Xshell提示 SSH connection fa
服务器密码登录出现了:SSH connection failed: connect ECONNREFUSEDxxxxxxxx:22 * Xshell提示 SSH connection fa
|
8天前
|
监控 Ubuntu Linux
使用VSCode通过SSH远程登录阿里云Linux服务器异常崩溃
通过 VSCode 的 Remote - SSH 插件远程连接阿里云 Ubuntu 22 服务器时,会因高 CPU 使用率导致连接断开。经排查发现,VSCode 连接根目录 ".." 时会频繁调用"rg"(ripgrep)进行文件搜索,导致 CPU 负载过高。解决方法是将连接目录改为"root"(或其他具体的路径),避免不必要的文件检索,从而恢复正常连接。
|
5月前
|
安全 Linux Shell
Linux中SSH命令介绍
Linux中SSH命令介绍
131 2
|
3月前
|
安全 Linux 网络安全
在Linux中,如何配置SSH以确保远程连接的安全?
在Linux中,如何配置SSH以确保远程连接的安全?