|
最近,我疯狂的迷上了Linux那优雅的绅士帽。偶尔连上一台服务器,拿几个工具扫描后,我发现Linux其实缺省启动了很多服务,比较典型的有Rlogind、Inetd、Httpd、Innd、Fingerd等,估计网管不是个勤快的人。虽然我并不是一个漏洞革新者,但利用最新公布的黑客工具来突破一个刚刚被发现的安全漏洞,并不是很困难的事情。
入侵
确定目标之前,我准备了一些Linux下的基本工具。
1.从GCC开始
GCC是Linux下攻击者的必备利器之一,它是一款功能强大、性能优越的多平台编译器。GCC的基本用法是:GCC [options] [filenames],其中Options就是编译器所需要的参数,Filenames是相关的文件名称。
TIPS:GCC常见的参数有:
-c,只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。
-o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,GCC就给出预设的可执行文件a.out。
-g,产生符号调试工具所必要的符号。
-O,对程序进行优化编译、连接。
下面是一个简单的例子。首先启动Linux,进入到VI界面,打开VI a.c,然后随意写入一段C语言程序,例如:
#include "stdio.h"
int main()
{
printf("test GCC");
}
然后用GCC编译,命令为:GCC a.c,然后会产生一个a.out的文件,用命令“./a.out”执行即可,这个工具对于Linux下的漏洞攻击十分管用,因此,“肉鸡”上是否开放了这个功能就显得很重要了。
2.连接:尽在掌握
现在,该考虑目标机器了。根据我掌握的情况,某单位的一帮闲人安全意识十分薄弱,而且承包系统管理的单位也整天无所事事。扫描、搜索,找到一个目标后,该考虑考虑攻击手段了,Crack Passwd?Buffer Overflow?CGI漏洞利用?不过,首先要把目标机连上,测试一下:
C:\>ping 203.207.xxx.xxx
Pinging 203.207.xxx.xxx [203.207.xxx.xxx] with 32 bytes of data:
Reply from 203.207.xxx.xxx: bytes=32 time=210ms TTL=119
Reply from 203.207.xxx.xxx: bytes=32 time=130ms TTL=119
Reply from 203.207.xxx.xxx: bytes=32 time=561ms TTL=119
Reply from 203.207.xxx.xxx: bytes=32 time=501ms TTL=119
Ping statistics for 203.207.xxx.xxx:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 130ms, Maximum = 561ms, Average = 350ms
看看目标有没有开Finger服务?一般来说利用Finger,总可以得到几个用户名信息,再通过简单的猜测来试探用户密码。得到一些普通用户帐号后,就可以考虑用Telnet方法来看看了。
3.扫描:看个清清楚楚
现在,该考虑扫描Linux服务器了。目标开了哪些端口?这些端口有什么利用价值?扫描返回的Banner信息说明目标是什么系统?什么版本?这些版本的OS有什么可利用的漏洞?我们有哪些攻击方法可以使用?还是一步一步来吧!
NMap(Network Mapper)是Linux下的网络扫描和嗅探工具包,其基本功能有三个,一是探测一组主机是否在线;其次是扫描主机端口,嗅探提供的网络服务;三是可以推断主机所用的操作系统。Nmap可用于扫描仅有两个节点的LAN,直至500个节点以上的网络。此外,它还允许用户定制扫描技巧,并能将探测结果记录到各种格式的日志中,供进一步分析操作。
NMap可以从http://www.insecure.org/nmap/获得。可以选择RPM格式或者RPM源码格式安装。以下是一个安装范例:
bzip2 -cd nmap-VERSION.tar.bz2 | tar xvf -
cd nmap-VERSION
./configure
make
su root
make install
执行NMAP后,我们看到如下结果:
# nmap -sS -T Agressive -p 1-10000 203.207.xxx.xxx | grep open
Port State Protocol SerVIce
21 open tcp ftp
22 open tcp ssh
25 open tcp smtp
80 open tcp http
119 open tcp nntp
3306 open tcp mysql
从以上的分析列表可以看到,203.207.xxx.xxx作为WWW和FTP服务器使用,此外,该服务器还提供了SSH、SMTP、NNTP、MSQL和MSQL1服务。在这些服务中,SSH是一种带有完善加密和认证机制的协议,如果服务器上运行的SSH是最新版本,那么攻击它就有一定的难度。HTTP、FTP、SMTP和NNTP是203.207.xxx.xxx服务器实际提供的服务,这些服务是必须运行的。
现在,我们找到了打开的端口,却不知道是哪个程序在操作这个端口,就要使用LSOF等工具了。执行命令“lsof -P -n –i”,即可显示所有本地打开的端口及操作这些端口的程序。一个比较典型的例子如图1所示。
图1
另外,如果想看看服务器管理员为这个域所设置的内容,还可以用Nslookup输出网络域信息,查看DNS,然后运行NMAP搜索整个网络可以列出域之内所有已知服务器。
4.查询:探个明明白白
看看目标有没有开Finger服务,如果有的话利用Finger得到用户名信息,我们可以通过简单的猜测来试探用户密码,用户多的话总会有几个懒虫的现在进行更加深入的探测。使用Rpcinfo和Kshowmount等,可以查询机器提供了哪些服务。
如果NFS正在运行,就有可能从服务器获得已导出文件系统的清单,不过我在这台服务器上并没有成功,倒是在另一台默认值有问题的服务器上取得了成功,这台服务器把文件系统完全不受保护地以可读写方式显露给外界,这就给了我一个很好的机会:
# /usr/sbin/kshowmount -e 203.207.xxx.002
Export list for 203.207.xxx.002:
/usr/lib/cobol (everyone)
/usr/sys/inst.images (everyone)
/stadtinf (everyone)
/var/spool/mail (everyone)
/usr/lpp/info (everyone)
/usr/local (everyone)
/pd-software (everyone)
/u1 (everyone)
/user (everyone)
/fix (everyone)
/u (everyone)
/install (everyone)
可以看到,203.207.xxx.002上所有注明了“everyone”的目录都是向公众开放的,其中包括保存了用户邮件的“/var/spool/mail”目录,以及用户的主目录“/u”和“/u1”。另外“/usr/local”和“/usr/lib/cobol”也是允许写入的,这使得它很容易被安装上特洛伊木马,轻而易举的获得控制权。
5.出击:锁定漏洞
通过扫描返回的Banner和具体的系统版本,看看这个系统有没有什么可以利用的大漏洞,因为Linux内核确实存在多个安全漏洞,最近比较热门的漏洞包括:Ext3文件系统信息泄露、SoundBlaster代码导致本地崩溃、DRI问题导致本地崩溃、Mremap的其它问题导致本地拒绝服务等。利用这些漏洞,攻击者可以获得敏感信息或进行拒绝服务攻击。细细数来,通过对Linux内核文件版本的分析和轮番实验,我觉得:系统存在Seclpd.c、Netpr.c漏洞可能性很大!
从绿盟资料库搜索后得知Red Hat7.0版本有一个LP服务(515端口)有远程溢出漏洞,登陆http://www.safechina.net/www_hack_co_za/redhat/7.0/seclpd.c。
(完整代码请看光盘“杂志相关”。)
使用VI进行编辑:#VI seclpd.c,然后用“:wq”保存后编译。把Seclpd.c传到目标机上,用GCC编译:
$GCC -o seclpd seclpd.c
然后,执行,显示为失败。
$./seclpd 203.207.*.* -t 0
将参数换成t1,再试仍然是失败。
$./seclpd 203.207.*.*-t 1
看来要来个暴力破解了。
$./seclpd 203.207.*.* brute –t 0
过了大约5-8分钟左右,结果出来了。
uid=0(root)gid=other(other)....
搞定!一切顺利,现在,有了ROOT和它的PASSSWD,可以考虑加个后门、安装Sniffers等动作了。
防范
“知己知彼,百战不殆”。作为一个好的系统管理者,要保障整个系统的安全运行,最好的方法是了解攻击的工作原理和机制,了解攻击中使用了哪些工具,如何操作入侵等等。
1.蛛丝马迹:从日志着手
日志记录了系统每天发生的事情,可以通过他来检查错误发生的原因或者攻击者留下的痕迹,还可以实时的监测系统状态,监测和追踪侵入者等等。
TIPS:在Linux系统中,有三个主要的日志子系统:
(1)连接时间日志。由多个程序执行,把纪录写入到“/var/log/wtmp”和/“var/run/utmp”,Login等程序更新Wtmp和Utmp文件,使系统管理员能够跟踪谁在何时登录到系统。
(2)由系统内核执行的进程统计。当一个进程终止时,往统计文件中写一个纪录。进程统计的目的是为系统中的基本服务提供命令使用统计。
(3)错误日志。由Syslogd(8)执行,各种系统守护进程、用户程序和内核向文件“/var/log/messages”报告值得注意的事件。另外有许多UNIX程序创建日志。像HTTP和FTP这样提供网络服务的服务器也保持详细的日志。
从攻击角度而言,服务器上的安全文件十分重要,若你关闭外部网络对你的服务器的访问,攻击者总是试图连接服务器上的若干个端口,但是由于服务器关闭了Inetd启动的所有服务,所以LOG系统记录下了这些访问拒绝。常用的日志文件如下:
access-log 纪录HTTP/web的传输
acct/pacct 纪录用户命令
aculog 纪录MODEM的活动
btmp 纪录失败的纪录
lastlog 最近几次成功登录和最后一次不成功的登录
messages 从syslog中记录信息
sudolog 纪录使用sudo发出的命令
sulog 纪录使用su命令的使用
syslog 从syslog中记录信息
utmp 纪录当前登录的每个用户
wtmp 用户每次登录进入和退出时间的永久纪录
xferlog 纪录FTP会话
2.亡羊补牢:加强防卫
一方面要积极寻找本操作系统的常见漏洞并及时升级厂商所公布的补丁。比如,可以修改Inetd.conf文件以关闭某些服务,重新启动后再用NMAP扫描,在攻击者发现其以前更早的发现自己的系统的漏洞,并加以弥补。
另一方面要加强密码保护。攻击密码的手段主要有:字典攻击(Dictionaryattack)、混合攻击(Hybridattack)、蛮力攻击(Bruteforceattack)。最好的防卫方法便是严格控制进入特权,即使用有效的密码。主要包括密码应当遵循字母、数字、大小写(因为Linux对大小写是有区分)混合使用的规则,如加入“#”或“%”或“$”这样的特殊字符以添加复杂性。
3.反击:从系统开始
攻击者具有对Linux服务器的全部控制权,可以在任何时刻都能够完全关闭甚至毁灭此网络。可以采取的反击措施有:备份重要的关键数据;改变系统中所有口令,通知用户更新口令;隔离该网段,使攻击行为仅出现在一个小范围内;允许行为继续进行。如有可能,不要急于把攻击者赶出系统,争取收集证据;进行各种尝试,识别出攻击源
来源:7747 |
|