开发者学堂课程【网络安全攻防 - 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
AllowUser
s
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 . s
o
Session optiona l pam_keyinit.so force revoke
session include password-auth
暴力破解软件是一直尝试密码,时间设置的长一点,如果试两次失败了,可能就不会再进行破解了,它自己的程序就结束了。这个就是利用 pam 这样一个登录的统计模块来对用户进行锁定,就相当于迫使暴力破解工具没法连续的进行尝试。
如果从管理员接到普通用户就不需要密码,因为只要 uid 是0,root 用户,它就认为是超级用户,所以就不需要密码。
九、禁用密码改用公钥方式认证
/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导出会话文件
[小心]
如果别人连接了服务器,并不知道密码,但是密码都已经保存在配置里面。
所以可以通过导出文件,选择导出密码,完成再导入就可以访问所有的机器。如果是公钥登录,有个缺点是私钥别人也可以用,除非私钥再加一个密码。
十一、GRUB 加密
[针对本地破解]
如果机器在机房里面,不需要远程破解,GRUB 也没有加密,就可以在开机的时候就可以破解,本地破解就是绕过GRUB 就可以破解。
可以设置输入密码锁五分钟,这样暴力破解就会放弃,没办法破解。
例子:
不接触限制,还是锁着的,从管理员接到普通用户不需要密码,直接就可以切过去,因为 uid 是0,它会认为是超级用户所以不要密码,这里有一个文件su,它也是由 pam 验证的,sufficient 充分,只要是 root 用户就可以,密码随便输入,回车就可以上去,这时密码就没有用了,因为 su 切换的时候只要 uid 是0,验证就通过,只要是 root 用户,这就是充分条件,下面就可以不用再看了。
Auth sufficient pam rootok.so