首页 第5章 Linux网络操作系统安全管理

第5章 Linux网络操作系统安全管理

举报
开通vip

第5章 Linux网络操作系统安全管理nullnull第5章 Linux网络操作系统的安全管理5.1 系统安全5.2 网络安全5.3 安全工具5.4 配置安全可靠的系统null§5.1 系统安全 Linux系统的安全性是有目共睹的,因为它是一个开放性的操作环境,正是因为代码的开放性,一旦系统有漏洞,则相应的补丁马上出台,在这一章中详细讲解基于Linux操作系统安全管理的方方面面。null§5.1.1 C1/C2安全级设计框架TCSEC(TDI)将系统划分为四组(division)七个等级,依次是D;C(C1,C2);B(B1,B2,B3);A(A1...

第5章 Linux网络操作系统安全管理
nullnull第5章 Linux网络操作系统的安全管理5.1 系统安全5.2 网络安全5.3 安全工具5.4 配置安全可靠的系统null§5.1 系统安全 Linux系统的安全性是有目共睹的,因为它是一个开放性的操作环境,正是因为代码的开放性,一旦系统有漏洞,则相应的补丁马上出台,在这一章中详细讲解基于Linux操作系统安全管理的方方面面。null§5.1.1 C1/C2安全级设计框架TCSEC(TDI)将系统划分为四组(division)七个等级,依次是D;C(C1,C2);B(B1,B2,B3);A(A1),安全级别从左至右逐步提高,各级之间向下兼容,也就是说高级别必须拥有低级别的一切特性。D级的定义最低,简单的说就是没有任何安全性,你可以随便破坏系统而且绝不会有限制。对我们来说,比较重要的是C类的两个级别和B类的两个级别。这些级别的简单描述见 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 5-1。 事实上,C2类是安全性系统的基本要求,也是绝大部分系统的 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 要求,UNIX/Linux类系统也不例外;而真正意义上的安全系统普遍要求达到B级。不过,必须说明的是,操作系统通过B1级认证的并不多,而通过B2级认证的更是稀少。这是因为安全认证是专门机构做的事情,经常会做上几年,因此几乎任何真正的商业系统都不会有时间去做这种认证。 图5-1null§5.1.2 身份认证 身份认证是用户进入系统的第一步。在Linux设计框架里面,用户的身份和权限是分开的,每个用户的身份并不影响它对于特定物件的权力——除了超级用户以外。这使得用户身份的认证比较简单,但是也带来了一定的问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 ,比如随便提升用户权限的问题等等。不过,在这一节里面,让我们首先考虑身份认证系统。 身份认证系统最基本的实现是Linux login程序,不过其他各种应用程序也一样要通过身份认证来确定用户身份。要注意事实上身份认证仅仅是个程序实现,决定用户身份的,是它启动的应用程序的uid,因此Linux下的身份认证其实只是判断用户并且授予它一个合法的uid的过程。而授予uid的过程却是超级用户(或者超级用户进程)作的,事实上授予程序只要愿意,随便怎么做都可以,因此并没有完全统一的办法来实现身份认证。在Linux中传统上采用一些约定俗成的方法来认证用户身份,其中包括最基本的password/shadow体系和PAM体系。在这些体系的基础上,程序可以用系统调用来完成对用户的认证,但是,如果系统进程非要抛开调用,用自己的一套方法进行用户认证,Linux也不会禁止这些。null1. Shadow身份认证体系 最基本的身份认证系统由口令验证构成。用户输入一个口令,与系统进行比较,如果合法,就可以进入系统。显然,最重要的是验证口令与这个用户的预设口令是否相同。当然,口令不是明文进行比较,而是采用下面的结构: (1)系统记录用户的原始口令,并将其加密保存在系统中,口令原文则被丢弃。 (2)当用户登录系统的时候,输入口令,系统用同样的加密算法将用户输入的口令转换成密文。 (3)比较保存的密文和现在得到的密文,如果相同,允许用户登录系统。 口令加密可以使用一般的对称密匙算法,但是Linux普遍使用类似MD5一类的hash方法。这类算法是不对称的,也就是从密文(或者说校验和)是不可能知道原文的。 尽管如此,如果看到了加密结果,用户仍然可以用穷举的方法来获得密码,因为标准unix口令体系只有8位。如果考虑到大部分人喜欢使用小写字母和很短的密码的话,那么,穷举所有的字符组合构成试探口令,然后执行(2)的步骤,对于比较短的密码是有可能搜索到正确的口令字符串的。null2. PAM身份认证体系 由于这类问题,现代的Linux系统从Sun引入了PAM系统(可插拔认证模块)。必须指出的是,只有在程序编写时选择了PAM库支持的时候,才能使用PAM认证。在这种情况下,程序调用PAM运行库,而运行库则根据当前的PAM系统管理设定来进行具体的认证过程,使得整个认证过程可以添加或者删除特定的功能,从系统核心中分离出来。 PAM认证部分是由一组模块构成的,相互可以堆叠,堆叠的意思就是说,可以连续执行多个模块或者让一个模块多次使用。 因此,可以在一个PAM认证过程中使用多种认证模块,后面的认证过程的执行依赖于前面的认证模块结果。另外,还可以随时加入新的模块, 加入之后, PAM客户程序无须重新编译,也无须做任何修改就可以使用这个新模块。 PAM系统的配置文件,按照具体实现,可以分为/etc/pam.conf文件和/etc/pam.d/目录两种方式。Linux一般使用第二种方式。这种方式下,在/etc/pam.d/目录下,存放着一些分离的配置文件,每个文件的文件名是这个文件控制的服务(telnet,pop,ftp等等),而文件的 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 是这个服务的PAM配置。一般来说,服务类型就是存取该服务的程序的名字,而不是提供服务的程序。 null§5.1.3 用户权限和超级用户 Linux的基本用户隔离和存取授权功能是用文件权限实现的,使用标准的UNIX文件权限体系:每个文件有一个属主用户(user)和一个属主程序组(group),除此之外的用户都作为其它用户(other)。这样,每个文件存在三种存取权限:用户存取权限,组存取权限和其他用户的存取权限。另外,还有一个属性字用于标志文件属性(设备、文件、目录还是连接)。每个存取权限由读、写、执行和用于执行文件的特殊标志构成 。 ,例如: [root@cs root]# ls -l total 11482 drwxrwxr-x 4 root wheel 792 Feb 5 2002 Darwin4.0-Linux -rw-r--r-- 1 wly wly 10799692 Jul 21 08:52 Darwin4.0-Linux.tar.gz drwx------ 3 root root 208 Mar 15 2002 Desktop -rw------- 1 root root 60976 May 27 09:19 mbox drwx------ 5 root bin 240 Feb 17 2002 ncftpd-2.7.1 -rw-r--r-- 1 root root 887285 Feb 25 2002 ncftpd-2.7.1-linux-x86-export.tar.gz -rw-r--r-- 1 root root 848 Jul 2 17:51 wget-log 最左面的一位是文件属性,然后每三个字符为一组,分别代表用户、组和其他用户的存取权限。null权限体系有一个基本的例外,即超级用户root。超级用户就是uid=0的用户。一般情况下这个用户名字被称为root,不过实际上也可以是任何其它名字,只要设置其uid为0。作为系统的管理者,root可以访问任何文件并对其读写。而实际中讨论的攻破一个Unix/Linux系统,最主要的任务就是获得root权限,比如拿到root密码或者获取一个具有root权限的shell(见后)。 总的来说这个权限体系是比较简单的,不像Netware之类的文件服务器操作系统那样做到了精确的用户个人访问控制,但在实际应用中也问题不大。不过,Unix/Linux操作系统实际设计的时候,为了完成某些操作,增加了几个特殊的功能,其中最重要的是setuid和setgid,这是用户权限体系中主要的问题。 Setuid、setgid和用户进程的权限有关。如上所述,每个文件有定义好的用户存取权限,但是用户只能通过程序存取相应文件,因此权限体系实际是和用户进程打交道。Unix/Linux为每个用户进程分配一个用户id和一个组id,进程需要访问文件的时候,就按照这个用户id和组id来使用权限功能。正常情况下,这个用户id和组id将会被分配成执行对应命令的用户的uid和gid,从而维持权限体系的正常运转。nullsuid机制就是在权限组中增加suid/sgid位,凡是suid位被置位的文件,当它被执行的时候,自动获得文件属主的uid,同样,sgid被置位的话,自动获得文件属组的gid。不过实际上用sgid的很少,主要还是用suid。 由于suid的这个特性,在实用中很容易带来安全性问题,尤其是如果setuid程序被溢出(见下节)或者利用环境重定义技术破解就很可能导致被非法用户得到一个具有root uid的进程。当这个进程是一个终端shell的时候,用户就得到了系统的完全控制权。也就是,系统被攻破了。相应地,如果攻击者侵入了系统,也许会留下一个具有root suid的shell程序,作为以后控制系统的入口(虽然这个办法现在不那么常用了)。 为了安全,尽量少用suid功能,并且定期检查(可以使用专门工具)系统上有没有来源不明的suid程序,特别是绝对不要写一个suid的shell脚本,这是一种灾难性的行为。 无论如何,超级用户和suid/sgid机制的存在,是UNIX/Linux体系设计上的一个弱点,这可以用一些手段加以弥补,例如后面提到的LIDS系统。null§5.1.4 存储空间安全 这里说的存储空间安全,指的是内存以及外存储设备的安全,包括越过文件系统直接访问裸设备的保护。其中,最重要的是内存安全性。 内存安全性可以分成两个部分,一个是禁止内存中的重要数据被窥探到,另一个是保证进程不去执行非法指令。特别是后者,是很大一类攻击与保护技术的核心内容。 由于Linux是个多用户多任务操作系统,每个进程都会享有自己的地址空间,一个进程不能访问另一个进程的地址空间,而属于操作系统的地址空间是受保护的,所以原则上,每个进程只能看到属于自己的和公用的内存数据。 但是任何功能实行起来都会有例外。每个进程都可能要分配动态内存,并且在申请到的内存中写入自己的数据。当进程退出的时候,这些内存将会被释放,但是内存中仍然会有进程临时数据的影子——虽然,只要这些内存不马上被下一个进程使用,下一个进程仍然看不见这些数据。而且,操作系统可以设计为每当给进程分配内存的时候,都首先将分配的内存清0,释放的时候也清0。这样,似乎就堵死了用动态内存泄露数据的可能性。null基本的溢出攻击方式按照其使用的程序空间类型可以分成三种: · 堆栈溢出 堆栈溢出是最重要的缓冲区溢出攻击手段,它的思路是利用堆栈返回地址。熟悉汇编语言的读者会知道,堆栈是一段内存空间,一个程序执行的时候,内存可以大概地分成代码、数据段和堆栈段: 代码段(内存低端)数据段堆栈段(内存高端)数据段存放着程序的静态数据,而动态数据则从堆栈中分配,分配过程是从低端到高端。另一方面,函数使用的参数和返回地址则用堆栈高端存放:当发出一个函数调用的时候,计算机做如下操作:首先把参数压入堆栈;然后保存指令寄存器(IP)中的内容做为返回地址(RET);第三个放入堆栈的是基址寄存器(FP);然后把当前的栈指针(SP)拷贝到FP,做为新的基地址;最后为局部变量留出一定空间,把SP减去适当的数值。而函数返回的时候,简单地释放局部变量,然后从堆栈中取出返回地址,用一个ret指令回到调用点。这样,因为缓冲区是在堆栈底部,溢出程序只要溢出足够多的数据,就可以修改位于内存高端的堆栈返回地址,从而,当函数返回的时候,就会跑到溢出者设定的返回点。假如那里放着执行shell命令的代码(因为这个地址是由溢出者设计的,所以可以选择让它指向某个缓冲区,其中存放了溢出者准备的代码),攻击者就拿到了一个shell。如果这个进程是个root进程,攻击就成功了。·null· 函数指针 C语言可以定义函数指针,执行某个地址上的任何函数。但是这个指针可以指向任何地址空间。所以攻击者可以用缓冲区溢出的办法改写指针内容,指向自己准备的shell代码,当程序执行到调用函数指针的部分的时候,攻击者就取得了控制权。 · 长跳转点 setjmp/longjmp是一个C语言的非结构化跳转系统,它允许程序员设定一个跳转点,然后可以从任何函数内部直接跳入这个跳转点。这个功能的存在主要是为了处理程序事故(例如,处理紧急信号)。然而,跳转点可以指向任何地址,从而如果setjmp设定的跳转点被攻击者修改,当激活longjmp函数的时候,就会跳向攻击者设定的地址。 从理论上说,让数据段不可执行就可以避免绝大部分缓冲区溢出的发生,然而这是不现实的,因为现代的编译器为了效率,不可避免地要把部分可执行代码动态的放入数据段中,简单的禁止数据段执行就会导致这样的程序无法运行,所以只能考虑一些折衷的办法。null§5.1.5 数据的加密为什么要对数据进行加密?部分原因是交换数据的需要。如果你要通过某种不可信的方式(比如网络,磁带等等)交换数据,必须保证不能让一般人随便窥探数据。这种情况下,基于权限的保护方式已经不能使用,只能通过加密来提供额外的保护。 首先要说明的是,在一般情况下,加密这个词汇除了表示将信息无损地变换为密文之外,还包括一些所谓单向算法,后者其实就是一个计算校验和的过程。换句话说,知道单向算法的结果,是没有可能逆向求出原文的(所以这个算法被称为单向的)。这听起来很愚蠢,但是实际中,几乎所有的单向算法都使用了hash函数相关的技术,这种技术使得事实上完全不可能有两组不同数据产生同样的校验和。另一方面,除了实际计算一下以外,也不可能有别的办法生成某段数据的校验和。因此,这种技术被用于确保数据的可信性,或者说,确信数据在传输过程中未经修改。 最常用的单向算法是MD5,相应的程序实现在Linux中就是md5sum校验程序,它可以为一个文件生成md5校验和: [root@cs bin]# md5sum ~wly/wly.rar 4fbec4d2dedcc61efec6e6aadf595e96 /home/wly/wly.rar 输出的128位十六进制数就是相应文件的md5校验和。nullPGP的基本思路是这样的:首先,B和A各生成一对密匙,然后通过一个可信的机构,交换自己的公用密匙(当然,两人也可以直接见面解决这个问题),在这之后,如果B想要向A发送自己的信息,那么,他首先要用md5算法计算出整个信息(严格的说,在PGP中,计算的是信息+发送者的ID+日期时间等等)的校验和,然后用自己的私用密匙加密这个校验和并且附加在整个信息后面;接着,再用A的公开密匙加密得到的全部数据,最后发送给A。而当A接收到这个数据的时候,他首先用自己的私用密匙解开密文,得到原文和加密后的校验和;然后再用B的公匙解密校验和;最后重新计算校验和,判断信息是否被修改过。 这个算法本身可以说无懈可击,除了交换公匙问题(这可以通过建立权威的交换中心的办法解决),但是实际上,不对称的双密匙体系的加密解密速度一般是很慢的(特别是RSA),因此PGP采用一个折衷的办法:对信息加密采用的是一个名叫IDEAL的算法。IDEAL是一个传统的单密匙对称算法,其计算速度很快。实际计算中,PGP首先产生一个随机密码;然后用这个密码作为密匙对信息进行IDEAL加密;接下来,用RSA算法对密码进行加密。解密的时候,接收方是先用RSA算法得出随机密码,然后用IDEAL算法对信息进行解密得出源信息。null§5.1.6 B1安全级强化 下面我们来介绍一个对Linux安全问题的解决思路。上面我们可以看到,对于UNIX/Linux,攻击和防御的要点都是围绕着root用户以及如何获得一个root shell展开的。这里的关键是root可以作任何事情,而所有的重要操作又都需要root权限。这就使得一旦侵入者拿到root shell,系统就被完全攻破了。 因此可以考虑这样的技术,将系统的敏感任务分别划给不同的用户,取消全能的root账户的存在,避免不同的安全问题纠缠在一起。这样即使攻击者进入系统,也无法危害系统的安全性。实现这种功能的最简单方法是将系统安全性提升到B级,这样,可以在很大程度上减少系统中的安全隐患。 实现这种功能,需要修改Linux的系统内核,目前,这种修改都是以补丁的方式发行的,这里我们介绍的是谢华刚的LIDS(Linux入侵 检测 工程第三方检测合同工程防雷检测合同植筋拉拔检测方案传感器技术课后答案检测机构通用要求培训 系统)。应该指出的是,LIDS更多的并不是一个“入侵监测系统”,而是一个安全性补丁,它可以实现下列的功能:null· 入侵防护 它可以对系统中重要的文件、进程和设备进行保护,保证这些对象不会被入侵者操纵,即使是入侵者已经拿到了root账号。 · 入侵检测 LIDS可以提供对于端口扫描的检测。 · 入侵响应 当发现系统受到攻击之后,它可以将必要的信息记录到日志文件中。 对于我们来说,入侵防护是最重要的功能。这是通过修改系统核心调用open(),mknod()和unlink()等的代码来实现的。一旦LIDS开始工作,它在内核中维护一张授权表格,当有某个程序调用open()来打开文件的时候,LIDS将会检查授权表,阻挡一切未经授权的访问。由于这个动作发生在内核中,即使超级用户也无法绕过授权工作,除非将LIDS关掉。同样,在访问进程和设备的时候,也发生授权检查过程。 授权规则由主体(subject),客体(object)和授权构成,主体是发起操作的程序,客体是它准备操作的目标,而授权则是由DENY/READ/APPEND/WRITE/IGNORE几个级别构成的,比如READ是允许主体读这个文件,WRITE允许写,而IGNORE则忽略存取规则。授权级别之间的关系是后面的包含前面的,也就是说允许WRITE也就直接允许了READ和APPEND。当然,DENY就是没有任何授权。null§5.1.7 日志 日志就是对系统行为的记录。比如记录某个用户的登录/退出以及执行的命令,系统中发生的错误等等。在标准的Linux系统中,操作系统维护三个基本的日志: 1. 连接时间日志 用来记录用户的登录信息,这是最基本的日志系统,管理员可以利用它来跟踪谁在什么时候进入了系统。 2. 进程记账 用来记录系统中执行的进程信息。比如某个进程消耗了多少CPU时间等等。 3. syslog syslog系统并不由系统内核维护,而是由syslogd或者其它一些相关程序完成。它是各种程序(主要是daemon进程)对运行中发生的事件的描述。 我们分别来讨论这些日志。 连接时间日志由utmp,wtmp和lastlog记录构成。有关当前登录用户的信息记录在utmp中;用户的登录和退出记录以及系统开关机的记录存放在wtmp中;用户最后一次登录的信息存放在lastlog文件中。遗憾的是这些文件没有固定的存放地点,尽管在大多数Linux系统中,它们放在/var/lognull§5.2 网络安全 5.2.1 网络接口层 1. 监听 让我们首先来考虑网络接口/物理层的主要问题。这两层完成的任务是将数据转化成物理的网络帧并且在电气连接上传递。这两层的主要问题,在于具体的硬件特性。在我们的情况下,最主要的连接产品是以太网。 以太网的结构非常简单:许多网络接口卡(NIC)被电缆和集线器连接在一起。当某一台机器准备发送数据的时候,它首先根据电缆电平判断一下当前是否有其它网卡在工作,如果没有,就开始发送一段数据(称为以太网帧),然后暂停一下,再重复上述操作。如果有两台机器同时发送数据,会导致网络冲突,这种情况下双方都会暂停一下(具体暂停的时间是个随机量),然后继续发送。 对于以前的使用同轴电缆(10-base 5或者10-base 2)的以太网,所有的网卡都被直接连接到电缆上。而现在的以太网(100-base TX及更先进的系统)中,网卡首先用双绞线连接到集线器和交换机,然后再连接到其它的机器。null2. SSL 容易看出,这个问题在以太网的层次上是没法解决的,只能从另一个角度去解决。事实上监听的主要目的是了解对方传输的信息内容,特别是对于www/mail/ftp/telnet等协议,其中很多东西是简单文本传输。解决问题最基本的思路是将要传输的数据加密,然后再送入TCP/IP,这样即使窃听者听到了所有的信息,它仍然无法解读这些信息到底是什么。 这种思路的基本框架和前面讨论的PGP系统很类似,首先要实现一个交换证书的体系(认证中心),用来证明你访问的目标和你自身的身份是可靠的。(后面我们会看到,由于IP 和DNS欺骗的存在,确保你访问的站点是你认为正在访问的站点是非常必要的。)目前这方面已经有了一个标准框架,称为PKI(Public Key Infrastructure)。然后,传输的数据使用数据加密和数字签名,保证传输信息的可靠性和可信性。 由于大部分网络上数据的传输是通过http协议完成的,而这个协议也最容易受到监听,所以netscape发明了一个称为SSL(Secure socket Layer,安全套接层协议)的协议来强化http的安全性,它实际是基于socket的,安装在传输层和应用层之间,可以提供数据的加密传输。不过,它并不包含数据签名功能,后者需要浏览器另外实现。利用SSL进行www传输的协议有个专门的名字,叫做https。SSL一共有三个版本。null3. SSH ssh是一个用来解决TELNET/FTP协议安全性的工具,它支持两种协议:ssh和sftp,简单的说就是telnet和ftp的加密传输版本。 ssh协议有两个版本,分别称为ssh1和ssh2,两者的功能基本是一样的,不过算法不兼容。你需要明确地选择ssh1或者ssh2作为通信方式。无论哪一种,都提供两种级别的安全验证: 第一种是基于口令的安全验证,也就是一个加密传输的telnet。所有传输的数据都会被加密,只要你给出用户名和口令,就可以连接到系统,其它方面也和telnet完全一样。 第二种是基于密匙的安全验证。你需要准备一对密匙,如果你要连接到ssh服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在你在该服务器的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。用这种方式不需要在网络上传送口令。 无论如何,ssh保证了telnet命令的加密传输,除此之外,ssh还支持scp命令: scp 本地文件 远程账号@远程主机名null4. VPN 上面已经说过,监听并不一定发生在以太网中。整个Internet都是没有安全性保护的,你的信息可能在任何一个地方遭到窃听或者篡改。上面讨论的SSL和SSH都是在应用层解决问题的办法,这种办法尽管基本上是可靠的,但是却要求应用程序被完全重写以便支持SSL和SSH。 TCP/IP的分层结构提供了另外一种解决思路。事实上TCP/IP并不考虑信息的物理传输,也就是TCP/IP实际是个“虚”协议,可以在任何数据传输技术上运行,甚至可以将其它某种网络协议作为TCP/IP的物理传输信道,这就是所谓的“隧道”。当用另一个TCP/IP来实现隧道并且对其传输的数据进行加密的时候,就构成了虚拟专用网(VPN)的基本框架。 虚拟专用网(VPN)被定义为通过一个公用网络(通常是因特网)建立一个临时的、安全的连接。它在Internet的一些机器(或者子网)之间建立一个虚拟连接,从而这些机器看上去就像是处在一个独立的网络中,其他系统无法加入。虚拟专用网可以帮助远程用户、公司分支机构、商业伙伴及供应商同公司的内部网建立可信的安全连接,并保证数据的安全传输 null§5.2 .2 网络层现在让我们来考虑和IP定位/路由,信息传播相关的协议的弱点。路由协议是Internet的核心,它用来定位某个数据包应该传送到何处,以及某一台机器位于什么地方。IP定义了一台机器的身份,而路由路径给出了传送数据报文的路线。不幸的是,标准IP层协议没有对这两件事情做任何的保护。 1. ARP ARP即地址解析协议,用来在一个局部网内找到和某个IP地址对应的机器。通常我们讨论的都是以太网的ARP问题,即由IP地址找到对应的MAC地址。这是通过广播-应答技术实现的:假设某主机想和与自己同子网的机器通信,例如202.14.0.3到202.14.0.7,它首先将使用以太网提供的硬件广播功能:首先广播一个数据包,其内容将包括:自己的IP地址,自己的MAC地址,以及试图通讯的IP地址。由于硬件广播可以送到以太网电气连接的任何地方,所以202.14.0.7如果开着就会接收到这个数据包,于是它向202.14.0.3回送一个数据包(因为广播包中已经包含了202.14.0.3的MAC地址,所以202.14.0.7知道如何送数据),内容将包含202.14.0.7的MAC地址。这样,一个“广播-应答”就确定了两台机器的MAC地址。null2. ICMP重定向 TCP/IP协议系统中,为了能够判断远程主机的可达性和活动状态,定义了一个名叫ICMP的协议(Internet Control Message Protocol,网间报文控制协议)的协议,它是IP协议的附属协议,IP层用它来与其他主机或路由器交换错误报文和其他重要控制信息。ICMP报文是在IP数据报内部被传输的,主要用来对系统中的错误进行分析和控制。 ICMP协议本身并不复杂,常用的ping命令就是使用发送一个ICMP echo报文检查回应的方式来工作的。为了调试的方便,大部分机器都会回应ICMP报文,从而可以用ping命令检查它的活动状态。 由于历史的原因,许多系统对ICMP包规定了一个尺寸上限,一般是在64KB左右。当操作系统接收到ICMP报文的时候,需要按照报文标题中的尺寸信息来分配TCP/IP缓冲区。如果接收到一个错误或者畸形的ICMP报文,其中的尺寸信息是错误的,比如超出了64KB,缓冲区分配就可能出现问题,严重的情况下会导致TCP/IP栈崩溃。这就是Ping of Death攻击。null3. IGMP组播 IGMP目前还是一个处于实验阶段的协议,提供Internet网际多点传送的功能,即将一个IP包的拷贝传给多个目标主机。客户机器接收到IGMP消息的话,标准响应方式是将这个消息报文再传送给别的组内机器,在Windows系列系统中,由于实现上的缺陷,这个过程很容易导致TCP/IP栈崩溃。相对来说,Linux发生这种问题的报道不多。不过即使如此,这仍然是一个容易遭受攻击的弱点,通常用在内核中禁止IGMP组播的办法来消除这个安全性隐患。null§5.2 .3 传输层1. UDP拒绝服务攻击 TCP/IP协议定义了两个基本的数据传输协议,一个是面向连接的传输控制协议TCP,一个是面向无连接的直接数据传送的用户数据报文协议UDP。其他任何上层数据传输都只要以其中一个为基础。 单纯传输层的攻击主要是针对这两个协议的堆栈缓冲区,也就是通过发送不合法的或者特殊的数据,以及攻击协议的具体实现,导致系统出错或者崩溃。和前面讲的Ping of Death一样,它们都属于DoS(拒绝服务)范畴。相对来说,UDP协议因为是无连接的,所有的解码和纠错等操作都在应用程序中实现,更加容易遭到拒绝服务攻击。 2. TCP拒绝服务攻击 相对来说,TCP的设计比UDP要复杂也精巧一些,然而仍然存在一些严重的问题,其中最主要的问题和TCP连接建立时的握手协议有关。 正常的一个TCP连接需要连接双方进行三个动作,即“三次握手”,其过程如下:请求连接的客户机首先将一个带SYN标志位的包发给服务器;服务器收到这个包后产生一个自己的SYN标志,并把收到包的SYN+1作为ACK标志返回给客户机;客户机收到该包后,再发一个ACK=SYN+1的包给服务器。经过这三次握手,连接才正式建立。null§5.2 .4 应用层各种具体的网络应用都可能成为攻击的目标。这里面有两种可能的情况,一种是协议本身就缺乏安全性,另一种则是实现协议的程序可能存在各种各样的漏洞。前者比如NFS和电子邮件协议,后者则与具体的编码有关。 1. RPC和NFS相关服务 RPC即远程过程调用,是Sun发明的用来在远程主机上执行特定任务的一种协议。在一般体系中,这通过portmap和几个rpc服务进程实现(如rpc.statd,rpc.mountd)。 由于代码实现的问题,RPC的几个服务进程很容易遭到远程缓冲区溢出的攻击,相当多的漏洞和rpc.statd有关。 2. r命令 容易遭受IP欺骗攻击的另外一组命令是Linux的r命令,它们提供了一组不需要给出用户名和口令就可以登录到系统并且执行对应命令的方法,主要有rsh,rexec,rlogin,rcp等等。 它们绕过用户名和口令的方法都是基于远程机器之间的互相信任。在Linux中,确定这种互相信任的文件有两种,一种是全局的信任文件,这个文件是/etc/hosts.equiv;另外一种是单个的对于某个用户的信任文件,这个文件存放在每个用户的宿主目录下,名字是.rhosts。 /etc/hosts.equiv定义了那些远程机器的账号和本地账号等价 null3. 电子邮件:炸弹和身份认证 电子邮件是Internet中最让人困惑的部分——WWW很复杂,但是远不及电子邮件。除此之外,事实上Sendmail的问题和麻烦之多只能以“臭名昭著”来形容,虽然有了一些很好的sendmail代替程序,但是smtp协议本身的问题一直没有真正解决。 单从理论上说,smtp协议并不复杂:它就是一次次邮件接力的过程。当一台机器准备发送电子邮件的时候,它连接到服务器的25端口,然后开始一个邮件会话,这个过程中客户机器必须给出发送者和接收者的邮件地址。如果服务器认为这两个地址是“可以接受的”,那么客户机将邮件内容编码成ASCII码传送给服务器,服务器将它保存在自身的投递队列里面,这样一次邮件接力就完成了。 称为邮件接力的原因是,服务器接下来要对邮件进行具体处理。邮件的目标地址通常是服务器的一个账号,那么邮件服务程序将会调用预设的邮件分检程序将邮件送入这个账号的邮箱中,这样投递才完成。也可能,邮件的目标地址不在本地,那么邮件服务程序需要解析邮件地址得出对应邮件地址的服务主机,然后再一次邮件接力将它投递到对应的服务主机——这次的投递由服务器完成。也许,对应主机还要进行下一次投递接力,总之,这样连续的投递直到送到最终用户的邮箱中。null4. DNS Linux的DNS服务程序——bind也是著名的容易受到攻击的程序。而且,因为DNS本身的极端重要,一旦DNS出现问题,后果将变得非常严重。 让我们回忆一下DNS的功能,它把Internet域名转换为IP地址。这在网络中是至关重要的。首先,几乎所有的主机信任关系都是基于域名而不是IP地址,以便可以透明地修改;其次,像负载均衡之类的工作,通常利用DNS数据系统的多记录随机分配来完成,这种情况下,无法直接使用IP地址来访问主机;第三,DNS是分级体系,一旦某个DNS出现问题,整个下辖系统全部会出现问题,而且因为DNS缓存的问题,错误会在Internet上扩散;最后,DNS服务程序因为运转在TCP/UDP的53端口——小于1024的特权端口——必须用超级用户身份执行,而且它要读配置文件和写大量的log记录,也要求具有存取系统文件的能力,因此一旦被溢出,后果是灾难性的。 null5. ftp和www 作为最主要的Internet服务(除了SMTP以外),ftp和www受到攻击的次数是非常多的,然而总的来说,在这个问题上,可以讨论的内容并不多,除了我们前面提到的用来对付监听的SSH和SSL之外,就都是些老生常谈式的内容。这是因为这两个服务经过太多的攻击和堵漏的结果,目前的攻击手段几乎都是和具体的服务器程序实现有关。 FTP 对于ftp服务器, 需要考虑的主要是下面几点:未经授权的用户禁止在服务器上进行FTP操作。 匿名FTP用户不能读取未经系统所有者允许的文件或目录。未经允许,匿名FTP用户不能在服务器上建立/删除文件或目录。 这些功能的具体实现几乎都和实际的服务器软件实现有关。 http http协议是最主要的网络信息传输协议。关于它的主要问题,前面在讲SSL的时候已经讨论过了,它本身是明文传送,容易遭到监听的威胁。 除了这种纯粹的监听和IP欺骗问题之外, http服务器还会有一些特有的安全性问题。其中最重要的和CGI程序有关。null6. inetd UNIX/Linux系统有一类独特的网络服务进程,称为inetd。这里我们用inetd程序来统称这种提供inetd daemon功能的程序,包括inetd,xinetd,tcpserver等等。 一般情况下,要建立一个TCP服务程序,需要至少做下面的几项工作: 首先,要建立一个监听用的socket,把它把绑定到服务器的某个端口上,然后让他去监听用户的连接请求。 一旦有客户连接到达,服务进程fork出自身的一个拷贝,然后把连接的socket交给子进程,自己继续监听。子进程现在可以用read和write对socket进行操作,完成服务功能。 上述过程是比较复杂的,而inetd服务进程的功能就是把上面的过程加以简化。它监听服务端口,一旦有请求到来,inetd去启动对应的服务,但是并不把socket句柄传递给对应的服务程序,而是接管服务进程的输入输出,由客户机器送来的请求数据,格式化后传递给服务程序的stdin。而如果服务程序想要向客户机器发送数据,只要直接向stdout写就行了。这样,socket编程被简化成了scanf/printf的操作。null7. 端口扫描 扫描本身不算一种攻击行为,但是它常常可以成为攻击发起前的准备工作。扫描器能够自动检测远程或本地主机的安全性弱点,发现远程服务器各种TCP端口的分配、提供的服务以及相应的软件版本,记录目标给予的回答,搜集关于目标主机的各种有用信息。扫描器可以帮助我们发现目标主机存在的一些问题,而这些问题可能恰恰就是黑客攻击的关键点。 端口扫描也是一种获取主机信息的有效方法。在UNIX/Linux系统中,任何用户均可使用端口扫描程序而不需要root权限。一般情况下,运行UNIX/Linux操作系统的主机在小于1024的端口提供了很多服务,包括许多特有服务。使用telnet命令连到这些端口都会得到系统的响应。如果利用端口扫描程序扫描网络上的一台主机,就可以清楚的知道这台主机运行的是什么操作系统,提供了哪些服务。因为一般的Windows NT除了在21、80端口监听以外,还在135、139等端口进行监听,而一台Windows98通常只在139端口进行监听。因此,从扫描的端口数目和端口号能够判断出目标主机运行的操作系统,通过收集扫描的信息,也能够轻松的掌握局域网络的构造。null§5.3 安全工具5.3.1 tcp server tcpserver是一个inetd类型的服务程序,它监听进入的连接请求,为要启动的服务设置各种环境变量,然后启动指定的服务。 tcpserver允许限制同时连接一个服务的数量。当服务过忙时,inetd具有一种连接速率限制机制,以临时停止该服务。 1. tcpserver程序的语法 tcpserver [opts] [host] [port] [prog] opts是一系列的getopt格式选项。 host是服务器名称 port是服务器端口 tcpserver等待来自TCP客户端的连接,每个连接都运行prog程序,描述符0表示从网络读取数据,1表示写数据到网络。每个连接同时也建立若干环境变量(有关环境变量的资料可参阅http://cr.yp.to/ucspi-tcp/environment.html)服务器的地址由host加port唯一表示。port可以来自/etc/services或数字;若port为0,tcpserver将选择一个可用的TCP端口。主机可以是0,这时tcpserver允许来自本地任何IP的连接;host也可以是一个IP地址,这时tcpserver仅接受来自该IP地址的连接;host还可以是主机名,主机名使用dns_ip4认证反馈。当接收到SIGTERM时,tcpserver将退出服务。null§5.3.2 xinetdxinetd(eXtended InterNET services daemon)与inetd非常的相似,较之于inetd又更强大与安全。目前许多发行版本带有xinetd程序。如果提供的服务比较简单而且负担不重的话,那么xinetd是一个合适的选择。 xinetd具有下述特点: · 支持tcp、ucp、RPC服务 · 基于时间段的访问控制 · 功能完备的log功能,可以限制log文件的大小 · 有效的防止DoS(Denial of Services)攻击 · 可以限制同时运行的同类服务器数目 · 可以限制启动的所有服务器数目 · 在特定的系统端口绑定某个服务,从而实现只允许私有网络访问该服务 · 可以作为其他系统的代理 安装、配置、生成、样本说明和安全配置实例见书P141,142,146,149null§5.3.3 Sudo1. Sudo简介 Sudo是一个用来允许系统管理员给予特定的普通用户(或者用户组)有限的超级用户特权,使其能够以超级用户或其他用户的身份运行一些(或者所有)命令并且记录其所有命令和参数的程序。最基本的原则是在普通用户可以完成工作的范围内给予尽可能少的特权。Sudo是自由软件,以BSD风格的许可证发布。 Sudo以命令的方式操作,它不是shell的替代品。Sudo具有以下特征: · 用户在每主机上运行的命令限制 · Sudo 对于每个命令都进行记录,可以清楚的审核谁做了什么 · Sudo为“通行证系统“提供标记日期的文件。比如每5分钟更新一次通行证就可以避免合法用户离开终端的时候他人的盗用 · Sudo配置文件是“sudoers“。同一个sudoers可以在多台机器上使用, 方便了定义用户特权的灵活性 如果想得到详细的sudo手册,可以访问: http://www.courtesan.com/sudo/man/sudoers.htmlnull§5.3.3 Sudo1. Sudo简介 Sudo是一个用来允许系统管理员给予特定的普通用户(或者用户组)有限的超级用户特权,使其能够以超级用户或其他用户的身份运行一些(或者所有)命令并且记录其所有命令和参数的程序。最基本的原则是在普通用户可以完成工作的范围内给予尽可能少的特权。Sudo是自由软件,以BSD风格的许可证发布。 Sudo以命令的方式操作,它不是shell的替代品。Sudo具有以下特征: · 用户在每主机上运行的命令限制 · Sudo 对于每个命令都进行记录,可以清楚的审核谁做了什么 · Sudo为“通行证系统“提供标记日期的文件。比如每5分钟更新一次通行证就可以避免合法用户离开终端的时候他人的盗用 · Sudo配置文件是“sudoers“。同一个sudoers可以在多台机器上使用, 方便了定义用户特权的灵活性 如果想得到详细的sudo手册,可以访问: http://www.courtesan.com/sudo/man/sudoers.html 获取和安装、配置实例见书P151,152。null§5.3.4 安全检查工具nessus1. Nessus简介 Nessus是一个的远程安全扫描器。它是自由软件,功能强大、更新极快、易于使用。安全扫描器的功能是对指定网络进行安全检查与弱点分析,确定是否有破坏者闯入或存在某种方式的误用,寻找导致对手攻击的安全漏洞。Nessus的安全检查由plug-ins插件完成。例如: “useless services”类的“Echo port open”和”Chargen”插件用来测试主机是否容易受到已知的echo-chargen攻击;“backdoors”类的”pc anywhere”插件用来检查主机是否运行了BO、PcAnywhere等后台程序。除插件外,Nessus还提供描述攻击类型的脚本语言(NSSL)来进行附加的安全测试。 编译安装、配置见书P154,155。null§5.3.5 监听工具sniffitSniffit是可以在Linux、SunOS、Solaris、FreeBSD 和 IRIX平台运行的网络监听软件,主要用于监听运行TCP/IP协议的的机器以监听其不安全性——因为数据包必须经运行sniffit的机器才能进行监听,所以它只能监听同一个网段上的机器,可以为其增加某些插件以实现额外功能。可以配置sniffit在后台运行以检测TCP/IP端口上用户的输入/输出信息。用户可以选择源、目标地址或地址集合,还可以选择监听的端口、协议和网络接口等。 Sniffit会将监听到的数据报内容存放在当前工作目录下,可以直接察看。由于需要将网卡置入混杂模式,所以必须用root权限运行。 1. sniffit的获取 可以从http://reptile.rug.ac.be/~coder/sniffit/sniffit.html得到。 2. sniffit的安装 #tar xvfz sniff*.*.tgz //解开文件 # cd *** //进入文件解开后存放的目录 #./configure # make # make cleannull§5.3.6 扫描工具nmapNmap ("Network Mapper") 是开放源码的网络探测和安全扫描工具。。 · 灵活,支持多种高级探测技术,包括UDP、TCP connect()、TCP SYN、ftp代理(bounce攻击)、反向标志、ICMP、FIN、ACK扫描、圣诞树(Xmas Tree)、SYN扫描和null扫描。可以探测有IP过滤、防火墙、路由器和其它限制的网络。 · 强大 ,Nmap可以扫描拥有万台以上机器的巨型网络。 · 可移植,支持绝大多数操作系统类型,Linux, Open/Free/Net BSD, Solaris, IRIX, Mac OS X, HP-UX, Sun OS, 等等。测试版也提供Windows支持。 · 容易,Nmap为高级用户提供大量丰富的高级特征,包括通过TCP/IP协议栈特征探测操作系统类型,秘密扫描,动态延时和重传计算,并行扫描,通过并行ping扫描探测关闭的主机,诱饵扫描,避开端口过滤检测,直接RPC扫描(无须端口映射),碎片扫描,以及灵活的目标和端口设定。 · 自由,Nmap遵循GPL版权,可以免费下载修改发布。 · 良好的文档支持,有丰富的man手册、向导等帮助文档。 · 技术支持,除了可以写信给作者只外还可以加入邮件列表。。 可以从Nmap的主页:http://www.insecure.org/nmap/index.html下载null2. nmap的使用 Nmap的语法为: nmap [Scan Type(s)] [Options] null§5.3.7 其他安全工具下面列出了一些常用的安全工具。 Netcat http://www.l0pht.com/~weld/netcat/ Tcpdump http://www.tcpdump.org/ Snort http://www.snort.org/ Saint http://www.wwdsi.com/saint/ Ethereal http://ethereal.zing.org/ Whisker http://www.wiretrip.net/rfp/p/doc.asp?id=21&iface=2 Abacus Portsentry http://www.psionic.com/abacus/portsentry/ DSniff http://naughty.monkey.org/~dugsong/dsniff/ Tripwire http://www.tripwire.com/ Cybercop Scanner http://www.pgp.com/asp_set/products/tns/ccscanner_intro.asp Hping2 http://www.kyuzz.org/antirez/hping/ SARA http://www-arc.com/sara/null§5.3.7 其他安全工具下面列出了一些常用的安全工具。 Netcat http://www.l0pht.com/~weld/netcat/ Tcpdump http://www.tcpdump.org/ Snort http://www.snort.org/ Saint http://www.wwdsi.com/saint/ Ethereal http://ethereal.zing.org/ Whisker http://www.wiretrip.net/rfp/p/doc.asp?id=21&iface=2 Abacus Portsentry http://www.psionic.com/abacus/portsentry/ DSniff http://naughty.monkey.org/~dugsong/dsniff/ Tripwire http://www.tripwire.com/ Cybercop Scanner http://www.pgp.com/asp_set/products/tns/ccscanner_intro.asp Hping2 http://www.kyuzz.org/antirez/hping/ SARA http://www-arc.com/sara/null§5.4 配置安全可靠的系统现在我们来讨论如何配置一个安全可靠的Linux系统,当然,真正的安全是不存在的,我们要做的,是尽量让系统在一开始就避免前面说的大部分问题,为此,我们需要正确配置系统中的大部分服务程序。特别是,需要用可靠的服务代替哪些容易遭受攻击的服务。 5.4.1 ssh实践 Telnet和FTP服务是最容易遭到窃听的,因此,通常我们都要用SSH和sftp来取代他们。当然,FTP服务很多时候不能取代,所以很多情况下,我们同时使用sftp和ftp,后者只用来提供匿名FTP服务。 ssh有两个版本:ssh1和ssh2,ssh1和ssh2命令一致,只是算法的区别。因为本文的实践环境为redhat8.0,而其自带ssh1,所以我们只讨论ssh1。 1. 使用前的准备 首先你必须检查你的系统是否自带了ssh,这可以通过ssh –l进行测试,出现ssh的使用提示即可。另外,也要检查是否已有sshd。若具备了上述条件,则不必手工安装,若不具备,那么需要下载软件安装。Openssh的下载地址在:http://www.openssh.org/ OpenSSH的安装、SSH密钥的生成与管理、SSH的配置、SSH实现telnet及FTP、设置加密通道详细见课本166-173。null§5.4 .2 SSL实践现在的很多Linux发行版本已经包含了apache 2.0,这个版本内置了SSL模块。不过,由于很多系统仍然在使用apache 1.3.x,因此,你仍然可能需要自己下载和编译apache+mod_ssl。 1. 需要的软件 (1) Apache Web Server 下载地址:http://www.apache.org/dist/ 或者从镜像站点下载:http://www.apache.org/dyn/closer.cgi mod_ssl 下载地址:http://www.modssl.org Open SSL 下载地址:http://www.openssl.org 2. 安装 $ lynx http://httpd.apache.org/dist/httpd/apache_1.3.26.tar.gz $ lynx ftp://ftp.modssl.org/source/mod_ssl-2.8.10-1.3.26.tar.gz $ lynx ftp://ftp.openssl.org/so
本文档为【第5章 Linux网络操作系统安全管理】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_240534
暂无简介~
格式:ppt
大小:282KB
软件:PowerPoint
页数:0
分类:互联网
上传时间:2012-06-08
浏览量:39