热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

如何防范Linux系统下缓冲区溢出攻击

文章标题:如何防范Linux系统下缓冲区溢出攻击。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类

    虽然Linux病毒屈指可数,但是基于缓冲区溢出(Buffer Overflow)漏洞的攻击还是让众多Linux用户大吃一惊。所谓“世界上第一个Linux病毒”??reman,严格地说并不是真正的病毒,它实质上是一个古老的、在Linux/Unix(也包括Windows等系统)世界中早已存在的“缓冲区溢出”攻击程序。reman只是一个非常普通的、自动化了的缓冲区溢出程序,但即便如此,也已经在Linux界引起很大的恐慌。

  缓冲区溢出漏洞是一个困扰了安全专家30多年的难题。简单来说,它是由于编程机制而导致的、在软件中出现的内存错误。这样的内存错误使得黑客可以运行一段恶意代码来破坏系统正常地运行,甚至获得整个系统的控制权。

  Linux系统特性

  利用缓冲区溢出改写相关内存的内容及函数的返回地址,从而改变代码的执行流程,仅能在一定权限范围内有效。因为进程的运行与当前用户的登录权限和身份有关,仅仅能够制造缓冲区溢出是无法突破系统对当前用户的权限设置的。因此尽管可以利用缓冲区溢出使某一程序去执行其它被指定的代码,但被执行的代码只具有特定的权限,还是无法完成超越权限的任务。

  但是,Linux(包括Unix)系统本身的一些特性却可以被利用来冲破这种权限的局限性,使得能够利用缓冲区溢出获得更高的、甚至是完全的权限。主要体现在如下两方面:

  1.Linux(包括Unix)系统通过设置某可执行文件的属性为SUID或SGID,允许其它用户以该可执行文件拥有者的用户ID或用户组ID来执行它。如果该可执行文件的属性是root,同时文件属性被设置为SUID,则该可执行文件就存在可利用的缓冲区溢出漏洞,可以利用它以root的身份执行特定的、被另外安排的代码。既然能够使得一个具有root权限的代码得以执行,就能够产生一个具有超级用户root权限的Shell,那么掌握整个系统的控制权的危险就产生了。

  2.Linux(包括Unix)中的许多守护进程都是以root权限运行。如果这些程序存在可利用的缓冲区溢出,即可直接使它以root身份去执行另外安排的代码,而无须修改该程序的SUID或SGID属性。这样获得系统的控制权将更加容易。

  随着现代网络技术的发展和网络应用的深入,计算机网络所提供的远程登录机制、远程调用及执行机制是必须的。这使得一个匿名的Internet用户有机会利用缓冲区溢出漏洞来获得某个系统的部分或全部控制权。实际上,以缓冲区溢出漏洞为攻击手段的攻击占了远程网络攻击中的绝大多数,这给Linux系统带来了极其严重的安全威胁。

  途径分析

  通常情况下攻击者会先攻击root程序,然后利用缓冲区溢出时发生的内存错误来执行类似“exec(sh)”的代码,从而获得root的一个Shell。为了获得root权限的Shell,攻击者需要完成如下的工作:

  1.在程序的地址空间内安排适当的特定代码。一般使用如下两种方法在被攻击的程序地址空间内安排攻击代码。

  2.通过适当地初始化寄存器和存储器,使程序在发生缓冲区溢出时不能回到原来的执行处,而是跳转到被安排的地址空间执行。

  当攻击者找到一种途径可以变原程序的执行代码和流程时,攻击的危险就产生了。

  防范措施

  Linux下的缓冲区溢出攻击威胁既来自于软件的编写机制,也来自于Linux(和Unix)系统本身的特性。实际上,缓冲区溢出攻击及各种计算机病毒猖獗的根本原因在于现代计算机系统都是采用冯?诺依曼“存储程序”的工作原理。这一基本原理使得程序和数据都可以在内存中被繁殖、拷贝和执行。因此,要想有效地防范缓冲区溢出攻击就应该从这两个方面双管其下。 

[1] [2] 下一页


推荐阅读
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • Valve 发布 Steam Deck 的新版 Windows 驱动程序
    Valve 最新发布了针对 Steam Deck 掌机的 Windows 驱动程序,旨在提升其在 Windows 环境下的兼容性、安全性和性能表现。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 优化版Windows 10 LTSC 21H2企业版:适用于低内存设备
    此版本为经过优化的Windows 10 LTSC 21H2企业版,特别适合低内存配置的计算机。它基于官方版本进行了精简和性能优化,确保在资源有限的情况下依然能够稳定运行。 ... [详细]
  • 解决Linux系统中pygraphviz安装问题
    本文探讨了在Linux环境下安装pygraphviz时遇到的常见问题,并提供了详细的解决方案和最佳实践。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • CMake跨平台开发实践
    本文介绍如何使用CMake支持不同平台的代码编译。通过一个简单的示例,我们将展示如何编写CMakeLists.txt以适应Linux和Windows平台,并实现跨平台的函数调用。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
author-avatar
faithKOBE
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有