演示使用relaxscan暴力破解SSH & 使用DenyHosts 阻止SSH暴力破解
by iGFW
at 2011-07-13 16:42:25
original http://igfw.tk/archives/3813
演示使用relaxscan暴力破解SSH
由于安全意识不足,导致机器被入侵的例子多不胜数。最近不断接到有服务器被入侵,执行文件被修改的报障。原因大多都是因为开放了SSH服务,同时 允许root访问,密码又过于简单的情况。为提出更有效的防范办法,决定做个攻击模拟。以下使用的工具是relaxsan,从网上可以很方便的找到,为免 影响不好,我这里就不提供了,仅做个攻击演示。
一、获取工具
首先,我不知道为什么叫relaxscan,这东西是从Google搜的,来源自chinaunix某个博客中,某被入侵所提取的代码。
里面包括pscan2和ssh-scan这两个关键程序,及一些必须的文件:
ssh-scan 对指定的服务器进行暴力破解,其需要以下几个文件:
mft.txt 攻击的服务器IP列表,可由pscan2获得,每个IP一行;
pass_file 攻击用字典文件,每行由用户名+空格+密码组成,由ssh-scan自行调用,用于尝试进入ssh访问;
vuln.txt 成功入侵目标主机后的记录文件,会标注那些机器通过什么用户名和密码可以进入。
二、攻击演示
1、演示服务器
target:10.10.10.10/24 →作为被攻击目标
2、创建一个普通用户
这步很重要,虽然没有pscan2的源码,但基本可以肯定的是,pscan2本身具有木马的特性。千万不要以root用户执行pscan2,记住!(网上有似乎有该程序的源码,但我不能肯定是否一样,但在后面的补充内容中,我会做个简单的测试,以说明这问题。)
# passwd test
3、扫描特定网段
切换到test用户,把relaxscan解压出来,给pscan2 赋予可执行权限:
$ id
uid=512(test) gid=512(test) groups=512(test)
$ cd relaxscan/
$ chmod +x pscan2
pscan2 的用法:
Usage: ./pscan2 [c-block]
第一个参数是给出扫描的网段,必须是B类型的;
第二个参数是扫描的端口;
第三个参数是可选的,可进一步限制上面B类型网段中的C 段范围;
扫描10.10.10 网段:
# scanning:
# pscan completed in 3 seconds. (found 2 ips)
$ cat 10.10.10.pscan.22
10.10.10.1
10.10.10.10
可见,找到该网段中有两个IP打开了SSH服务。
4、攻击特定IP的SSH服务
既然找到已打开SSH服务的机器IP,那就可以用ssh-scan 进行暴力破解了。破解的关键是字典文件pass_file ,该文件决定了攻击时间的长短和成功率。可以从网上获取一堆的字典,下面是我模拟的几个用户名和密码:
upload upload
root q1w2e3r4
root qwer1234
root qwer0987
root poiu7890
oracle oracle
ftp ftp
apache apache
nagios nagios
nginx nginx
lighttpd lighttpd
mysql mysql
postfix postfix
※ 千万不要忽视普通用户的登录,普通用户可通过一些root exploit 漏洞提升到root权限,届时,与通过root访问也没什么差别。
把上面通过pscan2得到的IP地址段,转存为mfu.txt文件,然后开始攻击:
$ ./ssh-scan 100
Toata dragostea mea pentru diavola!!!!!!
在被攻击端的安全日志中,会显示大量的尝试记录,类似:
Jul 8 12:00:33 asianux3 sshd[2489]: input_userauth_request: invalid user upload
Jul 8 12:00:33 asianux3 sshd[2488]: pam_unix(sshd:auth): check pass; user unknown
Jul 8 12:00:33 asianux3 sshd[2488]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=10.10.10.1
Jul 8 12:00:33 asianux3 sshd[2488]: pam_succeed_if(sshd:auth): error retrieving information about user upload
Jul 8 12:00:36 asianux3 sshd[2488]: Failed password for invalid user upload from 10.10.10.1 port 2000 ssh2
Jul 8 12:00:36 asianux3 sshd[2489]: Received disconnect from 10.10.10.1: 11: Bye Bye
……
Jul 8 12:00:44 asianux3 sshd[2499]: Accepted password for oracle from 10.10.10.1 port 2005 ssh2
Jul 8 12:00:44 asianux3 sshd[2499]: pam_unix(sshd:session): session opened for user oracle by (uid=0)
攻击的密度与您给ssh-scan提供的参数有关,参数越大,尝试越频繁。从上面的日志可看到,oracle用户尝试登录成功了。
在攻击端也会显示信息:
并记录在vuln.txt 文件中:
oracle:oracle:10.10.10.10
至此,攻击算是完成了。后续的,就是用该用户登录ssh,然后尝试exploit 到root等操作,这里不再叙述。
三、破坏系统可执行文件
本来,我是希望通过这次的模拟,产生类似下面的病毒文件:
可惜没效果。但通过实验,发现pscan2和ssh-scan 确实是有问题的。
1、原系统执行文件信息
找几个系统执行文件的当前信息:
-rwxr-xr-x 1 root root 25216 2010-03-02 /bin/cat
-rwxr-xr-x 1 root root 70632 2010-03-02 /bin/cp
-rwxr-xr-x 1 root root 35880 2010-03-25 /bin/more
-rwxr-xr-x 1 root root 78680 2010-03-02 /bin/mv
-rwsr-xr-x 1 root root 40432 2010-03-25 /bin/umount
2、以root权限运行pscan2或ssh-scan
结果,系统中的一些执行文件被修改:
-rwxr-xr-x 1 root root 33408 07-08 12:34 /bin/cat
-rwxr-xr-x 1 root root 78824 07-08 12:34 /bin/cp
-rwxr-xr-x 1 root root 44072 07-08 12:34 /bin/more
-rwxr-xr-x 1 root root 86872 07-08 12:34 /bin/mv
-rwsr-xr-x 1 root root 48624 07-08 12:34 /bin/umount
这些文件都被加了8192字节(某些文件会加16384字节),导致这些文件损坏了:
-bash: /bin/cp: cannot execute binary file
# mv
-bash: /bin/mv: cannot execute binary file
# umount
-bash: /bin/umount: cannot execute binary file
表现形式很像木马程序。而且这些都是基本的执行文件,结果就是系统异常,修复也很困难。幸亏没感染能力,不会大规模传播。
一般可通过rpm -Va 找出被破坏的文件,然后重新安装对应的rpm包。但手续复杂,而且不能确保修复完整。
所以,尝试relaxscan前,请务必小心哦!
原文:http://www.linuxfly.org/post/611/
使用DenyHosts 阻止SSH暴力破解
把服务器挂上公网,不可避免的有病毒或无聊的人会尝试攻击SSH。DenyHosts 就是通过分析secure日志,把满足一定要求的IP记录到/etc/hosts.deny中,达到屏蔽这些有害IP的目的。
一、安装
官网:http://denyhosts.sourceforge.net
版本比较老,最新的是2.6,但还可用。
我修改了其提供的src.rpm,直接把系统服务/etc/init.d/denyhosts和默认配置文件denyhosts.cfg都加到rpm中:
本地下载:
(适用于Asianux 3.0 python 2.4的版本,其他版本请用源码自行编译吧)
源码:
直接安装即可:
启动:
starting DenyHosts: /usr/bin/env python /usr/bin/denyhosts.py –daemon –config=/usr/share/denyhosts/denyhosts.cfg
日志:
2011-07-07 16:03:37,390 – denyhosts : INFO launching DenyHosts daemon (version 2.6)…
2011-07-07 16:03:37,395 – denyhosts : INFO DenyHosts daemon is now running, pid: 21872
2011-07-07 16:03:37,396 – denyhosts : INFO send daemon process a TERM signal to terminate cleanly
2011-07-07 16:03:37,396 – denyhosts : INFO eg. kill -TERM 21872
2011-07-07 16:03:37,399 – denyhosts : INFO monitoring log: /var/log/secure
2011-07-07 16:03:37,399 – denyhosts : INFO sync_time: 3600
2011-07-07 16:03:37,399 – denyhosts : INFO daemon_purge: 3600
2011-07-07 16:03:37,399 – denyhosts : INFO daemon_sleep: 30
2011-07-07 16:03:37,400 – denyhosts : INFO purge_sleep_ratio: 120
2011-07-07 16:03:37,400 – denyhosts : INFO denyhosts synchronization disabled
二、配置
配置文件在/usr/share/denyhosts/denyhosts.cfg,文件中有很详细的注释,自己看文档吧。这里转一份扶凯的说明(做点补充吧):
PURGE_DENY = 30m #过多久后清除已经禁止的IP,若留空,表示不清除任何HOSTS_DENY记录
BLOCK_SERVICE = sshd #禁止的服务名
DENY_THRESHOLD_INVALID = 1 #允许无效用户失败的次数
DENY_THRESHOLD_VALID = 3 #允许有效用户(除root外)登陆失败的次数
DENY_THRESHOLD_ROOT = 5 #允许root登陆失败的次数
HOSTNAME_LOOKUP=NO #是否做域名反解,默认是YES,最好改为NO
ADMIN_EMAIL = #管理员邮件地址,它会给管理员发邮件
DAEMON_LOG = /var/log/denyhosts #自己的日志文件
三、测试
找台机器,用ssh工具连接这台已打开DenyHosts服务的机器,用错误的密码尝试几次,即可在/var/log/denyhosts中看到类似的日志:
同时,/etc/hosts.deny中也会加入该IP:
# DenyHosts: Thu Jul 7 16:09:07 2011 | sshd: 192.168.228.135
sshd: 192.168.228.135
若要手动允许该IP通过ssh访问,请把对应的IP从/etc/hosts.deny中删掉,然后,重启denyhosts服务即可。
四、其他方法
sshfilter http://www.csc.liv.ac.uk/~greg/sshdfilter/
Fail2Ban http://fail2ban.sourceforge.net/