背景简述
为了方便远程运维操作以及云主机的普及,越来越多Linux主机开启远程登录功能,比如telnet,SSH,VNC,其中SSH最为流行。资金充裕的组织或个人会在中间部署跳板机、安全防护设备保障远程登录的安全可信。本文给出的则是原生态Linux下如何增强SSH远程登录安全,属于个人片面见解,欢迎指教。
SSH远程登录潜在安全问题
远程登录成功Linux主机,则具备控制主机的能力,如果是root级别账号,主机的一切完全被轻松掌握。通过各种手段达到非法远程登录进Linux成了各路信息安全geek关注的重点。了解到的主要存在爆破登录、社工获取账号密码、利用SSH协议或SSHD漏洞攻击。
SSH远程登录几点安全加固
反信息搜集设置
现在黑产工具配套齐全,整个攻击链路都有自动化或半自动化工具。比如漏洞利用前会搜集具体组件类型和版本,然后根据具体版本映射漏洞POC。另外爆破也是自动化进行,通常是快速枚举用户和密码字典组合,根据响应结果判断登录成功与否。我们可以通过修改版本和定制响应,达到欺骗普通自动化工具。版本修改方式有两种:(1) 源码修改重新编译,这个是推荐的方法,要求具备C语言编译能力,且了解自己所用发行版系统的对应编译SSHD的编译选项 (2)直接使用sed修改SSHD,好处是方便快捷,不要求编码和编译能力,缺点是对二进制黑盒执行执行修改,存在未知coredump风险。[示例sed修改命令:sed -i 's/OpenSSH_7.9/OpenSSH_*.*/g' /usr/sbin/sshd 。修改前先备份]。定制响应则可以通过修改SSHD的banner和Linux自身banner,以centos 7.6为例:
[rank@My-centos ~]# vim /etc/ssh/banner
Access denied
[rank@My-centos ~]# vim /etc/ssh/sshd_config
Banner /etc/ssh/banner
[rank@My-centos ~]# vim /etc/motd
Access denied
[rank@My-centos ~]# systemctl restart sshd
退出重新登录
Pre-authentication banner message from server:
Access denied.
End of banner message from server
rank@xxx.xx.xxx.xxx's password:
last login: Sat May 18 13:39:47 2023 from xxx.xx.xxx.xxx
Access denied
这样通过混入 Access denied 欺骗爆破器登录失败
登录设置
弱口令和社工钓鱼账号密码是常见且高可利用的攻击手法,可以通过以下手段缓解影响。(1)设置禁止空密码,/etc/ssh/sshd_config开启 PermitEmptyPasswords no (2) 禁用默认账号,/etc/ssh/sshd_config里DenyUsers root (3)开启登录用户白名单,/etc/ssh/sshd_config里AllowUsers rank justdo (4) 登录IP白名单或登录黑IP名单,/etc/hosts.allow 或 /etc/hosts.deny加入对应IP,格式 sshd: ip (5) 禁用密码登录,使用秘钥登录。/etc/ssh/sshd_config里PubkeyAuthentication yes 和 PasswordAuthentication no,然后在允许登录的对应账号下生产/home/rank/.ssh/authorized_keys,具体可见#参考文献#
会话设置
类似windows锁屏机制,防止"身边人"在自己外出时操作自己机器,可通过设置sshd配置结合Linux系统设置达到效果。(1)sshd配置/etc/ssh/sshd_config里ClientAliveInterval 60和ClientAliveCountMax 5 (2)Linux系统设置 /etc/bashrc里export TMOUT=600 。结合Linux系统设置原因是很多ssh客户端配置了keep alive导致sshd的会话超时设置不生效,而TMOUT是通过用户输入判断会话空闲与否,可正常在自己外出时阻断超时连接。
其他设置
部分老sshd允许配置Protocol 1或默认Protocol 1,而Protocol 1有安全缺陷,这种情形可通过/etc/ssh/sshd_config里配置Protocol 2完成加固;另外,Linux下还可结合iptables和fail2ban识别爆破,自动完成恶意IP的封堵。
参考文献
https://blog.51cto.com/u_15162069/2774018
https://www.runoob.com/w3cnote/set-ssh-login-key.html
https://www.digitalocean.com/community/tutorials/how-to-protect-ssh-with-fail2ban-on-centos-7