-
-
TCP/IP安全
-
发表于: 2015-9-7 11:44 1123
-
TTCP/IP协议安全
5.1 TCP/IP是Internet实现通信的核心
TCP/IP是现在Internet上使用的最流行的协议,它在70年年代早期被开发出来,并最终与BSD UNIX结合在一起,从那时起,它就成为了Internet的一个标准。今天,几乎所有与Internet连接的计算机都运行着某种形式的TCP/IP协议。TCP/IP可以在各种不同的硬件和操作系统上工作,因而利用TCP/IP可以迅速方便地创建一个异构网络。
但是,在Internet首先在1966年创建时,创始者远没有对安全问题考虑的太多。当时创建者注重的是网络的功能,因此Internet和TCP/IP并没有被过多的考虑安全性。所以现在的安全机制被经常修改以适应现有的网络和TCP/IP。
与计算机网络的层次结构有所不同,TCP/IP协议采用的层次结构,所涉及的层次包括网络接口层、网间网层、传输层和应用层。每一层都实现特定的网络功能。各层包含常用的协议。
TCP/IP与ISO/OSI模型的对应关系并不非常严密,其内部差别是很大的。两种分层结构比较起来:TCP/IP力求简单高效,例如IP层并没有实现可靠的面向连接,而是把它交给了TCP层实现,保证了IP层的简练性。事实上有些服务并不需要可靠的面向连接服务,如在IP层上加上可靠性控制,对有些服务来说是
一种处理能力的浪费。况且由于光纤的大量应用,网络传输的可靠性大大提高。简单高效的特点是TCP/IP在Internet上大有用武之地的重要原因,但也是TCP/IP协议安全性能较低的原因之一。而OSI模型在各层上有所重复,而且会话层和表示层不是对所有的服务都适用,无疑有些繁琐,但对实现安全可靠的网络协议则是有帮助的。
5.2 物理层
物理层的功能是传输在线缆上的电子信号。用于信号传输的介质的类型有多种,包括光纤,同轴电缆和双绞线。物理层上的安全保护措施不多。如果一个潜在的黑客可以访问物理介质,如搭线窃听和sniffer,他将可以复制所有传送的
信息。同时,安全管理员必须了解他们保护的网络的所有布局。黑客最常用的攻击和渗透到网络中的一种方法是在公司内部主机上安装一个packet sniffer,监听网络介质上的流量。局域网使用基带传输,任何线缆上传输的数据将可被任何可以物理连接的人得到。理解你的网络布局可以帮助阻止未知的sniffer发生。最普通的网络拓扑结构是星型,总线型,环型,和复合型。
在物理层,唯一有效的保护是使用加密,流量添充等,所有这些技术,对于黑客来说利用Sniffer来获得信息都是很难成功的。
IP层其作用是将数据包从源主机发送出去,并且使这些数据包独立地到达目的主机。它并不提供任何错误纠正和流控制方法。在IP层定义了一个标准的包格式和协议,所有上层通信如TCP,UDP,ICMP等都被封装在一个IP数据报中,在网络层应用的协议在主机到主机的通信中起到了帮助作用。绝大多数安全威胁
并不来自于TCP/IP的这一层。
IP协议:IP地址是一个32位的地址,标识在网络中主机的唯一性,IP数据包中包含一些信息和控制字段,以及32位的源IP地址和目的IP 地址。每个IP数据报文都是单独的信息,从一个主机传递到另一个主机,主机把收到的IP 数据包整理成一个可使用的形式,这种开放式的构造使得IP层很容易成为黑客的目标。在这一层常见的攻击就是IP地址冲突和欺骗。
ICMP协议:ICMP在IP层检查错误和其它条件,一般的ICMP信息是非常有用的,例如,当ping一台主机想看是否运行时,就正在产生一条ICMP信息。远程主机将用它自已的ICMP信息对ping请求作出回应。然而ICMP信息常用于攻击远程网络或主机,近来的攻击方法如Tribal flood Network系列的程序利用ICMP来消耗带宽来有效地摧毁站点。很久以前的ICMP攻击microsoft的TCP/IP的例子,就是黑客从ping请求中产生一个特殊的ICMP信息包,运行早期的TCP协议版本的任何计算机都不能较好处理ICMP请求而崩溃。业界经常把这种攻击称为winnuck攻击。到今天,microsoft的站点对于ping并不作出响应,因为它已过滤了所有的ICMP请求。一些公司也在防火墙上过滤ICMP流量。
5.3 网络层
5.3.1 IP地址冲突
两台Internet主机的IP地址相同,就出现了IP地址冲突。有设置失误的
情况,也有盗用的情况。盗用IP不是IP不够用,而且有时也是为了做一些非法
的活动,例如冒充另外的主机去攻击别人的主机。相比之下,冒充同一网段内的主机比较方便容易。Windows里修改一下IP地址设置和子网掩码就可以了,UNIX下稍微麻烦一些,需要编程修改。
5.3.2 IP地址欺骗
黑客经常利用一种叫做IP欺骗的技术,把源IP地址替换成一个错误的IP地址。接收主机不能判断源IP地址是不正确的,并且上层协议必须执行一些检查来防止这种欺骗。在这层中经常被发现的另外一种策略是利用源路由IP数据包,仅仅被用于一个特殊的路径中传输。这种利用被称做源路由。这种数据包被用于击破安全措施例如防火墙。
使用IP欺骗的一种攻击很有名的一种是Smurf 攻击。一个Smurf攻击向大量的远程主机发送一系列的ping请求命令。黑客把源IP地址替换成想要攻击的目标主机的IP地址。所有的远程计算机都响应这些ping请求,然后对目标地址进行回复而不是回复给攻击者的IP地址。目标IP地址将被大量的ICMP包淹没而不能有效的工作。Smurf攻击是一种拒绝服务攻击。
5.4 传输层
传输层的服务允许用户按照传输层的数据格式分段及封装应用层送来的数据。这一层数据流提供了端到端的传输服务,它在发送主机与接收主机之间构建了一个逻辑连接。传输层的主要有方面的功能,一是通过滑动窗口实现流量的控制;二是通过序列号及确认提供可靠性。
传输层包括两个协议。第一个是TCP协议,即传输控制协议,是一个可靠的、面向连接的协议。它允许在Internet上两台主机之间信息的无差错传输。TCP还进行流量控制,以避免发送过快而发生拥塞。不过这一切对用户是透明的。第二个是UDP协议,它采用无连接的方式,不管发送的数据包是否到达目的主机,数据包是否出错。收到数据包的主机也不会告诉发送方是否正确收到了数据,它的可靠性是由上层协议来保障的。因此UDP很少有安全上的隐患,因为主机发出一个UDP应不期望收到回复。
两者各有优缺点。面向连接的TCP可靠,但是效率较低,通信过程中传送了很多与数据无关的信息,降低了信道的利用率,TCP常用于一些对数据可靠性要
求较高的应用;无连接的UDP不可靠,但因为不用传输许多与数据本身无关的信息,所以速度快,常用于一些实时业务,也用于一些对差错不敏感的应用。
5.4.1 TCP包头
TCP包头的标记区建立和中断一个基本的TCP连接。有三个标记来完成这些过程:
SYN:同步序列号
FIN:发送端没有更多的数据要传输的信号
ACK:识别数据包中的确认信息
5.4.2 TCP建立连接的过程
TCP是面向连接的协议,因此在数据传送之前,它需要先建立连接。TCP的
数据段格式中含有序列号及确认位ACK,在TCP建立连接时,两个主机必须保持同步,以它们各自的初始序列号(ISN)表现出来。初始序号是建立一个TCP连接时的开始号,在连接过程中交换初始序号,可以确保在以后出现问题时,能恢复丢失的数据。
同步是通过在建立连接的数据段中携带一个被称为SYN控制位及一个初始序列号的段之间的交换过程来实现的,其中SYN位代表了同步,它要求每一端在发送它自已的初始序列号时,同时还要接收本次连接中对方的确认ACK,每一端也都必须接收到另一端的初始序列号及发送一个确认ACK,这一过程是有特定顺序的,通常这个交换过程被称为3次握手/建立连接。至此,A和B各自获得了对方将来要发送的数据最小序列号。由于网络中的序列号并没有一个全球性的时钟,TCP提取初始序列号可能使用的是不同的机制,所以3次握手是必须的。当接收者收到的第一个SYN是一个被迟延的旧信号时,接收者是不知道的,除非他能记住本次连接的最后一个序号,但这通常是不可能的。所以他必须要求发送者验证这个SYN。你应该不断检查TCP握手,因为它经常被黑客操纵。例如有名的SYN Spoofing。
5.4.3 TCP简单确认过程
在可靠的面向连接的数据传输过程中数据包必须按和它们传送时完全相同的顺序发送到接收端。如果在任何数据包丢弃、破坏或以不同顺序接收、发送过
程均将失败。因此TCP的确认办法是使接收端对接收到的每一个数据包都发出一个确认信号。每个数据包须发送前都赋予一个编号。在接收方,TCP把分开的段重新装配成为一个完整的报文。如果在序号系列中丢失了一个序号,那个丢失序
号的段要被重发。在给定时间间隔内,没有得到确认的段也要被重发。
5.4.4 中断TCP连接
因为TCP连接是全双向的,中断一个TCP连接需要四个步骤。全双向意味着数据独立的在两个方向上流动,因此两个连接都必须被关闭,为了正确的关闭TCP连接,任何一个主机都必须发送一个FIN(就是激活TCP包头中的FIN标记);当一台主机接受到一个FIN,它必须终止流动在另一个方向的数据,通过发送一个FIN到另一端的应用程序,一个会话结束大多数的应用程序将关闭两个方向上的数据流,然而,仅仅关闭一个方向并且在半关闭的模式中进行操作是可能的。
结束一个TCP连接的四个基本步骤是:
1)服务器通过激活FIN标记执行一个Active close(客户端经常结束应用程序,但是服务器将开始TCP连接的结束),这个行动终止了从服务器到客户机的数据流。
2)客户端通过发送一个ACK到服务器,执行了一个passive close。
3)客户端也发送它自己的FIN给服务器,以终止从客户端到服务器的数据流。
4)最后服务器发送一个ACK返回给客户端,TCP连接被终止了,上图展示了完整的过程。
5.4.5 用户数据协议UDP
UDP是一个非面向连接的协议。它经常用做广播类型的协议,如音频和视频数据流。它更快并更少占用带宽,因为一个UDP连接不被持续保持。这个协议并不能保证信息的仁慈也不能重复被中断的传输,但TCP可以。因此,在音频或视
频传输中,几个数据包的丢失将不会有什么影响。
一些其它使用UDP的协议,例如TFTP,它要比FTP简单。如果认证并不被考虑的话也是非常有用的。类似于TFTP的协议需要所有的包都到达,但这些协议仅仅需要确保在应用层上传递和接收。
UDP没有所谓的窗口技术,也不用确认,应用层协议可以保证可靠性,一个UDP的报头相对来说较小。
5.4.6 端口
一台主机通常只有一个IP地址,但常常要提供多种TCP/IP服务。 如何分别出客户端的请求对应哪个服务呢?通常使用端口号来标识主机上的不同服务,当与这台主机通信时,不但要指出通信主机的IP地址,还要指明同主机上的端口,即指明是哪种服务通信。主机对各个端口进行监听,监听到服务请求后,发送给相应的服务处理。
端口号是一个16位的数,编号可以从1到65535。 Internet Assigned Numbers Authority(IANA)规定有1023个端口作为well-know端口。Well-know端口专门为服务器端的应用程序保留下来,一个服务器应用程序能够使用任何未被限定的端口,及那些大行1023的端口,而不需要向IANA申请。
有的端口号对应的服务有安全缺陷,因为安全在很大程度上依赖于你控制网络数据包的能力,必须能够准确地确定这些数据包流向哪些计算机和程序。攻击
者可以利用端口扫描软件对主机的各个端口进行分析,期望找到安全漏洞。比如一个著名的缺陷是某些UNIX系统中SMTP服务对应的25号端口有可能被攻击者利用直至攻击成功,所以应该尽量关闭无用的端口(服务),减少安全隐患。
5.5 应用层
应用层协议直接面向用户。TCP/IP的应用层协议是非常多的,最常见和最常用的有Telnet,FTP,SMTP和HTTP等。正是这些应用层协议将TCP/IP的优势发挥得淋漓尽致,使Internet变得如此丰富多彩。
Telnet,也就是虚终端服务,是用得较多的一类应用层协议。
Ftp,即文件传输协议,提供了一个有效的途径,将数据从一台主机传送到另一台主机。文件传输有文本和二进制两种模式。文本模式用来传输文本文件,并实现一些格式转换。在二进制传输模式时,如传输图像文件,压缩文件,可执行文件时,则不进行转换。
SMTP,即电子邮件服务,使用缺省的端口25,以电子数据的方式,是用户快速,方便地传送信息。
HTTP,即超文本传输协议,用来在WWW服务器上取得用超文本标记语言书写
的页面。
5.5.1 简单邮件传输协议SMTP
SMTP本身有很小的风险,但黑客还是尝试去破坏一个email服务器。通常黑客对SMTP服务器采用不同方式的攻击,例如,可以创建一个伪造的e-mail信息直接发送到你的SMTP服务器,这条信息中可以包含一些有害的信息。SMTP另一重要的威胁是拒绝服务攻击,黑客经常向SMTP服务器发送大量的E-mail信息使得这台服务器不能处理合法用户的e-mail流量。这种方法有效地导致SMTP服务器不可用,因此对合法的用户造成了拒绝服务。
SMTP最大的风险就是发送和接收病毒和特洛伊木马。一个典型的e-mail信息包含很少的一些基本内容:标题、接收者,以及时间和日期。E-mail信件中标题中的信息很容易被作假,信件的另一个位置是正文部分,含有标准的文本或真正的信息,较新的e-mail客户端程序可以发送HTML格式的信息。E-mail信件中标题和正文部分都不包含可执行的代码,因此病毒和特洛伊木马不会出现在这两个位置中,它们经常出现在附件中。一封电子邮件中可能含有各种类型的附件,包括病毒和木马。最好的防范方法是购买和使用安全的SMTP服务器,另一个预防的方法是进行用户教育。教育用户了解病毒的木马是如何通过SMTP传播的以减少它们在网络中的出现。
较新的SMTP服务器提出了一些安全特性,如反向域名查寻来确保E-mail是否来自一个真正想要发送的人。只要可能一定要使用认证机制。保护E-mail本身的内容,加密是一个关键。前面的课程中我们已经讨论过主要加密的方法以及几种流行的工具,包括在微软服务器上加密方法的特性和公钥加密如PGP。这些方法对于保证通过你的服务器发送的信息是否安全是非常有用的。
Internet蠕虫
Internet蠕虫是一种拒绝服务病毒,在一九八八年十一月二日开始危害了与Internet相连的主机很多天,它是一个非常重要的历史事件,因为它告诉了安全专家有关TCP/IP应用程序的漏洞。此事件是由一个利用UNIX下的TCP/IP实施的漏洞编写的程序产生的,这个用C语言编写的程序大约破坏了5000台Internet上的主机,这种病毒以几种主要方法影响基于WEB技术开发的程序。首先,WEB程序语言如JAVA现在已经强制严格检查边界,在JAVA中想写入超过最后512字
节是不可能的。其次,操作系统给予系统运行者对于通过网络攻击的过程更多的控制权限。Internet蠕虫间接的影响堡垒主机和与互联网连接的防火墙的体系结构。最近流行的红色代码也是类似的一种蠕虫病毒,其版本2发作会自动开启600个线程来对外扫描并传播,并会安装木马,它是利用微软Windows IIS服务器的一个安全漏洞进行攻击和传播,已危害全世界数十万台主机。
Melissa病毒
Melissa 病毒是由一个新泽西的黑客创建的,与一九八八年的Internet蠕虫不同,Melissa病毒是利用E-mail客户端应用程序,而不是服务器本身。这种病毒嵌入到微软的WORD文档中。当用户打开此文档时比病毒将会自身复制并传播,这种病毒影响用户的机器,利用E-mail客户的应用程序自动的发送信息并包含已完全受感染的附件,并发送给用户端的地址薄的前五十名联系者。
E-mail和病毒扫描
Internet蠕虫和Melissa病毒是需要进行有效E-mail扫描的最典型例子,这两种攻击显示了SMTP服务器的一些漏洞。首先E-mail服务器不检查传送信息中的内容,其次,它们很容易的被大量的请求导致不能响应。商业反病毒程序可以创建一些安全的级别,因为它们可以在用户激活内嵌病毒之前扫描E-mail附
件。然后这些程序只能在个人机器上使用。
网络级E-mail扫描
在一些SMTP服务器中,有关新的安全特点是可以基于网络级的自动扫描病毒。尽管E-mail信息本身不会携带病毒,但一个病毒可以通过附件进行发送。高级的SMTP服务器可以通过把Email信息放到一个临时存放区域来扫描其是否携带病毒。这些服务器扫描文件,然后转发适当的Email。经常,这种执行只需要少量的时间,但这种延迟却是非常值得的。你还可以通过你的防火墙来扫描你的Email。然而这种扫描,不管是通过SMTP服务器还是防火墙,都在某种程度上降低了系统的性能。
访问控制方法
当保护一个Email服务时,你要做到:
§禁止转发非验证用户的信息。一些SMTP服务器默认情况下是不禁止这种转发的
§减小Email附件的大小
§一个帐号可以接收有限的Email数量
配置SMTP验证还是很有必要的,可以有效地防止黑客把你的SMTP服务器当作发送垃圾邮件的中转站以至于你的SMTP服务器超负荷,下面列出有关Sendmail服务器来实现SMTP认证的步骤:
1. 首先要下载sasl库,该函数库提供了安全认证所需函数,下载地址是
(ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/),版本3.5.21。
2. 下载sendmail(http://www.sendmail.org),版本在8.10.0以上的
sendmail才支持SMTP认证功能。
3. 注意选择客户端电子邮件软件。并不是所有的客户端电子邮件软件都支持SMTP认证功能,几种常见的版本要求是这样的:
Netscape Messenger的版本要4.6以上
Outlook和Outlook Express要5.0版本以上
Eudora pro的版本要在4.3以上
Foxmail目前还不支持这个功能。
每一种软件的认证方法是不一样的,编译sasl库的时候和配置sendmail略有不同。以最常见的Outlook Express 5.0的设置方法为例,介绍如下。
一、安装sasl库
1. 解压cyrus-sasl-3.5.23.tar.gz到你选定的目录
2. cd cyrus-sasl-3.5.21
3. ./configure-enable-login-with-pwcheck
Outlook Expresss使用LOGIN的认证方法,sasl 库缺省并不支持这种方式,所以要在生成配置文件的特别加入,另外,Outlook的口令验证方式也不是缺省的方式,所以也需要加入-with-pwcheck的选项。
下面就可以编译和安装sasl库了。
Make
Make install
4. 缺省情况下,所有的库函数安装到/usr/local/lib目录下,但sendmail使用的库函数是在目录/usr/lib下的,所以需要做一些调整。
Cd/usr/lib
In/usr/local/lib/sasl/./sasl-s
Cp/usr/local/lib/libsa*.
也可以避开这一步,在第3步时候运行configure脚本前,修改其中的缺省路径就可以了。打开configure文件找到这一行ac_default_prefix=/usr/local(在文件前几行),改为ac_default_prefix=/usr就可以了,这样更方便一些。
5. 新建目录/var/pwcheck, 供pwcheck命令使用,该命令是一个后台程序,负责检查用户的输入口令,以root权限件使用shadow口令文件。
6. 在/usr/lib/sasl目录下建立文件Sendmail.conf,加入如下一行
pwcheck_method: pwcheck
这样sasl库函数的安装就完成了。
二、编译和配置sendmail
1. 解压sendmail软件到你希望的目录,进入sendmail-8.10.2目录。
在devtools/Site/目录下创建config.site.m4文件,加入如下两行文字,把SMTP认证功能编译到sendmail中。
APPENDDEF(confENVDEF’, ‘-DSASL’)
APPENDDEF(‘conf_sendmail_LIBS’, ‘-lsasl’)
2. 回到sendmail-8.10.2目录,再进入sendmail目录,开始编译sendmail。
./Build –c(如果不是第一次编译,需要加入-c选项,清除以前的配置)
编译成功后,运行./Build install安装软件。
3. 下一步需要改写Sendmail的配置文件。回到上一级目录,再进入cf/cf目录,找到合适的.mc文件(具体做法参见其他文章,这些不在本文讨论范围中)。按照你的要求适当修改,加入如下几行:
TRUST_AUTH_MECH(‘LOGIN PLAIN DIGEST-MD5’)
Define (‘confAUTH_MECHANISMS’, ‘LOGIN PLAIN DIGEST-MD5’)
Dnl define (‘confDEF_AUTH_INFO’, ‘/etc/mail/auth/auth-info’)
FEATURE (‘no_default_msa’)
DAEMON_OPTIONS (‘Port=25, Name=MSA, M=E’a)
说明:“TRUST_AUTH_MECH”的作用是使sendmail不管access文件中如何设置,都能relay那些通过LOGIN,PLAIN或DIGEST-MD5方式验证的邮件。
“confAUTH_MECHANISMS”的作用是确定系统的认证方式。
“confDEF_AUTH_INFO”的作用是当你的计算机作为客户机时,向另外一台有smtp认证功能的主机进行认证,用户和密码存放在auth-info文件中,在这个例子中并不需要这个功能,所以注释掉了。
4. 编译生成/etc/mail/sendmail.cf文件
m4 xxxx.mc>/etc/mail/sendmail.cf,不过记住一定要备份旧的sendmail.cf文件,否则就可能麻烦了。
5. 现在基本上可以了,启动sendmail来进行测试。
sendmail-bd-q20m
运行下面命令:
telnet localhost 25
ehlo localhost
注意有没有以下的信息出现:
250-XXXXXXXX
250-XXXXXXX
250-AUTH LOGIN PLAIN DIGEST-MD5
250-XXXXXX
可能会略有不同,不过你选定的认证方式一定要有的。如果显示没有问题,则表明服务器端的配置已经成功了。如果没有出现上面的信息,请运行sendmail –0 loglevel=14 –bs,仔细检查问题所在。在结束服务器端的配置之前,还要做一件事,运行pwcheck这个daemon程序,这样才能完成用户认证功能。
三、Outlook Express 5.0的配置
1. 打开你的Outlook Express,修改你的账号属性,在服务器选项,选取我的smtp服务器需要认证选项,然后进入配置。
2. 不要选取安全口令认证,sendmail并不支持这个选项。是选取使用pop3同样的口令还是选择另外输入用户和密码。如果你在服务器上有一个真实账号,不妨选取使用同样的口令,如果没有账号,选用其他的用户口令同样可以。到此
SMTP认证的功能已经实现了。
5.5.2 超文本传输协议HTTP和文件传输协议FTP
FTP用来建立TCP/IP连接后发送和接收文件。FTP由服务器和客户端组成,几乎每一个TCP/IP主机都有内置的FTP客户端,并且大多数的服务器都有一个FTP服务器程序。FTP用两个端口通信利用21端口来控制连接的建立,控制连接端口在整个FTP会话中保持开放,用来在客户端和服务器之间发送控制信息和客户端命令。数据连接建立使用一个短暂的临时端口。在客户端和服务器之间传输一个文件时每次都建立一个数据连接。
黑客很少直接使用FTP。因为它仅用于发送和接收文件,因些很难破坏,然而,黑客所做的是间接地破坏FTP服务器。FTP服务器可能不需要对客户端进行认证,当需要认证时,所有的用户名和密码都是以明文传输的。一种常见的破坏就是寻找通话匿名连接并且有写权限的FTP服务器,然后黑客上传不正确的信息以塞满整个硬盘空间,如果FTP服务器在含有操作系统的硬盘上,如果硬盘被错误信息塞满,这种负载将会导致操作系统不会正常运行。同样,如果硬盘被塞满,使日志文件没有空间再记录其它事件,这样黑客企图进行操作系统或鞭它服务而不被日志所检查到。
另外一种对于FTP服务器的破坏是把一些盗版软件拷贝到服务器 ,然后把FTP服务器通知给其它黑客并上载或下载,在任何服务器上并没有直接目的的攻击,因为所以的活动看上去都是合法的,然而,他们已经把这个FTP服务器作为一个存储服务器来达到他们的非法活动的目的。
HTTP是互联网上最广泛的协议,互联网上大概有一半的流量是HTTP。HTTP使用80端口来控制连接和一个临时端口传输数据,HTTP有两种明显的安全问题,它们是客户端浏览程序和HTTP服务器外部应用程序,HTTP客户端使用浏览器访问和接收从服务器端返回的WEB页面。浏览器应用程序用于格式化不同类型的内容。如下载电影则需要客户端加载一个类似Windows Media Player或Real Audio Player这样的程序。对于HTTP用户的另一个问题是下载有破坏性的ActiveX控件或Java Applets。这些程序在用户的计算机上执行并含有某种类型的代码,包括病毒和特洛伊木马。 对于这种破坏的最佳保护方法是教育你的用户,这些程序是干什么用的并警告他们不要下载未检验过的应用程序。
HTTP服务器也须小心保护,HTTP服务器在很多基础上类似FTP服务器。为了扩大和扩展WEB服务器的功能,一些扩展应用程序如JAVA,CGI,ASP等,这些程序都有一些安全漏洞,一旦WEB服务器开始执行代码,那么它有可能遭到破坏,这些程序有两种方法来破坏WEB服务器,第一,通过修改当前HTTP服务器的程序如何执行;第二,在HTTP服务器上放置一个特洛伊木马。
5.5.3 Telnet和SNMP
远程登录telnet
Telnet是用于远程访问并可用来管理计算机的,Windows NT默认安装是提供Telnet服务器的,因为第三方的服务可以很容易地加进去。Telnet在远程用户登录时是以明文方式发送所有的用户名和密码的。有经验的黑客可以劫持一个Telnet会话。使用Telnet的另一个安全问题是什么时候使用这个协议。Telnet
应该在检查整个连接到你的网络上的客户端和服务器时才使用。因此不应该应用于互联网上。同时还应该在防火墙上过滤掉所有的Telnet流量。有一系列的程序功能类似:它们被称为r系列,包括rsh 和rlogin。当使用r系列的程序时要考虑和Telnet相同的安全问题。
简单网络管理协议(SNMP)
SNMP允许管理员检查状态并且有时修改SNMP节点的配置。它使用两个组件,即SNMP管理者和SNMP节点。管理者收集所有由SNMP节点发送的trap,并且直接从这些节点查询信息,SNMP通过UDP的161和162端口传递所有的信息。SNMP所提供的唯一认证就是community name,一个community name就是由SNMP来验证节点的术语,如果管理者与节点有相同的community name,将允许所有SNMP查寻,如果一个黑客危及到community name,他将能够查询和修改网络上所有使用SNMP的节点。另一个安全问题是所有的信息都是以明文传输的。一个黑客用SNMP管理器连接到网络中的任何位置上都可以得到这些信息,包括community name。SNMP不应该应用于公网上,尤其是互联网上。SNMP是公司私有网络中可用的网络管理解决方案,但是所有SNMP流量应有防火墙中过滤掉。
5.5.4 域名系统DNS
DNS在解析DNS请求时使用UDP的53端口,但是,在进行区域传输时使用TCP的53端口,一次区域传输是以下面两种情况完成的:
•一个客户端利用nslookup命令向DNS服务器请求进行区域传输;
•当一个从属域名服务器向主服务器请求得到一个区域文件。
黑客可以攻击一个DNS服务器并得到它的区域文件,这种攻击的结果是黑客可以知道这个区域中所有系统的IP地址和计算机名。
如何保护DNS服务器,首先把这个服务器放在防火墙后面,然后配置防火墙阻止所有的区域传输,第二可配置你的系统只接受特定主机的区域传输。
5.6 常见的协议层攻击类型
了解常见的几种攻击方式及原理,增强网络安全意识以避免受到攻击,是作为安全人员应该遵循的一些规则。以下就介绍几种常见的攻击方式:
SYN flood攻击:这种拒绝攻击利用了TCP建立连接时三方握手的弱点,攻击者可以建立很多半开连接。在这个过程中,当服务器要跟攻击者建立连接时,攻击者却终止了连接。攻击者再建立其它的连接然后再终止,直到目标服务器找开成百上千的半开连接。这种攻击方式是最常见的攻击WEB服务器的攻击手段。
Smurf 和 Fraggle攻击:Smurf攻击是利用Ping程序中使用的ICMP协议。攻击者首先制造出源地址是受攻击主机的IP地址的包。下一步,攻击者将这些包发送给不知情的第三方,使它们成为帮凶。如果攻击者发送足够多的ICMP包,回应会超过受攻主机的承受能力。实际上Smurf攻击是一种IP欺骗,将导致拒绝攻击的结果。Fraggle攻击与Smurf攻击类似,只是利用UDP协议。虽然标准的端口是7,但是大多数使用此类攻击的程序允许指定其它的端口。最好的防止受
到Smurf和Fraggle攻击的方法是在防火墙上过滤掉ICMP报文,或者在服务器上禁止Ping命令。
Smurf,Fraggle和广播地址:广播地址是指主机地址都为255的地址,有些路由器回应广播IP地址。广播地址可以被合法地用于排错工具,你可以向整个子网发送ping包看哪些地址回应。当然,如果这些地址被smurf和fraggle攻击所利用,一个广播地址会有上百台主机参与攻击。因此应注意,在路由器上禁止网络中的直接广播地址。
Teardrop/Teardrop2:此类攻击是利用UDP包重组时重叠偏移的漏洞,例如,sendmail使用ident服务来验证用户访问服务的尝试。Linux和Windows NT以及95/98更容易遭受这些攻击。Teardrop是一种拒绝服务攻击,会导致蓝屏死机,并显示STOP 0x0000000A错误。虽然大多数操作系统打了这种攻击的补丁,但Teardrop仍然会耗费处理器的资源和主机带宽。Teardrop 和Teardrop2的关键区别是后者使用20个字节的数据填充,而且欺骗了包的长度,允许新的攻击者绕过特定的服务补丁。
Ping to death:这种攻击通过发送大于65535字节的ICMP包使用操作系统崩溃,
通常不可能发送大地65535个字节的ICMP民,但可以把报文分割成片段,然后在目标主机上重组,最终导致被攻击目标缓冲区溢出。
Land attack:这种攻击是指攻击者发送IP和端口相同的包,导致被攻击目标由于系统崩溃或性能下降而拒绝服务。
5.7 资源和服务
每个服务都是单独运行的。作为一个安全专家,你必须设计出一种方法使这种独立为你工作,而不是和你做对的。每个单独的服务可能会产生一些问题,因为一旦一个黑客危及到你的系统,可以利用这个服务来攻击另外一个服务。但是你可以使你的服务和操作系统按下面所建议的方法来工作。
保护服务
你可以通过调整不同的权限、服务和技术来保护服务。你还要改变系统的默认值以及删除不必要的服务。
保护配置文件
配置文件可能会成为黑客进一步确定网络内主机情况的工具,还可以进一步确定穿过主机的流量。Packet sniffer可用于捕获配置文件的详细信息。当一块网卡被设置成混杂模式时,黑客可以开始破坏这个网络。对于这种活动可以用不同的有效方法阻止。
协同使用不同的方案和技术
在安全资源里最重要的一个概念就是要协同使用方案和技术,如果一个黑客攻破了一种方案那么还会有另一种来抵抗。还要考虑像HTTP,Telnet, FTP这些服务。每种系统都有它们自己的漏洞,一定要逐个地保护,这些要求包括改变默认的设置。要按照服务安全策略来定义操作系统的策略。你的系统不要仅依靠安全因素的某一条(如认证,加密,或审计)。举个例子,不要仅依赖于认证的方法,你可以再加上加密和审计的手段来使用你的系统更安全一些。
通过改变默认设置来保护服务
任何有经验的黑客都知道一些流行服务、server或计算机的默认设置。因此,你要尽可能地改变这些默认设置。
删除不必要的服务
通常删除不必要的服务会更安全些。很多公司都忽略了这种简单的解决办法,而无意识地为黑客留下了后门。例如,如果你使用Windows NT上的IIS,那么就不要让service这个服务运行。如果不这么做会引起没必要的风险。简单地说如运行在系统上的OS/2子系统就是不必要的,因为它产生了一个安全突破口。所以你一定要小心对待这些多余的服务。进一步说就是不要运行它们,因为很多黑客查找这些多余的服务。
5.1 TCP/IP是Internet实现通信的核心
TCP/IP是现在Internet上使用的最流行的协议,它在70年年代早期被开发出来,并最终与BSD UNIX结合在一起,从那时起,它就成为了Internet的一个标准。今天,几乎所有与Internet连接的计算机都运行着某种形式的TCP/IP协议。TCP/IP可以在各种不同的硬件和操作系统上工作,因而利用TCP/IP可以迅速方便地创建一个异构网络。
但是,在Internet首先在1966年创建时,创始者远没有对安全问题考虑的太多。当时创建者注重的是网络的功能,因此Internet和TCP/IP并没有被过多的考虑安全性。所以现在的安全机制被经常修改以适应现有的网络和TCP/IP。
与计算机网络的层次结构有所不同,TCP/IP协议采用的层次结构,所涉及的层次包括网络接口层、网间网层、传输层和应用层。每一层都实现特定的网络功能。各层包含常用的协议。
TCP/IP与ISO/OSI模型的对应关系并不非常严密,其内部差别是很大的。两种分层结构比较起来:TCP/IP力求简单高效,例如IP层并没有实现可靠的面向连接,而是把它交给了TCP层实现,保证了IP层的简练性。事实上有些服务并不需要可靠的面向连接服务,如在IP层上加上可靠性控制,对有些服务来说是
一种处理能力的浪费。况且由于光纤的大量应用,网络传输的可靠性大大提高。简单高效的特点是TCP/IP在Internet上大有用武之地的重要原因,但也是TCP/IP协议安全性能较低的原因之一。而OSI模型在各层上有所重复,而且会话层和表示层不是对所有的服务都适用,无疑有些繁琐,但对实现安全可靠的网络协议则是有帮助的。
5.2 物理层
物理层的功能是传输在线缆上的电子信号。用于信号传输的介质的类型有多种,包括光纤,同轴电缆和双绞线。物理层上的安全保护措施不多。如果一个潜在的黑客可以访问物理介质,如搭线窃听和sniffer,他将可以复制所有传送的
信息。同时,安全管理员必须了解他们保护的网络的所有布局。黑客最常用的攻击和渗透到网络中的一种方法是在公司内部主机上安装一个packet sniffer,监听网络介质上的流量。局域网使用基带传输,任何线缆上传输的数据将可被任何可以物理连接的人得到。理解你的网络布局可以帮助阻止未知的sniffer发生。最普通的网络拓扑结构是星型,总线型,环型,和复合型。
在物理层,唯一有效的保护是使用加密,流量添充等,所有这些技术,对于黑客来说利用Sniffer来获得信息都是很难成功的。
IP层其作用是将数据包从源主机发送出去,并且使这些数据包独立地到达目的主机。它并不提供任何错误纠正和流控制方法。在IP层定义了一个标准的包格式和协议,所有上层通信如TCP,UDP,ICMP等都被封装在一个IP数据报中,在网络层应用的协议在主机到主机的通信中起到了帮助作用。绝大多数安全威胁
并不来自于TCP/IP的这一层。
IP协议:IP地址是一个32位的地址,标识在网络中主机的唯一性,IP数据包中包含一些信息和控制字段,以及32位的源IP地址和目的IP 地址。每个IP数据报文都是单独的信息,从一个主机传递到另一个主机,主机把收到的IP 数据包整理成一个可使用的形式,这种开放式的构造使得IP层很容易成为黑客的目标。在这一层常见的攻击就是IP地址冲突和欺骗。
ICMP协议:ICMP在IP层检查错误和其它条件,一般的ICMP信息是非常有用的,例如,当ping一台主机想看是否运行时,就正在产生一条ICMP信息。远程主机将用它自已的ICMP信息对ping请求作出回应。然而ICMP信息常用于攻击远程网络或主机,近来的攻击方法如Tribal flood Network系列的程序利用ICMP来消耗带宽来有效地摧毁站点。很久以前的ICMP攻击microsoft的TCP/IP的例子,就是黑客从ping请求中产生一个特殊的ICMP信息包,运行早期的TCP协议版本的任何计算机都不能较好处理ICMP请求而崩溃。业界经常把这种攻击称为winnuck攻击。到今天,microsoft的站点对于ping并不作出响应,因为它已过滤了所有的ICMP请求。一些公司也在防火墙上过滤ICMP流量。
5.3 网络层
5.3.1 IP地址冲突
两台Internet主机的IP地址相同,就出现了IP地址冲突。有设置失误的
情况,也有盗用的情况。盗用IP不是IP不够用,而且有时也是为了做一些非法
的活动,例如冒充另外的主机去攻击别人的主机。相比之下,冒充同一网段内的主机比较方便容易。Windows里修改一下IP地址设置和子网掩码就可以了,UNIX下稍微麻烦一些,需要编程修改。
5.3.2 IP地址欺骗
黑客经常利用一种叫做IP欺骗的技术,把源IP地址替换成一个错误的IP地址。接收主机不能判断源IP地址是不正确的,并且上层协议必须执行一些检查来防止这种欺骗。在这层中经常被发现的另外一种策略是利用源路由IP数据包,仅仅被用于一个特殊的路径中传输。这种利用被称做源路由。这种数据包被用于击破安全措施例如防火墙。
使用IP欺骗的一种攻击很有名的一种是Smurf 攻击。一个Smurf攻击向大量的远程主机发送一系列的ping请求命令。黑客把源IP地址替换成想要攻击的目标主机的IP地址。所有的远程计算机都响应这些ping请求,然后对目标地址进行回复而不是回复给攻击者的IP地址。目标IP地址将被大量的ICMP包淹没而不能有效的工作。Smurf攻击是一种拒绝服务攻击。
5.4 传输层
传输层的服务允许用户按照传输层的数据格式分段及封装应用层送来的数据。这一层数据流提供了端到端的传输服务,它在发送主机与接收主机之间构建了一个逻辑连接。传输层的主要有方面的功能,一是通过滑动窗口实现流量的控制;二是通过序列号及确认提供可靠性。
传输层包括两个协议。第一个是TCP协议,即传输控制协议,是一个可靠的、面向连接的协议。它允许在Internet上两台主机之间信息的无差错传输。TCP还进行流量控制,以避免发送过快而发生拥塞。不过这一切对用户是透明的。第二个是UDP协议,它采用无连接的方式,不管发送的数据包是否到达目的主机,数据包是否出错。收到数据包的主机也不会告诉发送方是否正确收到了数据,它的可靠性是由上层协议来保障的。因此UDP很少有安全上的隐患,因为主机发出一个UDP应不期望收到回复。
两者各有优缺点。面向连接的TCP可靠,但是效率较低,通信过程中传送了很多与数据无关的信息,降低了信道的利用率,TCP常用于一些对数据可靠性要
求较高的应用;无连接的UDP不可靠,但因为不用传输许多与数据本身无关的信息,所以速度快,常用于一些实时业务,也用于一些对差错不敏感的应用。
5.4.1 TCP包头
TCP包头的标记区建立和中断一个基本的TCP连接。有三个标记来完成这些过程:
SYN:同步序列号
FIN:发送端没有更多的数据要传输的信号
ACK:识别数据包中的确认信息
5.4.2 TCP建立连接的过程
TCP是面向连接的协议,因此在数据传送之前,它需要先建立连接。TCP的
数据段格式中含有序列号及确认位ACK,在TCP建立连接时,两个主机必须保持同步,以它们各自的初始序列号(ISN)表现出来。初始序号是建立一个TCP连接时的开始号,在连接过程中交换初始序号,可以确保在以后出现问题时,能恢复丢失的数据。
同步是通过在建立连接的数据段中携带一个被称为SYN控制位及一个初始序列号的段之间的交换过程来实现的,其中SYN位代表了同步,它要求每一端在发送它自已的初始序列号时,同时还要接收本次连接中对方的确认ACK,每一端也都必须接收到另一端的初始序列号及发送一个确认ACK,这一过程是有特定顺序的,通常这个交换过程被称为3次握手/建立连接。至此,A和B各自获得了对方将来要发送的数据最小序列号。由于网络中的序列号并没有一个全球性的时钟,TCP提取初始序列号可能使用的是不同的机制,所以3次握手是必须的。当接收者收到的第一个SYN是一个被迟延的旧信号时,接收者是不知道的,除非他能记住本次连接的最后一个序号,但这通常是不可能的。所以他必须要求发送者验证这个SYN。你应该不断检查TCP握手,因为它经常被黑客操纵。例如有名的SYN Spoofing。
5.4.3 TCP简单确认过程
在可靠的面向连接的数据传输过程中数据包必须按和它们传送时完全相同的顺序发送到接收端。如果在任何数据包丢弃、破坏或以不同顺序接收、发送过
程均将失败。因此TCP的确认办法是使接收端对接收到的每一个数据包都发出一个确认信号。每个数据包须发送前都赋予一个编号。在接收方,TCP把分开的段重新装配成为一个完整的报文。如果在序号系列中丢失了一个序号,那个丢失序
号的段要被重发。在给定时间间隔内,没有得到确认的段也要被重发。
5.4.4 中断TCP连接
因为TCP连接是全双向的,中断一个TCP连接需要四个步骤。全双向意味着数据独立的在两个方向上流动,因此两个连接都必须被关闭,为了正确的关闭TCP连接,任何一个主机都必须发送一个FIN(就是激活TCP包头中的FIN标记);当一台主机接受到一个FIN,它必须终止流动在另一个方向的数据,通过发送一个FIN到另一端的应用程序,一个会话结束大多数的应用程序将关闭两个方向上的数据流,然而,仅仅关闭一个方向并且在半关闭的模式中进行操作是可能的。
结束一个TCP连接的四个基本步骤是:
1)服务器通过激活FIN标记执行一个Active close(客户端经常结束应用程序,但是服务器将开始TCP连接的结束),这个行动终止了从服务器到客户机的数据流。
2)客户端通过发送一个ACK到服务器,执行了一个passive close。
3)客户端也发送它自己的FIN给服务器,以终止从客户端到服务器的数据流。
4)最后服务器发送一个ACK返回给客户端,TCP连接被终止了,上图展示了完整的过程。
5.4.5 用户数据协议UDP
UDP是一个非面向连接的协议。它经常用做广播类型的协议,如音频和视频数据流。它更快并更少占用带宽,因为一个UDP连接不被持续保持。这个协议并不能保证信息的仁慈也不能重复被中断的传输,但TCP可以。因此,在音频或视
频传输中,几个数据包的丢失将不会有什么影响。
一些其它使用UDP的协议,例如TFTP,它要比FTP简单。如果认证并不被考虑的话也是非常有用的。类似于TFTP的协议需要所有的包都到达,但这些协议仅仅需要确保在应用层上传递和接收。
UDP没有所谓的窗口技术,也不用确认,应用层协议可以保证可靠性,一个UDP的报头相对来说较小。
5.4.6 端口
一台主机通常只有一个IP地址,但常常要提供多种TCP/IP服务。 如何分别出客户端的请求对应哪个服务呢?通常使用端口号来标识主机上的不同服务,当与这台主机通信时,不但要指出通信主机的IP地址,还要指明同主机上的端口,即指明是哪种服务通信。主机对各个端口进行监听,监听到服务请求后,发送给相应的服务处理。
端口号是一个16位的数,编号可以从1到65535。 Internet Assigned Numbers Authority(IANA)规定有1023个端口作为well-know端口。Well-know端口专门为服务器端的应用程序保留下来,一个服务器应用程序能够使用任何未被限定的端口,及那些大行1023的端口,而不需要向IANA申请。
有的端口号对应的服务有安全缺陷,因为安全在很大程度上依赖于你控制网络数据包的能力,必须能够准确地确定这些数据包流向哪些计算机和程序。攻击
者可以利用端口扫描软件对主机的各个端口进行分析,期望找到安全漏洞。比如一个著名的缺陷是某些UNIX系统中SMTP服务对应的25号端口有可能被攻击者利用直至攻击成功,所以应该尽量关闭无用的端口(服务),减少安全隐患。
5.5 应用层
应用层协议直接面向用户。TCP/IP的应用层协议是非常多的,最常见和最常用的有Telnet,FTP,SMTP和HTTP等。正是这些应用层协议将TCP/IP的优势发挥得淋漓尽致,使Internet变得如此丰富多彩。
Telnet,也就是虚终端服务,是用得较多的一类应用层协议。
Ftp,即文件传输协议,提供了一个有效的途径,将数据从一台主机传送到另一台主机。文件传输有文本和二进制两种模式。文本模式用来传输文本文件,并实现一些格式转换。在二进制传输模式时,如传输图像文件,压缩文件,可执行文件时,则不进行转换。
SMTP,即电子邮件服务,使用缺省的端口25,以电子数据的方式,是用户快速,方便地传送信息。
HTTP,即超文本传输协议,用来在WWW服务器上取得用超文本标记语言书写
的页面。
5.5.1 简单邮件传输协议SMTP
SMTP本身有很小的风险,但黑客还是尝试去破坏一个email服务器。通常黑客对SMTP服务器采用不同方式的攻击,例如,可以创建一个伪造的e-mail信息直接发送到你的SMTP服务器,这条信息中可以包含一些有害的信息。SMTP另一重要的威胁是拒绝服务攻击,黑客经常向SMTP服务器发送大量的E-mail信息使得这台服务器不能处理合法用户的e-mail流量。这种方法有效地导致SMTP服务器不可用,因此对合法的用户造成了拒绝服务。
SMTP最大的风险就是发送和接收病毒和特洛伊木马。一个典型的e-mail信息包含很少的一些基本内容:标题、接收者,以及时间和日期。E-mail信件中标题中的信息很容易被作假,信件的另一个位置是正文部分,含有标准的文本或真正的信息,较新的e-mail客户端程序可以发送HTML格式的信息。E-mail信件中标题和正文部分都不包含可执行的代码,因此病毒和特洛伊木马不会出现在这两个位置中,它们经常出现在附件中。一封电子邮件中可能含有各种类型的附件,包括病毒和木马。最好的防范方法是购买和使用安全的SMTP服务器,另一个预防的方法是进行用户教育。教育用户了解病毒的木马是如何通过SMTP传播的以减少它们在网络中的出现。
较新的SMTP服务器提出了一些安全特性,如反向域名查寻来确保E-mail是否来自一个真正想要发送的人。只要可能一定要使用认证机制。保护E-mail本身的内容,加密是一个关键。前面的课程中我们已经讨论过主要加密的方法以及几种流行的工具,包括在微软服务器上加密方法的特性和公钥加密如PGP。这些方法对于保证通过你的服务器发送的信息是否安全是非常有用的。
Internet蠕虫
Internet蠕虫是一种拒绝服务病毒,在一九八八年十一月二日开始危害了与Internet相连的主机很多天,它是一个非常重要的历史事件,因为它告诉了安全专家有关TCP/IP应用程序的漏洞。此事件是由一个利用UNIX下的TCP/IP实施的漏洞编写的程序产生的,这个用C语言编写的程序大约破坏了5000台Internet上的主机,这种病毒以几种主要方法影响基于WEB技术开发的程序。首先,WEB程序语言如JAVA现在已经强制严格检查边界,在JAVA中想写入超过最后512字
节是不可能的。其次,操作系统给予系统运行者对于通过网络攻击的过程更多的控制权限。Internet蠕虫间接的影响堡垒主机和与互联网连接的防火墙的体系结构。最近流行的红色代码也是类似的一种蠕虫病毒,其版本2发作会自动开启600个线程来对外扫描并传播,并会安装木马,它是利用微软Windows IIS服务器的一个安全漏洞进行攻击和传播,已危害全世界数十万台主机。
Melissa病毒
Melissa 病毒是由一个新泽西的黑客创建的,与一九八八年的Internet蠕虫不同,Melissa病毒是利用E-mail客户端应用程序,而不是服务器本身。这种病毒嵌入到微软的WORD文档中。当用户打开此文档时比病毒将会自身复制并传播,这种病毒影响用户的机器,利用E-mail客户的应用程序自动的发送信息并包含已完全受感染的附件,并发送给用户端的地址薄的前五十名联系者。
E-mail和病毒扫描
Internet蠕虫和Melissa病毒是需要进行有效E-mail扫描的最典型例子,这两种攻击显示了SMTP服务器的一些漏洞。首先E-mail服务器不检查传送信息中的内容,其次,它们很容易的被大量的请求导致不能响应。商业反病毒程序可以创建一些安全的级别,因为它们可以在用户激活内嵌病毒之前扫描E-mail附
件。然后这些程序只能在个人机器上使用。
网络级E-mail扫描
在一些SMTP服务器中,有关新的安全特点是可以基于网络级的自动扫描病毒。尽管E-mail信息本身不会携带病毒,但一个病毒可以通过附件进行发送。高级的SMTP服务器可以通过把Email信息放到一个临时存放区域来扫描其是否携带病毒。这些服务器扫描文件,然后转发适当的Email。经常,这种执行只需要少量的时间,但这种延迟却是非常值得的。你还可以通过你的防火墙来扫描你的Email。然而这种扫描,不管是通过SMTP服务器还是防火墙,都在某种程度上降低了系统的性能。
访问控制方法
当保护一个Email服务时,你要做到:
§禁止转发非验证用户的信息。一些SMTP服务器默认情况下是不禁止这种转发的
§减小Email附件的大小
§一个帐号可以接收有限的Email数量
配置SMTP验证还是很有必要的,可以有效地防止黑客把你的SMTP服务器当作发送垃圾邮件的中转站以至于你的SMTP服务器超负荷,下面列出有关Sendmail服务器来实现SMTP认证的步骤:
1. 首先要下载sasl库,该函数库提供了安全认证所需函数,下载地址是
(ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/),版本3.5.21。
2. 下载sendmail(http://www.sendmail.org),版本在8.10.0以上的
sendmail才支持SMTP认证功能。
3. 注意选择客户端电子邮件软件。并不是所有的客户端电子邮件软件都支持SMTP认证功能,几种常见的版本要求是这样的:
Netscape Messenger的版本要4.6以上
Outlook和Outlook Express要5.0版本以上
Eudora pro的版本要在4.3以上
Foxmail目前还不支持这个功能。
每一种软件的认证方法是不一样的,编译sasl库的时候和配置sendmail略有不同。以最常见的Outlook Express 5.0的设置方法为例,介绍如下。
一、安装sasl库
1. 解压cyrus-sasl-3.5.23.tar.gz到你选定的目录
2. cd cyrus-sasl-3.5.21
3. ./configure-enable-login-with-pwcheck
Outlook Expresss使用LOGIN的认证方法,sasl 库缺省并不支持这种方式,所以要在生成配置文件的特别加入,另外,Outlook的口令验证方式也不是缺省的方式,所以也需要加入-with-pwcheck的选项。
下面就可以编译和安装sasl库了。
Make
Make install
4. 缺省情况下,所有的库函数安装到/usr/local/lib目录下,但sendmail使用的库函数是在目录/usr/lib下的,所以需要做一些调整。
Cd/usr/lib
In/usr/local/lib/sasl/./sasl-s
Cp/usr/local/lib/libsa*.
也可以避开这一步,在第3步时候运行configure脚本前,修改其中的缺省路径就可以了。打开configure文件找到这一行ac_default_prefix=/usr/local(在文件前几行),改为ac_default_prefix=/usr就可以了,这样更方便一些。
5. 新建目录/var/pwcheck, 供pwcheck命令使用,该命令是一个后台程序,负责检查用户的输入口令,以root权限件使用shadow口令文件。
6. 在/usr/lib/sasl目录下建立文件Sendmail.conf,加入如下一行
pwcheck_method: pwcheck
这样sasl库函数的安装就完成了。
二、编译和配置sendmail
1. 解压sendmail软件到你希望的目录,进入sendmail-8.10.2目录。
在devtools/Site/目录下创建config.site.m4文件,加入如下两行文字,把SMTP认证功能编译到sendmail中。
APPENDDEF(confENVDEF’, ‘-DSASL’)
APPENDDEF(‘conf_sendmail_LIBS’, ‘-lsasl’)
2. 回到sendmail-8.10.2目录,再进入sendmail目录,开始编译sendmail。
./Build –c(如果不是第一次编译,需要加入-c选项,清除以前的配置)
编译成功后,运行./Build install安装软件。
3. 下一步需要改写Sendmail的配置文件。回到上一级目录,再进入cf/cf目录,找到合适的.mc文件(具体做法参见其他文章,这些不在本文讨论范围中)。按照你的要求适当修改,加入如下几行:
TRUST_AUTH_MECH(‘LOGIN PLAIN DIGEST-MD5’)
Define (‘confAUTH_MECHANISMS’, ‘LOGIN PLAIN DIGEST-MD5’)
Dnl define (‘confDEF_AUTH_INFO’, ‘/etc/mail/auth/auth-info’)
FEATURE (‘no_default_msa’)
DAEMON_OPTIONS (‘Port=25, Name=MSA, M=E’a)
说明:“TRUST_AUTH_MECH”的作用是使sendmail不管access文件中如何设置,都能relay那些通过LOGIN,PLAIN或DIGEST-MD5方式验证的邮件。
“confAUTH_MECHANISMS”的作用是确定系统的认证方式。
“confDEF_AUTH_INFO”的作用是当你的计算机作为客户机时,向另外一台有smtp认证功能的主机进行认证,用户和密码存放在auth-info文件中,在这个例子中并不需要这个功能,所以注释掉了。
4. 编译生成/etc/mail/sendmail.cf文件
m4 xxxx.mc>/etc/mail/sendmail.cf,不过记住一定要备份旧的sendmail.cf文件,否则就可能麻烦了。
5. 现在基本上可以了,启动sendmail来进行测试。
sendmail-bd-q20m
运行下面命令:
telnet localhost 25
ehlo localhost
注意有没有以下的信息出现:
250-XXXXXXXX
250-XXXXXXX
250-AUTH LOGIN PLAIN DIGEST-MD5
250-XXXXXX
可能会略有不同,不过你选定的认证方式一定要有的。如果显示没有问题,则表明服务器端的配置已经成功了。如果没有出现上面的信息,请运行sendmail –0 loglevel=14 –bs,仔细检查问题所在。在结束服务器端的配置之前,还要做一件事,运行pwcheck这个daemon程序,这样才能完成用户认证功能。
三、Outlook Express 5.0的配置
1. 打开你的Outlook Express,修改你的账号属性,在服务器选项,选取我的smtp服务器需要认证选项,然后进入配置。
2. 不要选取安全口令认证,sendmail并不支持这个选项。是选取使用pop3同样的口令还是选择另外输入用户和密码。如果你在服务器上有一个真实账号,不妨选取使用同样的口令,如果没有账号,选用其他的用户口令同样可以。到此
SMTP认证的功能已经实现了。
5.5.2 超文本传输协议HTTP和文件传输协议FTP
FTP用来建立TCP/IP连接后发送和接收文件。FTP由服务器和客户端组成,几乎每一个TCP/IP主机都有内置的FTP客户端,并且大多数的服务器都有一个FTP服务器程序。FTP用两个端口通信利用21端口来控制连接的建立,控制连接端口在整个FTP会话中保持开放,用来在客户端和服务器之间发送控制信息和客户端命令。数据连接建立使用一个短暂的临时端口。在客户端和服务器之间传输一个文件时每次都建立一个数据连接。
黑客很少直接使用FTP。因为它仅用于发送和接收文件,因些很难破坏,然而,黑客所做的是间接地破坏FTP服务器。FTP服务器可能不需要对客户端进行认证,当需要认证时,所有的用户名和密码都是以明文传输的。一种常见的破坏就是寻找通话匿名连接并且有写权限的FTP服务器,然后黑客上传不正确的信息以塞满整个硬盘空间,如果FTP服务器在含有操作系统的硬盘上,如果硬盘被错误信息塞满,这种负载将会导致操作系统不会正常运行。同样,如果硬盘被塞满,使日志文件没有空间再记录其它事件,这样黑客企图进行操作系统或鞭它服务而不被日志所检查到。
另外一种对于FTP服务器的破坏是把一些盗版软件拷贝到服务器 ,然后把FTP服务器通知给其它黑客并上载或下载,在任何服务器上并没有直接目的的攻击,因为所以的活动看上去都是合法的,然而,他们已经把这个FTP服务器作为一个存储服务器来达到他们的非法活动的目的。
HTTP是互联网上最广泛的协议,互联网上大概有一半的流量是HTTP。HTTP使用80端口来控制连接和一个临时端口传输数据,HTTP有两种明显的安全问题,它们是客户端浏览程序和HTTP服务器外部应用程序,HTTP客户端使用浏览器访问和接收从服务器端返回的WEB页面。浏览器应用程序用于格式化不同类型的内容。如下载电影则需要客户端加载一个类似Windows Media Player或Real Audio Player这样的程序。对于HTTP用户的另一个问题是下载有破坏性的ActiveX控件或Java Applets。这些程序在用户的计算机上执行并含有某种类型的代码,包括病毒和特洛伊木马。 对于这种破坏的最佳保护方法是教育你的用户,这些程序是干什么用的并警告他们不要下载未检验过的应用程序。
HTTP服务器也须小心保护,HTTP服务器在很多基础上类似FTP服务器。为了扩大和扩展WEB服务器的功能,一些扩展应用程序如JAVA,CGI,ASP等,这些程序都有一些安全漏洞,一旦WEB服务器开始执行代码,那么它有可能遭到破坏,这些程序有两种方法来破坏WEB服务器,第一,通过修改当前HTTP服务器的程序如何执行;第二,在HTTP服务器上放置一个特洛伊木马。
5.5.3 Telnet和SNMP
远程登录telnet
Telnet是用于远程访问并可用来管理计算机的,Windows NT默认安装是提供Telnet服务器的,因为第三方的服务可以很容易地加进去。Telnet在远程用户登录时是以明文方式发送所有的用户名和密码的。有经验的黑客可以劫持一个Telnet会话。使用Telnet的另一个安全问题是什么时候使用这个协议。Telnet
应该在检查整个连接到你的网络上的客户端和服务器时才使用。因此不应该应用于互联网上。同时还应该在防火墙上过滤掉所有的Telnet流量。有一系列的程序功能类似:它们被称为r系列,包括rsh 和rlogin。当使用r系列的程序时要考虑和Telnet相同的安全问题。
简单网络管理协议(SNMP)
SNMP允许管理员检查状态并且有时修改SNMP节点的配置。它使用两个组件,即SNMP管理者和SNMP节点。管理者收集所有由SNMP节点发送的trap,并且直接从这些节点查询信息,SNMP通过UDP的161和162端口传递所有的信息。SNMP所提供的唯一认证就是community name,一个community name就是由SNMP来验证节点的术语,如果管理者与节点有相同的community name,将允许所有SNMP查寻,如果一个黑客危及到community name,他将能够查询和修改网络上所有使用SNMP的节点。另一个安全问题是所有的信息都是以明文传输的。一个黑客用SNMP管理器连接到网络中的任何位置上都可以得到这些信息,包括community name。SNMP不应该应用于公网上,尤其是互联网上。SNMP是公司私有网络中可用的网络管理解决方案,但是所有SNMP流量应有防火墙中过滤掉。
5.5.4 域名系统DNS
DNS在解析DNS请求时使用UDP的53端口,但是,在进行区域传输时使用TCP的53端口,一次区域传输是以下面两种情况完成的:
•一个客户端利用nslookup命令向DNS服务器请求进行区域传输;
•当一个从属域名服务器向主服务器请求得到一个区域文件。
黑客可以攻击一个DNS服务器并得到它的区域文件,这种攻击的结果是黑客可以知道这个区域中所有系统的IP地址和计算机名。
如何保护DNS服务器,首先把这个服务器放在防火墙后面,然后配置防火墙阻止所有的区域传输,第二可配置你的系统只接受特定主机的区域传输。
5.6 常见的协议层攻击类型
了解常见的几种攻击方式及原理,增强网络安全意识以避免受到攻击,是作为安全人员应该遵循的一些规则。以下就介绍几种常见的攻击方式:
SYN flood攻击:这种拒绝攻击利用了TCP建立连接时三方握手的弱点,攻击者可以建立很多半开连接。在这个过程中,当服务器要跟攻击者建立连接时,攻击者却终止了连接。攻击者再建立其它的连接然后再终止,直到目标服务器找开成百上千的半开连接。这种攻击方式是最常见的攻击WEB服务器的攻击手段。
Smurf 和 Fraggle攻击:Smurf攻击是利用Ping程序中使用的ICMP协议。攻击者首先制造出源地址是受攻击主机的IP地址的包。下一步,攻击者将这些包发送给不知情的第三方,使它们成为帮凶。如果攻击者发送足够多的ICMP包,回应会超过受攻主机的承受能力。实际上Smurf攻击是一种IP欺骗,将导致拒绝攻击的结果。Fraggle攻击与Smurf攻击类似,只是利用UDP协议。虽然标准的端口是7,但是大多数使用此类攻击的程序允许指定其它的端口。最好的防止受
到Smurf和Fraggle攻击的方法是在防火墙上过滤掉ICMP报文,或者在服务器上禁止Ping命令。
Smurf,Fraggle和广播地址:广播地址是指主机地址都为255的地址,有些路由器回应广播IP地址。广播地址可以被合法地用于排错工具,你可以向整个子网发送ping包看哪些地址回应。当然,如果这些地址被smurf和fraggle攻击所利用,一个广播地址会有上百台主机参与攻击。因此应注意,在路由器上禁止网络中的直接广播地址。
Teardrop/Teardrop2:此类攻击是利用UDP包重组时重叠偏移的漏洞,例如,sendmail使用ident服务来验证用户访问服务的尝试。Linux和Windows NT以及95/98更容易遭受这些攻击。Teardrop是一种拒绝服务攻击,会导致蓝屏死机,并显示STOP 0x0000000A错误。虽然大多数操作系统打了这种攻击的补丁,但Teardrop仍然会耗费处理器的资源和主机带宽。Teardrop 和Teardrop2的关键区别是后者使用20个字节的数据填充,而且欺骗了包的长度,允许新的攻击者绕过特定的服务补丁。
Ping to death:这种攻击通过发送大于65535字节的ICMP包使用操作系统崩溃,
通常不可能发送大地65535个字节的ICMP民,但可以把报文分割成片段,然后在目标主机上重组,最终导致被攻击目标缓冲区溢出。
Land attack:这种攻击是指攻击者发送IP和端口相同的包,导致被攻击目标由于系统崩溃或性能下降而拒绝服务。
5.7 资源和服务
每个服务都是单独运行的。作为一个安全专家,你必须设计出一种方法使这种独立为你工作,而不是和你做对的。每个单独的服务可能会产生一些问题,因为一旦一个黑客危及到你的系统,可以利用这个服务来攻击另外一个服务。但是你可以使你的服务和操作系统按下面所建议的方法来工作。
保护服务
你可以通过调整不同的权限、服务和技术来保护服务。你还要改变系统的默认值以及删除不必要的服务。
保护配置文件
配置文件可能会成为黑客进一步确定网络内主机情况的工具,还可以进一步确定穿过主机的流量。Packet sniffer可用于捕获配置文件的详细信息。当一块网卡被设置成混杂模式时,黑客可以开始破坏这个网络。对于这种活动可以用不同的有效方法阻止。
协同使用不同的方案和技术
在安全资源里最重要的一个概念就是要协同使用方案和技术,如果一个黑客攻破了一种方案那么还会有另一种来抵抗。还要考虑像HTTP,Telnet, FTP这些服务。每种系统都有它们自己的漏洞,一定要逐个地保护,这些要求包括改变默认的设置。要按照服务安全策略来定义操作系统的策略。你的系统不要仅依靠安全因素的某一条(如认证,加密,或审计)。举个例子,不要仅依赖于认证的方法,你可以再加上加密和审计的手段来使用你的系统更安全一些。
通过改变默认设置来保护服务
任何有经验的黑客都知道一些流行服务、server或计算机的默认设置。因此,你要尽可能地改变这些默认设置。
删除不必要的服务
通常删除不必要的服务会更安全些。很多公司都忽略了这种简单的解决办法,而无意识地为黑客留下了后门。例如,如果你使用Windows NT上的IIS,那么就不要让service这个服务运行。如果不这么做会引起没必要的风险。简单地说如运行在系统上的OS/2子系统就是不必要的,因为它产生了一个安全突破口。所以你一定要小心对待这些多余的服务。进一步说就是不要运行它们,因为很多黑客查找这些多余的服务。
赞赏
看原图
赞赏
雪币:
留言: