设为首页 收藏本站
查看: 1389|回复: 0

[经验分享] Linux 王子 带你完成 Linux SSHD服务“gong fang”实战

[复制链接]

尚未签到

发表于 2019-2-18 06:50:45 | 显示全部楼层 |阅读模式
重要声明:
本文以研究角度去说明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_keysid_rsa.pub内容其实是一样的,在服务器端可以手工创建“authorized_keys”文件,内容在“id_rsa.pub”复制过来就可以了。
  2. 服务器端公钥“authorized_keys“文件的权限只能是600700,如果是手工创建该文件的话,必需修改权限。
  方法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.4CentOS 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(stopstatus),这点比较奇葩!!
  [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 pathsocket文件路径
  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服务
  

  特别说明:文章还在完善,请继续关注!!!!!




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-673671-1-1.html 上篇帖子: linux安装苹果 下篇帖子: Linux命令之sort
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表