|
重要声明:
本文以研究角度去说明SSHD服务的“gong ji”和防护原理,也不会提供文中所提到的“gong ji”工具(因为会被和谐掉哦!没办法^_^),请读者不要用于违法用途,本人对于读者用于违法行为概不负责。
Linux 下的在线密码暴力破解工具 Hydra使用介绍:
Hydra介绍:
Hydra 是著名hei ke组织thc的一款开源的暴力密码破解工具,可以在线破解多种密码。官网:http://www.thc.org/thc-hydra(网址可能备墙了,你懂的!!),可支持AFP, Cisco AAA, Cisco auth, Cisco enable, CVS, Firebird, FTP, HTTP-FORM-GET, HTTP-FORM-POST, HTTP-GET, HTTP-HEAD, HTTP-PROXY, HTTPS-FORM-GET, HTTPS-FORM-POST, HTTPS-GET, HTTPS-HEAD, HTTP-Proxy, ICQ, IMAP, IRC, LDAP, MS-SQL, MYSQL, NCP, NNTP, Oracle Listener, Oracle SID, Oracle, PC-Anywhere, PCNFS, POP3, POSTGRES, RDP, Rexec, Rlogin, Rsh, SAP/R3, SIP, SMB, SMTP, SMTP Enum, SNMP, SOCKS5, SSH (v1 and v2), Subversion, Teamspeak (TS2), Telnet, VMware-Auth, VNC and XMPP等类型密码。
第1步:安装
如果是Debian和Ubuntu发行版,源里自带hydra,直接用apt-get在线安装:
sudo apt-get install libssl-dev libssh-dev libidn11-dev libpcre3-dev libgtk2.0-dev libmysqlclient-dev libpq-dev libsvn-dev firebird2.1-dev libncp-dev hydraCentOS/Redhat/Fedora 发行版的下载源码包编译安装,先安装相关依赖包:
yum install openssl-devel pcre-devel ncpfs-devel postgresql-devel libssh-devel subversion-develhydra下载地址:http://www.thc.org/releases/hydra-7.3.tar.gz
# tar zxvf hydra-8.0-src.tar.gz
# cd hydra-8.0-src
# ./configure
# make
# make install
hydra支持GUI图形界面,不过习惯还是命令好用。
Hydra 的参数说明:
hydra [[[-l LOGIN|-L FILE] [-p PASS|-P FILE]] | [-C FILE]] [-e ns]
[-o FILE] [-t TASKS] [-M FILE [-T TASKS]] [-w TIME] [-f] [-s PORT] [-S] [-vV]
server
service [OPT]
-R 继续从上一次进度接着破解。
-S 采用SSL链接。
-s PORT 可通过这个参数指定非默认端口。
-l LOGIN 指定破解的用户,对特定用户破解。
-L FILE 指定用户名字典。
-p PASS 小写,指定密码破解,少用,一般是采用密码字典。
-P FILE 大写,指定密码字典。
-e ns 可选选项,n:空密码试探,s:使用指定用户和密码试探。
-C FILE 使用冒号分割格式,例如“登录名:密码”来代替-L/-P参数。
-M FILE 指定目标列表文件一行一条。
-o FILE 指定结果输出文件。
-f 在使用-M参数以后,找到第一对登录名或者密码的时候中止破解。
-t TASKS 同时运行的线程数,默认为16。
-w TIME 设置最大超时的时间,单位秒,默认是30s。
-v / -V 显示详细过程。
server 目标ip
service 指定服务名,支持的服务和协议:telnet ftp pop3[-ntlm] imap[-ntlm] smb smbnt http-{head|get} http-{get|post}-form http-proxy cisco cisco-enable vnc ldap2 ldap3 mssql mysql oracle-listener postgres nntp socks5 rexec rlogin pcnfs snmp rsh cvs svn icq sapr3 ssh smtp-auth[-ntlm] pcanywhere teamspeak sip vmauthd firebird ncp afp等等。
OPT 可选项
第2步:各种用法实战
简单演示:
待插图!!!!!!!!!!!
破解成功,直接显示结果,上图画红线的地方就是破解出来的密码,也可以通过参数-o输出到文件里。如果字典够强大,结合社工,密码不用很久就出来。
1、破解ssh:
hydra -l 用户名 -p 密码字典 -t 线程 -vV -e ns ip ssh
hydra -l 用户名 -p 密码字典 -t 线程 -o save.log -vV ip ssh2、破解ftp:
hydra ip ftp -l 用户名 -P 密码字典 -t 线程(默认16) -vV
hydra ip ftp -l 用户名 -P 密码字典 -e ns -vV说明:自己去试试吧,用法都很简单,主要是密码字典足够强大。
有“gong ji”当然就有防护方法嘛
4.1.4 防止SSHD服务被暴力破解
防止暴力破解的方法有5种:
方法1:配置安全的SSHD服务
1. 密码足够的复杂,密码的长度要大于8位,最好大于20位,并且满足密码复杂度要求:密码要尽可能有数字、大小写字母和特殊字符混合组成。
2. 修改默认端口。
3. 不允许root用户直接登录,添加普通帐户,授予root用户权限(使用sudo授权运行必要的命令)。
4. 不允许使用密码直接登录,只能通过认证密钥来登录系统。
生成密钥对:
[root@CentOS7lsrv01 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): ß选择是否输入读取密钥的密码
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:LgsdRFzzU7kEXEJ7vGU2oQJ3Q0/c2u2A8ve9tw4vp0k root@CentOS7lsrv01
The key's randomart image is:
+---[RSA 2048]----+
| ...+o=+*oo. |
| .. =.*o=...|
| . =.+o*o.|
| . .+o=o.o|
| . S o. o |
| . o . . .|
| . o . E ..|
| . o ..+.+|
| . o==+|
+----[SHA256]-----+
[root@CentOS7lsrv01 ~]# ll .ssh/
total 12
-rw------- 1 root root 1679 Jun 19 15:51 id_rsa ß已经生成了密钥对
-rw-r--r-- 1 root root 400 Jun 19 15:51 id_rsa.pub ß已经生成了密钥对
发布公钥到服务器端:
[root@CentOS7lsrv01 ~]# ssh-copy-id -i 192.168.0.94 ß不指定用户的话默认使用当前用户
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.0.94's password: ß发布公钥时需要输入登录服务器的密码
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '192.168.0.94'"
and check to make sure that only the key(s) you wanted were added.
参数说明:-i表示指定公钥文件,不指定文件名的话使用默认文件名。
在服务器端查看:
[root@CentOS6lsrv01 ~]# ll .ssh
total 4
-rw------- 1 root root 400 Jun 4 15:10 authorized_keys ß公钥已经上传到服务器端,并且自动命名为“authorized_keys”
在客户端测试免密码登录:
[root@CentOS7lsrv01 ~]# ssh root@192.168.0.94
Last login: Mon Jun 4 14:19:22 2018 from 192.168.0.91 ß不需输入密码直接登录啦,噢耶!
想要使用普通用户免秘密登录也是可以的
[root@CentOS7lsrv01 ~]# ssh-copy-id -i xruan@192.168.0.94
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
xruan@192.168.0.94's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'xruan@192.168.0.94'"
and check to make sure that only the key(s) you wanted were added.
[root@CentOS7lsrv01 ~]# ssh xruan@192.168.0.94
Last login: Mon Jun 4 14:41:51 2018 from 192.168.0.91
注意:
1. authorized_keys和id_rsa.pub内容其实是一样的,在服务器端可以手工创建“authorized_keys”文件,内容在“id_rsa.pub”复制过来就可以了。
2. 服务器端公钥“authorized_keys“文件的权限只能是600或700,如果是手工创建该文件的话,必需修改权限。
方法2:通过开源的软件来防护
特点:简单、灵活、高效
实战:
问题原因分析:最近公司公网网站一直被别人通过暴力破解SSHD工具×××,虽然没有成功,但会导致系统负载很高,原因是暴力破解的时候,系统会不断地认证用户,从而增加了系统资源额外开销,导致公司网站访问速度很慢。
解决办法:
1. 使用fail2ban
官网地址:http://www.fail2ban.org/wiki/index.php/Main_Page
fail2ban可以监控系统日志,然后匹配日志的错误信息(正则匹配)执行相应的屏蔽动作(一般情况下是防火墙),而且可以发送e-mail给系统管理员,很实用,很强大。
fail2ban简单来说其功能就是防止暴力破解,工作原理是通过分析一定时间内的相关服务日志,将满足动作的的相关IP利用iptables加入到dorp列表一段时间。
第1步:安装fail2ban软件(fail2ban-0.8.14,这个是很稳定的版本)
tar xzvf fail2ban-0.8.14.tar.gz -C /usr/local/src/
cd /usr/local/src/fail2ban-0.8.14/
python setup.py install
注意:fail2ban使用python开发,安装是先确保系统有安装python环境,并且python的版本必需大于2.4,CentOS 7/RHEL 7默认会安装python 2.7.5。
第2步:拷贝fail2ban的启动脚本到 /etc/rc.d/init.d/ 目录下
[root@CentOS7lsrv01 fail2ban-0.8.14]# pwd
/usr/local/src/fail2ban-0.8.14
cp files/redhat-initd /etc/rc.d/init.d/fail2ban
第3步:让chkconfig管理fail2ban的启动
chkconfig --add fail2ban
说明:fail2ban的启动脚本符合SystemV的方式。
[root@CentOS7lsrv01 ~]# grep chkconfig /etc/init.d/* -R --color=auto
/etc/init.d/fail2ban:# chkconfig: - 92 08
/etc/init.d/netconsole:# chkconfig: - 50 50
/etc/init.d/network:# chkconfig: 2345 10 90
第4步:编辑fail2ban的配置文件
设置条件:ssh登录5分钟内3次密码验证失败,禁止用户IP访问主机1小时,1小时后该限制自动解除,用户可以重新登录。
动作文件(action.d/iptables.conf)以及日志条件匹配文件(filter.d/sshd.conf)安装后是默认存在的,基本不用做任何修改。所有需要修改的设置都在配置文件“jail.conf”中,只要启用SSHD服务日志分析,并指定动作阀值即可。
vim /etc/fail2ban/jail.conf
94 [ssh-iptables]
95
96 enabled = true
97 filter = sshd
98 action = iptables[name=SSH, port=ssh, protocol=tcp]
99 sendmail-whois[name=SSH, dest=you@example.com, sender=fail2ban@example.com, sendername="Fail2Ban"]
100 logpath = /var/log/secure
101 maxretry = 3
102 bantime = 3600
103 findtime = 300 设置项说明:
enabled:是否开启ssh-iptables功能,默认值是“false”。
filter:过滤器。
action:指定动作参数。设置ssh服务端口、通信协议、接收fail2ban信息的管理员邮箱等。
logpath:指定fail2ban监控的日志文件,默认值是“/var/log/sshd.log”。
maxretry:最大用户验证尝试次数,默认值是5,设置成3。
bantime:设置禁止用户访问时间。
findtime:用户在该项设定值(300秒)内,尝试登录失败次数达到maxretry设定值(3次),则动作生效。
第5步:启动fail2ban服务
systemctl start fail2ba
或
service fail2ban start
设置开机自启动:默认情况下,使用chkconfig --add 添加fail2ban启动脚本后,在级别2345下,fail2ban都会自启动
[root@CentOS7lsrv01 ~]# chkconfig --list fail2ban
Note: This output shows SysV services only and does not include native
systemd services. SysV configuration data might be overridden by native
systemd configuration.
If you want to list systemd services use 'systemctl list-unit-files'.
To see services enabled on particular target use
'systemctl list-dependencies [target]'.
fail2ban 0:off 1:off 2:on 3:on 4:on 5:on 6:off
特别注意:使用systemctl enable设置开机自启动会报错,但启动、停止服务和查看服务状态却可以用systemctl start(stop、status),这点比较奇葩!!
[root@CentOS7lsrv01 ~]# systemctl enable fail2ban
fail2ban.service is not a native service, redirecting to /sbin/chkconfig.
经过3次登录尝试失败后:
[root@CentOS6lsrv01 ~]# ssh root@192.168.0.91
ssh: connect to host 192.168.0.91 port 22: Connection refused
查看防火墙规则:
[root@CentOS7lsrv01 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
fail2ban-SSH tcp -- anywhere anywhere tcp dpt:ssh
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain fail2ban-SSH (1 references)
target prot opt source destination
REJECT all -- 192.168.0.94 anywhere reject-with icmp-port-unreachable
RETURN all -- anywhere anywhere
说明:3次登录尝试失败后,fail2ban自动添加了一条规则,拒绝“192.168.0.94”的主机继续尝试登录。
fail2ban常用命令:
fail2ban-client:
主要参数:
-c :configuration directory,配置文件路径
-s :socket path,socket文件路径
start:启动fail2ban服务
查看fail2ban服务状态:
[root@CentOS7lsrv01 ~]# fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: ssh-iptables
查看ssh-iptables动作状态:
[root@CentOS7lsrv01 ~]# fail2ban-client status ssh-iptables
Status for the jail: ssh-iptables
|- filter
| |- File list: /var/log/secure
| |- Currently failed: 0
| `- Total failed: 0
`- action
|- Currently banned: 0
| `- IP list:
`- Total banned: 0
使用fail2ban需要注意的4点:
1. 如果做错了,想清空一下记录,还原:只需要 “> /var/log/secure”把文件“secure”清空就可以了,然后重启一下fail2ban:
service fail2ban restart
或
systemctl restart fail2ban.service
2. 如果后期需要清空一下iptables规则或重启iptables,也需要把fail2ban重启一下。
3. 如果修改了SSHD服务的端口,如:把端口22修改为2018,配置fail2ban来监控SSHD服务,需要修改主配置文件(/etc/fail2ban/jail.conf)和iptables的动作配置文件(/etc/fail2ban/action.d/iptables.conf):
vim /etc/fail2ban/jail.conf
修改ssh-iptables动作的端口号,默认值是ssh,需要把port=ssh修改为port=2018
vim /etc/fail2ban/action.d/iptables.conf
同样需要把port = ssh修改为port = 2018
修改后重启服务即可:
systemctl restart fail2ban.service
或
service fail2ban restart
4. 如果想要使用fail2ban发送告警邮件,请确保系统的邮件服务能够正常工作,可以发送一封测试邮件到指定邮箱测试:
echo "This is a test mail" | mail -s test mail root@localhost
方法3:通过编写shell脚本来防止暴力破解sshd服务
编辑bansshhack.sh,添加下面的内容:vim bansshhack.sh
#!/bin/bash
#
awk '/Failed/{print $(NF-3)}' /var/log/secure | sort | uniq -c | awk '{print $2"="$1}' >>/root/blacklist
DEFINE=10
for i in `cat /root/blacklist`
do
IP=`echo $i | awk -F '=' '{print $2}'`
NUM=`echo $i | awk -F '=' '{print $1}'`
if [ $NUM -gt $DEFINE];then
grep $IP /etc/hosts.deny >> /dev/null
if [$? -gt 0];then
echo "ssh:$IP" >> /etc/hosts.deny
fi
fi
done 设置计划任务每5分钟执行一次该脚本,可以永远禁止实施暴力破解SSHD服务的主机继续做登录尝试。
方法4:通过pam模块来防止暴力破解SSHD服务
特别说明:文章还在完善,请继续关注!!!!!
|
|